AudioKit:我可以在不调用 AudioKit.stop() 的情况下禁用 AKMicrophone 吗?
AudioKit: Can I disable an AKMicrophone without calling AudioKit.stop()?
我有一个具有两个功能的应用程序。当应用程序不在前台时,播放 AKMetronome
并允许后台播放。另一个是使用 AKMicrophone
的调谐器功能,仅当应用程序位于前台时才需要激活。这些功能可以同时使用(调谐器处于活动状态时节拍器灯闪烁)。
当我按下主页按钮时,节拍器继续播放(符合预期)。但是调谐器的活动麦克风也会导致所有其他应用程序的设备顶部出现 bright red "recording"-style bar。不过,当应用程序未打开时,我不需要调谐器来运行。
如何禁用 AKMicrophone
节点,使该栏不显示,同时保持 AKMetronome
节点播放不间断?
我尝试了以下方法,但都没有成功:
- 在应用委托
applicationWillResignActive()
方法中调用 AudioKit.stop()
。这摆脱了录音栏,但停止了节拍器。
- 在
applicationWillResignActive()
期间在 AKMicrophone
节点上调用 stop()
。这不会删除录音栏。
- 在
applicationWillResignActive()
期间在 AKMicrophone
节点上调用 stop()
和 disconnectOutput()
。这也不会删除录音栏。
我怀疑我可能需要终止整个引擎(即 AudioKit.stop()
),从链中删除麦克风节点,然后重建并重新启动引擎,所有这些都在 applicationWillResignActive
方法中。但这会打断 AKMetronome
的节奏,所以我希望它不会变成那样。
我认为您应该将 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.
我有一个具有两个功能的应用程序。当应用程序不在前台时,播放 AKMetronome
并允许后台播放。另一个是使用 AKMicrophone
的调谐器功能,仅当应用程序位于前台时才需要激活。这些功能可以同时使用(调谐器处于活动状态时节拍器灯闪烁)。
当我按下主页按钮时,节拍器继续播放(符合预期)。但是调谐器的活动麦克风也会导致所有其他应用程序的设备顶部出现 bright red "recording"-style bar。不过,当应用程序未打开时,我不需要调谐器来运行。
如何禁用 AKMicrophone
节点,使该栏不显示,同时保持 AKMetronome
节点播放不间断?
我尝试了以下方法,但都没有成功:
- 在应用委托
applicationWillResignActive()
方法中调用AudioKit.stop()
。这摆脱了录音栏,但停止了节拍器。 - 在
applicationWillResignActive()
期间在AKMicrophone
节点上调用stop()
。这不会删除录音栏。 - 在
applicationWillResignActive()
期间在AKMicrophone
节点上调用stop()
和disconnectOutput()
。这也不会删除录音栏。
我怀疑我可能需要终止整个引擎(即 AudioKit.stop()
),从链中删除麦克风节点,然后重建并重新启动引擎,所有这些都在 applicationWillResignActive
方法中。但这会打断 AKMetronome
的节奏,所以我希望它不会变成那样。
我认为您应该将 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.