pyaudio高级玩法1:pyaudio的非阻塞模式录音
pyaudio是py常用的录音和播放库,使用方便,不过其录音时会独占进程。这就给实时的声音处理带来很多麻烦。
当然pyaudio是有非阻塞模式的,可以在百度上能搜到的,只有一些非阻塞模式播放声音的代码。悄悄告诉你,那些都是直接从pyaudio的官方英文文档上原封不动copy下来的。pyaudio能不能使用非阻塞模式录音呢?当然可以,文档虽然没有写明,但是稍微改改就可以啦。
import pyaudio
import wave
import time
# instantiate PyAudio (1)
# define callback (2)
# open stream using callback (3)
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
p = pyaudio.PyAudio()
################################################3
wf = wave.open("output.wav", 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
def callback(in_data, frame_count, time_info, status):
wf.writeframes(in_data)
return (in_data, pyaudio.paContinue)
##################################################打开文件
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
stream_callback=callback)
# start the stream (4)
stream.start_stream()
# wait for stream to finish (5)
for _ in range(50):
if stream.is_active():
time.sleep(0.1) #休眠,不影响录音
# stop stream (6)
stream.stop_stream() #直到运行此句录音终止
stream.close()
wf.close()
# close PyAudio (7)
p.terminate()