Настройка рекордера AudioKit с аварийным завершением работы микрофона с условием «ложное условие: mixedDest» - PullRequest
0 голосов
/ 02 июня 2018

Я надеюсь, что кто-нибудь может помочь мне здесь.Я пытаюсь получить базовую настройку записи, но AudioKit падает на меня, и я уверен, что это моя вина, и я что-то делаю неправильно.Вот мои настройки.В моем viewDidLoad я настраиваю AudioKit следующим образом:

// Session settings
do {
    AKSettings.bufferLength = .short
    try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
} catch {
    AKLog("Could not set session category.")
}

AKSettings.defaultToSpeaker = true

// Setup the microphone
micMixer = AKMixer(mic)
micBooster = AKBooster(micMixer)

// Load the test player
let path = Bundle.main.path(forResource: "audio1", ofType: ".wav")
let url = URL(fileURLWithPath: path!)
testPlayer = AKPlayer(url: url)
testPlayer?.isLooping = true

// Setup the test mixer
testMixer = AKMixer(testPlayer)

// Pass the output from the player AND the mic into the recorder
recordingMixer = AKMixer(testMixer, micBooster)
recorder = try? AKNodeRecorder(node: recordingMixer)

// Setup the output mixer - only pass the player NOT the mic
outputMixer = AKMixer(testMixer)

// Pass the output mixer to AudioKit
AudioKit.output = outputMixer

// Start AudioKit
do {
    try AudioKit.start()
} catch {
    print("AudioKit did not start! \(error)")
}

Приложение работает нормально, но как только я запускаю recorder.record(), приложение вылетает с сообщением:

Обязательное условие: false: mixedDest.

Я действительно не хочу передавать микрофон на выход динамика, но я действительно хочу его записать.

Я хочу иметь возможность воспроизводить файл через «testPlayer», слышать его через динамик и одновременно иметь возможность записывать выходной сигнал «testPlayer» и микрофона, не передавая микрофон обратночерез динамики.

Я уверен, что это выполнимо, но я не знаю достаточно о том, как эти вещи должны работать, чтобы понять, что я делаю неправильно.

Любая помощь очень ценится!!

1 Ответ

0 голосов
/ 12 июня 2018

Хорошо, после разговора с ребятами из AudioKit я обнаружил, что проблема в том, что мой микшер для записи не был подключен к AudioKit.output.Чтобы вывести звук через микшер, его необходимо подключить к AudioKit.output.

Чтобы отключить вывод моего микшера для записи, мне нужно было создать фиктивный микшер записи, который был отключен и пропущен.вплоть до выходного микшера.

См. обновленный пример ниже:

// Session settings
do {
    AKSettings.bufferLength = .short
    try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
} catch {
    AKLog("Could not set session category.")
}

AKSettings.defaultToSpeaker = true

// Setup the microphone
micMixer = AKMixer(mic)
micBooster = AKBooster(micMixer)

// Load the test player
let path = Bundle.main.path(forResource: "audio1", ofType: ".wav")
let url = URL(fileURLWithPath: path!)
testPlayer = AKPlayer(url: url)
testPlayer?.isLooping = true

// Setup the test mixer
testMixer = AKMixer(testPlayer)

// Pass the output from the player AND the mic into the recorder
recordingMixer = AKMixer(testMixer, micBooster)
recorder = try? AKNodeRecorder(node: recordingMixer)

// Create a muted mixer for recording audio, so AudioKit will pull audio through the recording Mixer, but not play it through the output.
recordingDummyMixer = AKMixer(recordingMixer)
recordingDummyMixer.volume = 0

outputMixer = AKMixer(testMixer, recordingDummyMixer)

// Pass the output mixer to AudioKit
AudioKit.output = outputMixer

// Start AudioKit
do {
    try AudioKit.start()
} catch {
    print("AudioKit did not start! \(error)")
}

Надеюсь, это поможет кому-то в будущем.

...