2016-05-03 3 views
1

AndroidプロジェクトでSuperpoweredオーディオAPIを使用しています。Superpowered API - SuperpoweredDecoder :: decodeはファイルの最後に0を返しません

SuperpoweredDecoderクラスを使用して、小さなwavファイル(長さ10ms)をロードしたいとします。私が正しく理解したら、ファイルの最後に0を返すまで、decodeメソッドをループで呼び出す必要があります。

私の小さなファイルはすでに最初のラウンドでは完全に読み込まれていますが、decodeは1(SUPERPOWEREDDECODER_OK)を何度も何度も返します。 decodeを1回呼び出すと、whileのオーディオデータが読み込まれますが、これは非常に短いオーディオサンプルでのみ有効です。それが最大のデコード/読み取りパフォーマンスのために調整されているため

SuperpoweredDecoder *decoder = new SuperpoweredDecoder(); 
decoder->open(click1Path, false, click1Offset, click1Length, 0); 

while(decoder->decode(intBuffer, &samplesDecoded) == SUPERPOWEREDDECODER_OK) { 
    //do something with intBuffer 
} 

http://superpowered.com/docs/class_superpowered_decoder.html

+0

を: '場合(samplesDecoded == 0)休憩;「私はこれが使用される方法ではないと思うが、少なくともそれは機能する。 – Nick

答えて

0

WAVファイルは、Superpoweredで10ミリ秒よりも長いチャンクで読み取られます。

ファイルが小さいほど、メモリアクセスが悪化することはありませんが、デコーダは最初の読み込みがすぐにeofになることを混乱させる可能性があります。 samplesDecoded < 1用

チェックなので、あなたのコードのようなものになります。私はループの最後にブレーク条件としてデコードサンプル数を使用する回避策として

while ((decoder->decode(intBuffer, &samplesDecoded) == SUPERPOWEREDDECODER_OK) && (samplesDecoded > 0)) { 
    //do something with intBuffer 
} 
+2

ありがとうGabor。はい、私のコメントですでに述べたように、samplesDecodedの動作をチェックします。しかし、これはバグとみなされるべきだと思います。ソフトウェアは混乱するべきではありません。 – Nick