Python中的时间音频处理
我正在编写一个程序来分析我的电脑记录的音频块。 我希望能够将音频分成大约5秒钟的大块(220500个样本左右),如果没有5秒钟的样本可用,只需要留下任何东西(例如,如果录制32秒,我想将流分成6段,长5秒,最后一段2秒)。 我正在使用Pyaudio录制音频
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
input_device_index=1, output_device_index=6,frames_per_buffer=1500, stream_callback = callback)
每1500个样本调用一次回调函数。 回调函数检查音频是否存在,如果是,则将1500个样本写入队列。
q = Queue.Queue()
def callback(in_data, frame_count, time_info, status):
in_data = array('h', in_data)
if is_silent(in_data) == False:
in_data = trim(in_data)
in_data = np.fromstring(in_data, dtype=np.int16)
q.put(in_data)
return (in_data, pyaudio.paContinue)
检测到音频后,我的程序进入以下循环:
r = array('h')
while 1:
if q.empty() == False:
snd_data = q.get()
r.extend(snd_data)
if len(r) > 220500 or q.empty() == True:
print len(r)
r = []
r = array('h')
我希望while循环运行,直到队列为空,并且如果大约5秒的音频数据已被记录并存在于r中,则检查if语句。 如果队列是空的,我想在分析循环结束之前分析r中剩下的内容(在这种情况下,只是打印剩下的任何内容),但是我很难做出一个循环,可以在不结束的情况下做到这一点或无限期地运行。 有没有人有任何想法如何改变代码来实现我的目标?
链接地址: http://www.djcxy.com/p/33829.html上一篇: Time audio processing in Python
下一篇: How can I perform a realtime FFT on SDL2 audio stream data