Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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;
        }