Amazing-Python-Scripts

Форк
0
/
nature_sounds_generator.py 
73 строки · 2.3 Кб
1
import random
2
import time
3
import numpy as np
4
import pyaudio
5

6
# Dictionary to hold sound characteristics
7
sounds = {
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

14
def play_sound(frequency, duration, volume=1.0):
15
    sample_rate = 44100
16
    t = np.linspace(0, duration, int(sample_rate * duration), False)
17
    audio_data = np.sin(2 * np.pi * frequency * t)
18
    audio_data *= volume
19

20
    p = pyaudio.PyAudio()
21
    stream = p.open(format=pyaudio.paFloat32,
22
                    channels=1,
23
                    rate=sample_rate,
24
                    output=True)
25

26
    stream.write(audio_data.tobytes())
27
    stream.stop_stream()
28
    stream.close()
29
    p.terminate()
30

31

32
def main():
33
    num_channels = 3  # Number of simultaneous channels
34
    channel_volume = 0.5  # Volume for each channel (adjust as needed)
35

36
    while True:
37
        user_input = input("Enter sound(s) you want to hear (comma-separated) "
38
                           "or 'all' for all sounds (e.g., 'raindrops,chirping_birds'): ")
39

40
        if user_input.lower() == 'all':
41
            selected_sounds = list(sounds.keys())
42
        else:
43
            selected_sounds = [sound.strip()
44
                               for sound in user_input.split(",")]
45

46
        random.shuffle(selected_sounds)  # Randomize sound order
47

48
        for _ in range(num_channels):
49
            if not selected_sounds:
50
                break
51

52
            sound_choice = selected_sounds.pop()
53
            sound_params = sounds[sound_choice]
54

55
            # Add slight variations to frequency and duration
56
            frequency = random.uniform(
57
                sound_params["min_freq"], sound_params["max_freq"])
58
            duration = random.uniform(
59
                sound_params["min_duration"], sound_params["max_duration"])
60

61
            # Volume variation for each channel
62
            volume = channel_volume + random.uniform(-0.2, 0.2)
63
            volume = max(0.0, min(1.0, volume))
64

65
            print(f"Playing {sound_choice}...")
66
            play_sound(frequency, duration, volume)
67

68
            # Random delay between sounds
69
            time.sleep(random.uniform(1, 4))
70

71

72
if __name__ == "__main__":
73
    main()
74

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.