如何在python3中将24位wav文件转换为16位或32位文件

2024-03-28 14:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用一堆.wav文件来制作光谱图,以便进一步分析它们(在Python3.6中),但是,我不断地遇到这个糟糕的错误

 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文件,以便从中创建光谱图。

任何帮助都将不胜感激!


Tags: 文件thedata堆栈错误bit光谱file
2条回答

我建议用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')

您还应该使用^{}查看可以将文件转换为哪些子类型。以下是它的示例用法,摘自它们的文档:

>>> 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'}

我在Berk×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")

相关问题 更多 >