Как получить аудиоданные из проекта AurioTouch? - PullRequest
0 голосов
/ 11 апреля 2019

Я устанавливаю новое приложение для рации и хочу получить данные с микрофона. Я использовал этот проект 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 Ответ

1 голос
/ 13 апреля 2019

Да, это возможно, но вы не должны делать это, используя Swift внутри обратного вызова аудиоустройства в реальном времени.В видео WWDC, посвященном аудио в 2018 году, Apple не использовала код Swift в контексте аудио в реальном времени.Кроме того, не следует выполнять какое-либо управление памятью, например создавать NSData, внутри обратного вызова аудиоустройства.

Вместо этого вы можете вызвать подпрограмму C (используя те же параметры, что и обратный вызов Swift для рендеринга), чтобы скопировать необработанный звуксэмплы из аудио контекста в FIFO.Затем в другом потоке вы можете использовать Swift для повторной упаковки аудиосэмплов, накопленных до этого времени, в некоторые NSData и отправки их через сетевой сокет.

...