在Python中使用PyAudio实现音频采集和回放
发布时间:2024-01-09 09:16:13
在Python中使用PyAudio库可以实现音频的采集和回放功能,下面是一个简单的使用例子。
首先,我们需要安装PyAudio库,可以使用以下命令进行安装:
pip install pyaudio
接下来,我们可以使用以下代码实现音频的采集并保存至文件:
import pyaudio
import wave
def record_audio(filename, duration):
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = duration
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("Start recording...")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("Recording completed.")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(filename, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
if __name__ == "__main__":
filename = "audio.wav"
duration = 5 # 采集时长,单位为秒
record_audio(filename, duration)
上述代码中,我们首先定义了一些采集音频所需的参数,例如音频块大小(CHUNK),采样格式(FORMAT),声道数(CHANNELS),采样率(RATE),以及采集时长(RECORD_SECONDS)等。然后创建了一个PyAudio对象,并打开一个音频流,设置音频流的参数。接着,我们通过循环读取音频流中的音频数据,每次读取的音频数据大小为音频块大小(CHUNK),然后将其添加到一个列表中。最后,我们停止音频流,关闭流和PyAudio对象,并将采集到的音频保存至指定的文件中。
接下来,我们可以使用以下代码实现音频的回放:
import pyaudio
import wave
def play_audio(filename):
CHUNK = 1024
wf = wave.open(filename, 'rb')
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
print("Start playback...")
data = wf.readframes(CHUNK)
while data:
stream.write(data)
data = wf.readframes(CHUNK)
print("Playback completed.")
stream.stop_stream()
stream.close()
p.terminate()
if __name__ == "__main__":
filename = "audio.wav"
play_audio(filename)
上述代码中,我们首先打开指定的音频文件,并获取音频的参数。然后创建一个PyAudio对象,并打开一个音频流,设置音频流的参数。接着,我们通过循环读取音频文件的音频数据,每次读取的音频数据大小为音频块大小(CHUNK),然后将其写入到音频流中进行回放。最后,我们停止音频流,关闭流和PyAudio对象。
通过以上两段代码,我们可以实现音频的采集和回放功能。我们可以先使用 段代码采集音频并保存至文件,然后使用第二段代码对该文件进行回放,从而实现完整的音频采集和回放过程。
