欢迎访问宙启技术站
智能推送

在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对象。

通过以上两段代码,我们可以实现音频的采集和回放功能。我们可以先使用 段代码采集音频并保存至文件,然后使用第二段代码对该文件进行回放,从而实现完整的音频采集和回放过程。