2016-05-03 19 views
1

我在Android项目中使用Superpowered音频API。超级动力API - SuperpoweredDecoder :: decode在文件结尾处不返回0

我想使用SuperpoweredDecoder类加载一个小的wav文件(10毫秒的长度)。如果我理解正确,我应该在循环中调用decode方法,直到它返回0作为文件结尾。

我的小文件已经在第一轮完整读取,但decode一次又一次返回1(SUPERPOWEREDDECODER_OK)。如果我拨打decode一次,而没有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)break;'我不认为这是它的意图被使用的方式,但至少它是有效的。 – Nick

回答

0

WAV文件的读取长块比10超能力毫秒,因为它调整为最大解码/读取性能。

虽然较小的文件不会导致任何错误的内存访问,但解码器可能会感到困惑,因为第一次读取会立即成为eof。

检查samplesDecoded < 1,让你的代码看起来是这样的:

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

谢谢Gabor。是的,检查samplesDecoded的工作正如我在评论中已经提到的那样。但我认为这应该被视为一个错误。软件不应该感到困惑。 – Nick