public IObservable <Unit> Initialize(string name)
        {
            // set cue info
            cueSheet.name    = name;
            cueSheet.acbFile = name + ".acb";
            cueSheet.awbFile = name + ".awb";

            if (!CriSoundUtility.AddCueSheet(cueSheet))
            {
                throw new ArgumentException();
            }

            CriAtomExAcb acb = CriAtom.GetAcb(name);

            CriAtomEx.CueInfo cueInfo;
            if (!acb.GetCueInfo(name, out cueInfo))
            {
                throw new ArgumentException();
            }
            Length = cueInfo.length;

            return(Observable
                   .ReturnUnit()
                   .Do(_ => CriAtomExLatencyEstimator.InitializeModule())
                   .SelectMany(_ => Observable
                               .EveryUpdate()
                               .Select(__ => CriAtomExLatencyEstimator.GetCurrentInfo())
                               .Where(x => x.status == CriAtomExLatencyEstimator.Status.Processing))
                   .Do(x => EstimatedLatency = x.estimated_latency)
                   .Do(_ => CriAtomExLatencyEstimator.FinalizeModule())
                   .AsUnitObservable());
        }
        public void AddCueSheet(CriAtomCueSheet cueSheet)
        {
            if (!CriSoundUtility.AddCueSheet(cueSheet))
            {
                return;
            }

            var acb = CriAtom.GetAcb(cueSheet.name);

            if (acb == null)
            {
                Debug.unityLogger.LogError(GetType().Name, "NotFound cue sheet");
                return;
            }

            foreach (var cue in acb.GetCueInfoList())
            {
                cueSheetDictionary.Add(cue.name, cueSheet.name);
            }
        }
 public void Dispose()
 {
     CriSoundUtility.RemoveCueSheet(cueSheet);
     UnityEngine.Object.Destroy(bgmSource);
     UnityEngine.Object.Destroy(seSource);
 }