Я хотел бы записать некоторые аудио с помощью AVAudioEngine
и пользователей микрофона. У меня уже есть рабочий образец, но я просто не могу понять, как указать формат вывода, который я хочу ...Как указать формат AVAudioEngine Mic-Input?
Моим требованием было бы то, что мне нужен AVAudioPCMBuffer
, поскольку я говорю, что он в настоящее время делает. .
Должен ли я добавить отдельный узел, который выполняет некоторую перекодировку? Я не могу найти много документации/образцов по этой проблеме ...
И я также являюсь ножом, когда дело доходит до Audio-Stuff. Я знаю, что я хочу NSData
содержащего PCM-16- с максимальной частотой дискретизации 16000 (8000 будет лучше)
Вот мой рабочий пример:
private var audioEngine = AVAudioEngine()
func startRecording() {
let format = audioEngine.inputNode!.inputFormatForBus(bus)
audioEngine.inputNode!.installTapOnBus(bus, bufferSize: 1024, format: format) { (buffer: AVAudioPCMBuffer, time:AVAudioTime) -> Void in
let audioFormat = PCMBuffer.format
print("\(audioFormat)")
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch { /* Imagine some super awesome error handling here */ }
}
Если я изменил формат, чтобы позволить»говорить
let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.PCMFormatInt16, sampleRate: 8000.0, channels: 1, interleaved: false)
тогда, если будет выдавать ошибку о том, что частота дискретизации должна быть такой же, как hwInput ...
Любая помощь очень высоко ценится !!!
EDIT: Я только что нашел AVAudioConverter
, но мне нужно, чтобы быть совместимым с iOS8, а ...
8000 работает также. – nullforlife
Кажется, что для работы 8000 Гц вам нужно вызвать session.setPreferredSampleRate (8000) на AVAudioSession.sharedInstance(). Это фактически изменит частоту дискретизации до 16000, но затем Mixer может переконвертировать ее до 8 кГц. – philips77