private void UpdateBPMEvents(BMSEvent bmsEvent) { // No need to handle this unless it is beat coloring mode if (coloringMode != ColoringMode.Beat) { return; } switch (bmsEvent.type) { case BMSEventType.BeatReset: bpmBasePointBeatFlow = 0; bpmBasePoint = bmsEvent.time; timeSign = bmsEvent.Data2F; break; case BMSEventType.BPM: double newBpm = bmsEvent.Data2F; bpmBasePointBeatFlow += (bmsEvent.time - bpmBasePoint).ToAccurateMinute() * bpm; bpmBasePoint = bmsEvent.time; bpm = newBpm; break; case BMSEventType.STOP: bpmBasePoint -= new TimeSpan(bmsEvent.data2); break; } }
protected virtual void PreNoteEvent(BMSEvent bmsEvent) { switch (bmsEvent.type) { case BMSEventType.Note: case BMSEventType.LongNoteStart: case BMSEventType.LongNoteEnd: break; case BMSEventType.BeatReset: case BMSEventType.BPM: case BMSEventType.STOP: UpdateBPMEvents(bmsEvent); return; default: return; } if (bmsManager.NoteLimit > 0 && spawnedNoteHandlers.Count >= bmsManager.NoteLimit && noteHandlers.Count <= 0) { holdedEvents.Enqueue(bmsEvent); } else { SpawnHoldedNotes(); HandleSpawn(bmsEvent); } }
public BmsLongNote(float Timing, int Track, float Duration, BMSEvent NativeEvent) { this.Timing = Timing; this.Track = Track; this.Duration = Duration; this.NativeEvent = NativeEvent; }
static void OnBmsEvent(BMSEvent bmsEvent) { switch (bmsEvent.type) { case BMSEventType.BeatReset: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} Beat reset to {1}", bmsEvent.time, BitConverter.Int64BitsToDouble(bmsEvent.data2)); return; case BMSEventType.BPM: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} BPM changed to {1}", bmsEvent.time, BitConverter.Int64BitsToDouble(bmsEvent.data2)); return; case BMSEventType.STOP: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} STOP event for {1}", bmsEvent.time, new TimeSpan(bmsEvent.data2)); return; case BMSEventType.BMP: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} BGA changed to {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); return; case BMSEventType.WAV: Console.ResetColor(); Console.WriteLine("{0,-17} Play BGM {1}", bmsEvent.time, bmsEvent.data2); break; case BMSEventType.Note: Console.ResetColor(); Console.WriteLine("{0,-17} Note click {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); break; case BMSEventType.LongNoteStart: Console.ResetColor(); Console.WriteLine("{0,-17} Note hold {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); break; case BMSEventType.LongNoteEnd: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} Note released {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); return; } int streamId; if (resources.TryGetValue(bmsEvent.data2, out streamId)) { if (!Bass.ChannelPlay(streamId, true)) { Console.WriteLine("Failed to play sound: {0}", Bass.LastError); } } }
static void OnBmsEvent(BMSEvent bmsEvent) { switch (bmsEvent.type) { case BMSEventType.BeatReset: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} Beat reset to {1}", bmsEvent.time, bmsEvent.Data2F); return; case BMSEventType.BPM: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} BPM changed to {1}", bmsEvent.time, bmsEvent.Data2F); return; case BMSEventType.STOP: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} STOP event for {1}", bmsEvent.time, new TimeSpan(bmsEvent.data2)); return; case BMSEventType.BMP: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} BGA changed to {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); return; case BMSEventType.WAV: Console.ResetColor(); Console.WriteLine("{0,-17} Play BGM {1}", bmsEvent.time, bmsEvent.data2); break; case BMSEventType.Note: Console.ResetColor(); Console.WriteLine("{0,-17} Note click {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); break; case BMSEventType.LongNoteStart: Console.ResetColor(); Console.WriteLine("{0,-17} Note hold {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); break; case BMSEventType.LongNoteEnd: Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("{0,-17} Note released {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2); return; } CachedSound audio; if (resources.TryGetValue(bmsEvent.data2, out audio)) { pendingPlaySound.Enqueue(audio); } }
private void HandleSpawn(BMSEvent bmsEvent) { bool isLongNote = bmsManager.LongNoteType > 0 && _handledChannels.Contains(bmsEvent.data1) && (bmsEvent.type == BMSEventType.LongNoteStart || bmsEvent.type == BMSEventType.LongNoteEnd); if (!_handledChannels.Contains(bmsEvent.data1)) { return; } int index = Array.IndexOf(channels, bmsEvent.data1); if (index < 0) { return; } float delta = (float)index / (channels.Length - 1); bool createNew = true; NoteHandler noteHandler = null; if (isLongNote) { int idx = Array.IndexOf(channels, bmsEvent.data1); noteHandler = longNoteHandlers[idx]; createNew = noteHandler == null; if (createNew) { longNoteHandlers[idx] = noteHandler = GetFreeNoteHandler(); } else { longNoteHandlers[idx] = null; } } else { noteHandler = GetFreeNoteHandler(); } if (createNew) { noteHandler.Register(this, bmsManager, bmsEvent.time, bmsEvent.data1, (int)bmsEvent.data2, delta, isLongNote); } else { noteHandler.RegisterLongNoteEnd(bmsEvent.time, (int)bmsEvent.data2); } if (isLongNote ? createNew : true) { switch (coloringMode) { case ColoringMode.Timing: noteHandler.SetColor(defaultColor); if (hasColors) { if (currentMatchingTime != bmsEvent.time) { matchingTimeNoteHandlers.Clear(); } currentMatchingTime = bmsEvent.time; matchingTimeNoteHandlers.Add(noteHandler); if (matchingTimeNoteHandlers.Count > 1) { if (matchingTimeNoteHandlers.Count == 2) { currentColor++; foreach (var nh in matchingTimeNoteHandlers) { nh.SetMatchColor(); } } noteHandler.SetMatchColor(); } } break; case ColoringMode.Channel: if (hasColors) { int colorId = Array.IndexOf(handledChannels, bmsEvent.data1); noteHandler.SetColor(matchColors[colorId > 0 ? colorId % matchColors.Length : 0]); } break; case ColoringMode.Beat: double currentBeat = ((bmsEvent.time - bpmBasePoint).ToAccurateMinute() * bpm + bpmBasePointBeatFlow) % timeSign; noteHandler.SetColor(HelperFunctions.ColorFromHSL(Mathf.Log(HelperFunctions.FindDivision(currentBeat), 2) / 9, 1, 0.55F)); break; default: noteHandler.SetColor(defaultColor); break; } } #if UNITY_EDITOR || DEBUG noteHandler.gameObject.name = string.Format("NOTE #{0:0000}:{1:0000} @{2}", bmsEvent.data1, bmsEvent.data2, bmsEvent.time); #endif }
public BmsNote(float Timing, int Track, BMSEvent NativeEvent) { this.Timing = Timing; this.Track = Track; this.NativeEvent = NativeEvent; }
public BmsEvent(BmsEventType Type, float Timing, BMSEvent NativeEvent) { this.Type = Type; this.Timing = Timing; this.NativeEvent = NativeEvent; }