我正在使用生产者消费者模型,以便通过套接字将音频流传输到PyAudio。我有一个进程从套接字接收数据,然后将其放入队列中,而另一个进程从队列中获取数据并将其写入流中。在此过程中,部分流中出现了下溢+剪切。我的代码本质上就是这样
Process1
CHUNK = 1024
q = queue
data = s.recv(CHUNK)
#processes data
if q.qsize() < CHUNK * 2: #arbitrary value
q.put(data)
while q.qsize() > CHUNK:
time.sleep(5)
#I use this to allow the queue to be emptied
#by the stream and manage my memory somewhat.
Process2
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=CHANNELS, rate=RATE, frames_per_buffer=CHUNK, output=True)
while True:
if q.empty() is False:
stream.write(q.get(), exception_on_underflow=True)
在显示下溢异常之前和之后,我做了一些记录以记录数据,并且我注意到的是,只有当q> = CHUNK(例如1025、1026)时,或者在初始填充流时才发生下溢。 1024,并且stream.get_write_availble在总的16384中始终>15000。我知道流中的数据很饿,但是当队列永远不为空时(例如总是要读入流中的数据)。任何帮助表示赞赏。