У меня проблема с записью данных с помощью AVAudioEngine и AVAudioFile с использованием новой платформы AVFoundation в бета-версии iOS 8.
Я хотел бы записывать данные, нажимая на входной узел, используя формат m4a. Однако выходной файл кажется поврежденным, но при изменении формата файла на .aac с той же настройкой файл имеет правильный формат и может успешно воспроизводиться:
import Foundation
import AVFoundation
func captureMicrophoneInput() {
var error : NSError?
var audioFileSettings = Dictionary<NSObject, AnyObject>()
audioFileSettings[AVFormatIDKey] = kAudioFormatMPEG4AAC
audioFileSettings[AVNumberOfChannelsKey] = 1
audioFileSettings[AVSampleRateKey] = 44100.0
audioFileSettings[AVEncoderBitRatePerChannelKey] = 16
audioFileSettings[AVEncoderAudioQualityKey] = AVAudioQuality.Medium.toRaw()
let audioEngine = AVAudioEngine()
let inputNode = audioEngine.inputNode
// by using .acc the output file can be played successfully
let url : CFURL = NSURL.fileURLWithPath("/path/to/outputdir/myFileWithProblematicExtension.m4a") as CFURL
var audioFile = AVAudioFile(forWriting: url, settings: audioFileSettings, error: &error)
if error != nil {
println("AVAudioFile error")
println(error)
return
}
// Write the output of the input node to disk
inputNode.installTapOnBus(0, bufferSize: 4096,
format: inputNode.outputFormatForBus(0),
block: { (audioPCMBuffer : AVAudioPCMBuffer!, audioTime : AVAudioTime!) in
audioFile.writeFromBuffer(audioPCMBuffer, error: &error)
if error != nil {
println("AVAudioFile error")
println(error)
return
}
})
audioEngine.startAndReturnError(&error)
}
Я был бы рад, если бы кто-нибудь мог внести свой вклад в это. Спасибо!