3

我有一个具有两个功能的应用程序。AKMetronome当应用程序不在前台时,一个播放并允许后台播放。另一个是使用 的调谐器功能AKMicrophone,仅在应用程序处于前台时才需要处于活动状态。这些功能可以同时使用(调谐器激活时节拍器灯闪烁)。

当我按下主页按钮时,节拍器继续播放(如预期的那样)。但调谐器的活动麦克风也会在所有其他应用程序中导致设备顶部出现亮红色的“录音”风格栏。但是,当应用程序未打开时,我不需要调谐器来运行。

如何禁用AKMicrophone节点以使该栏不显示,同时保持AKMetronome节点播放不中断?

我尝试了以下方法,但均未成功:

  • 调用AudioKit.stop()应用程序委托applicationWillResignActive()方法。这摆脱了录音栏,但停止了节拍器。
  • 期间调用节点stop()。这不会删除录音栏。AKMicrophoneapplicationWillResignActive()
  • 期间在节点上调用stop()和。这也不会删除录音栏。disconnectOutput()AKMicrophoneapplicationWillResignActive()

我怀疑我可能需要杀死整个引擎(即AudioKit.stop()),从链中删除麦克风节点,然后重建并重新启动引擎,所有这些都在applicationWillResignActive方法内。但这会打断 的节奏AKMetronome,所以我希望它不会变成那样。

4

1 回答 1

2

我认为您应该将 AudioKit 用于节拍器,并将 AudioKit 的一部分称为 AKMicrophoneTracker 用于调谐器。

http://audiokit.io/docs/Classes/AKMicrophoneTracker.html https://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/Internals/Microphone%20Tracker/AKMicrophoneTracker.swift

AudioKit 使用 AVAudioEngine 作为其信号流,而跟踪器实际上是基于 EZAudio 的完全独立的信号流。我相信两者可以独立使用。

您当前跟踪麦克风的方式可能类似于: http ://audiokit.io/playgrounds/Analysis/Tracking%20Microphone%20Input/

你会想让它更像这样:

let tracker = AKMicrophoneTracker()
tracker.start()

//: User Interface
import AudioKitUI

class LiveView: AKLiveViewController {

    var trackedAmplitudeSlider: AKSlider?
    var trackedFrequencySlider: AKSlider?

    override func viewDidLoad() {

        AKPlaygroundLoop(every: 0.1) {
            self.trackedAmplitudeSlider?.value = tracker.amplitude
            self.trackedFrequencySlider?.value = tracker.frequency
        }

        addTitle("Tracking With Microphone Tracker")

        trackedAmplitudeSlider = AKSlider(property: "Tracked Amplitude", range: 0 ... 0.8) { _ in
            // Do nothing, just for display
        }
        addView(trackedAmplitudeSlider)

        trackedFrequencySlider = AKSlider(property: "Tracked Frequency",
                                          range: 0 ... 2_400,
                                          format: "%0.3f Hz"
        ) { _ in
            // Do nothing, just for display
        }
        addView(trackedFrequencySlider)

    }
}

HTH。

于 2017-11-15T07:24:03.757 回答