Как воспроизвести 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)

Ответы (0 шт):