オーディオを録音したり、オーディオ ファイルを開くことができるJUCEライブラリを使用してアプリケーションを開発しようとしています。音声ファイルはopenSMILEプログラムに渡され、その特徴値が抽出されます。すべてのオーディオ ファイルは wave 形式であり、アプリケーションは最終的に iPhone プラットフォーム用にビルドされます。
アプリケーションがオーディオを録音し、ファイル ディレクトリからオーディオ ファイルを開くことができるアプリケーションの一部を開発しました。一部の音声ファイルを openSMILE に渡して特徴値を抽出することはできますが、他のファイルを抽出することはできません。JUCE アプリ自体から記録されたものはすべて渡すことはできません。
渡すことができないオーディオ ファイルを渡すときに生成されるエラーは次のとおりです。
smilePcm: Riff: 46464952
Format: 45564157
Subchunk1ID: 4b4e554a
Subchunk2ID: 0
AudioFormat: 0
Subchunk1Size: 34smilePcm: bogus wave/riff header or file in wrong format ('Audio/Audio Recording.wav')! (maybe you are trying to read a 32-bit wave file which is not yet supported (new header type...)?)(ERROR) [1] in cWaveSource: failed reading wave header from file 'Audio/Audio Recording.wav'! Maybe this is not a WAVE file?
エラーの原因を突き止めるために、Riffpad を使用して、合格および不合格のオーディオ ファイルのウェーブ ヘッダーに関する情報を抽出しました。
openSMILE プログラムに渡すことができる音声ファイルでは、wave ファイルのヘッダー情報は次のとおりです。
オーディオ 1
RIFF-WAVE - (len= 180260, off= 12)
fmt - (len=16, off=20)
data - (len=180224, off=44)
オーディオ 2
RIFF-WAVE - (len= 19236, off= 12)
fmt - (len=16, off=20)
data - (len=19200, off=44)
そして、合格できないものは次のとおりです。
オーディオ 3 <---JUCE アプリケーションから録音
RIFF-WAVE - (len= 128096, off= 12)
JUNK - (len=52, off=20)
fmt - (len=16, off=80)
data - (len=128000, off=104)
オーディオ 4 <--- openSMILE にも渡せないランダムなオーディオ ファイル
RIFF-WAVE - (len= 21289308, off= 12)
fmt - (len=40, off=20)
fact - (len = 4, off=68)
data - (len=21289248, off=80)
録音された wave ファイル、つまり Audio 3 から JUNK サブチャンクを削除できれば、エラーは削除されるのではないかと推測しています (間違っていたら訂正してください)。これにより、ヘッダーは、まずまずのオーディオ ファイルのヘッダーと同様になります。
この問題を解決できる可能性のある 2 つの可能性を考えました。
普通のオーディオ ファイル ヘッダーと同様のヘッダー形式で Juce オーディオを録音します (実行可能であれば、最も簡単で好ましい方法です)。
録音後にオーディオ ファイルを変換して、ヘッダーが類似するようにします (libsndfile と Audio Compression Manager (ACM) を使用すると動作する可能性があると読みましたが、JUCE がビルドできるクロス プラットフォームで動作するかどうかはわかりません。 iPhone)
最初の方法として、まずまずのオーディオ ファイルと同じように、オーディオを「正しい」形式で録音する方法はありますか?
2 番目の方法として、クロス プラットフォーム用にビルドできるライブラリを使用するか、何らかの形で録音されたオーディオのデータ チャンクを取り出し、それに「正しい」形式のヘッダーを追加できますか? (私が読んだことから収集したのは、JUNK には情報を含めることができ、必要でない場合はスキップできるということです。全体の長さを編集する限り、それを削除しても問題はないと思います。 RIFF-WAVE サブチャンクから)
上記の方法のいずれかが可能ですか?可能であれば、どのように実行すればよいですか?
ありがとう!