audio.py 是一个音频输入输出的示例程序,包含录音、播放、实时回放和录音后播放的功能。
程序使用media模块和pyaudio模块进行音频处理,使用wave模块读写wav文件。运行此程序需要SD卡,用于存储保存的wav录音文件,以及播放存储的音频文件。
运行主函数中的相应行,可以选择测试不同的功能:
record_audio()
- 仅录制play_audio()
- 仅播放loop_audio()
- 实时回放audio_recorder()
- 录制后播放(默认)
程序展示了完整的音频处理流程,包括录制、保存、加载和播放音频文件,以及实时音频处理功能,核心的几项函数功能如下:
record_audio(filename, duration)函数:
参数:filename为保存的wav文件名,duration为录制时长(秒)。
功能:录制指定时长的音频并保存为wav文件。
步骤:
- 设置音频参数(CHUNK、格式、声道数、采样率)。
- 初始化PyAudio和MediaManager(用于vb buffer)。
- 打开音频输入流,设置音量,并启用自动噪声抑制(ANS)。
- 循环读取音频数据并存入列表。
- 将列表中的数据写入wav文件。
- 清理资源(停止流、关闭流、终止PyAudio、释放vb buffer)。play_audio(filename)函数:
参数:filename为要播放的wav文件名。
功能:播放指定的wav文件。
步骤:
- 打开wav文件并读取其参数(采样宽度、声道数、采样率)。
- 初始化PyAudio和MediaManager。
- 打开音频输出流,设置音量。
- 从wav文件中读取数据并写入音频输出流进行播放。
- 清理资源。loop_audio(duration)函数:
参数:duration为回放时长(秒)。
功能:实时采集音频并立即播放(实时回放)。
步骤:
- 设置音频参数(与record_audio类似)。
- 初始化PyAudio和MediaManager。
- 同时打开音频输入流和输出流,并设置各自的音量,输入流启用ANS。
- 从输入流读取数据并立即写入输出流。
- 清理资源。audio_recorder(filename, duration)函数:
参数:filename为保存的wav文件名,duration为录制时长(秒)。
功能:先录制音频保存为wav文件,然后播放这个wav文件。
步骤:
- 设置音频参数(这里设置为单声道)。
- 初始化PyAudio和MediaManager。
- 录制音频部分(与record_audio类似,但声道数为1)。
- 播放音频部分(与play_audio类似,但是使用同一个PyAudio实例,且不重复初始化MediaManager)。
- 清理资源。
audio_recorder('/sdcard/examples/test.wav', 15)
运行效果:使用板载麦克风进行录制15秒音频,然后使用外接喇叭进行播放。
同时会在虚拟U盘中保存录音文件如下:
audio_recorder('/sdcard/examples/test.wav', 15) #录制15秒音频并播放
#---------------------------------------------------------
实际运行输出结果:
audio sample start
vb common pool count 3
input volume : (70, 85)
enable audio 3a:ans
start record...
stop record...
output volume : (85, 85)
start p