2017-11-15 1 views
2

Ich habe eine App mit zwei Funktionen. Man spielt eine AKMetronome und ermöglicht Hintergrund-Wiedergabe, wenn die App nicht im Vordergrund ist. Die andere ist eine Tuner-Funktion, die AKMicrophone verwendet, die nur aktiv sein muss, wenn die App im Vordergrund ist. Diese Funktionen können gleichzeitig verwendet werden (ein blinkendes Metronom leuchtet, während der Tuner aktiv ist).AudioKit: Kann ich ein AKMicrophone deaktivieren, ohne AudioKit.stop() aufzurufen?

Wenn ich die Home-Taste drücke, spielt das Metronom (wie erwartet) weiter. Aber das aktive Mikrofon für den Tuner verursacht auch die bright red "recording"-style bar über die Oberseite des Geräts in allen anderen Apps. Ich brauche den Tuner nicht, wenn die App nicht geöffnet ist.

Wie kann ich den Knoten AKMicrophone deaktivieren, so dass diese Leiste nicht angezeigt wird, während auch der Knoten AKMetronome ununterbrochen wiedergegeben wird?

ich folgendes versucht haben, alle ohne Erfolg:

  • Aufruf AudioKit.stop() im AppDelegate applicationWillResignActive() Methode. Dies löscht den Aufnahmebalken, stoppt jedoch das Metronom.
  • Aufruf stop() auf dem AKMicrophone Knoten während applicationWillResignActive(). Dadurch wird die Aufnahmeleiste nicht entfernt.
  • Rufen Sie stop() und disconnectOutput() auf dem AKMicrophone Knoten während applicationWillResignActive(). Dadurch wird auch der Aufnahmebalken nicht entfernt.

Ich nehme an, dass ich kann den gesamten Motor (d.h. AudioKit.stop()) zu töten, entfernen Sie das Mikrofon Knoten aus der Kette, und wieder aufzubauen und den Motor neu zu starten, die alle innerhalb der applicationWillResignActive Methode. Aber das wird das Tempo der AKMetronome unterbrechen, also hoffe ich, dass es dazu nicht kommt.

Antwort

2

Ich denke, du solltest AudioKit für das Metronom verwenden und einen Teil von AudioKit namens AKMicrophoneTracker für den Tuner verwenden.

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

Audiokit verwendet AVAudioEngine für seine Signalfluß während der tracker Strömung tatsächlich ein völlig getrenntes Signal aus der EZAudio basiert. Ich glaube, dass die zwei unabhängig benutzt werden können.

Die Art und Weise Sie sich gerade das Mikrofon wahrscheinlich ähnelt dieser Tracking: http://audiokit.io/playgrounds/Analysis/Tracking%20Microphone%20Input/

Sie werden es so mehr machen wollen:

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

Das sieht gut aus! Ich werde das ein wenig versuchen und sehen, ob es funktioniert. Vielen Dank! –

+0

Interessant - das funktioniert sowohl auf den Spielplätzen als auch im iOS-Simulator, aber ich erhalte nur "0.0" für Frequenz und Amplitude beim Testen auf einem tatsächlichen iOS-Gerät (iPhone 7+, iOS 11.1). Aber ich werde weitermachen und die Antwort richtig markieren, da dieser Teil der Frage anscheinend gelöst ist. Ich werde ein Problem auf Github für den Bug öffnen. –

Verwandte Themen