Python 音频模块

2025年3月17日 | 阅读11分钟

Python 编程语言如今因其用户友好的特性而处于领先地位。Python 还有许多有趣的模块和库,用户可以通过它们做很多事情。Python 语言最有趣的 特性 之一就是它的音频模块。在本文中,我们将讨论各种类型的音频模块及其独特的特性和优点。

本文将介绍 Python 中的 10 种不同类型的音频 模块 和库

    '
  • PYO
  • PyAudio
  • Dejavu
  • Mingus
  • hYPerSonic
  • pydub
  • simpleaudio
  • winsound
  • python - sounddevice
  • playsound

让我们一一了解上述音频模块。

1. PYO

PYO 是一个 Python 模块,用 C 编程语言编写,用于创建数字信号处理脚本。此 Python 模块包含用于处理各种音频信号类型的类。因此,用户可以将信号处理链直接导入 Python 脚本或项目,并可以使用解释器实时操作音频信号。

Python 中 PYO 模块的工具包含基元,例如数学运算、基本信号处理(如延迟、合成生成器、滤波器等)以及更多。但它也包含了开发声音粒化和许多其他艺术音频操作的复杂算法。

例如

2. pyAudio

Pyaudio 是一个 Python 库,它是一个开源的跨平台音频输入输出库。它具有广泛的功能,与音频相关,主要侧重于分段、特征提取、分类和可视化问题。

通过使用 pyaudio 库, 用户可以对未知声音进行分类,执行监督和无监督分段,提取音频特征和表示,检测音频事件并过滤掉长录音中的静音时段,应用降维技术来可视化音频数据和内容相似性等等。

此库为 PortAudio 提供了绑定。用户可以使用此库在不同的平台(如 Windows、Mac 和 Linux)上播放和录制音频。要使用 pyaudio 库播放音频,用户需要写入一个 .stream。

例如

在这里,用户可以注意到,使用 pyaudio 库播放音频可能比其他音频播放库稍微复杂一些。这就是为什么该库可能不是用户在其项目或应用程序中播放音频的首选。

尽管如此,pyaudio 库提供了更底层的控制,使用户能够设置输入和输出设备的参数。该库还允许用户检查 CPU 负载和输入输出活动。

Pyaudio 库还允许其用户以回调模式播放和录制音频。当需要新的数据进行播放和录制时,会调用指定的函数。这些是 pyaudio 库的特性,使其与其他音频库和模块不同。如果用户希望播放简单的音频播放之外的内容,则可以使用此库。

3. Dejavu

Dejavu 是一个 Python 中的音频指纹识别模块。它是一个开源模块。此模块可以通过一次收听来记住录制的音频,并将音频存储在数据库中。之后,当播放一首歌曲、麦克风输入或磁盘文件时,Dejavu 会尝试将音频与数据库中存储的指纹进行匹配,并返回之前播放的歌曲或录音。

Dejavu 模块在识别具有真实噪声的特定信号方面表现出色。用户可以通过两种方式使用 Dejavu 来识别音频。

  • 用户可以通过读取和处理磁盘上的音频文件来识别音频。

或,

  • 用户可以使用计算机的麦克风。

例如

现在用户可以开始对他们的音频收藏进行指纹识别了!

4. Mingus

Mingus 是一个 Python 包。它被许多程序员、音乐家研究人员和作曲家用来创作和检查音乐和歌曲。这个包是一个跨平台且非常高级的音乐理论表示包,支持 Python、MIDI 文件和播放。

Mingus 包可用于音乐理论、教育工具、歌曲编辑器以及用户希望导入音乐处理和播放功能的许多其他应用程序和软件。这个包是一个音乐理论,它包括音阶、和弦进行、和弦和音程等主题。该包测试这些组件,并用于通过方便的简写形式生成和识别音乐要点。

例如

输出

True
True
True
True
True

# 无效音符

输出

False
False
False

5. hYPerSonic

hYPerSonic 是一个 Python 和 C 语言的框架。它用于开发和操作旨在实时控制的声音处理管道。这个框架是低级别的,其中每个字节都很重要,它还包括声卡、滤波器内存操作、文件 I/O 和振荡器的对象。该框架在 Linux 和 OSX 操作系统上运行。

