Pyaudio работает, но вывод играет меньше, чем фактическое время - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в python программировании. Я имею дело со скриптом для воспроизведения простого тона, используя pyaudio. Следующий скрипт должен воспроизводить простой 1-секундный тон 500 Гц. Я что-то слышу, но не слышу так же, как в MATLAB (который работает отлично), и что более важно, он не воспроизводится в течение 1 секунды, а что-то около 200 мс.

import numpy as np
import pyaudio

fs = 44100
T = 1
N = T*fs
t = np.array(range(N))/fs
f = 500
sig = 0.5*np.sin(2*np.pi*f*t)

p = pyaudio.PyAudio()
stream= p.open(format=pyaudio.paFloat32,
               channels=1,
               rate=fs,
               output=True)

stream.write(sig)

stream.stop_stream()
stream.close()
p.terminate()

У меня есть также попытался ввести паузу между записью в поток и остановкой потока. Не сработало Есть идеи, где проблема?

1 Ответ

0 голосов
/ 18 апреля 2020

Следующий код должен делать то, что вы просите.

import pyaudio
from math import pi
import numpy as np

p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1,)


def make_wave(frequency, length, sample_rate=44100):
    length = int(length * sample_rate)
    factor = float(frequency) * (pi * 2) / sample_rate
    waveform = np.sin(np.arange(length) * factor)

    return waveform


wave = make_wave(500, 1)

stream.write(wave.astype(np.float32).tostring())
stream.stop_stream()
stream.close()
p.terminate()
...