11

I try to open a wave file with the wave module, but I keep getting the same error whatever I try. The line with the error is the following:

wav = wave.open(f)

This is the error message:

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

String f is a path to a .WAV file and it works when played in any of my media players.

I have of course imported the wave module. I tried f both as a relative and an absolute path. I tried replacing "WAV" by "wav".

What is the error caused by?

6
  • Is the wave file compressed? Commented Jun 25, 2013 at 12:22
  • I don't know, how can I see? Commented Jun 25, 2013 at 12:24
  • Looks like wave module returns that error when you try to read a 32-bit .wav files. Commented Jun 25, 2013 at 12:25
  • Are opening the file to get the data or to play the file? Commented Jun 25, 2013 at 12:25
  • @ChrisProsser In order to get data. I know that the wave module can't play a file. Commented Jun 25, 2013 at 12:29

2 Answers 2

14

Python's wave module works with a specific type of WAV: PCM (WAVE_FORMAT_PCM: 0x0001).

In your case, you're using a WAV of type WAVE_FORMAT_GSM610 [0x0031 = hex(49)].

You can use a program like Audacity or some lib for converting codecs to change the type of the WAV file.

You can see a list of WAV types here: https://www.videolan.org/developers/vlc/doc/doxygen/html/vlc__codecs_8h.html

Python's wave module source code: https://github.com/python/cpython/blob/master/Lib/wave.py

Sign up to request clarification or add additional context in comments.

6 Comments

This is exactly what I did to solve it. I used ffmpeg to convert the files, and subprocess to call it.
@Lewistrick : Can you post what command you are using to convert the files? I have also tried converting them but it isn't working.
@Leonardo Andrade the WAVE_FORMAT_PCM = 0x0001 is hard coded in wave.py If we change this to WAVE_FORMAT_GSM610 [0x0031 = hex(49)] will this work ?
I don't know, @DSBLR. I'm not a specialist on WAVE formats. You can try but note that this will change the behaviour of a python's standard lib. Maybe not a good strategy to solve your problem.
Hi, Did you solve this issue? i am using sox to convert gsm file to wave but encountering the same issue. It is avoidable using audacity, but I am unable to find any python module to directly convert gsm to wav. Kindly comment if you have resolved this using python or bash. Thanks
|
2

The file is compressed and the wave module does not support this type of compression.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.