繁体   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