Example #1
0
    protected override void SeekInternal(Timing seekTiming, int sequenceIndex = 0)
    {
        sectionIndex_ = sequenceIndex;
        int seekSample = CurrentSection.GetSampleFromTiming(seekTiming);

        for (int i = 0; i < NumTracks; ++i)
        {
            if (i < CurrentSection.Clips.Length)
            {
                musicSources_[i].clip        = CurrentSection.Clips[i];
                musicSources_[i].timeSamples = seekSample;
            }
            else
            {
                musicSources_[i].clip = null;
            }
        }
    }
Example #2
0
    bool FindSyncPoint(Music.SyncType syncType, int syncFactor, int currentSample, int entryPointSample, out int syncPointSample)
    {
        syncPointSample = currentSample;

        MusicMeterBySample currentMeter  = GetMeterFromSample(currentSample);
        Timing             currentTiming = currentMeter != null?currentMeter.GetTimingFromSample(currentSample) : new Timing();

        Timing syncPointCandidateTiming = new Timing(currentTiming);

        switch (syncType)
        {
        case Music.SyncType.Immediate:
            syncPointSample = currentSample + entryPointSample;
            break;

        case Music.SyncType.ExitPoint:
            syncPointSample = CurrentSection.ExitPointSample;
            if (syncPointSample <= currentSample + entryPointSample)
            {
                return(false);
            }
            break;

        case Music.SyncType.Bar:
            syncPointCandidateTiming.Set(currentTiming.Bar - (currentTiming.Bar - currentMeter.StartBar) % syncFactor + syncFactor, 0, 0);
            syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            while (syncPointSample <= currentSample + entryPointSample)
            {
                syncPointCandidateTiming.Add(syncFactor);
                if (syncPointCandidateTiming > CurrentSection.ExitPointTiming)
                {
                    return(false);
                }
                syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            }
            break;

        case Music.SyncType.Beat:
            syncPointCandidateTiming.Set(currentTiming.Bar, currentTiming.Beat - (currentTiming.Beat % syncFactor) + syncFactor, 0);
            syncPointCandidateTiming.Fix(currentMeter);
            syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            while (syncPointSample <= currentSample + entryPointSample)
            {
                syncPointCandidateTiming.Add(0, syncFactor, 0, currentMeter);
                syncPointCandidateTiming.Fix(currentMeter);
                if (syncPointCandidateTiming > CurrentSection.ExitPointTiming)
                {
                    return(false);
                }
                currentMeter    = GetMeterFromTiming(syncPointCandidateTiming);
                syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            }
            break;

        case Music.SyncType.Unit:
            syncPointCandidateTiming.Set(currentTiming.Bar, currentTiming.Beat, currentTiming.Unit - (currentTiming.Unit % syncFactor) + syncFactor);
            syncPointCandidateTiming.Fix(currentMeter);
            syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            while (syncPointSample <= currentSample + entryPointSample)
            {
                syncPointCandidateTiming.Add(0, 0, syncFactor, currentMeter);
                syncPointCandidateTiming.Fix(currentMeter);
                if (syncPointCandidateTiming > CurrentSection.ExitPointTiming)
                {
                    return(false);
                }
                currentMeter    = GetMeterFromTiming(syncPointCandidateTiming);
                syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
            }
            break;

        case Music.SyncType.Marker:
            if (0 <= syncFactor && syncFactor < CurrentSection.Markers.Length && CurrentSection.Markers[syncFactor].Timings.Length > 0)
            {
                MusicSection.MusicMarker marker = CurrentSection.Markers[syncFactor];
                int markerIndex = 0;
                syncPointCandidateTiming.Set(marker.Timings[markerIndex]);

                syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
                while (syncPointSample <= currentSample + entryPointSample)
                {
                    ++markerIndex;
                    if (marker.Timings.Length <= markerIndex)
                    {
                        return(false);
                    }
                    syncPointCandidateTiming.Set(marker.Timings[markerIndex]);
                    syncPointSample = CurrentSection.GetSampleFromTiming(syncPointCandidateTiming);
                }
            }
            else
            {
                print(String.Format("Failed to SetNextSection. {0} section doesn't have Marker[{1}].", CurrentSection.Name, syncFactor));
                return(false);
            }
            break;
        }
        return(true);
    }