Python 库无法读取 WAVE 文件

问题描述 投票:0回答:1

我发现我的一些“.wav”文件写得很糟糕。 鉴于“corrupted_file.wav”和“ok_file.wav”之间的以下比较,这就是当我尝试使用标准库(如声音文件、wave、librosa 等)读取“corrupted_file.wav”时得到的结果。

RuntimeError: Error opening 'corrupted_file.wav': File contains data in an unknown format.

所以我尝试使用以下方法来了解问题所在:

with open('corrupted_file.wav', 'rb') as audiofile:
    corrupted_f = audiofile.read()

with open('ok_file.wav', 'rb') as audiofile:
    ok_f = audiofile.read()

print(corrupted_f[:40])
print(ok_f[:40])

这就是我得到的:

b'\xff\xfb\x90\xc4\x00\x03\x12\xa9\xa3\x16g\xb0\xc9B\xf4\xb4e\xcd\x94\x9a8\x00\x12\x93\x95\xc5F~\x1e\xa71\xd2q\x18\xa58\xeb\x01\x82\x19'
b'RIFF$`\x08\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00\x80\xbb\x00\x00\x00\xee\x02\x00\x04\x00\x10\x00data'

如您所见,“corrupted_file.wav”不满足 WAVE 标准,因为它没有将相关块呈现为“RIFF”、“WAVEfmt”和“data”。 顺便说一句,Windows 10 可以通过其内部应用程序来播放它。 如果我使用标准音频转换器将“corrupted_file.wav”导出为 WAVE 文件,我会得到“converted_corrupted_file.wav”,其表示形式为:

b'RIFFF\x16\x11\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00D\xac\x00\x00\x10\xb1\x02\x00\x04\x00\x10\x00LIST\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00Lavf59.27.100\x00data\x00\x16\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\...

对我来说,这不容易链接到损坏的,所以我无法使用自制函数恢复它。 如何使用 python 编写的函数自动恢复“corrupted_file.wav”?我需要它,因为损坏的文件数量有数千个。

python wave
1个回答
1
投票

它看起来像一个 MP3 文件(因为它以

b'\xff'
开头)。将其重命名为file.mp3,然后使用工具将其转换为file.wav。

© www.soinside.com 2019 - 2024. All rights reserved.