Как работать с однотонным c AKNode в стереосессии? - PullRequest
0 голосов
/ 30 апреля 2020

В среде, где запись AKSettings.channelCount = 2 и AKMicrophone выводится на один канал. Итак, я хотел бы иметь возможность понять, как правильно пропатчить или микшировать аудио в AudioKit, пожалуйста?

Давайте посмотрим на следующий пример, имея в виду, что я сохранил его до минимума так что смотрите на это как «псевдокод», как показано ниже:

        AKSettings.bufferLength = .medium
        AKSettings.channelCount = 2
        AKSettings.setSession(category: .playAndRecord)
        AKNodeRecorder(node: microphone) // or AKMicrophone >>> AKMixer            
        mainMixer.connect(input: mic) // is AKMixer()
        AudioKit.output = mainMixer
        AudioKit.start()

Настройка проигрывателя (AKPlayer) довольно проста:

    player.load(audioFile: audioFile)
    player.isLooping = false
    player.buffering = .always
    player >>> mainMixer

В результате recorded microphone audio to быть "панорамированным" влево или сыгранным на левом канале! Я бы предпочел быть уверенным в том, как это работает, чтобы иметь возможность сделать правильный выбор, поскольку в аналоговом микшере микрофон будет подключен к моноканалу, центрированному в миксе, если не будет проведено панорамирование влево / вправо. Кроме того, я не хочу менять AKSettings.channelCount на 1, так как мне бы хотелось, чтобы звуковые дорожки тоже выводили стерео.

Любые советы или предложения приветствуются, спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

Я нашел несколько решений специально для микрофона, но, конечно, было бы неплохо найти хорошее прочтение о том, как правильно исправлять ошибки в AudioKit:)

Первое рабочее решение - это использовать AVAudioFormat, как заявлено здесь (https://audiokit.io/docs/Classes/AKMicrophone.html# / c:@M@AudioKit@objc (cs) AKMicrophone (im) initWith :), следующим образом:

var audioFormat: AVAudioFormat = AVAudioFormat(standardFormatWithSampleRate: 44100, channels: 1)!
var mic = AKMicrophone(with: audioFormat)

Мы также можем использовать AKStereoFieldLimiter и ограничьте количество каналов до одного:

AKStereoFieldLimiter(mic, amount: 1)

Затем вы можете передать его на AKMixer и исправить на AKNodeRecorder.

Могут быть и другие способы , но пока это то, что я знаю.

...