Запрет воспроизведения во время записи с помощью AVAudioEngine на WatchOS - PullRequest
0 голосов
/ 19 февраля 2020

Я использовал AVAudioEngine для сбора данных PCM с микрофона в iOS, и он работал нормально, однако, когда я попытался переместить проект в WatchOS, я получил обратную связь во время записи. Как мне остановить воспроизведение с динамиков во время записи?

var audioEngine = AVAudioEngine()

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)

let input = audioEngine.inputNode
let format = input.inputFormat(forBus: 0)

audioEngine.connect(input, to: audioEngine.mainMixerNode, format: format)

try! audioEngine.start()
let mixer = audioEngine.mainMixerNode

let format = mixer.outputFormat(forBus: 0)
let sampleRate = format.sampleRate
let fft_size = 2048

mixer.installTap(onBus: 0, bufferSize: UInt32(fft_size), format: format, 
            block: {(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
    // Processing
}

1 Ответ

0 голосов
/ 27 февраля 2020

Для всех, кто сталкивается с этим, я исправил это, удалив соединение с inputNode к mainMixerNode, и установил ответвление прямо на inputNode. То, как я это делал, прежде чем догадаться, создает обратную связь oop, где он воспроизводит то, что записывает. Не уверен, почему это происходит только в WatchOS, а не на iPhone ... возможно, он воспроизводился через динамики, а не рядом с mi c. Фиксированный код:

var audioEngine = AVAudioEngine()

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)

try! audioEngine.start()
let input = audioEngine.inputNode

let format = mixer.outputFormat(forBus: 0)
let sampleRate = format.sampleRate
let fft_size = 2048

input.installTap(onBus: 0, bufferSize: UInt32(fft_size), format: format, 
            block: {(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
    // Processing
}
...