Audio Unit 介紹

来源:https://www.cnblogs.com/wangyaoguo/archive/2018/02/08/8422132.html
-Advertisement-
Play Games

關於 "Audio Unit" iOS 提供了音頻處理插件,支持混音,聲音均衡,格式轉化,以及用於錄音,回放,離線渲染,實時對話的輸入輸出。可以動態載入和使用這些強大而靈活的插件,在 iOS 應用中這些插件被稱為 audio units。 Audio units 通常在被稱為 audio proce ...


關於 Audio Unit

iOS 提供了音頻處理插件,支持混音,聲音均衡,格式轉化,以及用於錄音,回放,離線渲染,實時對話的輸入輸出。可以動態載入和使用這些強大而靈活的插件,在 iOS 應用中這些插件被稱為 audio units。

Audio units 通常在被稱為 audio processing graph 的封閉對象的上下文中進行工作,如圖所示,應用程式通過一個或者多個回調函數將音頻發送到 graph 中的第一個音頻單元,並對每一個音頻單元進行單獨控制。在 I/O unit 的輸出(audio processing graph 中最後一個 audio unit)直接連接到輸出硬體。

初識 Audio Unit

由於 audio units 構成了 iOS 音頻堆棧中最低層的編程層,想要高效的使用它們需要比其它音頻技術有更深入的瞭解。除非需要實時播放合成聲音,低延遲輸入輸出,或者特定的 audio unit 功能,否則優先使用 Media Player,AV Foundation,OpenAL 或 AudioToolbox 框架。

Audio Units 提供更快,模塊化音頻處理方案

直接使用 audio units 有兩大優點:

  • 出色的響應能力。因為你可以訪問 audio unit 中的實時優先順序線程呈現回調函數,所以你的代碼會儘可能接近 metal。合成樂器和實時同步語音輸入輸入能夠最大收益於直接使用 audio units。
  • 動態配置。以 AUGraph 為基礎構建的 audio processing graph API,讓你能夠動態組合,重新配置和重新排列複雜的音頻處理鏈。這是 iOS 中唯一提供此功能的 API。

一個 audio unit 的生命周期如下:

  1. 在運行時,獲取一個對動態鏈接庫的引用,該庫定義了你想要使用的 audio unit。
  2. 實例化 audio unit。
  3. 根據應用需要配置 audio unit。
  4. 初始化 audio unit 以準備處理音頻。
  5. 開始音頻流。
  6. 控制 audio unit。
  7. 完成後,銷毀 audio unit。

Audio units 提供了非常有用的功能,例如立體聲聲相,混音,音量控制,音頻電平測量。添加 audio units 到你的應用中,你必須掌握一些列基本概念,例如音頻數據流格式,呈現回調函數和音頻單元架構。

選擇設計模式和構建應用程式

  • 如何配置 I/O unit。I/O unit 有兩個獨立的 elements,一個從輸入硬體接收音頻,一個發送音頻到輸出硬體。每一種設計模式必須指示該啟用的 element。
  • 在 audio processing graph 中,你必須正確指定音頻流支持數據流格式。
  • 在哪建立 audio unit 連接,在哪附加回調函數。 audio unit 連接是從一個 audio unit 的輸出,到另一個 audio unit 的輸入流格式的正式構造。回調函數讓你將音頻數據輸入到 graph 中,或者在 graph 中的單個樣本級別操縱音頻。

無論你選擇哪種設計模式,構建 audio unit 應用程式的基本步驟是相同的:

  • 配置應用的 audio session,確保你的應用能夠股在系統和設備硬體上下文中正常工作。
  • 構建 audio processing graph。
  • 提供一個用戶交互控製圖像音頻單元。

充分利用每一個 Audio Unit

大部分文檔都告訴你所有的iOS audio units 都有重要的共同屬性。例如程式需要在運行時指定和載入 audio unit,然後正確指定音頻流格式。
同時,每一個 audio unit 具有某些獨特的特性和要求,從正確的音頻樣本數據類型到如何使用,到所需要的正確配置。瞭解每一個 audio unit 的細節和特定功能,例如如何使用 3D mixer unit,如何使用 Multichannel Mixer。

如何使用文檔

如果你希望快速應用 audio unit,可以下載參考代碼,如遇到問題,查閱文檔。如果你想開始項目前,對 audio unit 有一個較好的基礎,可以先詳細閱讀基礎文檔,然後選擇設計模式,構建自己的應用。如果對開發 audio units 有一定的經驗,僅想使用指定的類型,參考 Using Specific Audio Units.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現象 最近一直收到客戶反饋某個報表數據查詢不出來。 處理過程 將涉及SQL挖出來後研究未發現sql有任何異常,且未找到優化空間,F5查看執行計劃發現耗費巨大,且兩表索引均未生效,但把兩表單獨拿出來查詢索引有效,所以初步認定為索引失效問題。 Oracle 索引的目標是避免全表掃描,提高查詢效率,但有些 ...
  • 分類與協議是Object-C特有概念,分類(Category)可以認為是一種繼承性的擴展,而協議(Protocol)可以理解為Java中的Interface(介面)或者C++的純虛類。 參考資料:《iPhone與iPad開發實戰-iOS經典應用剖析》 分類與協議是Object-C特有概念,分類(Ca ...
  • Android O 上Notification的新特性: 通知通道功能 1. 簡介: 通知通道功能使開發者管理自己應用的通知成為一個組或者一個通道,用戶可以通過通知通道完成設置通知,如:阻止所有通知,改變某個通道通知的優先順序,是不是顯示launch上的小圓點。通過這些方式來提升用戶體驗。 2. 1. ...
  • Github網址:https://github.com/Stars-One/CirclePointMove 這個開源庫一個封裝好的Viewpager指示器,之前在學習的時候,想要實現一個小圓點跟隨Viewpager移動的功能,在github上找了許久,發現大神們的指示器很強大,很逼格,同時,設置也是 ...
  • 尊重勞動成果,轉載請標明出處http://www.cnblogs.com/tangZH/p/8423803.html android滑動組件的scrollBar,看了不是很順眼,沒辦法,因為項目需求,得自定義一個。 1、自定義一個View,繼承HorizontalScrollView 2、根據需求自 ...
  • 創建Class 添加成員變數 獲取Class的成員變數名 調用以後,結果為: 創建方法 第一個參數為類名,第二個參數為方法名,第三個參數是函數名,第四個參數是函數的返回值和參數的類型,v表是void,@表示id,:表示SEL。更多多定義參考:SELECTOR 需要實現,這個方法 添加屬性 查看屬性 ...
  • 導入文件 在使用反射機制時用到反射屬性要導入文件: #import<objc/runtime.h> 否則會報錯: Declaration of 'objc_property_t' must be imported from module 'ObjectiveC.runtime' before it ...
  • 這兩天做了一個項目,發現標簽不能更改任意一個標簽的字體的顏色,需求如同置前標簽,然後就對tagcloudeview稍做修改做了這麼一個demo。不為別的,只為以後自己用的時候方便拷貝。 先看效果圖: 這兩天做了一個項目,需求如同置前標簽,然後就對tagcloudeview稍做修改做了這麼一個demo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...