2017-06-28 171 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")