我正在尝试使用PyAudio(通过“sudo apt-get install python-pyaudio安装”)多次播放录制的样本。

我试过了:

num_repeats = 6
out.write(numpy.hstack(numpy.tile(d, num_repeats)))

但这只会播放音频样本3次。据我所知,它始终只播放我提供的数据的一半。 (例如,如果我只使用out.write(d),我只会听到一半的录音样本)

有一个明显的解决方法(num_repeats * = 2),但是我想了解为什么这是必要的!

完整代码重现问题
import pyaudio
import numpy

p = pyaudio.PyAudio()
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 80000
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
frame = stream.read(CHUNK)
stream.stop_stream()
stream.close()
d = numpy.fromstring(frame, 'int16')

out = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True)
num_repeats = 6
out.write(numpy.hstack(numpy.tile(d, num_repeats)))
out.close()

p.terminate()

无论我使用2个通道还是1个通道,它的行为都相同(即仅重复3次)。

最佳答案

在移交之前,将numpy数组转换为二进制。您可以使用.tobinary()或.tostring()

如果您已经匹配了数据类型,则应该可以使用。

关于python - 为什么PyAudio只播放一半的音频?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34222517/

10-13 09:43