Попытка потокового аудио с микрофона на другой телефон через многопользовательское соединение

Я пытаюсь транслировать звук с микрофона на другой iPhone через платформу Apple Multipeer Connectivity. Для захвата и воспроизведения звука я использую AVAudioEngine (большое спасибоРитмичный ФистманответВот).

Я получаю данные с микрофона, устанавливая сигнал на входе, после чего я получаю AVAudioPCMBuffer, который затем преобразую в массив UInt8, который затем передается на другой телефон.

Но когда я преобразовываю массив обратно в AVAudioPCMBuffer, я получаю исключение EXC_BAD_ACCESS с компилятором, указывающим на метод, в котором я снова преобразовываю байтовый массив в AVAudioPCMBuffer.

Вот код для того, где я беру, преобразовываю и транслирую ввод:

input.installTap(onBus: 0, bufferSize: 2048, format: input.inputFormat(forBus: 0), block: {
                (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in

                let audioBuffer = self.typetobinary(buffer)
                stream.write(audioBuffer, maxLength: audioBuffer.count)
            })

Мои обе функции для преобразования данных (взяты изMartin.RответВот):

func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T {
    return value.withUnsafeBufferPointer {
        UnsafeRawPointer($0.baseAddress!).load(as: T.self)
    }

}

func typetobinary<T>(_ value: T) -> [UInt8] {
    var data = [UInt8](repeating: 0, count: MemoryLayout<T>.size)
    data.withUnsafeMutableBufferPointer {
        UnsafeMutableRawPointer($0.baseAddress!).storeBytes(of: value, as: T.self)
    }
    return data
}

И на приемном конце:

func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
    if streamName == "voice" {

        stream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
        stream.open()

        var bytes = [UInt8](repeating: 0, count: 8)
        stream.read(&bytes, maxLength: bytes.count)

        let audioBuffer = self.binarytotype(bytes, AVAudioPCMBuffer.self) //Here is where the app crashes

        do {
            try engine.start()

            audioPlayer.scheduleBuffer(audioBuffer, completionHandler: nil)
            audioPlayer.play()
       }catch let error {
            print(error.localizedDescription)

        }
    }
}

Дело в том, что я могу конвертировать байтовый массив вперед и назад и воспроизводить звук с него до того, как я его транслирую (в том же телефоне), но не могу создать AVAudioPCMBuffer на принимающей стороне. Кто-нибудь знает, почему преобразование не работает на принимающей стороне? Это правильный путь?

Любая помощь, мысли / вклад по этому поводу будет высоко ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос