private void ConvertDrumHandles(MidiEvent @event) { switch (@event.Type) { case EventType.NoteOn: int target = @event.Data1 % 8; if (target == 0) { target = 10; } else { target += 16; } var preset = this.preset.FindDrum(p => p.Number == @event.Data1); if (preset != null) { this.AddHandle(preset.InitHandles, target); this.AddHandle(new Handle(target, HandleType.NoteOn, preset.Note, @event.Data2)); } break; case EventType.ControlChange: switch (@event.Data1) { case 0: this.partMsb[@event.Channel] = @event.Data2; break; case 1: if (@event.Data2 > 0) { this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.On))); this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.Depth, @event.Data2 * 0.125f))); } else { this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.Off))); } break; case 7: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Volume, @event.Data2 / 127f))); break; case 10: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Panpot, @event.Data2 / 64f - 1f))); break; case 11: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Volume, (int)VolumeOperate.Expression, @event.Data2 / 127f))); break; case 32: this.partLsb[@event.Channel] = @event.Data2; break; case 120: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.Silence))); break; case 121: this.ResetHandles(); break; case 123: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.NoteOff))); break; default: break; } break; case EventType.Pitchbend: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.FineTune, ((((@event.Data2 << 7) | @event.Data1) - 8192) / 8192f) * 1.12246f / 8f + 1f))); break; default: break; } }
private void ConvertHandles(MidiEvent @event) { int part = @event.Channel + 1; if (part == 10) { this.ConvertDrumHandles(@event); return; } switch (@event.Type) { case EventType.NoteOff: this.AddHandle(new Handle(part, HandleType.NoteOff, @event.Data1)); break; case EventType.NoteOn: if (@event.Data2 > 0) { this.AddHandle(new Handle(part, HandleType.NoteOn, @event.Data1, @event.Data2 / 127f)); } else { this.AddHandle(new Handle(part, HandleType.NoteOff, @event.Data1)); } break; case EventType.ControlChange: switch (@event.Data1) { case 0: this.partMsb[@event.Channel] = @event.Data2; break; case 1: if (@event.Data2 > 0) { this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.On)); this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.Depth, @event.Data2 * 0.125f)); } else { this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.Off)); } break; case 7: this.AddHandle(new Handle(part, HandleType.Volume, @event.Data2 / 127f)); break; case 10: this.AddHandle(new Handle(part, HandleType.Panpot, @event.Data2 / 64f - 1f)); break; case 11: this.AddHandle(new Handle(part, HandleType.Volume, (int)VolumeOperate.Expression, @event.Data2 / 127f)); break; case 32: this.partLsb[@event.Channel] = @event.Data2; break; case 120: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.Silence))); break; case 121: this.ResetHandles(); break; case 123: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.NoteOff))); break; default: break; } break; case EventType.Pitchbend: this.AddHandle(new Handle(part, HandleType.FineTune, ((((@event.Data2 << 7) | @event.Data1) - 8192) / 8192f) * 1.12246f / 8f + 1f)); break; case EventType.ProgramChange: this.ChangeProgram(@event); break; default: break; } }
private void ConvertDrumHandles(MidiEvent @event) { switch (@event.Type) { case EventType.NoteOn: int target = @event.Data1 % 8; if (target == 0) target = 10; else target += 16; var preset = this.preset.FindDrum(p => p.Number == @event.Data1); if (preset != null) { this.AddHandle(preset.InitHandles, target); this.AddHandle(new Handle(target, HandleType.NoteOn, preset.Note, @event.Data2)); } break; case EventType.ControlChange: switch (@event.Data1) { case 0: this.partMsb[@event.Channel] = @event.Data2; break; case 1: if (@event.Data2 > 0) { this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.On))); this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.Depth, @event.Data2 * 0.125f))); } else this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Vibrate, (int)VibrateOperate.Off))); break; case 7: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Volume, @event.Data2 / 127f))); break; case 10: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Panpot, @event.Data2 / 64f - 1f))); break; case 11: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.Volume, (int)VolumeOperate.Expression, @event.Data2 / 127f))); break; case 32: this.partLsb[@event.Channel] = @event.Data2; break; case 120: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.Silence))); break; case 121: this.ResetHandles(); break; case 123: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.NoteOff))); break; default: break; } break; case EventType.Pitchbend: this.AddHandle(this.drumTargets.Select(i => new Handle(i, HandleType.FineTune, ((((@event.Data2 << 7) | @event.Data1) - 8192) / 8192f) * 1.12246f / 8f + 1f))); break; default: break; } }
private void ConvertHandles(MidiEvent @event) { int part = @event.Channel + 1; if (part == 10) { this.ConvertDrumHandles(@event); return; } switch (@event.Type) { case EventType.NoteOff: this.AddHandle(new Handle(part, HandleType.NoteOff, @event.Data1)); break; case EventType.NoteOn: if (@event.Data2 > 0) this.AddHandle(new Handle(part, HandleType.NoteOn, @event.Data1, @event.Data2 / 127f)); else this.AddHandle(new Handle(part, HandleType.NoteOff, @event.Data1)); break; case EventType.ControlChange: switch (@event.Data1) { case 0: this.partMsb[@event.Channel] = @event.Data2; break; case 1: if (@event.Data2 > 0) { this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.On)); this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.Depth, @event.Data2 * 0.125f)); } else this.AddHandle(new Handle(part, HandleType.Vibrate, (int)VibrateOperate.Off)); break; case 7: this.AddHandle(new Handle(part, HandleType.Volume, @event.Data2 / 127f)); break; case 10: this.AddHandle(new Handle(part, HandleType.Panpot, @event.Data2 / 64f - 1f)); break; case 11: this.AddHandle(new Handle(part, HandleType.Volume, (int)VolumeOperate.Expression, @event.Data2 / 127f)); break; case 32: this.partLsb[@event.Channel] = @event.Data2; break; case 120: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.Silence))); break; case 121: this.ResetHandles(); break; case 123: this.AddHandle(Enumerable.Range(1, HandleConverter.Part).Select(i => new Handle(i, HandleType.NoteOff))); break; default: break; } break; case EventType.Pitchbend: this.AddHandle(new Handle(part, HandleType.FineTune, ((((@event.Data2 << 7) | @event.Data1) - 8192) / 8192f) * 1.12246f / 8f + 1f)); break; case EventType.ProgramChange: this.ChangeProgram(@event); break; default: break; } }
private void ChangeProgram(MidiEvent @event) { int channel = @event.Channel; int part = channel + 1; if (part == 10) return; if (this.nowPresets[channel] != null) this.AddHandle(this.nowPresets[channel].FinalHandles, part); ProgramPreset preset = this.preset.FindProgram(p => p.Number == @event.Data1 && p.MSB == this.partMsb[channel] && p.LSB == this.partLsb[channel]) ?? this.preset.FindProgram(p => p.Number == @event.Data1); if (preset != null) this.AddHandle(preset.InitHandles, part); else this.AddHandle(new Handle(part, HandleType.Waveform, (int)WaveformType.FM)); this.nowPresets[channel] = preset; }