2019-07-04:python音频处理库

转载,出处忘记了......

一、eyeD3

处理MP3文件。-a 是 --artist 的简写,即添加歌手信息,-A 是 --album的简写,即添加专辑信息,-t 是 --title的简写,即添加歌曲名字,-n 是 --track-num 的简写,即添加磁道数,eyeD3 song.mp3 就会直接显示歌曲的基本信息。

用法举例:

import eyed3

audiofile = eyed3.load("song.mp3")

audiofile.tag.artist = u"Nobunny"

audiofile.tag.album = u"Love Visions"

audiofile.tag.album_artist = u"Various Artists"

audiofile.tag.title = u"I Am a Girlfriend"

audiofile.tag.track_num = 4

audiofile.tag.save()

二、pydub

简单、易用的音频处理高度抽象接口。官方API 文档:https://github.com/jiaaro/pydub/blob/master/API.markdown 。

常用用法:

1、打开 mp3或者mp4等文件

from pydub import AudioSegment

song = AudioSegment.from_wav("never_gonna_give_you_up.wav")

song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3") ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg") flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv") mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")

wma_version = AudioSegment.from_file("never_gonna_give_you_up.wma", "wma")

aac_version = AudioSegment.from_file("never_gonna_give_you_up.aiff", "aac")

2、切割音频

# pydub does things in milliseconds

ten_seconds = 10 * 1000 

first_10_seconds = song[:ten_seconds] 

last_5_seconds = song[-5000:]

3、调整音量

# boost volume by 6dB

beginning = first_10_seconds + 6

# reduce volume by 3dB

end = last_5_seconds - 3

4、拼接两段音乐

without_the_middle = beginning + end without_the_middle.duration_seconds

拼接之后的音乐时长是两段音乐时长之和,可以通过 .duration_seconds方法来获取一段音乐的时长。这与使用 len(audio)/1000.0得到的结果是一样的。

5、将音乐翻转(reverse)

# song is not modified

# AudioSegments are immutable

backwards = song.reverse()

注意 AudioSegment 对象是不可变的,上面使用reverse 方法不会改变song这个对象,而是会返回一个新的AudioSegment对象,其他的方法也是这样,需要注意。reverse简单来说就是 将音乐从尾部向头部开始逆序播放,我试了一下,发现转换之后还真的挺有意思的。

6、crossfade(交叉渐入渐出方法) 

# 1.5 second crossfade

with_style = beginning.append(end, crossfade=1500)

crossfade 就是让一段音乐平缓地过渡到另一段音乐,上面的crossfade = 1500 表示过渡的时间是1.5秒。

7、repeat(重复音乐片段)

# repeat the clip twice

do_it_over = with_style * 2

上面的代码让音乐重复播放两次。

8、fade in and fade out(逐渐增强与逐渐减弱)

# 2 sec fade in, 3 sec fade out

awesome = do_it_over.fade_in(2000).fade_out(3000)

逐渐增强2秒,逐渐减弱3秒

9、save(保存)

awesome.export("mashup.mp3", format="mp3")

awesome.export("mashup.mp3", format="mp3", tags={'artist': 'Various artists', 'album': 'Best of 2011', 'comments': 'This album is awesome!'})

这里展示了两种保存的形式,都是使用export方法,要指定保存的格式,使用format 参数,但第二种方法多了一个tags参数,其实看一下应该就很容易明白,是保存 歌曲ID3 tag信息的。

三、wave

python自带的模块,读写 wav 格式的音频文件。

1、打开wav文件

wave.open(file, mode=None)

mode:'rb'和'wb'

2、读操作

Wave_read.close()

Wave_read.getnchannels()

Wave_read.getsampwidth()

Wave_read.getframerate()

Wave_read.getnframes()

Wave_read.getcomptype()

Wave_read.getcompname()

Wave_read.getparams()

Wave_read.readframes(n)

Wave_read.rewind()

Wave_read.getmarkers()

Wave_read.getmark(id)

Wave_read.setpos(pos)

Wave_read.tell()

3、写操作

Wave_write.close()

Wave_write.setnchannels(n)

Wave_write.setsampwidth(n)

Wave_write.setframerate(n)

Wave_write.setnframes(n)

Wave_write.setcomptype(type, name)

Wave_write.setparams(tuple)

Wave_write.tell()

Wave_read.setpos()

Wave_write.writeframesraw(data)

Wave_write.writeframes(data)

四、ffmpeg / libav

ffmpeg:MP3文件处理。

五、PyAudio

Pyaudio 提供了对于跨平台的 PortAudio(处理 audio输入输出的库)的绑定,PyAudio可以让你轻松录制与播放音频,功能强大。

官方文档地址:https://people.csail.mit.edu/hubert/pyaudio/docs/

用法举例:

"""PyAudio Example: Play a wave file."""

import pyaudio import wave

import sys

CHUNK = 1024

if len(sys.argv) < 2:

        print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])     

        sys.exit(-1)

        wf = wave.open(sys.argv[1], 'rb')

# instantiate PyAudio (1)

p = pyaudio.PyAudio()

# open stream (2)

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),     

                            channels=wf.getnchannels(),

                            rate=wf.getframerate(), output=True)

# read data

data = wf.readframes(CHUNK)

# play stream (3)

while len(data) > 0:

        stream.write(data)

        data = wf.readframes(CHUNK)

# stop stream (4)

stream.stop_stream()

stream.close()

# close PyAudio (5)

p.terminate()

CHUNK 是一次读取的音频byte数量,p = pyaudio.PyAudio()初始化一个 PyAudio对象,然后使用其open方法打开一个输入输出流,这里指定了output=True说明这是一个输出流,即我们是往stream中添加data,如果这里改为 input = True就是变成输入流了,一般是从设备的标准 audio device ,对于电脑来说可能就是麦克风了,来读取音频data。使用wave打开一个 .wav 文件,然后使用 readframes方法每次读取 CHUNK 这么多的数据,将数据写入 stream,直到读完为止。写入stream的audio data 就会不断通过麦克风播放出来了,于是我们就可以听到音乐了。最后在结束的时候,注意要关闭相应的对象以释放资源。

六、pygame模块:python的一个做游戏的模块

七、librosa库:专业的数字信号处理库

安装librosa库,依赖的库有:joblib, l1vmlite, numba, resampy

https://blog.csdn.net/zzc15806/article/details/79603994

八、python_speech_features库:语音特征提取库

猜你喜欢

转载自blog.csdn.net/weixin_38192254/article/details/104004103