Python音频模块

Python音频模块

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

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

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

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

1. PYO

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

PYO模块在Python中的工具包含了数学运算、基本信号处理,如延迟、合成生成器、滤波器等。它还复杂化了开发声音颗粒化和其他艺术音频操作的算法。

例如:

# to play a sound file:
from pyo import *
sound = Server ( ) .boot ( )
sound.start  ( )
sound_file = SFPlayer ( " path /to /users /sound.aif ", speed = 1, loop = True ).out ( )
# for Granulating an audio buffer:
sound = Server ( ) .boot ( )
sound_nd = SndTable ( " path /to /users /sound.aif " )
ev = HannTable ( ) 
ps = Phasor ( freq = sound_nd.getRate ( )*.25, ml = sound_nd.getSize ( ) )
dr = Noise ( mul = .001, add = .1 )
granulate = Granulator ( sound_nd, ev, [ 1, 1.001 ] , ps, dr, 32, ml = .1 ).out ( )
# to generate melodies:
sound = Server ( ) .boot ( )
sound.start ( )
wv = SquareTable ( )
ev = CosTable ( [ ( 0, 0 ) , ( 100 , 1 ) , ( 500 , 0.3 ) , ( 8391 , 0 ) ] )
mt = Metro ( 0.135 , 12 ).play ( )
ap = TrigEnv ( mt , table = ev , dr = 1 , ml = .1 )
pt = TrigXnoiseMidi ( mt , dist = ' loopseg ' , x1 = 20 , scale = 1 , mrange = ( 47, 74 ) )
out = Osc ( table = wav , freq = pt , ml = ap ).out ( )

2. pyAudio

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

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

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

例如:

import pyaudio
import wave

filename = ' example.wav '

# Set chunk size of 1024 samples per data frame
chunksize = 1024  

# Now open the sound file, name as wavefile
wavefile = wave.open ( filename, ' rb ' )

# Create an interface to PortAudio
portaudio = pyaudio.PyAudio ( )

