Audiokit: одновременное использование микрофона, осциллятора, постукивания и печати - PullRequest
0 голосов
/ 09 марта 2020

Итак, я новичок в изучении Swift, а также плохо знаком с фреймворком AudioKit. Я следовал нескольким примерам, таким как Hello World и Microphone Analysis, чтобы узнать, как использовать микрофон, а также как воспроизводить звук. Вместе эти задачи работают, но как только я начал подключаться к узлу в моей функции ViewDidAppear (), построение графиков перестало работать, даже если я вызвал свою функцию setupPlot (). С AKNodes, должны ли быть отдельные узлы для каждой из задач? Вот как выглядит мой код ниже:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    AudioKit.output = silence
    AudioKit.output = AKMixer(oscillator)
    do {
        try AudioKit.start()
    } catch {
        AKLog("AudioKit did not start!")
    }
    setupPlot()
    // Tapping here stops plotting
    initMicrophone(mic)
    Timer.scheduledTimer(timeInterval: 0.1,
                         target: self,
                         selector: #selector(ViewController.updateUI),
                         userInfo: nil,
                         repeats: true)
}
    func initMicrophone(_ input: AKNode?){
    input?.avAudioNode.removeTap(onBus: 0)
    input?.avAudioNode.installTap(
        onBus: 0, bufferSize: bufferSize, format: nil
    ) { [weak self] (buffer, _) in 
        guard let strongSelf = self else {
          print("Recorder: Unable to create strong reference to self #1")
          return
        }

        buffer.frameLength = strongSelf.bufferSize
        let offset = Int(buffer.frameCapacity - buffer.frameLength)
        if let tail = buffer.floatChannelData?[0] {
          let samples = Array(UnsafeBufferPointer(start: &tail[offset], count: 4096))
            print(samples)  //size of array of samples is 4096
        }
    }
}
...