Android audioTrack.stop不';不要停止播放音频

Android audioTrack.stop不';不要停止播放音频,android,audiotrack,Android,Audiotrack,我正在创建具有以下定义的AudioTrack audioTrack = new AudioTrack( AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_P

我正在创建具有以下定义的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);
当audioTrack结束时,调用以下命令停止音频并重置头部位置

private void resetAudioPlayback() {
        ViewGroup.LayoutParams params = playbackView.getLayoutParams();
        params.width = 0;
        playbackView.setLayoutParams(params);
        audioTrack.stop();
        audioTrack.reloadStaticData();
        playImage.animate().alpha(100).setDuration(500).start();
    }
上面的代码在Android 5.1上运行得非常好。但我对4.4.4有意见。调用audioTrack.stop(),但音频没有停止,因为重载StaticData会将音频倒回开始位置,它会重放音频。但在5.1中,它会正确地停止并将缓冲区重置回播放的开始,当按下播放按钮时,从开始播放


“有人能帮助我吗?我可以用Android 4.4.4?< /p> < p>这个问题。我不确定这是否会解决你的问题,但是考虑使用PaSuSE()而不是Stor())。根据文档,MODE_STREAM的stop()实际上将继续播放最后写入的缓冲区的剩余部分。您使用的是MODE_STATIC,但可能值得一试


(也可能无关),考虑WreWe()返回写入的字节数,因此,不应该依赖于每次写入AudioRoad的整个缓冲区的单个写入。write()应该像OutputStream write一样处理,因为它可能不会写入给定缓冲区的全部内容,因此最好编写一个循环,并检查每次调用write()时写入了多少内容,然后继续从缓冲区数组中的新索引写入,直到所有写入的总和等于缓冲区的长度。

实际上,我已经尝试过了,audioTrack.pause and flush,问题是我们调用reloadStaticData来回放曲目,并为下一次播放做好准备。在这里,如果我调用pause和flush,重载staticdata不会回放音频。