python3 如何将 24 位 wav 文件转换为 16 位或 32 位文件
How to convert a 24-bit wav file to 16 or 32 bit files in python3
我正在尝试制作一堆 .wav 文件的频谱图,以便我可以进一步分析它们(在 python 3.6 中),但是,我不断收到这个令人讨厌的错误
ValueError: Unsupported bit depth: the wav file has 24-bit data.
我查看了其他堆栈溢出帖子,例如
How do I write a 24-bit WAV file in Python?
但是这些并没有解决问题![=15=]
我找到了一个名为 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'}
我在 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")
我正在尝试制作一堆 .wav 文件的频谱图,以便我可以进一步分析它们(在 python 3.6 中),但是,我不断收到这个令人讨厌的错误
ValueError: Unsupported bit depth: the wav file has 24-bit data.
我查看了其他堆栈溢出帖子,例如 How do I write a 24-bit WAV file in Python? 但是这些并没有解决问题![=15=]
我找到了一个名为 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'}
我在 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")