【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )

简介: 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )

文章目录

一、设置 Oboe 音频设备 ID ( AAudio )

二、设置 Oboe 音频设备 ID ( OpenSL ES)

三、oboe :: AudioStreamBuilder :: setDeviceId 函数原型

四、oboe :: AudioStream 音频流

五、相关资料



Android 中的 Oboe 音频流创建时 , 可以在 oboe :: AudioStreamBuilder 中设置 设备 ID , 音频流一旦创建成功 , 如果是 Android 8.0 8.08.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.08.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 , 功能很单一 , 控制音频的开始 , 暂停 , 停止 等功能 , 获取音频播放时的相关参数 , 没有与设备相关的任何操作 ;






image.png


五、相关资料


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


目录
相关文章
|
2月前
|
数据库 Android开发 开发者
构建高性能微服务架构:从理论到实践构建高效Android应用:探究Kotlin协程的优势
【2月更文挑战第16天】 在当今快速迭代和竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性和独立部署能力而受到企业的青睐。本文将深入探讨如何构建一个高性能的微服务系统,涵盖从理论基础到具体实现的各个方面。我们将重点讨论服务拆分策略、通信机制、数据一致性以及性能优化等关键主题,为读者提供一个清晰、实用的指南,以便在复杂多变的业务环境中构建和维护健壮的微服务体系结构。 【2月更文挑战第16天】 在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着技术的不断进步,Kotlin作为一种现代编程语言,在Android开发中被广泛采用,尤其是其协程特性为异步编程带来了革命性的改进。本文旨在深入
|
3月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
5月前
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
115 0
|
9天前
|
存储 Java Android开发
Android系统 设置第三方应用为默认Launcher实现和原理分析
Android系统 设置第三方应用为默认Launcher实现和原理分析
21 0
|
9天前
|
Android开发 内存技术
Android 通过tinyalsa调试解决录制和播放音频问题
Android 通过tinyalsa调试解决录制和播放音频问题
25 1
|
5月前
|
XML 编解码 算法
Android开发音效中录制WAV音频和录制MP3音频的讲解及实战(超详细 附源码)
Android开发音效中录制WAV音频和录制MP3音频的讲解及实战(超详细 附源码)
77 0
|
4月前
|
网络安全 Android开发
2023安卓逆向 -- 抓包环境设置(Charles+Postern)
2023安卓逆向 -- 抓包环境设置(Charles+Postern)
36 0
|
5月前
|
XML Java Android开发
Android 开发中原始音频的录播和和自定义音频控制条的讲解及实战(超详细 附源码)
Android 开发中原始音频的录播和和自定义音频控制条的讲解及实战(超详细 附源码)
27 0
|
Java API Android开发
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(一)
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(一)
322 0
|
9天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
13 1