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
Mingus是Python中的一个包。它被许多程序员、音乐家、研究人员和作曲家用于制作和分析音乐和歌曲。这个包是一个跨平台的、非常高级的音乐理论表示包,包括音乐乐器数字接口文件和播放支持。
Mingus包可用于处理音乐理论,用于教育工具,用于构建歌曲编辑器等许多应用程序和软件,用户可以在其中导入处理和播放音乐的功能。这个包是一个音乐理论包,包括音阶、进展、和弦和间隔等主题。这个包测试这些组件,并用方便的简写来生成和识别音乐要素。
例如:
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
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(file_name, file_type)语句,用户可以播放ffmpeg支持的音频文件的任何格式。
例如:
# Users can play a WMA file:
sound = AudioSegment.from_file ( 'example.wma ', ' wma ' )
Pydub库还允许用户以不同的文件格式保存音频。用户还可以计算音频文件的长度。用户可以使用此库通过交叉淡入淡出来处理音频。
7. Simpleaudio
Simpleaudio是一个跨平台的Python库。这个库用于播放WAV文件,不需要任何依赖项。simpleaudio库等待文件完成播放后才终止脚本。
例如:
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格式文件中,存储了表示原始音频数据的一组位,以及资源交换文件格式中的标头和元数据。
该行业的权威记录是以每秒44200个样本、16位值的方式存储每个音频样本,对应于空气压力的特定数据点。
为了减小文件的大小,可以以较低的采样率,如每秒8000个样本,存储较少的录音,例如人的说话。然而,较高的声音频率不能够非常准确地表示。
本文讨论的一些库和模块可以播放和记录字节对象,而另一些则使用NumPy数组来记录原始音频数据。两者都类似于可以按照确定的采样率回放以播放音频的数据点的分类。
在NumPy数组中,每个元素都包含与单个样本等效的16位值,而在字节对象中,每个样本都存储为两个8位值的一组。这两种数据类型之间的重要区别在于,NumPy数组是可变的,而字节对象是不可变的,这使得后者更适合生成音频和处理更复杂的信号。
用户可以使用simpleaudio库通过simpleaudio.play_buffer()语句播放NumPy数组和字节对象。但在此之前,用户应确保已安装了NumPy和simpleaudio库。
例如:
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,以便将音频文件格式打开为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库和模块。在这里,我们解释了每个库和模块的不同特点和重要性,以用于开发和修改应用程序和软件中的声音播放项目。