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

Python实现音频录制与播放的方法之paInt16()

发布时间:2024-01-03 22:07:34

在Python中,可以使用pyaudio库来实现音频录制与播放的功能。pyaudio是一个跨平台的音频I/O库,可以用于录制和播放音频。

首先,确保已经安装了pyaudio库。可以使用以下命令在终端中安装:

pip install pyaudio

接下来,我们将分别介绍如何使用pyaudio进行音频录制和音频播放。

音频录制示例:

import pyaudio
import wave

# 设置录制相关参数
CHUNK = 1024  # 每次读取的音频帧数
FORMAT = pyaudio.paInt16  # 音频格式
CHANNELS = 1  # 声道数
RATE = 44100  # 采样率
RECORD_SECONDS = 5  # 录制时长
WAVE_OUTPUT_FILENAME = "output.wav"  # 输出文件名

# 初始化PyAudio对象
p = pyaudio.PyAudio()

# 打开音频流
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print("开始录制音频...")

frames = []

# 录制音频数据
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("录制完成。")

# 关闭音频流
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()

在上述示例中,首先设置了录制相关的参数。CHUNK表示每次读取的音频帧数,FORMAT表示音频格式,CHANNELS表示声道数,RATE表示采样率,RECORD_SECONDS表示录制时长,WAVE_OUTPUT_FILENAME表示输出文件名。

然后,创建了一个PyAudio对象,并打开了音频流。接下来,在一个循环中,使用stream.read(CHUNK)方法从音频流中读取音频数据,并将其添加到frames列表中。

完成录制后,关闭音频流,释放资源。然后,将录制的音频数据写入WAV文件中。

音频播放示例:

import pyaudio
import wave

# 设置播放相关参数
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
WAVE_INPUT_FILENAME = "input.wav"

# 初始化PyAudio对象
p = pyaudio.PyAudio()

# 打开音频文件
wf = wave.open(WAVE_INPUT_FILENAME, 'rb')

# 打开音频流
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

print("开始播放音频...")

# 播放音频数据
data = wf.readframes(CHUNK)
while len(data) > 0:
    stream.write(data)
    data = wf.readframes(CHUNK)

print("播放完成。")

# 关闭音频流
stream.stop_stream()
stream.close()
wf.close()
p.terminate()

在上述示例中,首先设置了播放相关的参数。CHUNK表示每次读取的音频帧数,FORMAT表示音频格式,CHANNELS表示声道数,RATE表示采样率,WAVE_INPUT_FILENAME表示输入文件名。

然后,创建了一个PyAudio对象,并打开了音频文件和音频流。接下来,使用wf.readframes(CHUNK)方法从音频文件中读取音频数据,并通过stream.write(data)方法将其写入音频流。

完成播放后,关闭音频流,释放资源。

以上示例演示了如何使用pyaudio库实现音频录制与播放的功能。你可以根据自己的需求进行参数配置和扩展,例如调整录制时长、设置音频格式、声道数等。