Частота трека AudioKit от звука, генерируемого динамиком - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь отслеживать частоты с микрофона одновременно с тем, как динамик издает определенный c звук. Тестирование на iPhone XS, физическое устройство.

При нажатии кнопки колонки успешно воспроизводят звук в течение 3 секунд, но в это время, похоже, не работает трекер частоты (ничего не печатает). После остановки звука трекер частоты работает отлично.

Вот мой код в Xcode 11.4, AudioKit 4.9.5 и ios 13.4:

import UIKit
import AudioKit
import AudioKitUI

class ViewController: UIViewController {
    var oscillator = AKOscillator()
    var mic = AKMicrophone()
    var filter = AKLowPassFilter()
    var tracker: AKFrequencyTracker?
    var silence: AKBooster?

    override func viewDidLoad() {
        super.viewDidLoad()


        AudioKit.output = oscillator
        oscillator.amplitude = random(0.99, 1)
        oscillator.frequency = random(999, 1002)
        sleep(UInt32(0.5))

        mic = AKMicrophone()
        filter = AKLowPassFilter(mic)
        filter.cutoffFrequency = 1002
        filter.resonance = 999

        AKSettings.audioInputEnabled = true
        tracker = AKFrequencyTracker(filter)
        silence = AKBooster(tracker, gain: 0)

        AudioKit.output = AKMixer(silence,oscillator)

        do {
            AKSettings.session.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
            AKSettings.defaultToSpeaker = true
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord)
            try AudioKit.start()
        } catch {
            AKLog("AudioKit did not start!")
        }

        Timer.scheduledTimer(withTimeInterval: 0.001, repeats: true, block: { _ in
            let timeInterval = NSDate().timeIntervalSince1970
            if self.tracker!.frequency >= 999 && self.tracker!.frequency <= 1002 && self.tracker!.amplitude >= 0.02{
                print(String(timeInterval)+": "+String(format: " %.2f",self.tracker!.frequency) + " "+String(format: " %.2f",self.tracker!.amplitude))
            }
                        })


    }

    @IBAction func StartClicked(_ sender: Any) {
        do {
        } catch {
            AKLog("AudioKit did not start!")
            print(error)
        }
        oscillator.start()
        sleep(3)
        oscillator.stop()
    }

}


Спасибо!

...