Amazing-Python-Scripts
73 строки · 2.3 Кб
1import random
2import time
3import numpy as np
4import pyaudio
5
6# Dictionary to hold sound characteristics
7sounds = {
8"raindrops": {"min_freq": 100, "max_freq": 300, "min_duration": 0.1, "max_duration": 0.5},
9"rustling_leaves": {"min_freq": 500, "max_freq": 1500, "min_duration": 0.2, "max_duration": 0.7},
10"chirping_birds": {"min_freq": 1000, "max_freq": 5000, "min_duration": 0.2, "max_duration": 0.4}
11}
12
13
14def play_sound(frequency, duration, volume=1.0):
15sample_rate = 44100
16t = np.linspace(0, duration, int(sample_rate * duration), False)
17audio_data = np.sin(2 * np.pi * frequency * t)
18audio_data *= volume
19
20p = pyaudio.PyAudio()
21stream = p.open(format=pyaudio.paFloat32,
22channels=1,
23rate=sample_rate,
24output=True)
25
26stream.write(audio_data.tobytes())
27stream.stop_stream()
28stream.close()
29p.terminate()
30
31
32def main():
33num_channels = 3 # Number of simultaneous channels
34channel_volume = 0.5 # Volume for each channel (adjust as needed)
35
36while True:
37user_input = input("Enter sound(s) you want to hear (comma-separated) "
38"or 'all' for all sounds (e.g., 'raindrops,chirping_birds'): ")
39
40if user_input.lower() == 'all':
41selected_sounds = list(sounds.keys())
42else:
43selected_sounds = [sound.strip()
44for sound in user_input.split(",")]
45
46random.shuffle(selected_sounds) # Randomize sound order
47
48for _ in range(num_channels):
49if not selected_sounds:
50break
51
52sound_choice = selected_sounds.pop()
53sound_params = sounds[sound_choice]
54
55# Add slight variations to frequency and duration
56frequency = random.uniform(
57sound_params["min_freq"], sound_params["max_freq"])
58duration = random.uniform(
59sound_params["min_duration"], sound_params["max_duration"])
60
61# Volume variation for each channel
62volume = channel_volume + random.uniform(-0.2, 0.2)
63volume = max(0.0, min(1.0, volume))
64
65print(f"Playing {sound_choice}...")
66play_sound(frequency, duration, volume)
67
68# Random delay between sounds
69time.sleep(random.uniform(1, 4))
70
71
72if __name__ == "__main__":
73main()
74