【Android 高性能音频】Oboe 开发流程 ( 创建并设置 AudioStreamCallback 对象 | 打开 Oboe 音频流 | 日志封装 logging_macros.h )
文章目錄
- 一、創(chuàng)建并設(shè)置 AudioStreamCallback 對(duì)象
- 二、打開 Oboe 音頻流
- 三、日志封裝
Oboe GitHub 主頁 : GitHub/Oboe
-
① 簡(jiǎn)單使用 : Getting Started
-
② Oboe 全指南 : Full Guide To Oboe
-
③ Oboe API 參考 : API reference
-
④ Android 音頻框架發(fā)展 : Android audio history
在 【Android 高性能音頻】Oboe 開發(fā)流程 ( 導(dǎo)入 Oboe 庫 | 使用預(yù)構(gòu)建的二進(jìn)制庫和頭文件 | 編譯 Oboe 源碼 ) 博客中介紹了 如何導(dǎo)入 Oboe 函數(shù)庫到項(xiàng)目中 , 本博客中在導(dǎo)入 Oboe 函數(shù)庫的基礎(chǔ)上 , 進(jìn)行 Oboe 播放器功能開發(fā) ;
在 【Android 高性能音頻】Oboe 開發(fā)流程 ( 包含頭 Oboe 頭文件 | 創(chuàng)建音頻流 | 設(shè)置音頻流 | 音頻流回調(diào)類 AudioStreamCallback ) 介紹了如何創(chuàng)建 AudioStreamBuilder , 以及 創(chuàng)建 AudioStreamCallback 回調(diào) ;
一、創(chuàng)建并設(shè)置 AudioStreamCallback 對(duì)象
在上一篇博客 【Android 高性能音頻】Oboe 開發(fā)流程 ( 包含頭 Oboe 頭文件 | 創(chuàng)建音頻流 | 設(shè)置音頻流 | 音頻流回調(diào)類 AudioStreamCallback ) 中定義了 AudioStreamCallback 回調(diào)類 ;
此處 創(chuàng)建該 自定義 AudioStreamCallback 對(duì)象 , 并將其設(shè)置給 AudioStreamBuilder 對(duì)象 ;
注意要在堆內(nèi)存中創(chuàng)建 AudioStreamCallback 對(duì)象 , 不能在棧內(nèi)存中創(chuàng)建 , 否則方法執(zhí)行完畢后 , 該對(duì)象會(huì)被自動(dòng)回收 , 因此在使用完畢后 , 要及時(shí)釋放該對(duì)象 ;
調(diào)用 AudioStreamBuilder 的 setCallback 方法設(shè)置 AudioStreamCallback 對(duì)象時(shí) , 需要設(shè)置的類型是 AudioStreamCallback * 指針類型 ;
代碼示例 :
// 創(chuàng)建 MyCallback 對(duì)象 MyCallback myCallback = MyCallback();// 設(shè)置回調(diào)對(duì)象 , 注意要設(shè)置 AudioStreamCallback * 指針類型 builder.setCallback(&myCallback);// 在未來某個(gè)時(shí)間 , 釋放該 堆內(nèi)存中的 對(duì)象 delete myCallback;二、打開 Oboe 音頻流
首先 聲明并創(chuàng)建 Oboe 音頻流 , 這里在棧內(nèi)存中創(chuàng)建 ;
// 聲明 Oboe 音頻流oboe::ManagedStream managedStream = oboe::ManagedStream();打開音頻流 , 調(diào)用 AudioStreamBuilder 創(chuàng)建器的 openManagedStream 方法 , 傳入的參數(shù)是 oboe::ManagedStream 類型參數(shù) , 直接將 managedStream 傳入即可
// 通過 AudioStreamBuilder 打開 Oboe 音頻流oboe::Result result = builder.openManagedStream(managedStream);另外一種方式 : 如果使用 new 在堆內(nèi)存中創(chuàng)建 ManagedStream , 可以進(jìn)行如下操作 :
注意 打開音頻流 , 調(diào)用 AudioStreamBuilder 創(chuàng)建器的 openManagedStream 方法 , 傳入的參數(shù)是 oboe::ManagedStream 類型參數(shù) , 目前的 managedStream 是指針類型 , 因此需要使用 * 符號(hào) , 取出地址中的 ManagedStream 對(duì)象數(shù)據(jù) ;
// 聲明 Oboe 音頻流oboe::ManagedStream *managedStream = new oboe::ManagedStream;// 通過 AudioStreamBuilder 打開 Oboe 音頻流oboe::Result result = builder.openManagedStream(*managedStream);部分代碼示例 :
// 聲明 Oboe 音頻流oboe::ManagedStream managedStream;// 通過 AudioStreamBuilder 打開 Oboe 音頻流oboe::Result result = builder.openManagedStream(managedStream);// 打印 Oboe 音頻流創(chuàng)建結(jié)果if (result != oboe::Result::OK) {LOGE("Failed to create stream. Error: %s", oboe::convertToText(result));}else{LOGE("Success to create stream. Result: %s", oboe::convertToText(result));}執(zhí)行結(jié)果 :
2020-10-14 16:43:29.149 12156-12156/kim.hsl.oboedemo I/octopus: AudioStreamBuilder 創(chuàng)建完畢 2020-10-14 16:43:29.162 12156-12156/kim.hsl.oboedemo E/octopus: Success to create stream. Result: OK三、日志封裝
Google 中提供了一個(gè)很好的 log 封裝頭文件 , logging_macros.h , 很多官方示例中都使用這個(gè)頭文件 ;
#ifndef __SAMPLE_ANDROID_DEBUG_H__ #define __SAMPLE_ANDROID_DEBUG_H__ #include <android/log.h>#if 1 #ifndef MODULE_NAME #define MODULE_NAME "octopus" #endif#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, MODULE_NAME, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, MODULE_NAME, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, MODULE_NAME, __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,MODULE_NAME, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,MODULE_NAME, __VA_ARGS__) #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,MODULE_NAME, __VA_ARGS__)#define ASSERT(cond, ...) if (!(cond)) {__android_log_assert(#cond, MODULE_NAME, __VA_ARGS__);} #else#define LOGV(...) #define LOGD(...) #define LOGI(...) #define LOGW(...) #define LOGE(...) #define LOGF(...) #define ASSERT(cond, ...)#endif#endif // __SAMPLE_ANDROID_DEBUG_H__總結(jié)
以上是生活随笔為你收集整理的【Android 高性能音频】Oboe 开发流程 ( 创建并设置 AudioStreamCallback 对象 | 打开 Oboe 音频流 | 日志封装 logging_macros.h )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 高性能音频】Oboe
- 下一篇: 【Android 高性能音频】Oboe