9

Python で RIFF ファイル (これは WAV の一種であることがわかっています) を開こうとすると、このエラーが発生します。

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

さまざまなツールで調べてみると、本当に WAV / RIFF ファイルであることがわかりました。

$ 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%)
4

4 に答える 4

6

あなたが持っているのは64 ビットの RIFFです。waveは 64 ビットの RIFF ファイルをサポートしていません。

于 2014-09-04T18:35:13.267 に答える
3

オーディオに問題がなく、librosa または scipy.io でファイルを読み取ることができる場合は、ファイルを読み取って一時的な wav ファイルに書き戻し、wave パッケージで再度読み取ることができます。

例。以下では、RIFF id エラーが発生します。

>>> 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

librosa で numpy に読み込み、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>
于 2019-08-04T19:18:17.090 に答える
1

ファイルのサフィックスの名前を「mp3」に変更し、「wav」に変換すると、ファイルを読み取ることができます。

subprocess.call(['ffmpeg', '-i', 'XXX.mp3', 'XXX.wav'])
于 2016-04-12T11:05:57.967 に答える