Android 使用Audiotrack时没有声音

Android 使用Audiotrack时没有声音,android,audiotrack,Android,Audiotrack,奇怪的情况。我使用了AudioTrack,但没有播放声音。。。。 我的游戏代码: private class wPlaySound extends Thread { @Override public void run() { float sampleRate = 8000; int sampleSizeInBytes = 2; int samplePerFrame = (int) sampleRate / (1000 / 20);

奇怪的情况。我使用了AudioTrack,但没有播放声音。。。。 我的游戏代码:

private class wPlaySound extends Thread {
    @Override
    public void run() {
        float sampleRate = 8000;
        int sampleSizeInBytes = 2;
        int samplePerFrame = (int) sampleRate / (1000 / 20); // 20мс
        int frameSize = sampleSizeInBytes * samplePerFrame;
        int minBuf = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

        Log.v("w201", "Buffer Size: " + minBuf);

        AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT, minBuf * 100, AudioTrack.MODE_STREAM);
        at.setStereoVolume(1.0f,1.0f);
        at.play();
        for (int i = 0; i < position; i = i + frameSize) {
            Log.v("w201","write: "+at.write(data, i, frameSize));
        }
        at.flush();
        at.stop();
        at.release();
    }
}
EDIT2:我发现只有在我调用AudioTrack的方法stop之后,它才会开始播放声音。但是如果我需要播放每一帧,我该怎么做呢

_loop_
_receive_frame_
at.play
at.write(_one frame_)
at.stop
代码如下:

at.play();
at.write(data, i, frameSize));
at.flush();
at.stop();
at.release(); 
无法正确播放。只写入块,直到数据写入缓冲区,而不是直到数据完成播放。您需要删除flush,无论如何不应该在播放缓冲区时调用它。见下文:

at.play();
at.write(data, i, frameSize));
at.stop();
at.release(); 
这样停止将完成播放。但如果您需要立即停止,您应该:

at.pause();
at.flush();

我从麦克风里听到的声音。我查过了,里面有一些数据。即使打错了或者我打错了速度,我也会听到一些噪音。但100%静默字节[]数据=新字节[1024*1024];你的问题解决了吗?你看到AudioTrack中的任何日志数据了吗?它是静默的还是输出write:userSize?@KristianMartinsen我在ExoPlayer上也遇到了类似的问题,第一次播放效果很好,之后每次我都得到[AudioTrack]write userSize 2400
at.pause();
at.flush();