簡體   English   中英

從揚聲器獲取音頻樣本

[英]Getting audio samples from speakers

所以我有兩個問題:

  1. 是否有另一種(可能是低級)方法來獲取當前正在播放的音頻的 float* 樣本?
  2. 是否可以從框架內部進行? 我的意思是當您無權訪問擁有音頻文件的 AVPlayer(或 AVAudioPlayerNode、AudioEngine 甚至低級 CoreAudio 類等)的實例時? 有沒有辦法訂閱(為了分析,或者也可能是為了修改/均衡)通過揚聲器/耳機播放的音頻樣本?

我試圖在audioEngine.mainMixerNode上安裝一個水龍頭,它可以工作,但是當我將 bufferSize 設置為超過 4096(為了計算高密度 FFT)時,回調的調用頻率低於它應該調用的頻率(大約 3 次在一個秒而不是 30 次甚至頻繁)。

mixerNode.installTap(onBus: 0,
                     bufferSize: 16384, //or 8192
                     format: mixerNode.outputFormat(forBus: 0))
{[weak self] (buffer, time) in
    //this block is being called LESS frequently...
}

我知道 CoreAudio 非常強大,應該有一些用於這種目的的東西..

iOS 應用程序只能從應用程序本身正在播放的原始 PCM 樣本中獲取播放的音頻樣本。 iOS 安全沙箱會阻止其他應用程序或進程對樣本 output 的任何可見性。 iOS 應用程序可以從設備的麥克風中采樣音頻。

在音頻引擎 Tap-on-bus 中,音頻樣本被傳遞到應用程序的主線程,因此在回調頻率和延遲方面受到限制。 為了獲得最近幾毫秒的麥克風音頻樣本,應用程序需要使用 RemoteIO 音頻單元回調 API,其中音頻樣本可以在高優先級音頻上下文線程中傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM