从.wav文件中提取数据

时间:2018-02-11 18:34:45

标签: python wav

我有包含ECG信号的this .wav文件,我想使用scipy.io.wavfile.read('sig100.wav')提取该文件中的数据 但我收到了这个错误

  

“有{}位数据。”。format(bit_depth))

     

ValueError:不支持的位深度:wav文件具有11位数据。

当我对此进行一些研究时,我发现该函数只接受8位深度文件,但我无法弄清楚如何修改它以接受我在stackoverflow上找到this的文件但是没得到它

1 个答案:

答案 0 :(得分:1)

根据scipy.io.wavfile source code,它接受​​(8,16,32,64,96,128)位数据。

虽然您可以修改wavfile源代码以接受数据,但更容易的选择是使用外部库,如pydub。请参阅API和安装详细信息here.

首先,我们获取您的文件,将比特率转换为16位并导出它 然后,只需使用scipy导入修改后的wav文件即可获取数据和帧速率。

from scipy.io import wavfile
from pydub import AudioSegment

audio = "sig100.wav"
audio1 = "sig100_16.wav"

#read wav file and export with 16bit bitrate
s = AudioSegment.from_file(audio, format = "wav" )
s.export(audio1 , bitrate="16", format="wav")

#read modified file
rate, data = wavfile.read(audio1)

结果:

>>> rate
360
>>> data
array([[ -928,  -416],
       [ -928,  -416],
       [ -928,  -416],
       ...,
       [-4320, -2336],
       [-4896, -2144],
       [-8192,     0]], dtype=int16)
>>> 

希望这有帮助。