コード例 #1
0
        /// <summary>
        /// Maps to a MIDI message if it can, or returns null.
        /// </summary>
        /// <param name="osc">The OSC message to map</param>
        /// <param name="mapping">The mapping used to generate this packet.</param>
        public MidiMessage Map(OscDataMessage osc, out OscToMidiMap mapping)
        {
            // find a mapping that can convert this osc
            mapping = FindMapping(osc.Address, osc.Source);
            if (mapping == null)
            {
                return(null);
            }

            // build midi
            var ret = new MidiMessage();

            ret.Type  = mapping.MidiType;
            ret.Pitch = mapping.GetMidiNote(osc.Address);
            ret.Value = mapping.GetMidiValue(osc.Value);
            return(ret);
        }
コード例 #2
0
        /// <summary>
        /// Overwrites the current session settings from a parsed
        /// JSON object.
        /// </summary>
        private static void Deserialize(UserSession session, SessionFileFormat file)
        {
            // devices must loaded first for implant loaded to work
            session.Devices.ClearAll();
            foreach (var item in file.devices)
            {
                try
                {
                    session.Devices.MapByName(item.deviceName, item.mappedAs);
                    var mapping = session.Devices.GetMappedDeviceByName(item.deviceName);
                    mapping.Enabled = item.enabled;
                }
                catch (Exception ex)
                {
                    LPConsole.WriteLine("SessionFile", ex.Message);
                }
            }
            session.Devices.AutoMap();

            // load the implants
            session.Implants.ClearAll();
            foreach (var item in file.implants)
            {
                RangeMap range;
                if (item.activeArea == null)
                {
                    range = new RangeMap(MIDI.MappedMidiDevice.CreateNullDevice());
                }
                else
                {
                    range = item.activeArea.ToRangeMap();
                }
                if (item.status != "not loaded")
                {
                    var implant = session.Implants.Load(item.vpath, range, item.oscFormat);

                    // important to load session values first so the init doesn't screw it up
                    if (item.doubleValues != null)
                    {
                        implant.ImplantInstance.session.DoubleValues.Clear();
                        foreach (var key in item.doubleValues.Keys)
                        {
                            implant.ImplantInstance.session.DoubleValues.Add(key, item.doubleValues[key]);
                        }
                    }
                    if (item.stringValues != null)
                    {
                        implant.ImplantInstance.session.StringValues.Clear();
                        foreach (var key in item.stringValues.Keys)
                        {
                            implant.ImplantInstance.session.StringValues.Add(key, item.stringValues[key]);
                        }
                    }


                    implant.AssignedMode = item.assignedMode;
                    if (item.status == "running")
                    {
                        implant.ServerInit();
                    }
                }
            }
            session.MidiMap.Mappings.Clear();
            foreach (var item in file.midiMap)
            {
                var m = new OscToMidiMap();
                m.ID              = item.id;
                m.OscSource       = item.oscSource;
                m.OscAddress      = item.oscAddress;
                m.OscValueFrom    = item.oscValueFrom;
                m.OscValueTo      = item.oscValueTo;
                m.MidiDestination = item.midiDestination;
                m.MidiType        = item.midiType.GetMidiMessageType(); //OscToMidiMap.FromString(item.midiType);
                m.MidiNote        = item.midiNote;
                m.MidiValueFrom   = item.midiValueFrom;
                m.MidiValueTo     = item.midiValueTo;
                session.MidiMap.Mappings.Add(m);
            }
        }
