Я хочу записывать аудио на iOS в реальном времени, анализировать необработанные аудиоданные и сохранять части записанных данных. Я записываю данные с помощью этого кода: https://gist.github.com/hotpaw2/ba815fc23b5d642705f2b1dedfaf0107iOS Swift malloc error
Теперь мои данные сохраняются в массиве Float, и я хочу сохранить его в аудиофайл. Я пытался делать это с этим кодом:
let fileMgr = FileManager.default
let dirPaths = fileMgr.urls(for: .documentDirectory, in: .userDomainMask)
let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue,
AVEncoderBitRateKey: 16,
AVNumberOfChannelsKey: 2,
AVSampleRateKey: 44100] as [String: Any]
let soundFileUrl = dirPaths[0].appendingPathComponent("recording-" + getDate() + ".pcm")
do {
let audioFile = try AVAudioFile(forWriting: soundFileUrl, settings: recordSettings)
let format = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 44100, channels: 2, interleaved: true)
let audioFileBuffer = AVAudioPCMBuffer(pcmFormat: format, frameCapacity: 3000)
for i in 0..<circBuffer.count {
audioFileBuffer.int16ChannelData?.pointee[i] = Int16(circBuffer[i])
}
try audioFile.write(from: audioFileBuffer)
}
На последней строке, я получаю ошибку, которая говорит:
ОШИБКА:> avae> AVAudioFile.mm:306: - [AVAudioFile writeFromBuffer: ошибка:] : error -50 амплификацияDemo (79264,0x70000f7cb000) malloc: * ошибка для объекта 0x7fc5b9057e00: некорректная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения. * установить точку останова в malloc_error_break для отладки
Я уже искал в большом количестве других вопросов, но я не мог найти ничего, что помогло мне.
Спасибо, это помогло. Но все же созданные звуковые файлы пустые, и я получаю ошибку: «ERROR:> avae> AVAudioFile.mm:306: - [AVAudioFile writeFromBuffer: error:]: error -50« Любая идея, почему это происходит? – user7310287
@ user7310287, извините, я должен был проверить мой код немного больше, я просто проверил запись в буфер, не вызывает сбой.Но не проверено с фактической записью в файл будет успешным или нет. Теперь, проверяя фактическое поведение iOS, снимите флажок «Принять», пока я не смогу найти исправления. – OOPer