1
下面的代码一直导致缓冲区欠载。 synth_instance.play返回大小为(frames_num * 2)的浮点数(-1,1)中交错立体帧的列表。Python/PyAudio - 缓冲区欠载
在我看来,stream.write并没有写出我出于某种原因提供它的所有框架。
我试过在回调模式下使用pyaudio,但我不知道如何在时间内提供足够的帧。我的主循环无法赶上通过音频块的队列提供音频。音频回调总是以比我提供的更快的速度播放所有音频块。
#!/usr/bin/python3
import pyaudio
import time
import struct
from synth import synth
from time import sleep
from time import clock
p = pyaudio.PyAudio()
sample_rate = 44100
frames_num = 2205
synth_instance = synth();
stream = p.open(rate=sample_rate,
channels=2,
format=pyaudio.paFloat32,
frames_per_buffer=frames_num,
output=True)
while (True):
audio = synth_instance.play_note(-12, sample_rate, frames_num)
data = struct.pack('f'*len(audio), *audio)
stream.write(data, frames_num)
大家都知道python很慢,但是我们可以用python实时做很多事情,看看[这里](https://www.youtube.com/watch?v=YT-zAX3S850 )while循环python很慢尝试''' – ederwander
如果你想编写一个真正的低延迟应用程序然后不,你可能不应该使用python或者你需要用C编写你的关键代码并使用扩展。无论如何,你没有提到你要做什么延迟以及你在音频流上执行什么样的操作/操作,所以别人不可能说你在Python中是否可行。 – toes