6. Pydub

Pydub 是一个 Python 库,用于操作音频和添加效果。这个库是一个非常简单易用的高级接口,基于 FFmpeg 并受 jQuery 启发。这个库用于为音频添加 id3 标签,切片和连接音频轨道。Pydub 库支持 Python 2.6、2.7、3.2 和 3.3 版本。

但是,用户可以使用 pydub 库打开和保存 WAV 文件,而无需任何依赖项。但是,如果用户想播放音频,则需要安装音频播放包。

可以使用以下代码使用 pydub 播放 WAV 文件

例如

如果用户想播放 MP3 等其他音频文件格式,他们应该安装 libav 或 FFmpeg。

安装 FFmpeg 后,用户需要对代码进行一个小改动才能播放 MP3 文件。

例如

通过使用 AudioSegment.from_file (file_name, file_type) 语句,用户可以播放 ffmpeg 支持的任何格式的音频文件。

例如

Pydub 库还允许用户将音频保存为不同的文件格式。用户还可以计算音频文件的长度。用户可以使用此库在音频中进行交叉渐变。

7. Simpleaudio

Simpleaudio 是一个 Python 库,它是跨平台的。此库还用于无需任何依赖项即可播放 WAV 文件。simpleaudio 库在脚本终止之前会等待 WAV 格式文件播放完毕。

例如

在 WAV 格式文件中,存储着代表原始音频数据的比特分类,以及带有资源交换文件格式(RIFF)的头信息和元数据。

行业中权威的记录是存储每个音频样本,这是一个与气压相关的特定数据点,对于 CD 录音,它是每秒 44200 个样本,一个 16 位值。

为了减小文件大小,对于像人类语音这样的某些录音,以较低的采样率(例如每秒 8000 个样本)存储就足够了。然而,较高频率的声音无法非常准确地表示。

本文讨论的一些库和模块播放和记录字节对象,其中一些使用 NumPy 数组 来记录原始音频数据。两者都类似于可以以特定采样率播放以播放音频的数据点分类。

在 NumPy 数组中,每个元素可以包含一个相当于单个样本的 16 位值,而对于字节对象,每个样本存储为两组 8 位值。这两种数据类型之间最重要的区别在于 NumPy 数组是可变的,而字节对象是不可变的,这使得后者更适合生成音频和处理更复杂的信号。

用户可以使用 simpleaudio.play_buffer() 语句在 simpleaudio 库中播放 NumPy 数组和字节对象。但是,在此之前,用户应确保他们已经安装了 NumPy 和 simpleaudio 库。

例如

生成对应于 410 Hz 音调的 Numpy 数组。

8. winsound

winsound 是 Python 中的一个模块,用于访问 Windows 操作系统的基本声音播放功能。

在 winsound 模块中,只需几行代码就可以播放 WAV 文件。

例如

winsound 模块不支持除 WAV 文件外的任何文件格式。它允许用户使用 winsound.Beep(frequency, duration) 语句发出蜂鸣声。

例如

9. python-sounddevice

python-sounddevice 是一个用于跨平台音频播放的 Python 模块。该模块为 PortAudio 库提供了绑定,并包含一些方便的函数来播放和录制包含音频信号的 NumPy 数组。

如果用户想播放 WAV 文件,他们应该安装 NumPy 和 soundfile 来以 WAV 文件格式打开音频文件,将其作为 NumPy 数组。

例如

sound_file.read() 语句用于提取原始音频数据以及文件的采样率,这些都存储在资源交换文件格式(RIFF)头中。sound_device.wait() 语句用于确保在音频播放完毕后脚本才会终止。

10. playsound

playsound 是一个 Python 模块,用户可以通过一行代码就可以播放声音。它是一个跨平台模块,是一个没有依赖项的单一函数,用于播放声音和音频。

例如

playsound 模块用于 WAV 文件和 MP3 文件格式的文件,并且还可以处理其他文件格式。

结论

在本文中,我们讨论了用于播放和录制各种类型音频文件和声音的各种 Python 库和模块。在这里,我们解释了每个库和模块在开发和修改应用程序和软件的项目中播放声音的各种特性和重要性。