Python之PyAudio使用

来源:互联网 发布:手机计时器软件 编辑:程序博客网 时间:2024/06/03 20:59

    • PyAudio
    • 播放
    • 录音
    • 回放
    • 回调方法播放
    • 非阻塞回调

PyAudio

使用这个可以进行录音,播放,生成wav文件等等。

播放

#-*-coding:utf-8-*-#引入库import pyaudioimport waveimport sys# 定义数据流块CHUNK = 1024if len(sys.argv) < 2:    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])    sys.exit(-1)# 只读方式打开wav文件wf = wave.open(r'D:\\Python\\Lib\\site-packages\\PyQt4\\uic\\test.wav', 'rb')#(sys.argv[1], 'rb')p = pyaudio.PyAudio()# 打开数据流stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),                channels=wf.getnchannels(),                rate=wf.getframerate(),                output=True)# 读取数据data = wf.readframes(CHUNK)# 播放  while data != '':    stream.write(data)    data = wf.readframes(CHUNK)# 停止数据流  stream.stop_stream()stream.close()# 关闭 PyAudio  p.terminate()  

录音

import pyaudioimport waveCHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 2RATE = 44100RECORD_SECONDS = 5WAVE_OUTPUT_FILENAME = "output.wav"p = pyaudio.PyAudio()stream = p.open(format=FORMAT,                channels=CHANNELS,                rate=RATE,                input=True,                frames_per_buffer=CHUNK)print("* recording")frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):    data = stream.read(CHUNK)    frames.append(data)print("* done recording")stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()

回放

import pyaudioCHUNK = 1024WIDTH = 2CHANNELS = 2RATE = 44100RECORD_SECONDS = 5p = pyaudio.PyAudio()stream = p.open(format=p.get_format_from_width(WIDTH),                channels=CHANNELS,                rate=RATE,                input=True,                output=True,                frames_per_buffer=CHUNK)print("* recording")for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):    data = stream.read(CHUNK)    stream.write(data, CHUNK)print("* done")stream.stop_stream()stream.close()p.terminate()

回调方法播放

"""PyAudio Example: Play a wave file (callback version)"""import pyaudioimport waveimport timeimport sysif 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')p = pyaudio.PyAudio()def callback(in_data, frame_count, time_info, status):    data = wf.readframes(frame_count)    return (data, pyaudio.paContinue)stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),                channels=wf.getnchannels(),                rate=wf.getframerate(),                output=True,                stream_callback=callback)stream.start_stream()while stream.is_active():    time.sleep(0.1)stream.stop_stream()stream.close()wf.close()p.terminate()

非阻塞回调

"""PyAudio Example: Make a wire between input and output (i.e., record afew samples and play them back immediately).This is the callback (non-blocking) version."""import pyaudioimport timeWIDTH = 2CHANNELS = 2RATE = 44100p = pyaudio.PyAudio()def callback(in_data, frame_count, time_info, status):    return (in_data, pyaudio.paContinue)stream = p.open(format=p.get_format_from_width(WIDTH),                channels=CHANNELS,                rate=RATE,                input=True,                output=True,                stream_callback=callback)stream.start_stream()while stream.is_active():    time.sleep(0.1)stream.stop_stream()stream.close()p.terminate()

参考:

http://people.csail.mit.edu/hubert/pyaudio/#examples

http://www.tuicool.com/articles/IRRbY3

0 0
原创粉丝点击