Подключение AVAudioMixerNode к AVAudioEngine - PullRequest
0 голосов
/ 28 декабря 2018

Я использую AVAudioMixerNode для изменения аудио формата. эта запись мне очень помогла.Ниже код дает мне данные, которые я хочу.Но я слышу свой голос на динамике телефона.Как я могу предотвратить это?

func startAudioEngine()
{
    engine = AVAudioEngine()

    guard let engine = engine, let input = engine.inputNode else {
        // @TODO: error out
        return
    }

    let downMixer = AVAudioMixerNode()
    //I think you the engine's I/O nodes are already attached to itself by default, so we attach only the downMixer here:
    engine.attach(downMixer)

    //You can tap the downMixer to intercept the audio and do something with it:
    downMixer.installTap(onBus: 0, bufferSize: 2048, format: downMixer.outputFormat(forBus: 0), block:  //originally 1024
        { (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in

            //i get audio data here
        }
    )

    //let's get the input audio format right as it is
    let format = input.inputFormat(forBus: 0)
    //I initialize a 16KHz format I need:
    let format16KHzMono = AVAudioFormat.init(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 11025.0, channels: 1, interleaved: true)

    //connect the nodes inside the engine:
    //INPUT NODE --format-> downMixer --16Kformat--> mainMixer
    //as you can see I m downsampling the default 44khz we get in the input to the 16Khz I want
    engine.connect(input, to: downMixer, format: format)//use default input format
    engine.connect(downMixer, to: engine.outputNode, format: format16KHzMono)//use new audio format

    engine.prepare()

    do {
        try engine.start()
    } catch {
        // @TODO: error out
    }
}

1 Ответ

0 голосов
/ 31 декабря 2018

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

downMixer.outputVolume = 0.0

...