         dispatch_async(dispatch_get_main_queue()) {
             self.displayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
         }
-    }
+
+        _producer.addObserver(self, forKeyPath: "position", options: .New, context: &_positionContext)
+    }
+
+    deinit {
+        _producer.removeObserver(self, forKeyPath: "position", context: &position)
+    }
+
     /**
     アセットを内部キューの末尾に追加する
 

    public var rate: Float {
        return _producer.playbackRate
    }

    /**
    プレーヤーを再生開始

    }
}

// MARK: … KVO
extension HKLAVGaplessPlayer {
    public override func observeValueForKeyPath(keyPath: String,
        ofObject object: AnyObject, change: [NSObject : AnyObject],
        context: UnsafeMutablePointer<Void>)
    {
        if context == &_positionContext {
            position = _producer.position
        } else {
            super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
        }
    }
}