我有一个有两个功能的应用程序。一个播放AKMetronome,当应用程序不在前台时允许后台播放。另一个是调谐器功能,它使用AKMicrophone,它只需要在应用程序处于前台时处于活动状态。这些功能可以同时使用(当调谐器处于活动状态时,闪烁的节拍器灯)。
当我按“家庭”按钮时,节拍器继续播放(如预期的那样)。但是,在所有其他应用程序中,调谐器的活动麦克风也会导致设备顶部的大红“录音”-style条。不过,我不需要调谐器在应用程序未打开时运行。
如何禁用AKMicrophone AKMetronome 节点,使该条不出现,同时保持AKMetronome节点不间断地播放?
我试过以下几种方法,但都没有成功:
AudioKit.stop()方法中调用applicationWillResignActive()。这样可以去掉录音条,但停止节拍器。stop()期间在AKMicrophone节点上调用applicationWillResignActive()。这不会移除录音条。stop()期间在AKMicrophone节点上调用AKMicrophone和disconnectOutput()。这也不会移除录音条。我怀疑我可能需要杀死整个引擎(即AudioKit.stop()),从链中删除麦克风节点,并在applicationWillResignActive方法中重新构建和重新启动引擎。但这会打断AKMetronome的节奏,所以我希望不会出现这种情况。
发布于 2017-11-15 07:24:03
我认为您应该使用AudioKit作为节拍器,并在调谐器中使用名为AKMicrophoneTracker的AudioKit的一部分。
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。
https://stackoverflow.com/questions/47300457
复制相似问题