Failed to open file file.wav as a WAV due to: file does not start with RIFF id
Asked Answered
D

4

15

I am getting this error when trying to open a RIFF file (which as I understand it is a type of WAV) in Python.

Failed to open file file.wav as a WAV due to: file does not start with RIFF id

When I inspect the file with various tools, it leads me to believe that it is a WAV / RIFF file.

$ file file.wav 
file.wav: MBWF/RF64 audio, stereo 96000 Hz


$ file -i file.wav 
file.wav: audio/x-wav; charset=binary




$ mediainfo file.wav 
General
Complete name                            : file.wav
Format                                   : Wave
Format profile                           : RF64
File size                                : 4.10 GiB
Duration                                 : 2h 7mn
Overall bit rate mode                    : Constant
Overall bit rate                         : 4 608 Kbps

Audio
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : 1
Duration                                 : 2h 7mn
Bit rate mode                            : Constant
Bit rate                                 : 4 608 Kbps
Channel(s)                               : 2 channels
Sampling rate                            : 96.0 KHz
Bit depth                                : 24 bits
Stream size                              : 4.10 GiB (100%)
Disney answered 4/9, 2014 at 18:9 Comment(0)
T
7

What you have is a 64-bit RIFF. wave does not support 64-bit RIFF files.

Trireme answered 4/9, 2014 at 18:35 Comment(0)
H
6

If your audio is okay, and you are able to read the file with librosa or scipy.io, we can simply read the file, write it back to a temporary wav file and then read it with the wave package again.

Example. Below, we get the RIFF id error.

>>> import wave
>>> wave.open('./SA1.WAV')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pytorch/anaconda3/lib/python3.6/wave.py", line 499, in open
    return Wave_read(f)
  File "/home/pytorch/anaconda3/lib/python3.6/wave.py", line 163, in __init__
    self.initfp(f)
  File "/home/pytorch/anaconda3/lib/python3.6/wave.py", line 130, in initfp
    raise Error('file does not start with RIFF id')
wave.Error: file does not start with RIFF id

We read into numpy with librosa, write back with soundfile.

import librosa
import soundfile as sf
>>> x,_ = librosa.load('./SA1.WAV', sr=16000)
>>> sf.write('tmp.wav', x, 16000)
>>> wave.open('tmp.wav','r')
<wave.Wave_read object at 0x7fbcb4c8cf28>
Hurds answered 4/8, 2019 at 19:18 Comment(0)
B
3

Similar to @kakrafoon 's answer but using soundfile to both read and write (in case you care about limiting the number of external dependencies):

import soundfile
import wave

file_path = "your_file.wav"

# Read and rewrite the file with soundfile
data, samplerate = soundfile.read(file_path)
soundfile.write(file_path, data, samplerate)

# Now try to open the file with wave
with wave.open(file_path) as file:
    print('File opened!')
Beaconsfield answered 5/8, 2020 at 21:55 Comment(1)
I got another Error RuntimeError: Error opening 'temp.wav': File contains data in an unknown format.Airminded
K
1

I have a work-around, I rename the file's extension to mp3 and convert it to wav, then I can read it.

subprocess.call(['ffmpeg', '-i', 'XXX.mp3', 'XXX.wav'])
Kano answered 12/4, 2016 at 11:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.