У меня есть приложение для записи, которое использует AVAudioEngine. Я подключаю микшер к микрофону, чтобы преобразовать данные в нужный формат, а затем прикрепляю к микшеру сигнал, чтобы получить данные. Раньше он работал нормально, пока не вышел iPhone 11. В iPhone 11 данные, которые я получаю с микрофона, являются просто полной тишиной.
Получив сообщение о проблеме от пользователей приложения, я впервые проверил симулятор iPhone 11 в новейшем XCode и, как ни странно, там работает нормально. Поэтому я купил себе новый блестящий iPhone 11, и я мог только подтвердить, что приложение записывает ничего, кроме молчания.
Проблемная часть заключается в следующем:
let audioEngine = AVAudioEngine()
let inputNode = audioEngine.inputNode
let main = audioEngine.mainMixerNode
let inputFormat = inputNode.inputFormat(forBus: 0)
let outputFormat = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 44100, channels: 1, interleaved: true)
audioEngine.attach(downMixer)
audioEngine.connect(inputNode, to: downMixer, format: inputFormat)
audioEngine.connect(downMixer, to: main, format: outputFormat)
downMixer.installTap(onBus: 0, bufferSize: 640, format: outputFormat) { (buffer, time) -> Void in
print("First 20 bytes of recorded data:", terminator: " ")
let data = Data(buffer: buffer)
var i = 0
for byte in data {
print("\(byte)", terminator: ", ")
i += 1
if i > 20 {
break;
}
}
print("")
}
Однажды эти строки:
audioEngine.connect(inputNode, to: downMixer, format: inputFormat)
audioEngine.connect(downMixer, to: main, format: outputFormat)
Выполняется, вывод с микрофона становится нулевым:
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
First 20 bytes of recorded data: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
etc.
Я выполнил поиск в Интернете, и, похоже, ни у кого не возникло подобной проблемы. Я что-то не так делаю?