2017-06-28 145 views
1

我试图制作一堆.wav文件的光谱图,以便我可以进一步分析它们(在python 3.6中),但是,我一直在这个讨厌的错误如何将24位wav文件转换为python3中的16位或32位文件

ValueError: Unsupported bit depth: the wav file has 24-bit data. 

我特地到其他堆栈溢出的职位,如 How do I write a 24-bit WAV file in Python? 但论文并没有解决这个问题!

我发现叫Pysoundfile

http://pysoundfile.readthedocs.io/en/0.9.0/

pip3 install pysoundfile 

我已经看过的文件在安装了它,它仍然是我不清楚如何将24转换音频库位.wav文件转换为32位wav文件或16位wav文件,以便我可以从中创建光谱图。

任何帮助,将不胜感激!

回答

4

我建议使用SoX来完成这项任务。改变位深度非常简单:

sox old.wav -b 16 new.wav 

如果您必须使用Python,那么您可以使用PySoundFile,因为您发现。这里有一个小的代码片段:

import soundfile 

data, samplerate = soundfile.read('old.wav') 
soundfile.write('new.wav', data, samplerate, subtype='PCM_16') 

您还应该使用soundfile.available_subtypes,看看哪些亚型,你可以将文件转换为。下面是它的使用例子,从他们的资料为准:

>>> import soundfile as sf 
>>> sf.available_subtypes('FLAC') 
{'PCM_24': 'Signed 24 bit PCM', 
'PCM_16': 'Signed 16 bit PCM', 
'PCM_S8': 'Signed 8 bit PCM'} 
+0

非常感谢您的帮助! –

+0

当我运行数据时,samplerate = soundfile.read('dog_bark.wav')我得到一个运行时错误。它说错误打开'dog_bark.wav':系统错误。 –

+0

您是否在与音频文件相同的目录中运行脚本? –

0

我发现了伯克Özbalcı 的帮助下,我写了下面的函数的.wav文件的目录转换为16位WAV文件的解决方案

def convertAllFilesInDirectoryTo16Bit(directory): 
    for file in os.listdir(directory): 
     if(file.endswith('.wav')): 
      nameSolo = file.rsplit('.', 1)[0] 
      print(directory + nameSolo) 
      data, samplerate = soundfile.read(directory + file)     

      soundfile.write('/Users/yournamehere/Desktop/folderwhereyouwanttosae/' + nameSolo + '16BIT.wav', data, samplerate, subtype='PCM_16') 
      print("converting " + file + "to 16 - bit")