AudioTrack 在 Android 5.0 上停止工作

dor*_*bsz 2 android audiotrack android-5.0-lollipop android-5.1.1-lollipop

在获得带有 Lollipop 的 Android 设备后,我注意到我们为 Kitkat(和以前的版本)工作的 AudioTrack 代码完全停止工作,完全相同的代码适用于 Lollipop 之前的设备,所以我想知道我在做什么新版本做错了。AudioTrack以下是(由属性引用mTrack)的初始化方式:

protected void onCreate(Bundle savedInstanceState) {
    int bufferSize = AudioTrack.getMinBufferSize(AUDIO_SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);

    mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, AUDIO_SAMPLE_RATE,
                    AudioFormat.CHANNEL_CONFIGURATION_STEREO,
                    AudioFormat.ENCODING_PCM_16BIT, bufferSize,
                    AudioTrack.MODE_STREAM);
}
Run Code Online (Sandbox Code Playgroud)

以下是缓冲区的填充方式:

public void onPlayAudio(byte[] audioBuffer) {
    if (mTrack.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
        mTrack.play();
    }

    if (audioBuffer != null) {
        mTrack.write(audioBuffer, 0, audioBuffer.length);
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,这在 Lollipop 之前的设备上运行良好。Logcat 上没有错误,一切似乎都正常,但声音不出来(是的,我检查了音量,它一直开到最大)。所以我想知道我是否缺少更新或者我做错了什么。

我注意到AudioFormat.CHANNEL_CONFIGURATION_STEREO已被弃用,但尝试建议AudioFormat.CHANNEL_OUT_STEREO似乎并不能解决问题。

任何帮助将不胜感激。

Ser*_*aka 5

谷歌改变API。尝试这个:

val audioTrack: AudioTrack
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            AudioTrack(
                    AudioAttributes.Builder()
                            .setUsage(AudioAttributes.USAGE_MEDIA)
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .build(),
                    AudioFormat.Builder()
                            .setSampleRate(FREQUENCY)
                            .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                            .setChannelMask(AudioFormat.CHANNEL_OUT_MONO).build(),
                    SOUND_BUFFER_SIZE,
                    AudioTrack.MODE_STREAM,
                    AudioManager.AUDIO_SESSION_ID_GENERATE)
        } else {
            //support for Android KitKat
            AudioTrack(AudioManager.STREAM_MUSIC,
                    FREQUENCY,
                    AudioFormat.CHANNEL_OUT_MONO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    SOUND_BUFFER_SIZE,
                    AudioTrack.MODE_STREAM)
        }
Run Code Online (Sandbox Code Playgroud)