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; } } } }
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)); } } }