# Open a .Stream object to write the WAV file to play the audio using pyaudio
# in this code, 'output = True' means that the audio will be played rather than recorded
streamobject = portaudio.open(format = portaudio.get_format_from_width ( wavefile.getsampwidth ( ) ),
                channels = wavefile.getnchannels ( ),
                rate = wavefile.getframerate ( ),
                output = True ( )

# Read data in chunksize
Data_audio = wavefile.readframes ( chunksize )

# Play the audio by writing the audio data to the streamobject
while data != '':
    streamobject.write ( data_audio )
    data_audio = wavefile.readframes ( chunksize )

# Close and terminate the streamobject
streamobject.close ( )
portaudio.terminate ( )

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

尽管如此,由于pyaudio库提供更低级的控制,使用户可以为其输入和输出设备设置参数成为可能。该库还允许用户检查其CPU和输入输出活动的负载。

Pyaudio库还允许用户以回调模式播放和记录音频。当需要新的数据进行播放和可用于录制时,会调用指定的回调函数。这些是pyaudio库的特点,使其与其他音频库和模块不同。如果用户想要超出简单播放的音频播放,可以专门使用这个库。

3. Dejavu

Dejavu是Python中的一个音频指纹模块。它是一个开源模块。这个模块可以通过一次听取将录制的音频记忆在数据库中。之后,当播放一首歌曲或使用麦克风输入或磁盘文件时,Dejavu会尝试将音频与存储在数据库中的指纹配对,并返回之前播放的歌曲或录音。

Dejavu模块在识别带有适量噪声的特定信号方面表现出色。用户可以使用Dejavu以两种形式来识别音频:

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

或者,

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

    例如:

#User should create a MySQL database where Dejavu can store fingerprints of the audio. 
#on user local setup:
$ mysql -u root -p
Enter password: *************
mysql> HERE, USER SHOULD CREATE A DATABASE dejavu;

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

from dejavu import Dejavu
config = {
    " database ": {
         " host ": " 125.0.1.1 ",
         " user ": " root ",
         " password ": < password imported in Local setup >, 
         " database ": < name of the database user has created in local setup >,
     }
}
dejv = Dejavu ( config )

4. mingus

明格斯是一个Python包。许多程序员、音乐家的研究者和作曲家用它来制作和检查音乐和歌曲。这个包是一个跨平台和非常先进的音乐理论表示包,为Python提供了MIDI文件和播放支持。

明格斯包可以用来玩音乐理论,用作教育工具,搭建歌曲编辑器,以及其他许多应用和软件,用户希望导入音乐处理和播放功能的领域。这个包是一个音乐理论,包括音阶、进展、和弦和音程等主题。这个包测试这些组件,用方便的速记方式生成和识别音乐要素。

例如:

import mingus.core.notes as notes_m
# for valid notes
notes_m.is_valid_note("C") 
notes_m.is_valid_note("D#") 
notes_m.is_valid_note("Eb")
notes_m.is_valid_note("Fbb")
notes_m.is_valid_note("G##")

输出:

True
True
True
True
True

对于无效的注释

notes_m.is_valid_note("c")
notes_m.is_valid_note("D #")
notes_m.is_valid_note("E-b")

输出:

False
False
False

5. hYPerSonic

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

6. Pydub

Pydub是一个用于操作音频和添加效果的Python库。这个库是一个非常简单和易用的高级接口,它基于FFmpeg,并受到jquery的影响。这个库用于在音频中添加id3标签、切割音频和合并音轨。Pydub库支持Python的2.6、2.7、3.2和3.3版本。

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

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

例如:

from pydub import AudioSegment
from pydub.playback import play

sound_audio = AudioSegment.from_wav ( ' example.wav ' )
play ( sound_audio )

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

在安装了FFmpeg之后,用户需要对代码进行一小部分更改以播放MP3文件。

例如:

from pydub import AudioSegment
from pydub.playback import play

sound_audio = AudioSegment.from_mp3 ( 'example.mp3 ' ) 
play ( sound_audio )

使用AudioSegment.from_file(文件名,文件类型)语句,用户可以播放音频文件中ffmpeg支持的任何格式。

例如:

# Users can play a WMA file:
sound = AudioSegment.from_file ( 'example.wma ', ' wma ' )

Pydub库还允许用户以不同的文件格式保存音频。用户还可以计算音频文件的长度。用户可以使用此库中的交叉淡入淡出功能。

7. Simpleaudio

Simpleaudio是一个跨平台的Python库。该库还用于播放无任何依赖的WAV文件。Simpleaudio库会在脚本终止之前等待以WAV格式播放完音频文件。

例如:

import simpleaudio as simple_audio

filename = ' example.wav '
wave_object = simple_audio.WaveObject.from_wave_file ( filename )
play_object = wave_object.play ( )
play_object.wait_done ( )  
# Wait until audio has finished playing

在WAV格式文件中,存储了表示原始音频数据的位分类,还存储了与元数据的头部信息在资源交换文件格式中。

行业的确切记录是将每个音频样本存储为CD录音的特定数据点,即每秒44200个样本,每个样本为16位值。

为了减小文件的大小,可以以较低的采样率,如每秒8000个样本,存储一些录音,如人声。然而,较高的声音频率不能被表示得很准确。

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

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

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

例如:

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

import numpy as numpy
import simpleaudio as simple_audio

frequency = 410  # user's played note will be 410 Hz
fsample = 44200  # 44200 samples per second will be played
second = 5  # Note duration of 5 seconds

# Generate array with second*sample_rate steps, ranging between 0 and seconds
tp = numpy.linspace ( 0 , second , second * fsample, False )

# to generate a 410 Hz sine wave
note = numpy.sin ( frequency * tp * 2 * numpy.pi )

# user should Ensure that highest value is in 16-bit range
audio = note * (2**15 - 1) / numpy.max ( numpy.abs ( note ) )
# now, Convert to 16-bit data
ado = audio.astype ( numpy.int16 )

# to Start the playback
play_object = simple_audio.play_buffer ( ado , 1 , 2 , fsample )

# user now Waits for playback to finish before exiting
play_object.wait_done ( )

8. winsound

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

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

举个示例:

import winsound

filename = ' example.wav '
winsound.PlaySound ( filename, winsound.SND_FILENAME )

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

例如:

# User can beep a 1010 Hz tone for 110 milliseconds:
import winsound

winsound.Beep ( 1010, 110 )  # Beep at 1010 Hz for 110 milliseconds 

9. python-sounddevice

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

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

例如:

import sounddevice as sound_device
import soundfile as sound_file

filename = ' example.wav '
# now, Extract the data and sampling rate from file
data_set, fsample = sound_file.read ( filename , dtype = ' float32 ' )  
sound_device.play ( data_set, fsample )
# Wait until file is done playing
status = sound_device.wait ( )  

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

10. playsound

playsound是一个Python模块,用户可以使用一行代码播放声音。它是一个跨平台模块,是一个没有任何依赖项的单个功能,用于播放声音和音频。

例如:

from playsound import playsound

playsound ( ' example.wav ' )

playsound模块用于WAV文件和MP3文件格式,还可以与其他文件格式一起使用。

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程