日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/6/17 Android 30 豆豆

文章目錄

  • 一、檢查 Oboe 音頻流屬性
  • 二、開始播放
  • 三、停止播放
  • 四、關閉音頻流
  • 五、重新配置 Oboe 音頻流屬性



Oboe GitHub 主頁 : GitHub/Oboe

  • ① 簡單使用 : Getting Started

  • ② Oboe 全指南 : Full Guide To Oboe

  • ③ Oboe API 參考 : API reference

  • ④ Android 音頻框架發展 : Android audio history


在 【Android 高性能音頻】Oboe 開發流程 ( 導入 Oboe 庫 | 使用預構建的二進制庫和頭文件 | 編譯 Oboe 源碼 ) 博客中介紹了 如何導入 Oboe 函數庫到項目中 , 本博客中在導入 Oboe 函數庫的基礎上 , 進行 Oboe 播放器功能開發 ;

在 【Android 高性能音頻】Oboe 開發流程 ( 包含頭 Oboe 頭文件 | 創建音頻流 | 設置音頻流 | 音頻流回調類 AudioStreamCallback ) 介紹了如何創建 AudioStreamBuilder , 以及 創建 AudioStreamCallback 回調 ;

在 【Android 高性能音頻】Oboe 開發流程 ( 創建并設置 AudioStreamCallback 對象 | 打開 Oboe 音頻流 | 日志封裝 logging_macros.h ) 博客中介紹了 設置 AudioStreamCallback 對象 , 打開 Oboe 音頻流 操作 , 以及 Google 官方提供的日志封裝有文件 ;





一、檢查 Oboe 音頻流屬性



檢查已創建的 Oboe 音頻流屬性 , 如果沒有指定 聲道數 , 采樣率 , 采樣格式 , 需要檢查其默認的 Oboe 音頻流配置 , 如果指定了這三個屬性中的任意一個值 , 就會得到指定的值 ;

推薦手動設置上述三個值 , 不要讓系統自動設置 ;

采樣格式 屬性指定的是 oboe::AudioStreamCallback 中的 onAudioReady 回調方法的 void *audioData 緩沖區的音頻類型 ;

virtual DataCallbackResult onAudioReady(AudioStream *oboeStream,void *audioData,int32_t numFrames) = 0;

獲取音頻采樣格式 , 并打印出來 :

// 獲取采樣格式 oboe::AudioFormat format = stream->getFormat();// 打印采樣格式 LOGI("AudioStream format is %s", oboe::convertToText(format));



二、開始播放



調用 oboe::ManagedStream 音頻流的 requestStart() 方法 , 可以開啟 Oboe 音頻播放 ;

// 3. 開始播放result = managedStream->requestStart();LOGI("requestStart result : %s", oboe::convertToText(result));



三、停止播放



調用 oboe::ManagedStream 音頻流的 requestStop() 方法 , 可以停止 Oboe 音頻播放 ;

// 停止播放result = managedStream->requestStop();LOGI("requestStart result : %s", oboe::convertToText(result));



四、關閉音頻流



當不使用 Oboe 音頻流時 , 必須關閉該音頻流 , 因為 Oboe 音頻流會占用音頻設備資源 ;

尤其是設置的 Oboe 音頻流 共享模式 SharingMode 是獨占模式 Exclusive 時 , 只要該音頻流不關閉 , 其它的音頻流將無法訪問該低延遲音頻流 ;

不再播放音頻時 , 要及時關閉 Oboe 音頻流 , 建議在 Activity 界面中的 onPause 方法中關閉音頻流 ;


顯示關閉 Oboe 音頻流 : 直接 調用音頻流的 close() 方法 , 顯示關閉音頻流 ; 該方法是一個阻塞調用 , 調用后 , 會停止音頻流播放 ;

managedStream ->close();

Oboe 音頻流超出作用域自動關閉 : 棧內存音頻流超出作用域時 , 會自動關閉該 Oboe 音頻流 ;

{ManagedStream mStream;AudioStreamBuilder().build(mStream);mStream->requestStart(); } // 超出作用域音頻流自動關閉



五、重新配置 Oboe 音頻流屬性



如果要修改現有 Oboe 音頻流的配置 , 只需要 先設置對應屬性 后 , 再調用 oboe::AudioStreamBuilder 構建器的 openManagedStream 方法 即可 , 調用該方法后, 會關閉銷毀現有的 Oboe 音頻流 , 然后會 重新創建新的 Oboe 音頻流 ;

// 在 Oboe 音頻流運行時 , 通過構建器修改音頻流屬性 builder.setDeviceId(MY_DEVICE_ID);// 重新打開設置了新屬性的音頻流 // 舊的 Oboe 音頻流會被自動關閉并銷毀 builder.openManagedStream(managedStream);

最佳實踐 :

  • 手動關閉銷毀 : 使用 Oboe 音頻流 ManagedStream 時 , 需要 手動負責關閉 和 銷毀操作 ;
  • 自動關閉銷毀 : 如果在自動分配上下文的環境中 , 如該 音頻流作為類的成員變量 , 當應用中不再使用音頻流時 , 確保該 Oboe 音頻流對象超出了封閉的作用范圍 ;

總結

以上是生活随笔為你收集整理的【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。