如何将24位wav文件转换为python3中的16位或32位文件
问题描述:
我试图制作一堆.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文件,以便我可以从中创建光谱图。
任何帮助,将不胜感激!
答
我建议使用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'}
答
我发现了伯克Ö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")
非常感谢您的帮助! –
当我运行数据时,samplerate = soundfile.read('dog_bark.wav')我得到一个运行时错误。它说错误打开'dog_bark.wav':系统错误。 –
您是否在与音频文件相同的目录中运行脚本? –