首页 > 解决方案 > 例外:某些设备中的音频缓冲区大小无效

问题描述

我在 playstore 上有一个活动的应用程序,最近一部智能手机遇到了以下异常: android.media.AudioTrack.audioBuffSizeCheck (AudioTrack.java:1151) 的音频缓冲区大小无效

这就是我的音轨的创建方式。

    val rate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC)
    val minBufferSize = AudioTrack.getMinBufferSize(rate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT)

    val bufferSizes: IntArray = intArrayOf(1024, 2048, 4096, 8192, 16384, 32768)
    var size = 0

    for(i in bufferSizes){
        if (i > minBufferSize){
            size = i
            break
        }
    }

    // if buffer read size fails
    if (minBufferSize < 0) {
        size = rate * 2
    }

    // Create audio track
    val audioTrack = AudioTrack(
        AudioManager.STREAM_MUSIC, rate,
        AudioFormat.CHANNEL_OUT_MONO,
        AudioFormat.ENCODING_PCM_16BIT,
        size, AudioTrack.MODE_STREAM
    )

上面的代码适用于 98% 的设备。但例如 Galaxy J4 Core 在 audioBuffSizeCheck 处崩溃。由于我没有此设备可用,因此无法复制。

标签: androidexceptionaudio

解决方案


推荐阅读