         if !_readers.isEmpty {
             _readers.removeAtIndex(0)
             if !_readers.isEmpty {
-                _prepareNextAssetReader()
+                _prepareNextAssetReaders()
             }
         }
     }

        }
        _playbackRate = rate

        _prepareNextAssetReader(initial: currentAsset, atTime:_currentPresentationTimestamp)
        return true
    }


    public func _getPosition(index:Int, time:CMTime) -> Float? {
        let target = (index:index, time:time)

        /*
        「offset = window * position」であることを利用して位置を求める

        offset = window * position
        → position = offset/window
        (※ offset = t(target) - t0 なので)
        → position = (t(target) - t0)/window
        (※ t0 = t1 - window なので)
        → position = (t(target) - t1 + window)/window
        ∴ position = (window + target - t1) / window
        */
        if let t1 = _getWindowEnd() {
            let numer = window + _getDurationBetweenAssets(from:target, to:t1)
            let position = numer.f / window.f
            return position
        }
        return nil
    }

    /**
    複数アセットを跨いだ、アセット間の時間を求める。from>toの場合は負値が返る。

    :param: from lhs 起点
    :param: to rhs 終点

    :returns: 指定期間内のduration.
    */
    func _getDurationBetweenAssets(from lhs: (index:Int, time:CMTime), to rhs: (index:Int, time:CMTime)) -> CMTime {
            var sumTime: CMTime = kCMTimeZero

        // lhsとrhsが同じアセットの場合は、単純に時間の差を返す
            if lhs.index == rhs.index {
                return lhs.time - rhs.time
            }
