繁体   English   中英

使用哪种方法实时读取音频样本

[英]Which approach to use for reading audio samples in real-time

对于特定项目,我需要:

  1. 从麦克风或音频文件访问单个音频样本,
  2. 每隔250毫秒左右从这些值中提取一个属性,然后
  3. 在屏幕上实时显示该属性(最多可以延迟100毫秒)。

我研究过各种方法-音频单元,音频图,AVAudioEngine,AudioTapProcessor-但不确定哪一个是仅针对iOS8和iOS9的Swift项目的正确路径。 AudioTapProcessor可以很好地用于访问音频文件中的音频样本,但不能确定麦克风输入或Swift支持。

哪种方法最符合这些要求? 谢谢阅读。

更新:我使用了AVAudioEngine,到目前为止,它非常适合。

音频单元和图表将齐头并进。 音频单元是组件,图形是将它们连接在一起的机制。 使用单位和图表将为您提供最佳的实时(低延迟)性能和选项。 由于核心音频最初是ac api,因此我发现Objective C更适合核心音频。

我最近回答了一个有关环形缓冲区的问题,并将该项目用作演示。 该项目在从麦克风录音时会发出声音,并允许您通过读取铃声中的最新样本进行处理。 这可能是一个很好的起点。 您可以根据需要删除正在播放的音调。

我相信,具有kAudioUnitSubType_RemoteIO的单个音频组件的简约低级方法在低延迟和Swift支持方面将可靠地执行。 假定该接口 (这里命名为方便起见)myAudioController正确声明和初始化, 注册呈现回调 下面的代码应该做的实时I / O映射(这里用C写的,虽然):

myAudioController *myController = (myAudioController *)inRefCon;

//this would render inNumberFrames of data from audio input...
AudioUnitRender(myController->audioUnit,
                            ioActionFlags,
                            inTimeStamp,
                            bus1,
                            inNumberFrames,
                            ioData);

//from here on, individual samples can be monitored and processed...                           
AudioBuffer buffer = ioData->mBuffers[0]; 

Swift中的等效代码片段可能如下所示:

let myController = UnsafeMutablePointer<myAudioController>(inRefCon).memory
AudioUnitRender(myController.audioUnit, 
                            ioActionFlags, 
                            inTimeStamp, 
                            bus1, 
                            inNumberFrames, 
                            ioData)

for buffer in UnsafeMutableAudioBufferListPointer(ioData) { ... }

请随时查阅Apple的参考页面以获取详细信息-记录非常清楚: https : //developer.apple.com/library/ios/documentation/AudioUnit/Reference/AUComponentServicesReference/#//apple_ref/c/func/AudioUnitRender

这可能也是一个有价值的站点,其中的必需阅读教科书中的C示例已用Swift重新编写: https : //github.com/AlesTsurko/LearningCoreAudioWithSwift2.0

重要的是要了解自己在做什么。 其他所有内容都应该是不言自明的,不应涉及过多的工作。 希望这可以帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM