audioTrack.stop不会停止播放音频

时间:2016-03-26 12:56:43

标签: android audiotrack

我正在创建具有以下定义的AudioTrack。

clear all

当audioTrack完成时,会调用以下内容来停止音频并重置头部位置。

audioTrack = new AudioTrack(
                            AudioManager.STREAM_MUSIC,
                            44100,
                            AudioFormat.CHANNEL_OUT_MONO,
                            AudioFormat.ENCODING_PCM_16BIT,
                            buffer.length * 2,
                            AudioTrack.MODE_STATIC);

audioTrack.write(buffer, 0, buffer.length);
                    audioTrack.setPositionNotificationPeriod(500);
                    audioTrack.setNotificationMarkerPosition(buffer.length);
                    progressListener = new PlaybackProgress(buffer.length);
                    audioTrack.setPlaybackPositionUpdateListener(progressListener);

以上代码适用于Android 5.1。但是我遇到了4.4.4的问题。调用audioTrack.stop()但音频未停止,因为reloadStaticData将音频重新回到起始位置,它会重放音频。但是使用5.1时,它会正确停止并将缓冲区重置回播放开始,按下播放按钮时,从头开始播放。

有人可以帮我解决Android 4.4.4的这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是否可以解决您的问题,但请考虑使用pause()而不是stop()。通过文档,MODE_STREAM的stop()实际上将继续播放写入的最后一个缓冲区的剩余部分。您正在使用MODE_STATIC,但可能值得尝试。

另外(可能不相关),考虑write()返回写入的字节数,因此您不应该依赖于每次填充AudioTrack的整个缓冲区的单个写入。 write()应该被视为一个OutputStream写入,因为它可能不会写入给定的缓冲区的全部内容,因此编写一个循环并检查每次写入调用写入了多少(更好) ),然后继续从缓冲区数组中的新索引写入,直到所有写入的总和等于缓冲区的长度。