在Python中打开wave文件:未知格式:49。什么';出什么事了?

在Python中打开wave文件:未知格式:49。什么';出什么事了?,python,format,wave,Python,Format,Wave,我试图用wave模块打开一个wave文件,但无论我怎么尝试,都会得到相同的错误。 出现错误的行如下所示: wav = wave.open(f) 这是错误消息: Traceback (most recent call last): File "annotate.py", line 47, in <module> play(file) File "annotate.py", line 33, in play wav = wave.open(f) File "

我试图用
wave
模块打开一个wave文件,但无论我怎么尝试,都会得到相同的错误。 出现错误的行如下所示:

wav = wave.open(f)
这是错误消息:

Traceback (most recent call last):
  File "annotate.py", line 47, in <module>
    play(file)
  File "annotate.py", line 33, in play
    wav = wave.open(f)
  File "C:\Program Files (x86)\Python\lib\wave.py", line 498, in open
    return Wave_read(f)
  File "C:\Program Files (x86)\Python\lib\wave.py", line 163, in __init__
    self.initfp(f)
  File "C:\Program Files (x86)\Python\lib\wave.py", line 143, in initfp
    self._read_fmt_chunk(chunk)
  File "C:\Program Files (x86)\Python\lib\wave.py", line 269, in _read_fmt_chunk
    raise Error('unknown format: %r' % (wFormatTag,))
wave.Error: unknown format: 49
回溯(最近一次呼叫最后一次):
文件“annotate.py”,第47行,在
播放(文件)
文件“annotate.py”,第33行,正在使用中
wav=波开(f)
文件“C:\ProgramFiles(x86)\Python\lib\wave.py”,第498行,打开
返回波读数(f)
文件“C:\ProgramFiles(x86)\Python\lib\wave.py”,第163行,在\uuu init中__
自初始化fp(f)
文件“C:\ProgramFiles(x86)\Python\lib\wave.py”,第143行,在initfp中
self.\u read\u fmt\u块(chunk)
文件“C:\ProgramFiles(x86)\Python\lib\wave.py”,第269行,在\u read\u fmt\u块中
引发错误('未知格式:%r'(wFormatTag,))
错误:未知格式:49
String
f
是指向.WAV文件的路径,在我的任何媒体播放器中播放时都可以使用

当然,我已经导入了
wave
模块。 我尝试了
f
作为相对路径和绝对路径。 我试着用“WAV”代替“WAV”


导致错误的原因是什么?

文件被压缩,而
wave
模块不支持这种类型的压缩。

Python的wave模块使用特定类型的WAV:PCM(
wave\u FORMAT\u PCM:0x0001

在您的情况下,您使用的WAV类型为
WAVE\u格式\u GSM610
[0x0031=hex(49)]

您可以使用Audacity或某些库之类的程序来转换编解码器,以更改WAV文件的类型

您可以在此处看到WAV类型列表:

Python的wave模块源代码:

wave文件是否已压缩?我不知道,我如何查看?当您尝试读取32位.wav文件时,wave模块会返回该错误。是否打开该文件以获取数据或播放该文件?@ChrisProsser以获取数据。我知道
wave
模块不能播放文件。这正是我解决它的方法。我用ffmpeg来转换文件,并用
子进程
来调用它。@Lewistrick:你能发布你用来转换文件的命令吗?我也尝试过转换它们,但它不起作用。@Leonardo Andrade如果我们将其更改为WAVE_格式,WAVE_格式的PCM=0x0001将在WAVE.py中硬编码为WAVE_格式的GSM610[0x0031=hex(49)],这会起作用吗?我不知道,@DSBLR。我不是波浪格式的专家。您可以尝试,但请注意,这将改变python标准库的行为。也许不是解决你问题的好策略。