首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioKit:我可以在不调用AudioKit.stop()的情况下禁用AKMicrophone吗?

AudioKit:我可以在不调用AudioKit.stop()的情况下禁用AKMicrophone吗?
EN

Stack Overflow用户
提问于 2017-11-15 06:06:26
回答 1查看 581关注 0票数 3

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

当我按“家庭”按钮时,节拍器继续播放(如预期的那样)。但是,在所有其他应用程序中,调谐器的活动麦克风也会导致设备顶部的大红“录音”-style条。不过,我不需要调谐器在应用程序未打开时运行。

如何禁用AKMicrophone AKMetronome 节点,使该条不出现,同时保持AKMetronome节点不间断地播放?

我试过以下几种方法,但都没有成功:

  • 在应用程序委托AudioKit.stop()方法中调用applicationWillResignActive()。这样可以去掉录音条,但停止节拍器。
  • stop()期间在AKMicrophone节点上调用applicationWillResignActive()。这不会移除录音条。
  • stop()期间在AKMicrophone节点上调用AKMicrophonedisconnectOutput()。这也不会移除录音条。

我怀疑我可能需要杀死整个引擎(即AudioKit.stop()),从链中删除麦克风节点,并在applicationWillResignActive方法中重新构建和重新启动引擎。但这会打断AKMetronome的节奏,所以我希望不会出现这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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/

你会想让它更像这样:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47300457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档