コード例 #3
0
        /// <summary>
        /// Handler for ajax requests to /settings/midimap
        /// </summary>
        /// <param name="ctx"></param>
        public static void Process(LPWebContext ctx)
        {
            try
            {
                string cmd = ctx.Request["cmd"] ?? "load";
                switch (cmd.ToLower())
                {
                case "outputdevices":     // list of MIDI devices we could output to
                {
                    var list = new List <string>();
                    list.Add("All Midi");
                    foreach (var d in UserSession.Current.Devices[typeof(MidiOutputHardwareInterface)])        //[MidiDeviceMapping.MidiOutput])
                    {
                        list.Add(d.Device.Name);
                    }
                    ctx.Response.Write(JsonConvert.SerializeObject(list));
                }
                break;

                case "implants":     // list of implants we could use as a source
                {
                    var list = new List <string>();
                    list.Add("Any Implant");
                    foreach (var i in UserSession.Current.Implants.Running)
                    {
                        list.Add(i.GetSourceName());
                    }
                    ctx.Response.Write(JsonConvert.SerializeObject(list));
                }
                break;

                case "save":
                {
                    var item = UserSession.Current.MidiMap.GetById(ctx.Request["id"]);

                    // must be a new item if not found
                    if (item == null)
                    {
                        item                 = new OscToMidiMap();
                        item.ID              = ctx.Request["id"];
                        item.OscAddress      = ctx.Request["oscAddress"];
                        item.OscValueFrom    = double.Parse(ctx.Request["oscValueFrom"]);
                        item.OscValueTo      = double.Parse(ctx.Request["oscValueTo"]);
                        item.OscSource       = ctx.Request["oscSource"];
                        item.MidiType        = ctx.Request["midiType"].GetMidiMessageType();  //OscToMidiMap.FromString(ctx.Request["midiType"]);
                        item.MidiNote        = ctx.Request["midiNote"];
                        item.MidiValueFrom   = int.Parse(ctx.Request["midiValueFrom"]);
                        item.MidiValueTo     = int.Parse(ctx.Request["midiValueTo"]);
                        item.MidiDestination = ctx.Request["midiDestination"];
                        if (item.OscSource.ToLower() == "any implant")
                        {
                            item.OscSource = null;
                        }
                        if (item.MidiDestination.ToLower() == "all midi")
                        {
                            item.MidiDestination = null;
                        }
                        UserSession.Current.MidiMap.Mappings.Add(item);
                    }
                    else
                    {
                        item.OscAddress      = ctx.Request["oscAddress"];
                        item.OscValueFrom    = double.Parse(ctx.Request["oscValueFrom"]);
                        item.OscValueTo      = double.Parse(ctx.Request["oscValueTo"]);
                        item.OscSource       = ctx.Request["oscSource"];
                        item.MidiType        = ctx.Request["midiType"].GetMidiMessageType();
                        item.MidiNote        = ctx.Request["midiNote"];
                        item.MidiValueFrom   = int.Parse(ctx.Request["midiValueFrom"]);
                        item.MidiValueTo     = int.Parse(ctx.Request["midiValueTo"]);
                        item.MidiDestination = ctx.Request["midiDestination"];
                        if (item.OscSource.ToLower() == "any implant")
                        {
                            item.OscSource = null;
                        }
                        if (item.MidiDestination.ToLower() == "all midi")
                        {
                            item.MidiDestination = null;
                        }
                    }
                    ctx.Response.Write("Saving ID #" + ctx.Request["id"]);
                    UserSession.Current.Save();
                }
                break;

                case "remove":
                {
                    UserSession.Current.MidiMap.DeleteById(ctx.Request["id"]);
                    UserSession.Current.Save();
                    ctx.Response.Write("Deleting ID #" + ctx.Request["id"]);
                }
                break;

                default:
                {
                    // just return the list for all current device mappings
                    var list = new List <MappingItemJson>();
                    foreach (var mapping in UserSession.Current.MidiMap.Mappings)
                    {
                        var item = new MappingItemJson();
                        item.id              = mapping.ID;
                        item.oscSource       = mapping.OscSource ?? "Any Implant";
                        item.oscAddress      = mapping.OscAddress;
                        item.oscValueFrom    = mapping.OscValueFrom;
                        item.oscValueTo      = mapping.OscValueTo;
                        item.midiDestination = mapping.MidiDestination ?? "All Midi";
                        item.midiType        = mapping.MidiType.GetString();
                        item.midiNote        = mapping.MidiNote;
                        item.midiValueFrom   = mapping.MidiValueFrom;
                        item.midiValueTo     = mapping.MidiValueTo;
                        list.Add(item);
                    }
                    ctx.Response.Write(JsonConvert.SerializeObject(list));
                }
                break;
                }
            }
            catch (Exception ex)
            {
                ctx.Response.Send500(ex.ToString());
            }
        }