 
         // 繰り返し処理を簡略化するためにゲタを履かせる
         var offset = isSignMinus ?
-            (offset * -1.0 + assets[from.index].duration - from.time) :
+            (offset * -1.0 + assets[from.index].asset.duration - from.time) :
             (offset + from.time)
 
-        for (i, asset) in enumerate(targets) {
-
-            if offset <= asset.duration {
+        for (i, holder) in enumerate(targets) {
+
+            if offset <= holder.asset.duration {
                 return isSignMinus ?
-                    AssetPosition(from.index - i, asset.duration - offset) :
+                    AssetPosition(from.index - i, holder.asset.duration - offset) :
                     AssetPosition(from.index + i, offset)
             }
-            offset -= asset.duration
+            offset -= holder.asset.duration
         }
         return nil
     }

    var maxNumOfReaders: Int = kMaximumNumOfReaders

    /**
    アセットを内部キューの末尾に保存する。余裕がある場合はアセットリーダーも
    同時に生成する

    :param: asset フレームの取り出し対象となるアセット
    */
    func appendAsset(asset: AVAsset) {

        self._assets.append(asset)

        // AssetReaderFragmentのビルドに必要な情報を非同期に読み込み始めておく
        // （もしビルドまでに間に合わなかった場合でも、処理がブロックされる
        //   時間を短くできることを狙っている）
        asset.loadValuesAsynchronouslyForKeys(["duration","tracks"]) {
            [unowned self] in
            let lock = ScopedLock(self)

            self._amountDuration += asset.duration
        }
    }

    /**

        
        // リーダーが空の場合、まず先頭のアセットを読み込む
        if _readers.isEmpty && startIndex < _assets.count {
            if let assetreader = AssetReaderFragment(asset:_assets[startIndex].asset,
                rate:_playbackRate, startTime:startTime)
            {
                startTime = kCMTimeZero
                _readers.append(assetreader)
            } else {
                NSLog("1) Failed to instantiate a reader of [\((_assets[startIndex].asset as AVURLAsset).URL.lastPathComponent!)]")
            }
        }

        // 読み込みしていないアセットがあれば読み込む
        outer: for (i, holder) in enumerate(_assets[startIndex..<_assets.count]) {
            let asset = holder.asset
            let actualIndex = i + startIndex

            // 登録済みの最後のアセットを見つけて、それ以降のアセットを
            // 追加対象として読み込む
            if _readers.last?.asset === asset && actualIndex+1 < _assets.count {
                for target in _assets[actualIndex+1..<_assets.count] {

                    // 読み込み済みリーダーの数が上限になれば処理終了
                    if (_readers.count >= maxNumOfReaders) {
                        break outer
                    }

                    if let assetreader = AssetReaderFragment(asset:target.asset,
                        rate:_playbackRate, startTime:startTime)
                    {
                        startTime = kCMTimeZero
                        _readers.append(assetreader)
                    } else {
                        NSLog("2) Failed to instantiate a reader of [\((target.asset as AVURLAsset).URL.lastPathComponent!)]")
                        break outer
                    }
                }
