android - 例外:某些设备中的音频缓冲区大小无效
问题描述
我在 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 处崩溃。由于我没有此设备可用,因此无法复制。
解决方案
推荐阅读
- nba-api - 日期从日期到格式
- c++ - OpenGL从stb图像加载rgb纹理
- java - ESP8266 突然停止连接到 java 服务器
- vue.js - 当我单击提交按钮时,发票中的数据已插入,但未插入详细信息
- php - 使用 ajax (Woocommerce) 重新加载 PHP 条件
- python - 在 Python 中并行化 for 循环的独立迭代
- javascript - wix mobile 无法适应嵌入在移动版本上的 javascript
- python - 用 $ 字符在 python 中编写文本
- c# - 将 GameObject 转换为制作的对象列表并迭代
- filter - 如何在过滤器窗格中执行 OR 逻辑?