Android AudioTrack.write返回-4

时间:2015-02-19 12:08:00

标签: java android audio

我使用AudioTrack在Android上播放一些音频。有时我会得到' -4'的返回值。来自write方法。 文档说它会返回

  

写入的短路数或ERROR_INVALID_OPERATION if   对象没有正确初始化,如果是,则为ERROR_BAD_VALUE   参数不能解析为有效的数据和索引。

" ERROR"的值AudioTrack中的常量是:

  • ERROR = -1
  • ERROR_BAD_VALUE = -2
  • ERROR_INVALID_OPERATION = -3

那么-4是什么意思?

这是代码......粗略

int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioEncoding);
audioTrack = new AudioTrack(streamType, sampleRate, channelConfig, audioEncoding, bufferSize, audioMode);
if(audioTrack.getState() != AudioTrack.STATE_UNINITIALIZED){
    audioTrack.play();
    int response = audioTrack.write(data, 0, size);
}

1 个答案:

答案 0 :(得分:2)

AudioTrack::write调用obtainBuffer的原生实现,如果obtainBuffer返回错误,write会返回相同的错误。

obtainBuffer返回-EINTR,以防AudioTrack状态为STATE_STOPPING-EINTR恰好为-4时被调用所以我最好的猜测是你在赛道(由于某些原因)停止的时候进行了写作。