【问题标题】:AudioTrack stopped working on Android 5.0AudioTrack 在 Android 5.0 上停止工作
【发布时间】:2015-11-03 23:06:04
【问题描述】:

在使用 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);
}

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

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

    if (audioBuffer != null) {
        mTrack.write(audioBuffer, 0, audioBuffer.length);
    }
}

这同样适用于 Lollipop 之前的设备。 Logcat 没有错误,一切似乎正常但声音不出来(是的,我检查了音量,它一直在上升)。所以我想知道是否有我错过的更新,或者我做错了什么。

我注意到 AudioFormat.CHANNEL_CONFIGURATION_STEREO 已被弃用,但尝试建议的 AudioFormat.CHANNEL_OUT_STEREO 似乎没有奏效。

我们将不胜感激。

【问题讨论】:

  • 没人知道这件事吗?相同的代码适用于 Kitkat 和以前的版本。 Lollipop 需要进行哪些更改?

标签: android android-5.0-lollipop audiotrack android-5.1.1-lollipop


【解决方案1】:

Google 更改 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)
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多