 
     public override init() {
         super.init()
-        
+    }
+    
+    deinit {
+        stop()
+    }
+    
+    public func start() {
         AVAudioSession.sharedInstance().addObserver(self,
                                                     forKeyPath: Observation.VolumeKey,
                                                     options: [.initial, .new],
                                                     context: &Observation.Context)
     }
     
-    deinit {
+    public func stop() {
         AVAudioSession.sharedInstance().removeObserver(self,
                                                        forKeyPath: Observation.VolumeKey,
                                                        context: &Observation.Context)

                                                         mode: .default,
                                                         policy: .longFormAudio)
        try? AVAudioSession.sharedInstance().setActive(true)
    }
    #endif
    

        if context == &Observation.Context {
            if keyPath == Observation.VolumeKey,
               let volume = (change?[NSKeyValueChangeKey.newKey] as? NSNumber)?.floatValue {
                NotificationCenter.default.post(name: .SystemVolumeMonitor, userInfo: ["volume": volume])
            }
        } else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
