python_sound
August 10, 2023

Музыку!

Играем нотки, кроссплатформенное решение

import pyaudio
import numpy as np
import time

notes = {'C': 261.63,
         'D': 293.66,
         'E': 329.63,
         'S': 0,
         'F': 349.23,
         'G': 392.00,
         'A': 440.00,
         'B': 493.88,
         ' ': 0}

melodie = 'CDEFG G AAAAG AAAAG FFFFE E DDDDC'

# Инициализация PyAudio
p = pyaudio.PyAudio()

# Длительность звука в секундах
duration = 0.5

# Генерация звука для каждой ноты и воспроизведение
for note in melodie:
    if notes[note] != 0:
        # Генерация сигнала с помощью NumPy
        samples = (np.sin(2 * np.pi * np.arange(44100) * notes[note] / 44100)).astype(np.float32)

        # Воспроизведение сигнала
        stream = p.open(format=pyaudio.paFloat32,
                        channels=1,
                        rate=44100,
                        output=True)
        stream.write(duration * samples)
        stream.stop_stream()
        stream.close()

# Завершение PyAudio
p.terminate()