PyAudio stream.is_active(),如何知道它是否处于活动状态

时间:2018-11-16 16:28:50

标签: python pyaudio portaudio

我正在尝试了解stream.is_active()的工作方式。从文档中说出wave文件阅读器示例:

"""PyAudio Example: Play a wave file (callback version)."""

import pyaudio
import wave
import time
import sys

if len(sys.argv) < 2:
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# define callback (2)
def callback(in_data, frame_count, time_info, status):
    data = wf.readframes(frame_count)
    return (data, pyaudio.paContinue)

# open stream using callback (3)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True,
                stream_callback=callback)

# start the stream (4)
stream.start_stream()

# wait for stream to finish (5)
while stream.is_active():
    time.sleep(0.1)

# stop stream (6)
stream.stop_stream()
stream.close()
wf.close()

# close PyAudio (7)
p.terminate()

因此,我不确定使is_active()返回False的条件是什么。如果wf.readframes用完了,它将返回0或数据错误吗?如果指标是0,那么如果我在data中实际上是0,该怎么办?在pyaudio.py中,定义了is_active():

def is_active(self):     “”     返回该流是否处于活动状态。

:rtype: bool
"""

return pa.is_stream_active(self._stream)

但是我无法深入研究portaudio(pa)的is_stream_active()。

1 个答案:

答案 0 :(得分:0)

portaudio文档说:

在成功调用Pa_StartStream()之后,流将处于活动状态,直到由于调用Pa_StopStream()或Pa_AbortStream()或由于返回非paContinue值而使该流变为非活动状态打回来。在后一种情况下,在最后一个缓冲区播放完毕后,该流被视为不活动。

http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a1f8709c4971932643681a6f374c4bb5a