Example #1
0
 public void Update(MusicScheduler musicScheduler, double currTime)
 {
     if (musicScheduler.currSegment != null && index < musicScheduler.currSegment.layers.Length)
     {
         MusicSegment.Layer layer = musicScheduler.currSegment.layers[index];
         if (layer != null)
         {
             float beatLength = 60.0f / musicScheduler.currSegment.bpm;
             for (int i = 0; i < 2; i++)
             {
                 if (sources[i] == null || !sources[i].isPlaying)
                 {
                     continue;
                 }
                 float fade = 1.0f;
                 if (musicScheduler.currSegment.fadeInTime > 0.0f)
                 {
                     float deltaTime = (float)(currTime - sourceStartTime[i]);
                     fade *= Mathf.Clamp(deltaTime / (musicScheduler.currSegment.fadeInTime * beatLength), 0.0f, 1.0f);
                 }
                 if (musicScheduler.currSegment.fadeOutTime > 0.0f)
                 {
                     float deltaTime = (float)(sourceEndTime[i] - currTime);
                     fade *= Mathf.Clamp(deltaTime / (musicScheduler.currSegment.fadeOutTime * beatLength), 0.0f, 1.0f);
                 }
                 sources[i].volume = layer.volume * fade;
             }
         }
     }
 }
Example #2
0
        public void NextClip(MusicScheduler musicScheduler)
        {
            if (index < musicScheduler.currSegment.layers.Length)
            {
                MusicSegment.Layer layer = musicScheduler.currSegment.layers[index];
                if (layer.clips.Length > 0)
                {
                    currSource = 1 - currSource;
                    var s = sources[currSource];

                    var nextClip = layer.clips[random.Next(0, layer.clips.Length)];
                    while (nextClip == currClip)
                    {
                        nextClip = layer.clips[random.Next(0, layer.clips.Length)];
                    }

                    s.Stop();

                    float  beatLength = 60.0f / musicScheduler.currSegment.bpm;
                    double t0         = musicScheduler.GetNextEventStartTime() + layer.startTime * beatLength;
                    s.outputAudioMixerGroup = layer.mixerGroup;
                    s.clip          = nextClip;
                    s.volume        = (musicScheduler.currSegment.fadeInTime > 0.0f) ? 0.0f : layer.volume;
                    s.panStereo     = layer.pan;
                    s.reverbZoneMix = layer.reverbZoneMix;
                    s.PlayScheduled(t0);
                    sourceStartTime[currSource] = t0;
                    sourceEndTime[currSource]   = t0 + nextClip.length;

                    prevDebugRect = currDebugRect;
                    float x = (float)(t0 - musicScheduler.GetStartTime()), y = index * 5.0f + currSource * 2.0f;
                    currDebugRect = new DebugRect(x, y, x + nextClip.length, y + 2.0f);
                    debugRects.Add(currDebugRect);

                    DrawStuff.AddTextMesh(go, x, y, nextClip.name);

                    musicScheduler.camTarget = Mathf.Max(musicScheduler.camTarget, (float)(musicScheduler.GetNextEventStartTime() - musicScheduler.GetStartTime() + nextClip.length * 0.5));
                }
            }
        }