2017-11-15 4 views
2

私は2つの機能を持つアプリを持っています。 1人はAKMetronomeを再生し、アプリがフォアグラウンドにないときにバックグラウンド再生を許可します。もう1つはAKMicrophoneを使用するチューナー機能で、アプリがフォアグラウンドにあるときのみアクティブにする必要があります。これらの機能は同時に使用することができます(チューナーがアクティブな間はメトロノームが点滅します)。AudioKit:AudioKit.stop()を呼び出さずにAKMicrophoneを無効にすることはできますか?

ホームボタンを押すと、メトロノームは(期待通りに)再生を続けます。しかし、チューナー用のアクティブなマイクも、他のすべてのアプリでデバイスの上部にあるbright red "recording"-style barを引き起こします。私はアプリが開いていないときにチューナーが機能する必要はありません。

ノードを無効にして、このバーが表示されないようにするには、AKMetronomeノードの再生を中断しないでください。

ノー成功をすべて、次のことを試してみた:

  • アプリのデリゲートapplicationWillResignActive()方法でAudioKit.stop()を呼び出します。録音バーは取り除かれますが、メトロノームは停止します。
  • applicationWillResignActive()の間にAKMicrophoneノードのstop()を呼び出します。これで録音バーは削除されません。
  • applicationWillResignActive()の間にノードAKMicrophonestop()disconnectOutput()を呼び出します。これで録音バーも削除されません。

私はすべてapplicationWillResignActiveメソッド内で、チェーンからマイクノードを削除し、エンジンを再構築し、再起動、エンジン全体(すなわちAudioKit.stop())を殺すために必要があるかもしれないと思われます。しかし、それはAKMetronomeのテンポを中断するので、私はそれが来ないと思っています。

答えて

2

メトロノームにはAudioKitを使用し、チューナーにはAKMicrophoneTrackerというAudioKitの一部を使用してください。トラッカーは実際EZAudioのオフに基づいて完全に別個の信号の流れである

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

AudioKitは信号の流れのためAVAudioEngineを使用します。私は2つが独立して使用できると信じています。

あなたが現在マイクを追跡している方法は、おそらくこのようになります。 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。

+1

これは素晴らしいですね!私は少しこれを試してみて、それが動作するかどうかを確認します。ありがとう! –

+0

面白い - これは遊び場とiOSシミュレータの両方で素晴らしいですが、実際のiOSデバイス(iPhone 7+、iOS 11.1)でテストするときには、周波数と振幅の「0.0」しか得られません。しかし、私は先に進み、問題のその部分が解決されているように見えるので、正しい答えに印を付けるでしょう。バグについてはGithubに関する問題も開いていきます。 –

関連する問題