2

オーディオを録音したり、オーディオ ファイルを開くことができる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 つの可能性を考えました。

  1. 普通のオーディオ ファイル ヘッダーと同様のヘッダー形式で Juce オーディオを録音します (実行可能であれば、最も簡単で好ましい方法です)。

  2. 録音後にオーディオ ファイルを変換して、ヘッダーが類似するようにします (libsndfile と Audio Compression Manager (ACM) を使用すると動作する可能性があると読みましたが、JUCE がビルドできるクロス プラットフォームで動作するかどうかはわかりません。 iPhone)

最初の方法として、まずまずのオーディオ ファイルと同じように、オーディオを「正しい」形式で録音する方法はありますか?

2 番目の方法として、クロス プラットフォーム用にビルドできるライブラリを使用するか、何らかの形で録音されたオーディオのデータ チャンクを取り出し、それに「正しい」形式のヘッダーを追加できますか? (私が読んだことから収集したのは、JUNK には情報を含めることができ、必要でない場合はスキップできるということです。全体の長さを編集する限り、それを削除しても問題はないと思います。 RIFF-WAVE サブチャンクから)

上記の方法のいずれかが可能ですか?可能であれば、どのように実行すればよいですか?

ありがとう!

4

1 に答える 1

0

解決済み:明らかに、wavAudioFormat.cppJUCE_WAV_DO_NOT_PAD_HEADER_SIZEにJUNK パディングの削除を有効にするコメントがありました。

wavAudioFormat でオーディオを録音したいが、パディングされた録音オーディオを読み取ることができない「くだらない wav プレーヤー」を持っている人のために、ここに手順を残します。

  1. [デバッグ] > [プロジェクト プロパティ] > [構成プロパティ] > [C/C++] > [プリプロセッサ] > [プリプロセッサ定義] に移動します。
  2. [編集] をクリックします。
  3. リストに追加しJUCE_WAV_DO_NOT_PAD_HEADER_SIZEます。
于 2015-02-05T10:04:37.220 に答える