void OnEventUpdate(BMSEvent bmsEvent) { switch (bmsEvent.type) { case BMSEventType.WAV: PlayWAV((int)bmsEvent.data2, bmsEvent.sliceStart, bmsEvent.sliceEnd); break; case BMSEventType.BMP: ChangeBGA(bmsEvent.data1, (int)bmsEvent.data2); break; case BMSEventType.BeatReset: bpmBasePointBeatFlow = 0; bpmBasePoint = timePosition; currentTimeSignature = (float)bmsEvent.Data2F; break; case BMSEventType.BPM: float newBpm = (float)bmsEvent.Data2F; bpmBasePointBeatFlow += (timePosition - bpmBasePoint).ToAccurateMinuteF() * bpm; bpmBasePoint = timePosition; bpm = newBpm; CalculatePreOffset(); if (OnChangeBPM != null) { OnChangeBPM.Invoke(newBpm); } break; case BMSEventType.STOP: TimeSpan offset = new TimeSpan(bmsEvent.data2); stopPosition = bmsEvent.time + offset; bpmBasePoint -= offset; break; default: if (!handledChannels.Contains(bmsEvent.data1)) { bool shouldPlayWav = true; if (bmsEvent.type == BMSEventType.LongNoteEnd || bmsEvent.type == BMSEventType.LongNoteStart) { int lnState; if (!autoPlayLNState.TryGetValue(bmsEvent.data1, out lnState)) { lnState = 0; } shouldPlayWav = lnState != bmsEvent.data2; autoPlayLNState[bmsEvent.data1] = lnState > 0 ? 0 : bmsEvent.data1; } if (shouldPlayWav) { PlayWAV((int)bmsEvent.data2, bmsEvent.sliceStart, bmsEvent.sliceEnd); } } if (OnNoteEvent != null) { OnNoteEvent.Invoke(bmsEvent); } break; } }
public void OnNoteEvent() { var ticks = 300u; var channel = (byte)2; var noteName = NoteName.A; var noteOctave = NoteOctave.Zero; var velocity = (byte)5; var x = new OnNoteEvent(ticks, channel, noteName, noteOctave, velocity); var y = ReDeserialize(x); Assert.That(x.Ticks == y.Ticks); Assert.That(x.Channel == y.Channel); Assert.That(x.NoteName == y.NoteName); Assert.That(x.NoteOctave == y.NoteOctave); Assert.That(x.Velocity == y.Velocity); }
public OnNoteEventLabel(OnNoteEvent onNoteEvent) : base(onNoteEvent) { }
internal NoteEventPair(OnNoteEvent onNoteEvent, OffNoteEvent offNoteEvent) { this.onNoteEvent = onNoteEvent; this.offNoteEvent = offNoteEvent; this.onNoteEvent.NoteEventPair = this.offNoteEvent.NoteEventPair = this; }