如果您想使用Python播放或录制声音,那么您来对地方了!在本教程中,您将学习如何使用一些最流行的音频库在Python中播放和录制声音。您将了解最直接的播放和录制声音的方法,然后您将了解一些提供更多功能的库,以换取一些额外的代码行。
在本教程结束时,您将了解如何:
-
播放MP3和WAV文件,以及一系列其他音频格式
-
播放包含声音的NumPy和Python数组
-
使用Python录制声音
-
以各种不同的文件格式保存录制文件或音频文件
播放音频文件
下面,您将看到如何使用一系列Python库播放音频文件。其中一些库允许您播放一系列音频格式,包括MP3和NumPy阵列。下面的所有库都允许您播放WAV文件,其中一些代码行代码比其他文件更多:
-
playsound如果你只是想播放WAV或MP3文件,是最简单的包。除简单播放外,它不提供任何功能。
-
simpleaudio 让您播放WAV文件和NumPy数组,并为您提供检查文件是否仍在播放的选项。
-
winsound 允许您播放WAV文件或发出哔哔声,但它仅适用于Windows。
-
python-sounddevice并pyaudio为PortAudio库提供绑定,以便跨平台播放WAV文件。
-
pydub需要pyaudio进行音频播放,但ffmpeg安装后,只需几行代码即可播放各种音频格式。
让我们一起来看看这些用于音频播放的库。
- playsound
playsound是一个“纯Python,跨平台,单一功能模块,不依赖于播放声音。” 使用此模块,您可以使用一行代码播放声音文件:
from playsound import playsound
playsound('myfile.wav')
该文件中playsound指出,它已在WAV和MP3文件进行测试,但它可能对其他文件格式正常工作。
该库最后更新于2017年6月。在撰写本文时似乎运行良好,但目前尚不清楚它是否仍然支持更新的Python版本。
simpleaudio
simpleaudio是一个跨平台的库,用于播放没有依赖关系的(单声道和立体声)WAV文件。以下代码可用于播放WAV文件,并在终止脚本之前等待文件完成播放:
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file(filename)
play_obj = wave_obj.play()
play_obj.wait_done() # Wait until sound has finished playing
WAV文件包含表示原始音频数据的一系列位,以及具有 RIFF(资源交换文件格式)格式的元数据的标题。
对于CD录制,行业标准是将每个音频样本(与气压相关的单个音频数据点)存储为16位值,每秒44100个样本。
为了减小文件大小,以较低的采样率存储一些记录(例如人类语音)可能就足够了,例如每秒8000个样本,尽管这确实意味着较高的声音频率可能没有准确表示。
本教程中讨论的一些库播放和记录bytes对象,而其他库使用NumPy数组来存储原始音频数据。
两者都对应于一系列数据点,这些数据点可以以指定的采样率播放以播放声音。对于bytes对象,每个样本存储为一组两个8位值,而在NumPy数组中,每个元素可以包含对应于单个样本的16位值。
这两种数据类型之间的一个重要区别是bytes对象是不可变的,而NumPy数组是可变的,使后者更适合生成声音和更复杂的信号处理。有关如何使用Nu