首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 函数库简介 ( Oboe 简介 | Oboe 特点 | Oboe 编译工具 | Oboe 相关文档 | Oboe 测试工具 )

    一、Oboe 简介 Oboe 简介 : ① 函数库 : Oboe 是 C++ 函数库 , 用于在 Android 平台中中构建高性能音频 ; ② 主要功能 : 让开发者使用一套 API , 就可以 跨 编译工具 Oboe 编译工具 : ① 编译 Oboe : 编译 Oboe 函数库 , 需要使用 支持 C++14 的编译器 , 和 Android 头文件 ; ② 交叉编译工具 : 最简单的方法就是使用 文档 Oboe 相关资料 : GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To OboeOboe API 参考 : API reference ④ Android 音频框架发展 : Android audio history 五、Oboe 测试 Oboe 测试 : ① Oboe 测试应用 : OboeTester ( 自动化测试用法 ) ; ③ Oboe 测试应用编译 : 参考文档 , 就是个 Android 应用 , 导入到 Android Studio 中运行即可 ;

    1.8K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )

    主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To OboeOboe API 参考 : API | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 在 【Android 高性能音频】 Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback ) 介绍了如何创建 AudioStreamBuilder , ; 在 【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 ) 博客中介绍了 <oboe/Oboe.h> #include "logging_macros.h" // 这部分变量是采样相关的 , 与 Oboe 操作无关 // 声道个数 , 2 代表立体声 static int

    1.2K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )

    文章目录 一、检查 Oboe 音频流属性 二、开始播放 三、停止播放 四、关闭音频流 五、重新配置 Oboe 音频流属性 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To OboeOboe API 参考 : API reference ④ Android 音频框架发展 : Android audio history 在 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 在 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 对象 , 打开 Oboe 音频流 操作 , 以及 Google 官方提供的日志封装有文件 ; 一、检查 Oboe 音频流属性 ---- 检查已创建的 Oboe 音频流属性 , 如果没有指定 声道数 ,

    1.4K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

    文章目录 一、导入 Oboe 库 二、使用预构建的二进制库和头文件 三、编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started Oboe 源码到工程中 , 在 Android Studio 中编译 Oboe 源码 ; Oboe 导入库方案适用场景 : 使用稳定功能 : 如果只想要 使用稳定版本的 Oboe 函数库 , 使用方案 /oboe) ③ 指定 Oboe 源码的头文件路径 : 允许本次 CMake 编译的目标库中可以包含 Oboe 源码头文件 , 进而访问 Oboe API ; include_directories ( /oboe 指定的是编译后的二进制文件存放位置 ; add_subdirectory (${OBOE_DIR} ./oboe) # 4. 指定 Oboe 源码的头文件路径 # 允许本次 CMake 编译的目标库中可以包含 Oboe 源码头文件 , 进而访问 Oboe API include_directories (${OBOE_DIR

    1.6K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )

    文章目录 一、获得最佳延迟 二、Oboe 音频流 三、Oboe 音频设备 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 在 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 在 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 对象 , 打开 Oboe 音频流 操作 , 以及 Google 官方提供的日志封装有文件 ; 在 【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 ) 博客中介绍了 如何开始 Oboe 音频流播放 , 以及 播放完毕后的收尾工作 ; 在 【Android 高性能音频】Oboe 开发流程

    1.5K00编辑于 2023-03-28
  • 来自专栏Android 开发者

    打造低延迟互动音频: Oboe

    这也是我们推出 Oboe 的原因。Oboe 是一个 C++ 库,用来为 Android 打造高性能的互动音频体验——而且覆盖 99% 的 Android 设备。 如果您的应用希望用尽可能接近 “实时” 规格的低延迟采集或者播放音频,Oboe 绝对是不二之选。 请观看由 Android Audio 开发推广工程师 Don Turner 为您带来的 Oboe 介绍视频↓↓ 点击查看腾讯视频 在 Github 上获取 Oboe 库: github.com/google /oboe ? Oboe 代码实验室: codelabs.developers.google.com/codelabs/mu… 如何为您的项目添加 C 和 C++ 语言: developer.android.google.cn

    1.7K20发布于 2018-12-13
  • 来自专栏Android点滴分享

    oboe 从使用到源码详解

    本篇介绍 Oboe是一个开源的低延时音频库,本篇从使用到源码研究下Oboe的内容 使用Oboe oboe的官网提供了相当详细的指导,使用起来也比较简单,以一个播放器为例: #include <oboe/ Oboe.h> #include <math.h> using namespace oboe; class OboeSinePlayer: public oboe::AudioStreamDataCallback (oboe::PerformanceMode::LowLatency) ->setChannelCount(kChannelCount) ::Medium) ->setFormat(oboe::AudioFormat::Float) ->setDataCallback(this ,可以看出来Oboe的优势在于自己有一套兼容性机制,又利用了opensl和aaudio的低延时机制, 在设计这块,oboe和aaudio的设计的很像的。

    1.8K20编辑于 2022-10-25
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( Oboe 音频帧简介 | AudioStreamCallback 中的数据帧说明 )

    Oboe 全指南 : Full Guide To OboeOboe API 参考 : API reference ④ Android 音频框架发展 : Android audio history 在 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 在 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 ) 博客中介绍了 如何开始 Oboe 音频流播放 , 以及 播放完毕后的收尾工作 ; 在 【Android 高性能音频】Oboe 开发流程 采样大小 是 样本位数 与 声道数 乘积 ; 下面的代码是 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 ) 博客中的 Oboe 音频流创建时 的代码 , 设置 Oboe

    15.3K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】hello-oboe 示例解析 ( Oboe 源代码依赖 | CMakeList.txt 构建脚本分析 | Oboe 源代码构建脚本分析 )

    构建脚本 ( 参考 ) 相关资源链接 : Oboe 源码 : google/oboe hello-oboe 源码地址 : google/oboe/samples/hello-oboe 一、Oboe 源码路径 ---- 在 oboe-1.4.3 代码示例 中的 hello-oboe 示例 , 没有添加 Oboe 的网络依赖 ( jcenter / maven ) , 因为在示例中有 Oboe 的源码 , 其路径是在 oboe-1.4.3 目录下 , 在 oboe/releases 页面下载的 Oboe 源码及示例程序 , 解压后的 oboe-1.4.3\src 路径下 ; oboe-1.4.3\src 就是 Oboe 库的目录路径 oboe-1.4.3 路径, 这是整个下载的发布版本源码的总根目录 set (OBOE_DIR ../../../../../) 添加 Oboe 库 , 作为 子工程 ; Oboe 源码不在本源码路径内 /oboe-bin) 上述设置就是编译 oboe-1.4.3\src 下的 Oboe 源码 ; 设置本项目 hello-oboe 中的 NDK 编译所需的源文件 , 定义变量 APP_SOURCES ,

    73900编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( 创建并设置 AudioStreamCallback 对象 | 打开 Oboe 音频流 | 日志封装 logging_macros.h )

    文章目录 一、创建并设置 AudioStreamCallback 对象 二、打开 Oboe 音频流 三、日志封装 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To OboeOboe API 参考 : API reference ④ Android 音频框架发展 : Android audio history 在 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 在 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 音频流 ---- 首先 声明并创建 Oboe 音频流 , 这里在栈内存中创建 ; // 声明 Oboe 音频流 oboe::ManagedStream managedStream =

    73900编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback )

    文章目录 一、包含头 Oboe 头文件 二、音频流构建器 AudioStreamBuilder 三、音频流回调 AudioStreamCallback Oboe GitHub 主页 : GitHub/ Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To OboeOboe API 参考 : API reference ④ Android 音频框架发展 : Android audio history 在 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 ) 博客中介绍了 如何导入 Oboe 函数库到项目中 , 本博客中在导入 Oboe 函数库的基础上 , 进行 Oboe 播放器功能开发 ; 一、包含头 Oboe 头文件 ---- #include <oboe/Oboe.h> 二、音频流构建器 AudioStreamBuilder ---- 创建 AudioStreamBuilder 对象 : // 音频流构建器 oboe::AudioStreamBuilder

    1.2K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 音频流打开后 耳机 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )

    文章目录 一、动态注册广播接收者监听耳机插拔事件 二、jni 层的 Oboe 播放器代码 ( 重新打开 Oboe 音频流 ) 三、相关资料 基于 【Android 高性能音频】Oboe 开发流程 ( Oboe 方法 , 即可重新打开 Oboe 音频流 , 打开时的设备是默认的设备 , 即当前插入的耳机/音箱 ; // 声明 Oboe 音频流 oboe::ManagedStream managedStream Oboe 音频流 , 打开时的设备是默认的设备 , 即手机本身自带的扬声器 ; 完整 C++ 代码示例 : #include <jni.h> #include <string> #include <oboe 通过 AudioStreamBuilder 打开 Oboe 音频流 oboe::Result result = builder.openManagedStream(managedStream); (hello.c_str()); } 三、相关资料 ---- Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 :

    98020编辑于 2023-03-29
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Oboe AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )

    文章目录 一、报错信息 二、解决方案 在 Android 8.0 以上的机型中 , Oboe 播放器调用的是 AAudio 播放器 API ; 在 Android 8.0 以上的机型中 , Oboe 播放器调用的是 高性能音频】Oboe 函数库简介 ( Oboe 简介 | Oboe 特点 | Oboe 编译工具 | Oboe 相关文档 | Oboe 测试工具 ) 博客 ; 一、报错信息 ---- 在 Android 应用中使用 Oboe 播放器 , 启动了两个进程 , 每个进程中创建了一个 Oboe 播放器进行发音操作 ; Oboe 播放器使用 , 参考 【Android 高性能音频】Oboe 开发流程 ( Oboe , 后启动的 Oboe 播放器会抢占扬声器设备 , 将先启动的 Oboe 播放器关闭 ; 对应的播放器报错如下 : 2021-05-05 13:51:06.545 16722-16933/kim.hsl.oboe | Oboe 音频流 | Oboe 音频设备 ) 博客 , Oboe 音频流需要设置相关参数 ; 在 Android 9 , 10 系统中 , 即使设置了音频流的模式为独占模式 , 也能启动两个 Oboe

    73810编辑于 2023-03-29
  • 来自专栏韩曙亮的移动开发专栏

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

    Android 中的 Oboe 音频流创建时 , 可以在 oboe :: AudioStreamBuilder 中设置 设备 ID , 音频流一旦创建成功 , 如果是 Android 8.0 以上的系统 , 则不能修改设备 ID , 必须销毁当前的 Oboe 音频流 , 重新使用 oboe :: AudioStreamBuilder 创建音频流 ; 一、设置 Oboe 音频设备 ID ( AAudio ) 在 Oboe 的文档中 , oboe :: AudioStreamBuilder 对应的文档 https://google.github.io/oboe/reference/classoboe_1 ; 五、相关资料 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指南 : Full Guide To Oboe oboe/reference/classoboe_1_1_audio_stream_builder.html Oboe 音频流 : https://google.github.io/oboe/reference

    2.9K20编辑于 2023-03-29
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 )

    文章目录 一、Oboe 测试应用 二、Oboe 测试内容 三、Oboe 输出测试 四、Oboe 缓冲区 与 工作负载修改 五、Oboe 输出测试 ( Pixel 2 | Android 10 ) 一、Oboe 测试应用 ---- Oboe 测试应用 : ① Oboe GitHub 页面 : GitHub / Oboe ; ② Oboe 发布版本下载界面 : release 版本下载 , 这里我下载的是 1.4.3 版本 ; 下载 Source code ( zip ) 即可 ; ③ Oboe 测试应用 : 文件路径 : oboe-1.4.3\apps\OboeTester , 下载后 , 解压 oboe-1.4.3 .zip , 即可在上述目录找到测试应用 GitHub 地址 : OboeTester 主要作用 : 可用于测试 Oboe 各种特征 , OpenSL ES , AAudio 等 ; 还可以测量 设备 音频往返延迟 故障测试 自动故障测试 断开测试 测试主界面 : 三、Oboe 输出测试 ---- Oboe 输出测试 : ① 参数 显示 / 隐藏 : 点击 绿条 , 可以 显示 , 隐藏 输入 (

    2.1K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】高性能音频简介 ( 高性能音频问题引入 | 使用场景 | 相关开发库及技术 )

    10ms 左右 , 而且调用普通 API 就可以实现 ; Android 目前也开始发力推出了一系列的高性能音频库 , 如最初的 OpenSL ES , 8.0 之后推出的 AAudio , 目前最新的 Oboe 兼容前两者 ; 开发层级 : 使用 Java 层的 API 是无法实现高性能音频的 , 必须使用 NDK 开发库才可以 , 上述讲的 OpenSL ES , AAudio , Oboe 都是 C/ Oboe : 对上面两个 高性能音频开发库进行了封装 , 在 8.0 以上的系统中自动调用 AAudio 开发库 , 在 8.0 以下系统中调用 OpenSL ES 开发库 ; III 相关开发资料 - master/native-audio ② AAudio 官方示例 : https://github.com/googlearchive/android-audio-high-performance ③ Oboe 官方示例 : https://github.com/google/oboe 博客的下载链接中有 Google 提供的 全套的 高性能音频示例 , 包括 OpenSL ES , AAudio , Oboe

    67420编辑于 2023-03-27
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )

    文章目录 一、Oboe 输出测试参数面板 二、Oboe 输出测试参数 API 及 设备选择 三、Oboe 输出测试参数 音频参数 四、Oboe 输出测试参数 播放偏好 五、Oboe 输出测试参数 ( 内存文件映射 、设备独占、效果器设置 ) 继续再上一篇博客 【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 , 使用 OboeTester 测试音频性能 ; 上一篇博客讲解了 OboeTester 简介 , 9 个测试项目 , 输出测试简介 , 以及测试实例 ; 本篇博客主要介绍音频参数设置 ; 一、Oboe 输出测试参数面板 ---- 打开参数设置面板 : 点击 绿条 , 即可控制 显示 / 隐藏 输出参数设置面板 ; 二、Oboe 输出测试参数 API 及 设备选择 ---- 1 . Device 输出设备 参数 : 选择音频输出设备 , 内置的扬声器 ( 大 ) , 内置的通话扬声器 ( 小 ) , 如果插上耳机 , 还有会耳机选项 ; 三、Oboe 输出测试参数 音频参数 --

    2.8K00编辑于 2023-03-28
  • 来自专栏音频

    音视频基础能力之 Android 音频篇 (三):高性能音频采集

    在上面的章节说过,Oboe 的存在是为了解决 Opensl es 调用逻辑繁琐 和 AAudio 不能运行在 Android O 版本以下设备的尴尬局面。 buildFeatures { prefab true }}dependencies { implementation 'com.google.oboe:oboe:1.9.0' libraries link to the target library android log oboe::oboe)头文件引入#include <oboe /Oboe.h>具体代码调用逻辑见文章最后的 samplecode 链接。 如果新的项目,或者面向的用户群体 Android 版本很高,建议使用 AAudio 或者 oboe 均可。

    74310编辑于 2024-12-08
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )

    二、Android Studio 版本、Gradle 版本、Gradle 插件版本 Android Gradle 插件版本说明 一、问题描述 ---- 起因 : 需要配置 Android 高性能音频 Oboe 函数库 , 参考 https://github.com/google/oboe/blob/master/docs/GettingStarted.md 文档 , 使用预构建的二进制库和头文件 , 需要配置如下配置

    3.4K00编辑于 2023-03-28
  • 来自专栏Android 开发者

    Android NDK | 中文介绍视频

    Android NDK | 中文介绍视频 Github 库: github.com/googlesampl… github.com/google/oboe… github.com/googlesampl

    71040发布于 2018-05-31
领券