需求驱动开发,首先说需求:将MP3文件转成16k采样率,16bits采样深度,单声道的wav,本来想试试Python自带的wave库的,没成功,结果还是靠pydub搞定了。
先生成MP3对象,在分别设置参数,最后导出wav文件
#生成MP3对象
sound1 = AudioSegment.from_file("/home/wangjinyu/work1/work_practice/intent_repeat.mp3", format="mp3")
修改对象参数
sound2=sound1.set_frame_rate(16000)
sound2=sound2.set_channels(1)
sound2=sound2.set_sample_width(2)
#导出wav文件
sound2.export('intent_repeat.wav',format='wav',)
结束后file 产看结果,成功
本来想获取MP3的原始pcm数据,在export出wav的,结果不行,必须按照MP3的原始参数填写,参数一变生成的的wav文件时间异常,听不了
from pydub import AudioSegment
sound = AudioSegment.from_mp3('一生所爱.mp3')
#获取原始pcm数据,本来想用read直接读二进制文件,获取读wav文件取到44字节的头文件,发现不行,
#data=sound.raw_data
data=sound._data
sound_wav = AudioSegment(
#指定原始pcm文件
# raw audio data (bytes)
data=data,
#指定采样深度,可选值1,2,3,4
# 2 byte (16 bit) samples
sample_width=2,
#指定采样频率
# 44.1 kHz frame rate
# 16kHz frame rate
frame_rate=16000,
#指定声道数量
# stereo or mono
channels=1
)
#导出wav文件
sound_wav.export('一生所爱.wav',format='wav')
顺便说下获取音频文件时长的方法,网上的中文资料还不如这个呢
亲测wav和MP3都可以
#生成实例
sound = AudioSegment.from_file('一生所爱.mp3')
#获取文件时长
sound_time=sound.duration_seconds