Android 高性能音频Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )(代码片
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 高性能音频Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )(代码片相关的知识,希望对你有一定的参考价值。
文章目录
android 中的 Oboe 音频流创建时 , 可以在 oboe :: AudiostreamBuilder 中设置 设备 ID , 音频流一旦创建成功 , 如果是 Android 8.0 8.0 8.0 以上的系统 , 则不能修改设备 ID , 必须销毁当前的 Oboe 音频流 , 重新使用 oboe :: AudioStreamBuilder 创建音频流 ;
一、设置 Oboe 音频设备 ID ( AAudio )
在 Oboe 的文档中 , oboe :: AudioStreamBuilder 对应的文档 https://google.github.io/oboe/reference/classoboe_1_1_audio_stream_builder.html 中 , 有音频设备设置的方法 ;
在 Oboe 音频流 AudioStream 打开之前 , 可以在音频流构建器 AudioStreamBuilder 中设置一个音频设备 ;
查看 AudioStreamBuilder * oboe :: AudioStreamBuilder :: setDeviceId ( int32_t deviceId ) 对应文档 ,
给定一个音频设备 ID 编号 , 向特定的音频输入或输出设备请求一个音频流 ;
在大多数的情况下 , 系统会自动选择设备 , 就是当前主设备 , 当手机没有插入耳机 / 音箱时 , 默认是手机的扬声器 , 当插入 耳机 / 音箱 时 , 默认是插入的 耳机 / 音箱 作为当前的音频设备 ;
该 setDeviceId ( int32_t deviceId ) 方法的默认设置的值为 kUnspecified , 设置该值的含义就是由系统自动选择当前的主设备 ;
具体的 设备 ID 值 , 可以调用 Java 的 AudioManager.getDevicees 方法获取 , 返回 AudioDeviceInfo[] 数组 , 其中就包含了 设备 ID 值 ;
一般情况下是 内置扬声器 ( 大 ) , 和 内置扬声器 ( 小 , 打电话通话时的扬声器 ) , 如果插上耳机 / 音箱 , 则出现第三个外接音频设备选项 ;
二、设置 Oboe 音频设备 ID ( OpenSL ES)
如果 Android 系统的版本低于 8.0 8.0 8.0 , 则默认使用 OpenSL ES 播放器 , 该播放器不能设置设备的 ID , 系统会自动选择默认的设备 ;
如果插拔 耳机/音箱 , 会自动进行切换 ;
三、oboe :: AudioStreamBuilder :: setDeviceId 函数原型
AudioStreamBuilder * oboe :: AudioStreamBuilder :: setDeviceId ( int32_t deviceId ) 函数原型 :
/**
* Request a stream to a specific audio input/output device given an audio device ID.
*
* In most cases, the primary device will be the appropriate device to use, and the
* deviceId can be left kUnspecified.
*
* On Android, for example, the ID could be obtained from the Java AudioManager.
* AudioManager.getDevices() returns an array of AudioDeviceInfo[], which contains
* a getId() method (as well as other type information), that should be passed
* to this method.
*
*
* Note that when using OpenSL ES, this will be ignored and the created
* stream will have deviceId kUnspecified.
*
* @param deviceId device identifier or kUnspecified
* @return pointer to the builder so calls can be chained
*/
AudioStreamBuilder *setDeviceId(int32_t deviceId) {
mDeviceId = deviceId;
return this;
}
四、oboe :: AudioStream 音频流
Oboe 音频流类 oboe :: AudioStream , 功能很单一 , 控制音频的开始 , 暂停 , 停止 等功能 , 获取音频播放时的相关参数 , 没有与设备相关的任何操作 ;
五、相关资料
Oboe GitHub 主页 : GitHub/Oboe
-
① 简单使用 : Getting Started
-
② Oboe 全指南 : Full Guide To Oboe
-
③ Oboe API 参考 : API reference
-
④ Android 音频框架发展 : Android audio history
Oboe API 参考 :
-
API 索引 : https://google.github.io/oboe/reference/namespaceoboe.html
-
Oboe 音频流创建器 : https://google.github.io/oboe/reference/classoboe_1_1_audio_stream_builder.html
-
Oboe 音频流 : https://google.github.io/oboe/reference/classoboe_1_1_audio_stream.html
-
Oboe 音频流回调接口 : https://google.github.io/oboe/reference/classoboe_1_1_audio_stream_callback.html
以上是关于Android 高性能音频Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )(代码片的主要内容,如果未能解决你的问题,请参考以下文章
Smule 借助 Oboe 音频库提升用户体验,助力音乐创作 | Android 开发者故事
Smule 借助 Oboe 音频库提升用户体验,助力音乐创作 | Android 开发者故事
错误记录Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )(代码片