利用python进行的语音信号读取

概要

分别用librosa、pydub、scipy.io、soundfile中的函数读取声音文件。看一看它们的输出样式都是什么样的。

首先准备一个双通道的wav格式的声音文件,如名字为music.wav

path = 'music.wav'
 
 

应用librosa.load读取声音文件


 
 
  1. import numpy as np
  2. import librosa
  3. y, sr = librosa.load(path, sr= None, mono= False) # sr=None声音保持原采样频率,
  4. # mono=False声音保持原通道数
  5. print( 'librosa.load 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

使用AudioSegment.from_file读取声音文件


 
 
  1. import numpy as np
  2. from pydub import AudioSegment
  3. audioseg = AudioSegment.from_file(path)
  4. y = np.asarray(audioseg.get_array_of_samples()) # 将声音文件转换为数组格式
  5. y = y if audioseg.channels == 1 else y.reshape( -1, 2) # 若是双通道,则转换为(n,2)格式的数组
  6. print( 'AudioSegment.from_file 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

使用wavfile.read读取声音文件


 
 
  1. import numpy as np
  2. from scipy.io import wavfile
  3. sr, y = wavfile.read(path)
  4. print('wavfile.read 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np. max(y), np.median(y), np. min(y))

使用sf.read读取声音文件


 
 
  1. import numpy as np
  2. import soundfile as sf
  3. y, sr = sf.read(path)
  4. print('sf.read 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np. max(y), np.median(y), np. min(y))

上面得到的结果为:

librosa.load 声音数据的维度,数据类型,最大值,中间值,最小值为: (2, 2646000) float32 0.84085083 -3.0517578e-05 -0.7388916
AudioSegment.from_file声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) int32 1805713408 -65536.0 -1586757632
wavfile.read声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) float32 0.84085083 -3.0517578e-05 -0.7388916
sf.read 声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) float64 0.840850830078125 -3.0517578125e-05 -0.7388916015625

结论:

经过上面的步骤,可以很清楚的了解读取到的声音文件的数据格式,对后期的数据处理有很大的帮助,不至于由于对得到的数据结构不了解而产生处理错误。

号外:

要将手上的mp3格式文件转换为wav格式的,用AudioSegment和librosa都可以完成。现在说用AudioSegment进行格式转换。


 
 
  1. from pydub import AudioSegment
  2. audioseg = AudioSegment.from_file( 'music.mp3')
  3. audioseg.export( 'music.wav', format= 'wav')

将要转换的mp3文件改名为music.mp3,放到与这个代码相同的目录,即可以得到想要的wav文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值