Я пытаюсь записать звук с помощью AVAudioEngine. Файл записывается и воспроизводится корректно. Однако мне также нужно отправить AVAudioPCMBuffer, который я получаю в обработчике крана, на мой сервер через сокет. Я конвертирую AVAudioPCMBuffer в NSData и отправляю его. Сервер получает его, однако файл на сервере воспроизводится некорректно. Я что-то упустил при преобразовании AVAudioPCMBuffer в NSData или в моей записи отсутствует какая-то конфигурация.
Любая помощь будет оценена, ребята. Спасибо!
let audioEngine = AVAudioEngine()
let inputNode = audioEngine.inputNode
let bus = 0
try file = AVAudioFile(forWriting: URLFor("recording.wav")!, settings: audioEngine.inputNode!.inputFormatForBus(0).settings)
inputNode!.installTapOnBus(bus, bufferSize: 4096, format: inputNode!.inputFormatForBus(bus)) {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
self.file?.writeFromBuffer(buffer)
self.socketio.send(self.toNSData(buffer))
}
do{
audioEngine.prepare()
try audioEngine.start()
}
catch{
print("catch")
}
func toNSData(PCMBuffer: AVAudioPCMBuffer) -> NSData {
let channelCount = 1 // given PCMBuffer channel count is 1
let channels = UnsafeBufferPointer(start: PCMBuffer.floatChannelData, count: channelCount)
let ch0Data = NSData(bytes: channels[0], length:Int(PCMBuffer.frameCapacity * PCMBuffer.format.streamDescription.memory.mBytesPerFrame))
return ch0Data
}
toNSData
генерирует действительные NSData? Например... можете ли вы сами играть из данных в приложении? (просто чтобы попытаться определить, являются ли данные, которые вы создаете, действительными, и у сервера есть проблема, или действительно ли данные, которые вы создаете, недействительны) - person pbodsk   schedule 07.10.2016AVAudioPlayer
для этого? (как описано здесь: stackoverflow.com/questions/32510346/). Я не знаю, поможет ли это вам, я просто подумал, что было бы неплохо определить, где возникает ошибка (данные недействительны или с ними что-то происходит во время передачи на сервер) - person pbodsk   schedule 07.10.2016