Как воспроизвести 2 и более звука в PyAudio?
Я хочу сделать функцию, которая будет играть 2 звука одновременно (интервал) и она работает. Мой код:
import numpy as np
def interval(self, freq1, freq2, dur):
t = np.linspace(0, dur, int(44100 * dur), endpoint=False)
sound_wave = makewave(freq1, t)
sound_wave2 = makewave(freq2, t)
ddata1 = np.fromstring(sound_wave, np.int16)
ddata2 = np.fromstring(sound_wave2, np.int16)
newdata = (ddata1 * 0.5 + ddata2 * 0.5).astype(np.int16)
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=88200,
output=True)
stream.write(newdata.tobytes())
stream.stop_stream()
stream.close()
p.terminate()
Делаю по аналогии функцию, которая будет играть 3 звука одновременно (аккорд), и уже белый шум:
def fifth(self, freq1, freq2, dur):
t = np.linspace(0, dur, int(44100 * dur), endpoint=False)
sound_wave = makewave(freq1, t)
sound_wave2 = makewave(freq2, t)
sound_wave3 = makewave(freq3, t) # это добавлено
ddata1 = np.fromstring(sound_wave, np.int16)
ddata2 = np.fromstring(sound_wave2, np.int16)
ddata3 = np.fromstring(sound_wave3, np.int16) # это добавлено
newdata = (ddata1 * 0.5 + ddata2 * 0.5 + ddata3 * 0.5).astype(np.int16) # это изменено
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=88200,
output=True)
stream.write(newdata.tobytes())
stream.stop_stream()
stream.close()
p.terminate()
Код makewave()
:
def makewave(freq, t):
return 0.5 * np.sin(2 * np.pi * freq * t)