如何从AurioTouch项目中获取音频数据?

时间:2019-04-11 13:55:03

标签: ios swift core-audio

我正在设置一个新的对讲机应用程序,我想从使用此项目AurioTouch的麦克风中获取数据

我在ioData中发现了麦克风捕获的音频数据

可以将* ioData:UnsafeMutablePointer << em> AudioBufferList > *转换为 NSData 并通过 WebSocket

发送
// Render callback function
func performRender(_ ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>,
                   inTimeStamp: UnsafePointer<AudioTimeStamp>,
                   inBufNumber: UInt32,
                   inNumberFrames: UInt32,
                   ioData: UnsafeMutablePointer<AudioBufferList>) -> OSStatus
{
    // we are calling AudioUnitRender on the input bus of AURemoteIO
    // this will store the audio data captured by the microphone in ioData
    let err: OSStatus = AudioUnitRender(_rioUnit!, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData)
    return err;
}

1 个答案:

答案 0 :(得分:1)

是的,有可能,但是您不应该在实时音频单元回调中使用Swift来执行此操作。在2018年关于音频的WWDC视频中,苹果表示不要在实时音频上下文中使用Swift代码。此外,不应在Audio Unit回调中进行任何内存管理,例如创建NSData。

相反,您可以调用C例程(使用与Swift渲染回调相同的参数)将原始音频样本从音频上下文中复制到FIFO中。然后,在另一个线程中,您可以使用Swift将到那时为止累积的音频样本重新打包到某些NSData中,然后通过网络套接字发送。