我正在设置一个新的对讲机应用程序,我想从使用此项目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;
}
答案 0 :(得分:1)
是的,有可能,但是您不应该在实时音频单元回调中使用Swift来执行此操作。在2018年关于音频的WWDC视频中,苹果表示不要在实时音频上下文中使用Swift代码。此外,不应在Audio Unit回调中进行任何内存管理,例如创建NSData。
相反,您可以调用C例程(使用与Swift渲染回调相同的参数)将原始音频样本从音频上下文中复制到FIFO中。然后,在另一个线程中,您可以使用Swift将到那时为止累积的音频样本重新打包到某些NSData中,然后通过网络套接字发送。