         // 中間のアセットのduration合計を求める
         let intermediates = (lhs.index < rhs.index) ?
             _assets[lhs.index+1 ..< rhs.index] : _assets[rhs.index+1 ..< lhs.index]
-        sumTime = intermediates.reduce(sumTime) { $0 + $1.duration }
+        sumTime = intermediates.reduce(sumTime) { $0 + $1.asset.duration }
 
         if lhs.index < rhs.index {
             // (lhsの残り時間 + rhs)の符号反転
-            sumTime += (_assets[lhs.index].duration - lhs.time) + rhs.time
+            sumTime += (_assets[lhs.index].asset.duration - lhs.time) + rhs.time
             return kCMTimeZero - sumTime
         } else {
             // lhs + rhsの残り時間
-            sumTime += lhs.time + (_assets[rhs.index].duration - rhs.time)
+            sumTime += lhs.time + (_assets[rhs.index].asset.duration - rhs.time)
             return sumTime
         }
     }

import AVFoundation

let kMaximumNumOfReaders = 3 // AVAssetReaderで事前にstartReading()しておくムービーの数

/**
*  アセット配列の中における位置（アセット位置）を表現するデータ構造

                    // 取得したサンプルバッファの指す時間位置が1.0を超えていなければ、
                    // サンプルバッファを返す
                    let pts = CMSampleBufferGetPresentationTimeStamp(sbuf) + target.startTime
                    if let pos = _getPositionOf(_assets.indexOf({$0.asset == target.asset})!, time: pts) {
                        return ( sbuf, pts, target.frameInterval )
                    }
                } else {
