From eaf06c7968afb9a51459cf7399e56f1797765e00 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:44:42 +0100 Subject: [PATCH 1/9] Add MIDI input device component and MIDI settings in Obsidian category --- .../Components/Input/MIDI_InputDevice.cs | 179 ++++++++++++++++++ ProjectObsidian/ProjectObsidian.csproj | 1 + ProjectObsidian/Settings/MIDI_Settings.cs | 165 ++++++++++++++++ .../Settings/SettingCategoryDefinitions.cs | 10 + lib/Melanchall_DryWetMidi_Native32.dll | Bin 0 -> 57954 bytes lib/Melanchall_DryWetMidi_Native64.dll | Bin 0 -> 66574 bytes lib/Melanchall_DryWetMidi_Native64.dylib | Bin 0 -> 106551 bytes 7 files changed, 355 insertions(+) create mode 100644 ProjectObsidian/Components/Input/MIDI_InputDevice.cs create mode 100644 ProjectObsidian/Settings/MIDI_Settings.cs create mode 100644 ProjectObsidian/Settings/SettingCategoryDefinitions.cs create mode 100644 lib/Melanchall_DryWetMidi_Native32.dll create mode 100644 lib/Melanchall_DryWetMidi_Native64.dll create mode 100644 lib/Melanchall_DryWetMidi_Native64.dylib diff --git a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs new file mode 100644 index 0000000..7c43013 --- /dev/null +++ b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs @@ -0,0 +1,179 @@ +using Elements.Core; +using FrooxEngine; +using System; +using System.Linq; +using Melanchall.DryWetMidi; +using Melanchall.DryWetMidi.Core; +using Melanchall.DryWetMidi.Multimedia; +using System.Threading.Tasks; +using System.Collections.Generic; + +namespace Obsidian; + +[Category(new string[] { "Obsidian/Devices" })] +public class MIDI_InputDevice : Component +{ + [NoContinuousParsing] + public readonly Sync DeviceName; + + public readonly Sync IsConnected; + + public readonly UserRef HandlingUser; + + public readonly Sync _lastEvent; + + private bool _lastIsConnected; + + private Melanchall.DryWetMidi.Multimedia.InputDevice _inputDevice; + + private MIDI_Settings _settings; + + protected override void OnStart() + { + base.OnStart(); + _settings = Settings.GetActiveSetting(); + Settings.RegisterValueChanges(OnInputDeviceSettingsChanged); + Update(); + } + + private void OnInputDeviceSettingsChanged(MIDI_Settings setting) + { + UniLog.Log("MIDI Settings Changed!"); + MarkChangeDirty(); + } + + protected override void OnChanges() + { + base.OnChanges(); + if (_lastEvent.WasChanged) + { + _lastEvent.WasChanged = false; + return; + } + if (IsConnected.WasChanged) + { + IsConnected.Value = _lastIsConnected; + IsConnected.WasChanged = false; + return; + } + Update(); + } + + private void ReleaseDevice() + { + if (_inputDevice.IsListeningForEvents) + { + _inputDevice.StopEventsListening(); + } + _inputDevice.Dispose(); + _inputDevice = null; + } + + protected override void OnPrepareDestroy() + { + base.OnPrepareDestroy(); + if (_inputDevice != null) + { + ReleaseDevice(); + } + } + + private bool DeviceExists() + { + try + { + var name = _inputDevice.Name; + return true; + } + catch + { + return false; + } + } + + private void SetIsConnected(bool val) + { + IsConnected.Value = val; + _lastIsConnected = val; + } + + private void Update() + { + if (HandlingUser.Target == null) + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + SetIsConnected(false); + return; + } + + if (LocalUser != HandlingUser.Target) + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + return; + } + + if (!Enabled) + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + SetIsConnected(false); + return; + } + + if (!string.IsNullOrWhiteSpace(DeviceName)) + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + + if (_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == false)) + { + SetIsConnected(false); + return; + } + + _inputDevice = Melanchall.DryWetMidi.Multimedia.InputDevice.GetByName(DeviceName.Value); + _inputDevice.EventReceived += OnEventReceived; + _inputDevice.StartEventsListening(); + _inputDevice.ErrorOccurred += (object sender, ErrorOccurredEventArgs args) => + { + UniLog.Error(args.Exception.ToString()); + //_inputDevice.Dispose(); + //_inputDevice = null; + RunSynchronously(() => + { + _lastEvent.Value = args.Exception.Message; + }); + }; + SetIsConnected(true); + } + else + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + SetIsConnected(false); + } + } + + private void OnEventReceived(object sender, MidiEventReceivedEventArgs e) + { + var midiDevice = (Melanchall.DryWetMidi.Multimedia.MidiDevice)sender; + string str = $"Event received from '{midiDevice.Name}': {e.Event}"; + UniLog.Log(str); + RunSynchronously(() => + { + _lastEvent.Value = $"{e.Event}"; + }); + } +} \ No newline at end of file diff --git a/ProjectObsidian/ProjectObsidian.csproj b/ProjectObsidian/ProjectObsidian.csproj index f7b1f11..030d2b3 100644 --- a/ProjectObsidian/ProjectObsidian.csproj +++ b/ProjectObsidian/ProjectObsidian.csproj @@ -70,6 +70,7 @@ + diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs new file mode 100644 index 0000000..32faef3 --- /dev/null +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FrooxEngine; +using Melanchall.DryWetMidi.Multimedia; +using Elements.Core; +using Elements.Assets; + +namespace Obsidian; + +[SettingCategory("Obsidian")] +public class MIDI_Settings : SettingComponent +{ + public override bool UserspaceOnly => true; + + public class MIDI_Device : SyncObject + { + [SettingIndicatorProperty(null, null, null, null, false, 0L)] + public readonly Sync DeviceName; + + [SettingProperty(null, null, null, false, 0L, null, null)] + public readonly Sync AllowConnections; + + public MidiDevice Device { get; internal set; } + + protected override void OnAwake() + { + base.OnAwake(); + } + } + + [NonPersistent] + [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] + public readonly SyncList InputDevices; + + [NonPersistent] + [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] + public readonly SyncList OutputDevices; + + private LocaleData _localeData; + + private DataFeedItem DeviceToItem(ISyncMember item) + { + MIDI_Device device = (MIDI_Device)item; + DataFeedGroup dataFeedGroup = new DataFeedGroup(); + List list = new List(); + string subcategory = device.Device is OutputDevice ? "OutputDevices" : "InputDevices"; + string getter = device.Device is OutputDevice ? "GetOutputDeviceForSubsetting" : "GetInputDeviceForSubsetting"; + foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), subcategory, getter, device.Device.Name)) + { + list.Add(item2); + } + dataFeedGroup.InitBase(device.Device.Name, null, null, device.Device.Name, null, null, null, list); + return dataFeedGroup; + } + + [SyncMethod(typeof(SubsettingGetter), new string[] { })] + public SyncObject GetInputDeviceForSubsetting(string key) + { + return InputDevices.FirstOrDefault((d) => d.Device.Name == key); + } + + [SyncMethod(typeof(SubsettingGetter), new string[] { })] + public SyncObject GetOutputDeviceForSubsetting(string key) + { + return OutputDevices.FirstOrDefault((d) => d.Device.Name == key); + } + + protected override void OnStart() + { + base.OnStart(); + _localeData = new LocaleData(); + _localeData.LocaleCode = "en"; + _localeData.Authors = new List() { "Nytra" }; + _localeData.Messages = new Dictionary(); + _localeData.Messages.Add("Settings.Category.Obsidian", "Obsidian"); + _localeData.Messages.Add("Settings.MIDI_Settings", "MIDI"); + _localeData.Messages.Add("Settings.MIDI_Settings.RefreshDeviceLists", "Refresh Device Lists"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices", "Input Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices", "Output Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceName", "Input Device Name"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.DeviceName", "Output Device Name"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Breadcrumb", "Output Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Breadcrumb", "Input Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.AllowConnections", "Allow Connections"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.AllowConnections", "Allow Connections"); + + // Sometimes the locale is null in here, so wait a bit I guess + RunInUpdates(7, () => + { + UpdateLocale(); + }); + + Settings.RegisterValueChanges(UpdateLocale); + + RefreshDeviceLists(); + } + + protected override void OnDispose() + { + base.OnDispose(); + Settings.UnregisterValueChanges(UpdateLocale); + } + + private void UpdateLocale(LocaleSettings settings = null) + { + this.GetCoreLocale()?.Asset?.Data.LoadDataAdditively(_localeData); + } + + [SettingProperty(null, null, null, false, 0L, null, null)] + [SyncMethod(typeof(Action), new string[] { })] + public void RefreshDeviceLists() + { + InputDevices.Clear(); + OutputDevices.Clear(); + foreach (var device in Melanchall.DryWetMidi.Multimedia.InputDevice.GetAll()) + { + RegisterInputDevice(device); + } + foreach (var device in OutputDevice.GetAll()) + { + RegisterOutputDevice(device); + } + } + + private void RegisterInputDevice(Melanchall.DryWetMidi.Multimedia.InputDevice inputDevice) + { + if (string.IsNullOrEmpty(inputDevice.Name)) + { + return; + } + MIDI_Device device = InputDevices.FirstOrDefault((d) => d.DeviceName.Value == inputDevice.Name); + if (device == null) + { + device = InputDevices.Add(); + device.Device = inputDevice; + device.DeviceName.Value = inputDevice.Name; + } + else + { + device.Device = inputDevice; + } + } + + private void RegisterOutputDevice(OutputDevice outputDevice) + { + if (string.IsNullOrEmpty(outputDevice.Name)) + { + return; + } + MIDI_Device device = OutputDevices.FirstOrDefault((d) => d.DeviceName.Value == outputDevice.Name); + if (device == null) + { + device = OutputDevices.Add(); + device.Device = outputDevice; + device.DeviceName.Value = outputDevice.Name; + } + else + { + device.Device = outputDevice; + } + } +} \ No newline at end of file diff --git a/ProjectObsidian/Settings/SettingCategoryDefinitions.cs b/ProjectObsidian/Settings/SettingCategoryDefinitions.cs new file mode 100644 index 0000000..75ae378 --- /dev/null +++ b/ProjectObsidian/Settings/SettingCategoryDefinitions.cs @@ -0,0 +1,10 @@ +using Elements.Core; +using FrooxEngine; + +// NEEDS TO BE IN GLOBAL NAMESPACE! + +[DataModelType] +public static class SettingCategoryDefinitions +{ + public static SettingCategoryInfo Obsidian => new SettingCategoryInfo(new System.Uri("https://static.wikia.nocookie.net/minecraft_gamepedia/images/9/99/Obsidian_JE3_BE2.png/revision/latest?cb=20200124042057"), 0L); +} \ No newline at end of file diff --git a/lib/Melanchall_DryWetMidi_Native32.dll b/lib/Melanchall_DryWetMidi_Native32.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb3e355a395bd0538998922ee13ec0063572a172 GIT binary patch literal 57954 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�HQdN$XJF&E9Px)mlYB-HVpZ;`V0gr zLx`p#G~RMkjfc+HTCs?Xr2nb{)|iRV3(m5PRf6eR3ZJ_R3&xatBT$uG1=BXTgh~^S z%XjeZD4IteB`B*xVP!#MrSUp!MF`qUtjx9DM?#>E2A5s}ccd;9RE*~iR>Z<#yi3R^ zK+YA0)1g?G?C)YeffqJu`DK~DOGWJ$@Bb>J{l(1#5+)Bc6A*I;K0}~U9BV*_cQk~s z2918a=MGArE8!k4>tD@)IO^yu;PgTQIVe#0zDZjw>Psvk8(vdS%eCTEUKI`+=9Xuhs3)1iM*8P@49VB4e z78ze&@4|aMgkYs9=%_0%Ge$;wdeuFQ=23wz@13Er9Er6?c3_^^C2z%NUnmk1PNw%^ za4lU`3{|Wy`b-sbqiZ(dCHz_mE|6})a3P{Fg|hf`S&_=lFD_e9CpVaum;)wO@1_#M zS2Qz=TGfdXUu~P2n19!XdR!nHX@_^o9iea=MK7i@ws1MIG%UT&bjR@GoSLLe=t?Y9 z$ekD`5Tsi%wN|P$DNDv91Uk)3(49o5r3$fj4u0{$@UAY|i&25jT{Qc5`n=sb^P3IN zgh#W`pOn?(NpmJh?lzxyODl(xOaBrYFz2+NihRO7(6yjH< zSWt%Ng(3!*)76vAiriS7kLC+brH^Asl3Ot*@jfEPbPQOVgIyR72r4`TWp!byCgg3e z;RAwGGkHR^;!KkY<#skHPCJ27sYj_{h8!s&$e@=+VOt@gp=Yo#s_0FpB0BpjD?p$n z!z*j6Gk{?^1Y@5w>5benN#z)u%VQlKK4mt=fY_>uT%9gpgNaj#o0hi6R^PQSgfeF>&0Yl&tZ2xB4nD z74>5>CMHXoUy2K~O6VTH10@;fn3&>vw-UV*>`cy_#8mE}7Ujvha2VBB$72Lf8z-D9 zBdTEnfT@x%JZ`g@O@!UJw%LS3i!aI;$6}&>h-1{|9>V=Hn!K?dnzQh*rJrYN<0SQF zRgy*Ww5yzU+)i$Hk=>6L;wxSv=*hnWW zF?gCkLbnbfsKOLS^qC2jDGx}Z?;A$QNGzlbkQ2^r@TE8}8~FG*rHciMe#V=yvi7it z62=>KPy?Tx_~~53Fic>*7z|W$N5H$8Pl$|SXkmjI-`2S$65S$q(LCQsCx%tP^^rhz zZFf*}188U5c@oE&rDRQ1u9OM~*@`m_oD6h;Cqrw~3DZ=cT(+FPUEYAXU#MLd0pR)Y z0@YWvc#}YGFe#lti#ZREn#w?(bVfVwq;=xplsJ@fPNpG8@65)rn72iEzZ%yk7*>_J zlHmdYyX(l#V!4aQBDg54&T*2=;F8a9aP5HILQ{IDDvxGGA?f%nG@TQ%woe@E#NGV= E2O>`NdH?_b literal 0 HcmV?d00001 diff --git a/lib/Melanchall_DryWetMidi_Native64.dll b/lib/Melanchall_DryWetMidi_Native64.dll new file mode 100644 index 0000000000000000000000000000000000000000..946b1c77d766100b89be88396d8cf3d6f843d90d GIT binary patch literal 66574 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 literal 0 HcmV?d00001 From be002bec786ddbae36d4f4419ae78d6ad1aff945 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:46:16 +0100 Subject: [PATCH 2/9] Make the settings persistent, midi input component uses the settings, catch an exception, show if the device was found in the settings --- .../Components/Input/MIDI_InputDevice.cs | 20 +++++++- ProjectObsidian/Settings/MIDI_Settings.cs | 49 ++++++++++++++----- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs index 7c43013..94c6795 100644 --- a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs @@ -130,18 +130,33 @@ private void Update() if (!string.IsNullOrWhiteSpace(DeviceName)) { + if (_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == false)) + { + if (_inputDevice != null) + { + ReleaseDevice(); + } + SetIsConnected(false); + return; + } + + if (_inputDevice != null && _inputDevice.IsListeningForEvents && _inputDevice.Name == DeviceName.Value) return; + if (_inputDevice != null) { ReleaseDevice(); } - if (_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == false)) + try + { + _inputDevice = Melanchall.DryWetMidi.Multimedia.InputDevice.GetByName(DeviceName.Value); + } + catch { SetIsConnected(false); return; } - _inputDevice = Melanchall.DryWetMidi.Multimedia.InputDevice.GetByName(DeviceName.Value); _inputDevice.EventReceived += OnEventReceived; _inputDevice.StartEventsListening(); _inputDevice.ErrorOccurred += (object sender, ErrorOccurredEventArgs args) => @@ -154,6 +169,7 @@ private void Update() _lastEvent.Value = args.Exception.Message; }); }; + SetIsConnected(true); } else diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs index 32faef3..3842f1e 100644 --- a/ProjectObsidian/Settings/MIDI_Settings.cs +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -20,6 +20,10 @@ public class MIDI_Device : SyncObject [SettingIndicatorProperty(null, null, null, null, false, 0L)] public readonly Sync DeviceName; + [NonPersistent] + [SettingIndicatorProperty(null, null, null, null, false, 0L)] + public readonly Sync DeviceFound; + [SettingProperty(null, null, null, false, 0L, null, null)] public readonly Sync AllowConnections; @@ -31,28 +35,39 @@ protected override void OnAwake() } } - [NonPersistent] - [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] + //[NonPersistent] + [SettingSubcategoryList("InputDeviceToItem", null, null, null, null, null)] public readonly SyncList InputDevices; - [NonPersistent] - [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] + //[NonPersistent] + [SettingSubcategoryList("OutputDeviceToItem", null, null, null, null, null)] public readonly SyncList OutputDevices; private LocaleData _localeData; - private DataFeedItem DeviceToItem(ISyncMember item) + private DataFeedItem InputDeviceToItem(ISyncMember item) + { + MIDI_Device device = (MIDI_Device)item; + DataFeedGroup dataFeedGroup = new DataFeedGroup(); + List list = new List(); + foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "InputDevices", "GetInputDeviceForSubsetting", device.DeviceName.Value)) + { + list.Add(item2); + } + dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); + return dataFeedGroup; + } + + private DataFeedItem OutputDeviceToItem(ISyncMember item) { MIDI_Device device = (MIDI_Device)item; DataFeedGroup dataFeedGroup = new DataFeedGroup(); List list = new List(); - string subcategory = device.Device is OutputDevice ? "OutputDevices" : "InputDevices"; - string getter = device.Device is OutputDevice ? "GetOutputDeviceForSubsetting" : "GetInputDeviceForSubsetting"; - foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), subcategory, getter, device.Device.Name)) + foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "OutputDevices", "GetOutputDeviceForSubsetting", device.DeviceName.Value)) { list.Add(item2); } - dataFeedGroup.InitBase(device.Device.Name, null, null, device.Device.Name, null, null, null, list); + dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); return dataFeedGroup; } @@ -76,8 +91,8 @@ protected override void OnStart() _localeData.Authors = new List() { "Nytra" }; _localeData.Messages = new Dictionary(); _localeData.Messages.Add("Settings.Category.Obsidian", "Obsidian"); - _localeData.Messages.Add("Settings.MIDI_Settings", "MIDI"); - _localeData.Messages.Add("Settings.MIDI_Settings.RefreshDeviceLists", "Refresh Device Lists"); + _localeData.Messages.Add("Settings.MIDI_Settings", "MIDI Settings"); + _localeData.Messages.Add("Settings.MIDI_Settings.RefreshDeviceLists", "Rescan For Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices", "Input Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices", "Output Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceName", "Input Device Name"); @@ -86,6 +101,8 @@ protected override void OnStart() _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Breadcrumb", "Input Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.AllowConnections", "Allow Connections"); _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.AllowConnections", "Allow Connections"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.DeviceFound", "Device Found"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceFound", "Device Found"); // Sometimes the locale is null in here, so wait a bit I guess RunInUpdates(7, () => @@ -113,8 +130,12 @@ private void UpdateLocale(LocaleSettings settings = null) [SyncMethod(typeof(Action), new string[] { })] public void RefreshDeviceLists() { - InputDevices.Clear(); - OutputDevices.Clear(); + //InputDevices.Clear(); + //OutputDevices.Clear(); + foreach(var device in InputDevices.Concat(OutputDevices)) + { + device.DeviceFound.Value = false; + } foreach (var device in Melanchall.DryWetMidi.Multimedia.InputDevice.GetAll()) { RegisterInputDevice(device); @@ -142,6 +163,7 @@ private void RegisterInputDevice(Melanchall.DryWetMidi.Multimedia.InputDevice in { device.Device = inputDevice; } + device.DeviceFound.Value = true; } private void RegisterOutputDevice(OutputDevice outputDevice) @@ -161,5 +183,6 @@ private void RegisterOutputDevice(OutputDevice outputDevice) { device.Device = outputDevice; } + device.DeviceFound.Value = true; } } \ No newline at end of file From 0fd508f6f16083611a7f75a7f89757d120fd3e13 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:04:59 +0100 Subject: [PATCH 3/9] Add remove button to midi device settings, make the AllowConnections check work better, and fixup some stuff --- .../Components/Input/MIDI_InputDevice.cs | 2 +- ProjectObsidian/Settings/MIDI_Settings.cs | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs index 94c6795..3a5cc85 100644 --- a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs @@ -130,7 +130,7 @@ private void Update() if (!string.IsNullOrWhiteSpace(DeviceName)) { - if (_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == false)) + if (!_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == true)) { if (_inputDevice != null) { diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs index 3842f1e..00fb2d2 100644 --- a/ProjectObsidian/Settings/MIDI_Settings.cs +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -33,6 +33,13 @@ protected override void OnAwake() { base.OnAwake(); } + + [SettingProperty(null, null, null, false, 0L, null, null)] + [SyncMethod(typeof(Action), new string[] { })] + public void Remove() + { + this.FindNearestParent>().Remove(this); + } } //[NonPersistent] @@ -74,13 +81,13 @@ private DataFeedItem OutputDeviceToItem(ISyncMember item) [SyncMethod(typeof(SubsettingGetter), new string[] { })] public SyncObject GetInputDeviceForSubsetting(string key) { - return InputDevices.FirstOrDefault((d) => d.Device.Name == key); + return InputDevices.FirstOrDefault((d) => d.DeviceName.Value == key); } [SyncMethod(typeof(SubsettingGetter), new string[] { })] public SyncObject GetOutputDeviceForSubsetting(string key) { - return OutputDevices.FirstOrDefault((d) => d.Device.Name == key); + return OutputDevices.FirstOrDefault((d) => d.DeviceName.Value == key); } protected override void OnStart() @@ -103,6 +110,8 @@ protected override void OnStart() _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.AllowConnections", "Allow Connections"); _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.DeviceFound", "Device Found"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceFound", "Device Found"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Remove", "Remove"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Remove", "Remove"); // Sometimes the locale is null in here, so wait a bit I guess RunInUpdates(7, () => From e7227fc183c0e9b7340c815834010f6badffdc29 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Thu, 18 Jul 2024 20:13:05 +0100 Subject: [PATCH 4/9] Switch to cross platform MIDI library, binding generator handles global refs, and add input events node --- .../BindingGenerator.cs | 10 +- .../Components/Devices/MIDI_InputDevice.cs | 220 ++++++++++++++++++ .../Components/Input/MIDI_InputDevice.cs | 195 ---------------- ProjectObsidian/ProjectObsidian.csproj | 2 +- .../ProtoFlux/Devices/MIDI_InputEvents.cs | 115 +++++++++ ProjectObsidian/Settings/MIDI_Settings.cs | 116 +++++---- lib/Commons.Music.Midi.dll | Bin 0 -> 944640 bytes lib/Melanchall_DryWetMidi_Native32.dll | Bin 57954 -> 0 bytes lib/Melanchall_DryWetMidi_Native64.dll | Bin 66574 -> 0 bytes lib/Melanchall_DryWetMidi_Native64.dylib | Bin 106551 -> 0 bytes lib/alsa-sharp.dll | Bin 0 -> 144896 bytes 11 files changed, 412 insertions(+), 246 deletions(-) create mode 100644 ProjectObsidian/Components/Devices/MIDI_InputDevice.cs delete mode 100644 ProjectObsidian/Components/Input/MIDI_InputDevice.cs create mode 100644 ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs create mode 100644 lib/Commons.Music.Midi.dll delete mode 100644 lib/Melanchall_DryWetMidi_Native32.dll delete mode 100644 lib/Melanchall_DryWetMidi_Native64.dll delete mode 100644 lib/Melanchall_DryWetMidi_Native64.dylib create mode 100644 lib/alsa-sharp.dll diff --git a/ProjectObsidian.SourceGenerators/BindingGenerator.cs b/ProjectObsidian.SourceGenerators/BindingGenerator.cs index 4c57764..57822ea 100644 --- a/ProjectObsidian.SourceGenerators/BindingGenerator.cs +++ b/ProjectObsidian.SourceGenerators/BindingGenerator.cs @@ -118,14 +118,15 @@ public OrderedCount(string countVariableName, string methodName, string methodRe private readonly OrderedCount _outputCount = new("NodeOutputCount", "GetOutputInternal", "INodeOutput"); private readonly OrderedCount _impulseCount = new("NodeImpulseCount", "GetImpulseInternal", "ISyncRef"); private readonly OrderedCount _operationCount = new("NodeOperationCount", "GetOperationInternal", "INodeOperation"); - + private readonly OrderedCount _globalRefCount = new("NodeGlobalRefCount", "GetGlobalRefInternal", "ISyncRef"); + private readonly OrderedCount _inputListCount = new("NodeInputListCount", "GetInputListInternal", "ISyncList"); private readonly OrderedCount _outputListCount = new("NodeOutputListCount", "GetOutputListInternal", "ISyncList"); private readonly OrderedCount _impulseListCount = new("NodeImpulseListCount", "GetImpulseListInternal", "ISyncList"); private readonly OrderedCount _operationListCount = new("NodeOperationListCount", "GetOperationListInternal", "ISyncList"); private IEnumerable _counts => new[] - { _inputCount, _outputCount, _impulseCount, _operationCount, + { _inputCount, _outputCount, _impulseCount, _operationCount, _globalRefCount, _inputListCount, _outputListCount, _impulseListCount, _operationListCount }; private string CountOverride => string.Concat(_counts.Select(i => i.CountOverride)); @@ -224,7 +225,10 @@ public override void VisitFieldDeclaration(FieldDeclarationSyntax node) UntypedFieldDetection(type, name, "Call", "global::FrooxEngine.SyncRef", _impulseCount); UntypedFieldDetection(type, name, "Continuation", "global::FrooxEngine.SyncRef", _impulseCount); UntypedFieldDetection(type, name, "AsyncResumption", "global::FrooxEngine.SyncRef", _impulseCount); - + + //global refs + TypedFieldDetection(type, name, "GlobalRef", "global::FrooxEngine.SyncRef>", _globalRefCount); + //operations UntypedFieldDetection(type, name, "Operation", "global::FrooxEngine.ProtoFlux.SyncNodeOperation", _operationCount); diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs new file mode 100644 index 0000000..2a2fd8f --- /dev/null +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -0,0 +1,220 @@ +using Elements.Core; +using FrooxEngine; +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Collections.Generic; +using Commons.Music.Midi.RtMidi; +using CoreMidi; +using Commons.Music.Midi; +using FrooxEngine.ProtoFlux; + +namespace Obsidian; + +//[DataModelType] +//public readonly struct InputDeviceEventData +//{ +// //public readonly Component source; + +// //public readonly float3 globalPoint; + +// //public readonly float2 localPoint; + +// //public readonly float2 normalizedPressPoint; + +// public InputDeviceEventData(Component pressSource, in float3 globalPressPoint, in float2 localPressPoint, in float2 normalizedPressPoint) +// { +// source = pressSource; +// globalPoint = globalPressPoint; +// localPoint = localPressPoint; +// this.normalizedPressPoint = normalizedPressPoint; +// } +//} + +[DataModelType] +public delegate void InputDeviceEventHandler(MIDI_InputDevice device); +//public delegate void InputDeviceEventHandler(MIDI_InputDevice device, ButtonEventData eventData); + +[Category(new string[] { "Obsidian/Devices" })] +public class MIDI_InputDevice : Component +{ + [NoContinuousParsing] + public readonly Sync DeviceName; + + public readonly Sync IsConnected; + + public readonly UserRef HandlingUser; + + public readonly Sync _lastEvent; + + private bool _lastIsConnected; + + private IMidiInput _inputDevice; + + private MIDI_Settings _settings; + + public event InputDeviceEventHandler NoteOn; + + public event InputDeviceEventHandler NoteOff; + + protected override void OnStart() + { + base.OnStart(); + _settings = Settings.GetActiveSetting(); + Settings.RegisterValueChanges(OnInputDeviceSettingsChanged); + Update(); + } + + private void OnInputDeviceSettingsChanged(MIDI_Settings setting) + { + UniLog.Log("MIDI Settings Changed!"); + MarkChangeDirty(); + } + + protected override void OnChanges() + { + UniLog.Log("OnChanges"); + base.OnChanges(); + if (_lastEvent.WasChanged) + { + _lastEvent.WasChanged = false; + return; + } + if (IsConnected.WasChanged) + { + IsConnected.Value = _lastIsConnected; + IsConnected.WasChanged = false; + return; + } + Update(); + } + + private async void ReleaseDeviceAsync() + { + UniLog.Log("Releasing device"); + await _inputDevice.CloseAsync(); + UniLog.Log("Setting device to null"); + _inputDevice = null; + } + + protected override void OnPrepareDestroy() + { + base.OnPrepareDestroy(); + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + } + + private void SetIsConnected(bool val) + { + IsConnected.Value = val; + _lastIsConnected = val; + } + + private void Update() + { + if (HandlingUser.Target == null) + { + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + SetIsConnected(false); + return; + } + + if (LocalUser != HandlingUser.Target) + { + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + return; + } + + if (!Enabled) + { + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + SetIsConnected(false); + return; + } + + if (!string.IsNullOrWhiteSpace(DeviceName)) + { + + if (!_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == true)) + { + UniLog.Log("Device connection not allowed: " + DeviceName.Value); + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + SetIsConnected(false); + return; + } + + if (_inputDevice != null + && (_inputDevice.Connection == MidiPortConnectionState.Open || _inputDevice.Connection == MidiPortConnectionState.Pending) + && _inputDevice.Details.Name == DeviceName.Value) + { + UniLog.Log("Already connected: " + DeviceName.Value); + return; + } + + var access = MidiAccessManager.Default; + var targetDevice = access.Inputs.FirstOrDefault(dev => dev.Name == DeviceName.Value); + if (targetDevice != null) + { + UniLog.Log("Found the target device: " + targetDevice.Name); + _inputDevice = access.OpenInputAsync(targetDevice.Id).Result; + _inputDevice.MessageReceived += OnMessageReceived; + SetIsConnected(true); + UniLog.Log("Connected."); + } + else + { + UniLog.Log("Could not find target device: " + DeviceName.Value); + SetIsConnected(false); + } + } + else + { + if (_inputDevice != null) + { + ReleaseDeviceAsync(); + } + SetIsConnected(false); + } + } + + unsafe private void OnMessageReceived(object sender, MidiReceivedEventArgs args) + { + UniLog.Log($"Received {args.Length} bytes"); + UniLog.Log($"Timestamp: {args.Timestamp}"); + UniLog.Log($"Start: {args.Start}"); + var events = MidiEvent.Convert(args.Data, args.Start, args.Length); + foreach (var e in events) + { + switch (e.EventType) + { + case MidiEvent.NoteOn: + NoteOn?.Invoke(this); + break; + case MidiEvent.NoteOff: + NoteOff?.Invoke(this); + break; + default: + break; + } + UniLog.Log(e.ToString()); + RunSynchronously(() => + { + _lastEvent.Value = e.ToString(); + }); + } + } +} \ No newline at end of file diff --git a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs b/ProjectObsidian/Components/Input/MIDI_InputDevice.cs deleted file mode 100644 index 3a5cc85..0000000 --- a/ProjectObsidian/Components/Input/MIDI_InputDevice.cs +++ /dev/null @@ -1,195 +0,0 @@ -using Elements.Core; -using FrooxEngine; -using System; -using System.Linq; -using Melanchall.DryWetMidi; -using Melanchall.DryWetMidi.Core; -using Melanchall.DryWetMidi.Multimedia; -using System.Threading.Tasks; -using System.Collections.Generic; - -namespace Obsidian; - -[Category(new string[] { "Obsidian/Devices" })] -public class MIDI_InputDevice : Component -{ - [NoContinuousParsing] - public readonly Sync DeviceName; - - public readonly Sync IsConnected; - - public readonly UserRef HandlingUser; - - public readonly Sync _lastEvent; - - private bool _lastIsConnected; - - private Melanchall.DryWetMidi.Multimedia.InputDevice _inputDevice; - - private MIDI_Settings _settings; - - protected override void OnStart() - { - base.OnStart(); - _settings = Settings.GetActiveSetting(); - Settings.RegisterValueChanges(OnInputDeviceSettingsChanged); - Update(); - } - - private void OnInputDeviceSettingsChanged(MIDI_Settings setting) - { - UniLog.Log("MIDI Settings Changed!"); - MarkChangeDirty(); - } - - protected override void OnChanges() - { - base.OnChanges(); - if (_lastEvent.WasChanged) - { - _lastEvent.WasChanged = false; - return; - } - if (IsConnected.WasChanged) - { - IsConnected.Value = _lastIsConnected; - IsConnected.WasChanged = false; - return; - } - Update(); - } - - private void ReleaseDevice() - { - if (_inputDevice.IsListeningForEvents) - { - _inputDevice.StopEventsListening(); - } - _inputDevice.Dispose(); - _inputDevice = null; - } - - protected override void OnPrepareDestroy() - { - base.OnPrepareDestroy(); - if (_inputDevice != null) - { - ReleaseDevice(); - } - } - - private bool DeviceExists() - { - try - { - var name = _inputDevice.Name; - return true; - } - catch - { - return false; - } - } - - private void SetIsConnected(bool val) - { - IsConnected.Value = val; - _lastIsConnected = val; - } - - private void Update() - { - if (HandlingUser.Target == null) - { - if (_inputDevice != null) - { - ReleaseDevice(); - } - SetIsConnected(false); - return; - } - - if (LocalUser != HandlingUser.Target) - { - if (_inputDevice != null) - { - ReleaseDevice(); - } - return; - } - - if (!Enabled) - { - if (_inputDevice != null) - { - ReleaseDevice(); - } - SetIsConnected(false); - return; - } - - if (!string.IsNullOrWhiteSpace(DeviceName)) - { - if (!_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == true)) - { - if (_inputDevice != null) - { - ReleaseDevice(); - } - SetIsConnected(false); - return; - } - - if (_inputDevice != null && _inputDevice.IsListeningForEvents && _inputDevice.Name == DeviceName.Value) return; - - if (_inputDevice != null) - { - ReleaseDevice(); - } - - try - { - _inputDevice = Melanchall.DryWetMidi.Multimedia.InputDevice.GetByName(DeviceName.Value); - } - catch - { - SetIsConnected(false); - return; - } - - _inputDevice.EventReceived += OnEventReceived; - _inputDevice.StartEventsListening(); - _inputDevice.ErrorOccurred += (object sender, ErrorOccurredEventArgs args) => - { - UniLog.Error(args.Exception.ToString()); - //_inputDevice.Dispose(); - //_inputDevice = null; - RunSynchronously(() => - { - _lastEvent.Value = args.Exception.Message; - }); - }; - - SetIsConnected(true); - } - else - { - if (_inputDevice != null) - { - ReleaseDevice(); - } - SetIsConnected(false); - } - } - - private void OnEventReceived(object sender, MidiEventReceivedEventArgs e) - { - var midiDevice = (Melanchall.DryWetMidi.Multimedia.MidiDevice)sender; - string str = $"Event received from '{midiDevice.Name}': {e.Event}"; - UniLog.Log(str); - RunSynchronously(() => - { - _lastEvent.Value = $"{e.Event}"; - }); - } -} \ No newline at end of file diff --git a/ProjectObsidian/ProjectObsidian.csproj b/ProjectObsidian/ProjectObsidian.csproj index 030d2b3..6fe136e 100644 --- a/ProjectObsidian/ProjectObsidian.csproj +++ b/ProjectObsidian/ProjectObsidian.csproj @@ -70,7 +70,7 @@ - + diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs new file mode 100644 index 0000000..693ffcd --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs @@ -0,0 +1,115 @@ +using System; +using System.Linq; +using Newtonsoft.Json.Linq; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Elements.Core; +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using Obsidian.Elements; +using Obsidian; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; + +[NodeName("MIDI Input Events")] +[NodeCategory("Obsidian/Devices")] +public class MIDI_InputEvents : VoidNode +{ + public readonly GlobalRef Device; + + public Call NoteOn; + + public Call NoteOff; + + //public readonly ObjectOutput Source; + + //public readonly ValueOutput GlobalPoint; + + private ObjectStore _currentDevice; + + private ObjectStore _noteOn; + + private ObjectStore _noteOff; + + public override bool CanBeEvaluated => false; + + private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context) + { + MIDI_InputDevice device2 = _currentDevice.Read(context); + if (device == device2) + { + return; + } + if (device2 != null) + { + device2.NoteOn -= _noteOn.Read(context); + device2.NoteOff -= _noteOff.Read(context); + } + if (device != null) + { + NodeContextPath path = context.CaptureContextPath(); + context.GetEventDispatcher(out var dispatcher); + //ButtonEventHandler value = delegate (IButton b, ButtonEventData e) + //{ + // dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + // { + // OnPressed(b, in e, c); + // }); + //}; + InputDeviceEventHandler value = delegate (MIDI_InputDevice dev) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnNoteOn(dev, c); + }); + }; + InputDeviceEventHandler value2 = delegate (MIDI_InputDevice dev) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnNoteOff(dev, c); + }); + }; + _currentDevice.Write(device, context); + _noteOn.Write(value, context); + _noteOff.Write(value2, context); + device.NoteOn += value; + device.NoteOff += value2; + } + else + { + _currentDevice.Clear(context); + _noteOn.Clear(context); + _noteOff.Clear(context); + } + } + + private void WriteEventData(in ButtonEventData eventData, FrooxEngineContext context) + { + //Source.Write(eventData.source, context); + //GlobalPoint.Write(eventData.globalPoint, context); + //LocalPoint.Write(eventData.localPoint, context); + //NormalizedPoint.Write(eventData.normalizedPressPoint, context); + } + + private void OnNoteOn(MIDI_InputDevice device, FrooxEngineContext context) + { + //WriteEventData(in eventData, context); + NoteOn.Execute(context); + } + + private void OnNoteOff(MIDI_InputDevice device, FrooxEngineContext context) + { + //WriteEventData(in eventData, context); + NoteOff.Execute(context); + } + + public MIDI_InputEvents() + { + Device = new GlobalRef(this, 0); + //Source = new ObjectOutput(this); + //GlobalPoint = new ValueOutput(this); + //LocalPoint = new ValueOutput(this); + //NormalizedPoint = new ValueOutput(this); + } +} \ No newline at end of file diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs index 00fb2d2..51a85ce 100644 --- a/ProjectObsidian/Settings/MIDI_Settings.cs +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -4,9 +4,10 @@ using System.Text; using System.Threading.Tasks; using FrooxEngine; -using Melanchall.DryWetMidi.Multimedia; +//using Melanchall.DryWetMidi.Multimedia; using Elements.Core; using Elements.Assets; +using Commons.Music.Midi; namespace Obsidian; @@ -27,7 +28,9 @@ public class MIDI_Device : SyncObject [SettingProperty(null, null, null, false, 0L, null, null)] public readonly Sync AllowConnections; - public MidiDevice Device { get; internal set; } + public IMidiPortDetails Details { get; internal set; } + + public bool IsOutput => this.Parent.Name == "OutputDevices"; protected override void OnAwake() { @@ -43,35 +46,49 @@ public void Remove() } //[NonPersistent] - [SettingSubcategoryList("InputDeviceToItem", null, null, null, null, null)] + [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] public readonly SyncList InputDevices; //[NonPersistent] - [SettingSubcategoryList("OutputDeviceToItem", null, null, null, null, null)] + [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] public readonly SyncList OutputDevices; private LocaleData _localeData; - private DataFeedItem InputDeviceToItem(ISyncMember item) - { - MIDI_Device device = (MIDI_Device)item; - DataFeedGroup dataFeedGroup = new DataFeedGroup(); - List list = new List(); - foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "InputDevices", "GetInputDeviceForSubsetting", device.DeviceName.Value)) - { - list.Add(item2); - } - dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); - return dataFeedGroup; - } - - private DataFeedItem OutputDeviceToItem(ISyncMember item) + //private DataFeedItem InputDeviceToItem(ISyncMember item) + //{ + // MIDI_Device device = (MIDI_Device)item; + // DataFeedGroup dataFeedGroup = new DataFeedGroup(); + // List list = new List(); + // foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "InputDevices", "GetInputDeviceForSubsetting", device.DeviceName.Value)) + // { + // //UniLog.Log("ItemKey: " + item2.ItemKey); + // //var idx = item2.ItemKey.IndexOf(".InputDevices"); + // //var changedKey = item2.ItemKey.Substring(0, idx); + // //UniLog.Log("ChangedKey: " + changedKey); + // //item2.InitBase(changedKey, null, null, changedKey); + // //item2.InitBase(item2.ItemKey + "." + device.DeviceName.Value, null, null, item2.ItemKey); + // var parts = item2.ItemKey.Split('.'); + // var newLocaleKey = "Settings." + string.Join(".", parts.Take(2)); + // item2.InitBase(item2.ItemKey, null, null, newLocaleKey.AsLocaleKey()); + // list.Add(item2); + // } + // dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); + // return dataFeedGroup; + //} + + private DataFeedItem DeviceToItem(ISyncMember item) { MIDI_Device device = (MIDI_Device)item; DataFeedGroup dataFeedGroup = new DataFeedGroup(); List list = new List(); - foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "OutputDevices", "GetOutputDeviceForSubsetting", device.DeviceName.Value)) + var subcat = device.IsOutput ? "OutputDevices" : "InputDevices"; + var getter = device.IsOutput ? "GetOutputDeviceForSubsetting" : "GetInputDeviceForSubsetting"; + foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), subcat, getter, device.DeviceName.Value)) { + var parts = item2.ItemKey.Split('.'); + var newLocaleKey = "Settings." + string.Join(".", parts.Take(2)); + item2.InitBase(item2.ItemKey, null, null, newLocaleKey.AsLocaleKey()); list.Add(item2); } dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); @@ -99,19 +116,16 @@ protected override void OnStart() _localeData.Messages = new Dictionary(); _localeData.Messages.Add("Settings.Category.Obsidian", "Obsidian"); _localeData.Messages.Add("Settings.MIDI_Settings", "MIDI Settings"); - _localeData.Messages.Add("Settings.MIDI_Settings.RefreshDeviceLists", "Rescan For Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.RefreshDeviceLists", "Refresh Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices", "Input Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices", "Output Devices"); - _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceName", "Input Device Name"); - _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.DeviceName", "Output Device Name"); + + _localeData.Messages.Add("Settings.MIDI_Settings.DeviceName", "Device Name"); _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Breadcrumb", "Output Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Breadcrumb", "Input Devices"); - _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.AllowConnections", "Allow Connections"); - _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.AllowConnections", "Allow Connections"); - _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.DeviceFound", "Device Found"); - _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.DeviceFound", "Device Found"); - _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Remove", "Remove"); - _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Remove", "Remove"); + _localeData.Messages.Add("Settings.MIDI_Settings.AllowConnections", "Allow Connections"); + _localeData.Messages.Add("Settings.MIDI_Settings.DeviceFound", "Device Found"); + _localeData.Messages.Add("Settings.MIDI_Settings.Remove", "Remove"); // Sometimes the locale is null in here, so wait a bit I guess RunInUpdates(7, () => @@ -145,53 +159,61 @@ public void RefreshDeviceLists() { device.DeviceFound.Value = false; } - foreach (var device in Melanchall.DryWetMidi.Multimedia.InputDevice.GetAll()) + var access = MidiAccessManager.Default; + foreach (var input in access.Inputs) { - RegisterInputDevice(device); + RegisterInputDevice(input); } - foreach (var device in OutputDevice.GetAll()) + foreach (var output in access.Outputs) { - RegisterOutputDevice(device); + RegisterOutputDevice(output); } + //foreach (var device in Melanchall.DryWetMidi.Multimedia.InputDevice.GetAll()) + //{ + // RegisterInputDevice(device); + //} + //foreach (var device in OutputDevice.GetAll()) + //{ + // RegisterOutputDevice(device); + //} } - private void RegisterInputDevice(Melanchall.DryWetMidi.Multimedia.InputDevice inputDevice) + private void RegisterInputDevice(IMidiPortDetails details) { - if (string.IsNullOrEmpty(inputDevice.Name)) + if (string.IsNullOrEmpty(details.Name)) { return; } - MIDI_Device device = InputDevices.FirstOrDefault((d) => d.DeviceName.Value == inputDevice.Name); + MIDI_Device device = InputDevices.FirstOrDefault((d) => d.DeviceName.Value == details.Name); if (device == null) { device = InputDevices.Add(); - device.Device = inputDevice; - device.DeviceName.Value = inputDevice.Name; + //device.Details = details; + device.DeviceName.Value = details.Name; } else { - device.Device = inputDevice; + //device.Device = inputDevice; } + device.Details = details; device.DeviceFound.Value = true; + //device.IsOutput = false; } - private void RegisterOutputDevice(OutputDevice outputDevice) + private void RegisterOutputDevice(IMidiPortDetails details) { - if (string.IsNullOrEmpty(outputDevice.Name)) + if (string.IsNullOrEmpty(details.Name)) { return; } - MIDI_Device device = OutputDevices.FirstOrDefault((d) => d.DeviceName.Value == outputDevice.Name); + MIDI_Device device = OutputDevices.FirstOrDefault((d) => d.DeviceName.Value == details.Name); if (device == null) { device = OutputDevices.Add(); - device.Device = outputDevice; - device.DeviceName.Value = outputDevice.Name; - } - else - { - device.Device = outputDevice; + device.DeviceName.Value = details.Name; } + device.Details = details; device.DeviceFound.Value = true; + //device.IsOutput = true; } } \ No newline at end of file diff --git a/lib/Commons.Music.Midi.dll b/lib/Commons.Music.Midi.dll new file mode 100644 index 0000000000000000000000000000000000000000..b7312df025b5fb7847b31c8526ae2047d8032061 GIT binary patch literal 944640 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

SwcM`~SkHwx-~BP_cnIs5=>S!HA2oIJH9gU< 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

Jlhbf8 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 DxK}7~ literal 0 HcmV?d00001 diff --git a/lib/Melanchall_DryWetMidi_Native32.dll b/lib/Melanchall_DryWetMidi_Native32.dll deleted file mode 100644 index cb3e355a395bd0538998922ee13ec0063572a172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57954 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�HQdN$XJF&E9Px)mlYB-HVpZ;`V0gr zLx`p#G~RMkjfc+HTCs?Xr2nb{)|iRV3(m5PRf6eR3ZJ_R3&xatBT$uG1=BXTgh~^S z%XjeZD4IteB`B*xVP!#MrSUp!MF`qUtjx9DM?#>E2A5s}ccd;9RE*~iR>Z<#yi3R^ zK+YA0)1g?G?C)YeffqJu`DK~DOGWJ$@Bb>J{l(1#5+)Bc6A*I;K0}~U9BV*_cQk~s z2918a=MGArE8!k4>tD@)IO^yu;PgTQIVe#0zDZjw>Psvk8(vdS%eCTEUKI`+=9Xuhs3)1iM*8P@49VB4e z78ze&@4|aMgkYs9=%_0%Ge$;wdeuFQ=23wz@13Er9Er6?c3_^^C2z%NUnmk1PNw%^ za4lU`3{|Wy`b-sbqiZ(dCHz_mE|6})a3P{Fg|hf`S&_=lFD_e9CpVaum;)wO@1_#M zS2Qz=TGfdXUu~P2n19!XdR!nHX@_^o9iea=MK7i@ws1MIG%UT&bjR@GoSLLe=t?Y9 z$ekD`5Tsi%wN|P$DNDv91Uk)3(49o5r3$fj4u0{$@UAY|i&25jT{Qc5`n=sb^P3IN zgh#W`pOn?(NpmJh?lzxyODl(xOaBrYFz2+NihRO7(6yjH< zSWt%Ng(3!*)76vAiriS7kLC+brH^Asl3Ot*@jfEPbPQOVgIyR72r4`TWp!byCgg3e z;RAwGGkHR^;!KkY<#skHPCJ27sYj_{h8!s&$e@=+VOt@gp=Yo#s_0FpB0BpjD?p$n z!z*j6Gk{?^1Y@5w>5benN#z)u%VQlKK4mt=fY_>uT%9gpgNaj#o0hi6R^PQSgfeF>&0Yl&tZ2xB4nD z74>5>CMHXoUy2K~O6VTH10@;fn3&>vw-UV*>`cy_#8mE}7Ujvha2VBB$72Lf8z-D9 zBdTEnfT@x%JZ`g@O@!UJw%LS3i!aI;$6}&>h-1{|9>V=Hn!K?dnzQh*rJrYN<0SQF zRgy*Ww5yzU+)i$Hk=>6L;wxSv=*hnWW zF?gCkLbnbfsKOLS^qC2jDGx}Z?;A$QNGzlbkQ2^r@TE8}8~FG*rHciMe#V=yvi7it z62=>KPy?Tx_~~53Fic>*7z|W$N5H$8Pl$|SXkmjI-`2S$65S$q(LCQsCx%tP^^rhz zZFf*}188U5c@oE&rDRQ1u9OM~*@`m_oD6h;Cqrw~3DZ=cT(+FPUEYAXU#MLd0pR)Y z0@YWvc#}YGFe#lti#ZREn#w?(bVfVwq;=xplsJ@fPNpG8@65)rn72iEzZ%yk7*>_J zlHmdYyX(l#V!4aQBDg54&T*2=;F8a9aP5HILQ{IDDvxGGA?f%nG@TQ%woe@E#NGV= E2O>`NdH?_b diff --git a/lib/Melanchall_DryWetMidi_Native64.dll b/lib/Melanchall_DryWetMidi_Native64.dll deleted file mode 100644 index 946b1c77d766100b89be88396d8cf3d6f843d90d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66574 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 diff --git a/lib/alsa-sharp.dll b/lib/alsa-sharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..76f4108c0fa96e9bff7d60d5fcf6beab6f67fe1c GIT binary patch literal 144896 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 &}8t=4A_`%I$ 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 MK>x$v|92YrU$$s^8UO$Q literal 0 HcmV?d00001 From b984f1d4db0155011053feee0d76684d1473d378 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Thu, 18 Jul 2024 23:01:09 +0100 Subject: [PATCH 5/9] Better events and some settings fixes --- .../Components/Devices/MIDI_InputDevice.cs | 67 ++++++++++------ .../ProtoFlux/Devices/MIDI_InputEvents.cs | 79 ++++++++++++------- ProjectObsidian/Settings/MIDI_Settings.cs | 3 +- 3 files changed, 96 insertions(+), 53 deletions(-) diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs index 2a2fd8f..aa3b13c 100644 --- a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -11,29 +11,42 @@ namespace Obsidian; -//[DataModelType] -//public readonly struct InputDeviceEventData -//{ -// //public readonly Component source; +[DataModelType] +public readonly struct MIDI_NoteOnOffEventData +{ + public readonly int channel; + + public readonly int note; + + public readonly int velocity; + + public MIDI_NoteOnOffEventData(in int _channel, in int _note, in int _velocity) + { + channel = _channel; + note = _note; + velocity = _velocity; + } +} -// //public readonly float3 globalPoint; +[DataModelType] +public readonly struct MIDI_ChannelPressureEventData +{ + public readonly int channel; -// //public readonly float2 localPoint; + public readonly int pressure; -// //public readonly float2 normalizedPressPoint; + public MIDI_ChannelPressureEventData(in int _channel, in int _pressure) + { + channel = _channel; + pressure = _pressure; + } +} -// public InputDeviceEventData(Component pressSource, in float3 globalPressPoint, in float2 localPressPoint, in float2 normalizedPressPoint) -// { -// source = pressSource; -// globalPoint = globalPressPoint; -// localPoint = localPressPoint; -// this.normalizedPressPoint = normalizedPressPoint; -// } -//} +[DataModelType] +public delegate void MIDI_NoteOnOffEventHandler(MIDI_InputDevice device, MIDI_NoteOnOffEventData eventData); [DataModelType] -public delegate void InputDeviceEventHandler(MIDI_InputDevice device); -//public delegate void InputDeviceEventHandler(MIDI_InputDevice device, ButtonEventData eventData); +public delegate void MIDI_ChannelPressureEventHandler(MIDI_InputDevice device, MIDI_ChannelPressureEventData eventData); [Category(new string[] { "Obsidian/Devices" })] public class MIDI_InputDevice : Component @@ -51,16 +64,19 @@ public class MIDI_InputDevice : Component private IMidiInput _inputDevice; - private MIDI_Settings _settings; + private MIDI_Settings _settings => Settings.GetActiveSetting(); + + public event MIDI_NoteOnOffEventHandler NoteOn; - public event InputDeviceEventHandler NoteOn; + public event MIDI_NoteOnOffEventHandler NoteOff; - public event InputDeviceEventHandler NoteOff; + // Aftertouch? + public event MIDI_ChannelPressureEventHandler ChannelPressure; protected override void OnStart() { base.OnStart(); - _settings = Settings.GetActiveSetting(); + //_settings = ; Settings.RegisterValueChanges(OnInputDeviceSettingsChanged); Update(); } @@ -191,7 +207,7 @@ private void Update() } } - unsafe private void OnMessageReceived(object sender, MidiReceivedEventArgs args) + private void OnMessageReceived(object sender, MidiReceivedEventArgs args) { UniLog.Log($"Received {args.Length} bytes"); UniLog.Log($"Timestamp: {args.Timestamp}"); @@ -202,10 +218,13 @@ unsafe private void OnMessageReceived(object sender, MidiReceivedEventArgs args) switch (e.EventType) { case MidiEvent.NoteOn: - NoteOn?.Invoke(this); + NoteOn?.Invoke(this, new MIDI_NoteOnOffEventData(e.Channel, e.Msb, e.Lsb)); break; case MidiEvent.NoteOff: - NoteOff?.Invoke(this); + NoteOff?.Invoke(this, new MIDI_NoteOnOffEventData(e.Channel, e.Msb, e.Lsb)); + break; + case MidiEvent.CAf: + ChannelPressure?.Invoke(this, new MIDI_ChannelPressureEventData(e.Channel, e.Msb)); break; default: break; diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs index 693ffcd..cc8a984 100644 --- a/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs @@ -21,15 +21,25 @@ public class MIDI_InputEvents : VoidNode public Call NoteOff; + public Call ChannelPressure; + //public readonly ObjectOutput Source; - //public readonly ValueOutput GlobalPoint; + public readonly ValueOutput Channel; + + public readonly ValueOutput Note; + + public readonly ValueOutput Velocity; + + public readonly ValueOutput Pressure; private ObjectStore _currentDevice; - private ObjectStore _noteOn; + private ObjectStore _noteOn; - private ObjectStore _noteOff; + private ObjectStore _noteOff; + + private ObjectStore _channelPressure; public override bool CanBeEvaluated => false; @@ -44,72 +54,87 @@ private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context { device2.NoteOn -= _noteOn.Read(context); device2.NoteOff -= _noteOff.Read(context); + device2.ChannelPressure -= _channelPressure.Read(context); } if (device != null) { NodeContextPath path = context.CaptureContextPath(); context.GetEventDispatcher(out var dispatcher); - //ButtonEventHandler value = delegate (IButton b, ButtonEventData e) - //{ - // dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) - // { - // OnPressed(b, in e, c); - // }); - //}; - InputDeviceEventHandler value = delegate (MIDI_InputDevice dev) + MIDI_NoteOnOffEventHandler value = delegate (MIDI_InputDevice dev, MIDI_NoteOnOffEventData e) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnNoteOn(dev, in e, c); + }); + }; + MIDI_NoteOnOffEventHandler value2 = delegate (MIDI_InputDevice dev, MIDI_NoteOnOffEventData e) { dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) { - OnNoteOn(dev, c); + OnNoteOff(dev, in e, c); }); }; - InputDeviceEventHandler value2 = delegate (MIDI_InputDevice dev) + MIDI_ChannelPressureEventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_ChannelPressureEventData e) { dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) { - OnNoteOff(dev, c); + OnChannelPressure(dev, in e, c); }); }; _currentDevice.Write(device, context); _noteOn.Write(value, context); _noteOff.Write(value2, context); + _channelPressure.Write(value3, context); device.NoteOn += value; device.NoteOff += value2; + device.ChannelPressure += value3; } else { _currentDevice.Clear(context); _noteOn.Clear(context); _noteOff.Clear(context); + _channelPressure.Clear(context); } } - private void WriteEventData(in ButtonEventData eventData, FrooxEngineContext context) + private void WriteNoteOnOffEventData(in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) + { + Channel.Write(eventData.channel, context); + Note.Write(eventData.note, context); + Velocity.Write(eventData.velocity, context); + } + + private void WriteChannelPressureEventData(in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) { - //Source.Write(eventData.source, context); - //GlobalPoint.Write(eventData.globalPoint, context); - //LocalPoint.Write(eventData.localPoint, context); - //NormalizedPoint.Write(eventData.normalizedPressPoint, context); + Channel.Write(eventData.channel, context); + Pressure.Write(eventData.pressure, context); } - private void OnNoteOn(MIDI_InputDevice device, FrooxEngineContext context) + private void OnNoteOn(MIDI_InputDevice device, in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) { - //WriteEventData(in eventData, context); + WriteNoteOnOffEventData(in eventData, context); NoteOn.Execute(context); } - private void OnNoteOff(MIDI_InputDevice device, FrooxEngineContext context) + private void OnNoteOff(MIDI_InputDevice device, in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) { - //WriteEventData(in eventData, context); + WriteNoteOnOffEventData(in eventData, context); NoteOff.Execute(context); } + private void OnChannelPressure(MIDI_InputDevice device, in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) + { + WriteChannelPressureEventData(in eventData, context); + ChannelPressure.Execute(context); + } + public MIDI_InputEvents() { Device = new GlobalRef(this, 0); - //Source = new ObjectOutput(this); - //GlobalPoint = new ValueOutput(this); - //LocalPoint = new ValueOutput(this); - //NormalizedPoint = new ValueOutput(this); + Channel = new ValueOutput(this); + Note = new ValueOutput(this); + Velocity = new ValueOutput(this); + Pressure = new ValueOutput(this); } } \ No newline at end of file diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs index 51a85ce..5098286 100644 --- a/ProjectObsidian/Settings/MIDI_Settings.cs +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -131,10 +131,9 @@ protected override void OnStart() RunInUpdates(7, () => { UpdateLocale(); + Settings.RegisterValueChanges(UpdateLocale); }); - Settings.RegisterValueChanges(UpdateLocale); - RefreshDeviceLists(); } From def26d39679de2d7d4c6966e30730f5de27d559c Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:57:06 +0100 Subject: [PATCH 6/9] Finish up input flux nodes, almost done with MIDI input --- .../Components/Devices/MIDI_CC_Value.cs | 108 ++++++++++ .../Components/Devices/MIDI_InputDevice.cs | 162 +++++++++------ .../Devices/MIDI_PitchWheel_Value.cs | 1 + ProjectObsidian/Elements/MIDI.cs | 185 ++++++++++++++++++ .../ProtoFlux/Devices/MIDI_AftertouchEvent.cs | 91 +++++++++ .../ProtoFlux/Devices/MIDI_CC_Event.cs | 102 ++++++++++ .../Devices/MIDI_ChannelPressureEvent.cs | 87 ++++++++ ...MIDI_InputEvents.cs => MIDI_NoteEvents.cs} | 58 ++---- .../ProtoFlux/Devices/MIDI_PitchWheelEvent.cs | 89 +++++++++ ProjectObsidian/Settings/MIDI_Settings.cs | 47 +---- 10 files changed, 782 insertions(+), 148 deletions(-) create mode 100644 ProjectObsidian/Components/Devices/MIDI_CC_Value.cs create mode 100644 ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs create mode 100644 ProjectObsidian/Elements/MIDI.cs create mode 100644 ProjectObsidian/ProtoFlux/Devices/MIDI_AftertouchEvent.cs create mode 100644 ProjectObsidian/ProtoFlux/Devices/MIDI_CC_Event.cs create mode 100644 ProjectObsidian/ProtoFlux/Devices/MIDI_ChannelPressureEvent.cs rename ProjectObsidian/ProtoFlux/Devices/{MIDI_InputEvents.cs => MIDI_NoteEvents.cs} (54%) create mode 100644 ProjectObsidian/ProtoFlux/Devices/MIDI_PitchWheelEvent.cs diff --git a/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs new file mode 100644 index 0000000..f55eab0 --- /dev/null +++ b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs @@ -0,0 +1,108 @@ +using Elements.Core; +using FrooxEngine; +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Collections.Generic; +using Commons.Music.Midi.RtMidi; +using CoreMidi; +using Commons.Music.Midi; +using Obsidian.Elements; + +namespace Obsidian; + +[Category(new string[] { "Obsidian/Devices" })] +public class MIDI_CC_Value : Component +{ + public readonly SyncRef InputDevice; + + public readonly Sync AutoMap; + + public readonly Sync ControllerNumber; + + public readonly Sync OverrideDefinition; + + public readonly Sync Value; + + public readonly Sync NormalizedValue; + + private MIDI_InputDevice _device; + + protected override void OnStart() + { + base.OnStart(); + InputDevice.OnTargetChange += OnTargetChange; + if (InputDevice.Target != null) + { + _device = InputDevice.Target; + InputDevice.Target.Control += OnControl; + } + } + + protected override void OnPrepareDestroy() + { + base.OnPrepareDestroy(); + if (_device != null) + { + _device.Control -= OnControl; + _device = null; + } + } + + private void OnControl(MIDI_InputDevice device, MIDI_CC_EventData eventData) + { + RunSynchronously(() => + { + if (AutoMap.Value) + { + AutoMap.Value = false; + ControllerNumber.Value = eventData.controller; + if (OverrideDefinition.Value.HasValue) + { + if (Enum.IsDefined(typeof(MIDI_CC_Definition), eventData.controller)) + { + OverrideDefinition.Value = (MIDI_CC_Definition)Enum.ToObject(typeof(MIDI_CC_Definition), eventData.controller); + } + else + { + OverrideDefinition.Value = MIDI_CC_Definition.UNDEFINED; + } + } + } + if (OverrideDefinition.Value.HasValue && OverrideDefinition.Value.Value != MIDI_CC_Definition.UNDEFINED) + { + if (eventData.controller == (int)OverrideDefinition.Value.Value) + { + Value.Value = eventData.value; + NormalizedValue.Value = eventData.value / 127f; + } + } + else + { + if (eventData.controller == ControllerNumber.Value) + { + Value.Value = eventData.value; + NormalizedValue.Value = eventData.value / 127f; + } + } + }); + } + + private void OnTargetChange(SyncRef syncRef) + { + if (syncRef.Target == null && _device != null) + { + _device.Control -= OnControl; + _device = null; + } + else if (syncRef.Target != null) + { + if (_device != null) + { + _device.Control -= OnControl; + } + _device = syncRef.Target; + _device.Control += OnControl; + } + } +} \ No newline at end of file diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs index aa3b13c..98700ba 100644 --- a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -7,47 +7,10 @@ using Commons.Music.Midi.RtMidi; using CoreMidi; using Commons.Music.Midi; -using FrooxEngine.ProtoFlux; +using Obsidian.Elements; namespace Obsidian; -[DataModelType] -public readonly struct MIDI_NoteOnOffEventData -{ - public readonly int channel; - - public readonly int note; - - public readonly int velocity; - - public MIDI_NoteOnOffEventData(in int _channel, in int _note, in int _velocity) - { - channel = _channel; - note = _note; - velocity = _velocity; - } -} - -[DataModelType] -public readonly struct MIDI_ChannelPressureEventData -{ - public readonly int channel; - - public readonly int pressure; - - public MIDI_ChannelPressureEventData(in int _channel, in int _pressure) - { - channel = _channel; - pressure = _pressure; - } -} - -[DataModelType] -public delegate void MIDI_NoteOnOffEventHandler(MIDI_InputDevice device, MIDI_NoteOnOffEventData eventData); - -[DataModelType] -public delegate void MIDI_ChannelPressureEventHandler(MIDI_InputDevice device, MIDI_ChannelPressureEventData eventData); - [Category(new string[] { "Obsidian/Devices" })] public class MIDI_InputDevice : Component { @@ -66,19 +29,28 @@ public class MIDI_InputDevice : Component private MIDI_Settings _settings => Settings.GetActiveSetting(); - public event MIDI_NoteOnOffEventHandler NoteOn; + public event MIDI_NoteEventHandler NoteOn; - public event MIDI_NoteOnOffEventHandler NoteOff; + public event MIDI_NoteEventHandler NoteOff; - // Aftertouch? + // Pressure for whole keyboard public event MIDI_ChannelPressureEventHandler ChannelPressure; + // Pressure for individual notes (polyphonic) + public event MIDI_AftertouchEventHandler Aftertouch; + + public event MIDI_CC_EventHandler Control; + + public event MIDI_PitchWheelEventHandler PitchWheel; + + private const bool DEBUG = true; + protected override void OnStart() { base.OnStart(); - //_settings = ; + Settings.GetActiveSetting(); Settings.RegisterValueChanges(OnInputDeviceSettingsChanged); - Update(); + RunInUpdates(7, Update); } private void OnInputDeviceSettingsChanged(MIDI_Settings setting) @@ -89,7 +61,7 @@ private void OnInputDeviceSettingsChanged(MIDI_Settings setting) protected override void OnChanges() { - UniLog.Log("OnChanges"); + //UniLog.Log("OnChanges"); base.OnChanges(); if (_lastEvent.WasChanged) { @@ -107,9 +79,9 @@ protected override void OnChanges() private async void ReleaseDeviceAsync() { - UniLog.Log("Releasing device"); + UniLog.Log("Releasing device..."); await _inputDevice.CloseAsync(); - UniLog.Log("Setting device to null"); + UniLog.Log("Device released."); _inputDevice = null; } @@ -161,10 +133,10 @@ private void Update() if (!string.IsNullOrWhiteSpace(DeviceName)) { - + UniLog.Log("Device name: " + DeviceName.Value); if (!_settings.InputDevices.Any(dev => dev.DeviceName.Value == DeviceName.Value && dev.AllowConnections.Value == true)) { - UniLog.Log("Device connection not allowed: " + DeviceName.Value); + UniLog.Log("Device connection not allowed."); if (_inputDevice != null) { ReleaseDeviceAsync(); @@ -177,7 +149,7 @@ private void Update() && (_inputDevice.Connection == MidiPortConnectionState.Open || _inputDevice.Connection == MidiPortConnectionState.Pending) && _inputDevice.Details.Name == DeviceName.Value) { - UniLog.Log("Already connected: " + DeviceName.Value); + UniLog.Log("Already connected."); return; } @@ -185,7 +157,7 @@ private void Update() var targetDevice = access.Inputs.FirstOrDefault(dev => dev.Name == DeviceName.Value); if (targetDevice != null) { - UniLog.Log("Found the target device: " + targetDevice.Name); + UniLog.Log("Found the target device."); _inputDevice = access.OpenInputAsync(targetDevice.Id).Result; _inputDevice.MessageReceived += OnMessageReceived; SetIsConnected(true); @@ -193,7 +165,7 @@ private void Update() } else { - UniLog.Log("Could not find target device: " + DeviceName.Value); + UniLog.Log("Could not find target device."); SetIsConnected(false); } } @@ -207,33 +179,101 @@ private void Update() } } + // What + private ushort CombineBytes(byte First, byte Second) + { + ushort _14bit; + _14bit = Second; + _14bit <<= 7; + _14bit |= First; + return _14bit; + } + private void OnMessageReceived(object sender, MidiReceivedEventArgs args) { - UniLog.Log($"Received {args.Length} bytes"); - UniLog.Log($"Timestamp: {args.Timestamp}"); - UniLog.Log($"Start: {args.Start}"); + if (DEBUG) UniLog.Log($"Received {args.Length} bytes"); + if (DEBUG) UniLog.Log($"Timestamp: {args.Timestamp}"); + if (DEBUG) UniLog.Log($"Start: {args.Start}"); var events = MidiEvent.Convert(args.Data, args.Start, args.Length); foreach (var e in events) { + UniLog.Log(e.ToString()); + RunSynchronously(() => + { + _lastEvent.Value = e.ToString(); + }); switch (e.EventType) { case MidiEvent.NoteOn: - NoteOn?.Invoke(this, new MIDI_NoteOnOffEventData(e.Channel, e.Msb, e.Lsb)); + NoteOn?.Invoke(this, new MIDI_NoteEventData(e.Channel, e.Msb, e.Lsb)); break; case MidiEvent.NoteOff: - NoteOff?.Invoke(this, new MIDI_NoteOnOffEventData(e.Channel, e.Msb, e.Lsb)); + NoteOff?.Invoke(this, new MIDI_NoteEventData(e.Channel, e.Msb, e.Lsb)); break; case MidiEvent.CAf: ChannelPressure?.Invoke(this, new MIDI_ChannelPressureEventData(e.Channel, e.Msb)); break; + case MidiEvent.CC: + Control?.Invoke(this, new MIDI_CC_EventData(e.Channel, e.Msb, e.Lsb)); + break; + case MidiEvent.Pitch: + PitchWheel?.Invoke(this, new MIDI_PitchWheelEventData(e.Channel, CombineBytes(e.Msb, e.Lsb))); + break; + case MidiEvent.PAf: + Aftertouch?.Invoke(this, new MIDI_AftertouchEventData(e.Channel, e.Msb, e.Lsb)); + break; + + // Unhandled events: + + //SysEx events are probably not worth handling + case MidiEvent.SysEx1: + //if (DEBUG) UniLog.Log("SysEx1"); + break; + case MidiEvent.SysEx2: + // Same as EndSysEx + //if (DEBUG) UniLog.Log("SysEx2"); + break; + + case MidiEvent.Program: + if (DEBUG) UniLog.Log("Program"); + break; + case MidiEvent.MtcQuarterFrame: + if (DEBUG) UniLog.Log("MtcQuarterFrame"); + break; + case MidiEvent.SongPositionPointer: + if (DEBUG) UniLog.Log("SongPositionPointer"); + break; + case MidiEvent.SongSelect: + if (DEBUG) UniLog.Log("SongSelect"); + break; + case MidiEvent.TuneRequest: + if (DEBUG) UniLog.Log("TuneRequest"); + break; + case MidiEvent.MidiClock: + if (DEBUG) UniLog.Log("Clock"); + break; + case MidiEvent.MidiTick: + if (DEBUG) UniLog.Log("MidiTick"); + break; + case MidiEvent.MidiStart: + if (DEBUG) UniLog.Log("MidiStart"); + break; + case MidiEvent.MidiStop: + if (DEBUG) UniLog.Log("MidiStart"); + break; + case MidiEvent.MidiContinue: + if (DEBUG) UniLog.Log("MidiContinue"); + break; + case MidiEvent.ActiveSense: + if (DEBUG) UniLog.Log("ActiveSense"); + break; + case MidiEvent.Reset: + // Same as Meta + if (DEBUG) UniLog.Log("Reset"); + break; default: break; } - UniLog.Log(e.ToString()); - RunSynchronously(() => - { - _lastEvent.Value = e.ToString(); - }); } } } \ No newline at end of file diff --git a/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ProjectObsidian/Elements/MIDI.cs b/ProjectObsidian/Elements/MIDI.cs new file mode 100644 index 0000000..f73f45e --- /dev/null +++ b/ProjectObsidian/Elements/MIDI.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Elements.Core; + +namespace Obsidian.Elements; + +[DataModelType] +public enum MIDI_CC_Definition +{ + UNDEFINED = 999, + BankSelect = 0, + Modulation = 1, + Breath = 2, + Foot = 4, + PortamentoTime = 5, + DteMsb = 6, + Volume = 7, + Balance = 8, + Pan = 10, + Expression = 11, + EffectControl1 = 12, + EffectControl2 = 13, + General1 = 16, + General2 = 17, + General3 = 18, + General4 = 19, + BankSelectLsb = 32, + ModulationLsb = 33, + BreathLsb = 34, + FootLsb = 36, + PortamentoTimeLsb = 37, + DteLsb = 38, + VolumeLsb = 39, + BalanceLsb = 40, + PanLsb = 42, + ExpressionLsb = 43, + Effect1Lsb = 44, + Effect2Lsb = 45, + General1Lsb = 48, + General2Lsb = 49, + General3Lsb = 50, + General4Lsb = 51, + Hold = 64, + PortamentoSwitch = 65, + Sostenuto = 66, + SoftPedal = 67, + Legato = 68, + Hold2 = 69, + SoundController1 = 70, + SoundController2 = 71, + SoundController3 = 72, + SoundController4 = 73, + SoundController5 = 74, + SoundController6 = 75, + SoundController7 = 76, + SoundController8 = 77, + SoundController9 = 78, + SoundController10 = 79, + General5 = 80, + General6 = 81, + General7 = 82, + General8 = 83, + PortamentoControl = 84, + Rsd = 91, + Effect1 = 91, + Tremolo = 92, + Effect2 = 92, + Csd = 93, + Effect3 = 93, + Celeste = 94, //detune + Effect4 = 94, + Phaser = 95, + Effect5 = 95, + DteIncrement = 96, + DteDecrement = 97, + NrpnLsb = 98, + NrpnMsb = 99, + RpnLsb = 100, + RpnMsb = 101, + AllSoundOff = 120, + ResetAllControllers = 121, + LocalControl = 122, + AllNotesOff = 123, + OmniModeOff = 124, + OmniModeOn = 125, + PolyModeOnOff = 126, + PolyModeOn = 127 +} + +[DataModelType] +public readonly struct MIDI_PitchWheelEventData +{ + public readonly int channel; + + public readonly int value; + + public MIDI_PitchWheelEventData(in int _channel, in int _value) + { + channel = _channel; + value = _value; + } +} + +[DataModelType] +public readonly struct MIDI_NoteEventData +{ + public readonly int channel; + + public readonly int note; + + public readonly int velocity; + + public MIDI_NoteEventData(in int _channel, in int _note, in int _velocity) + { + channel = _channel; + note = _note; + velocity = _velocity; + } +} + +[DataModelType] +public readonly struct MIDI_ChannelPressureEventData +{ + public readonly int channel; + + public readonly int pressure; + + public MIDI_ChannelPressureEventData(in int _channel, in int _pressure) + { + channel = _channel; + pressure = _pressure; + } +} + +[DataModelType] +public readonly struct MIDI_AftertouchEventData +{ + public readonly int channel; + + public readonly int note; + + public readonly int pressure; + + public MIDI_AftertouchEventData(in int _channel, in int _note, in int _pressure) + { + channel = _channel; + note = _note; + pressure = _pressure; + } +} + +[DataModelType] +public readonly struct MIDI_CC_EventData +{ + public readonly int channel; + + public readonly int controller; + + public readonly int value; + + public MIDI_CC_EventData(in int _channel, in int _controller, in int _value) + { + channel = _channel; + controller = _controller; + value = _value; + } +} + +[DataModelType] +public delegate void MIDI_NoteEventHandler(MIDI_InputDevice device, MIDI_NoteEventData eventData); + +[DataModelType] +public delegate void MIDI_ChannelPressureEventHandler(MIDI_InputDevice device, MIDI_ChannelPressureEventData eventData); + +[DataModelType] +public delegate void MIDI_AftertouchEventHandler(MIDI_InputDevice device, MIDI_AftertouchEventData eventData); + +[DataModelType] +public delegate void MIDI_CC_EventHandler(MIDI_InputDevice device, MIDI_CC_EventData eventData); + +[DataModelType] +public delegate void MIDI_PitchWheelEventHandler(MIDI_InputDevice device, MIDI_PitchWheelEventData eventData); \ No newline at end of file diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_AftertouchEvent.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_AftertouchEvent.cs new file mode 100644 index 0000000..93f7955 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_AftertouchEvent.cs @@ -0,0 +1,91 @@ +using System; +using System.Linq; +using Newtonsoft.Json.Linq; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Elements.Core; +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using Obsidian.Elements; +using Obsidian; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; + +[NodeName("MIDI Polyphonic Aftertouch Event")] +[NodeCategory("Obsidian/Devices")] +public class MIDI_AftertouchEvent : VoidNode +{ + public readonly GlobalRef Device; + + public Call Aftertouch; + + public readonly ValueOutput Channel; + + public readonly ValueOutput Note; + + public readonly ValueOutput Pressure; + + public readonly ValueOutput NormalizedPressure; + + private ObjectStore _currentDevice; + + private ObjectStore _aftertouch; + + public override bool CanBeEvaluated => false; + + private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context) + { + MIDI_InputDevice device2 = _currentDevice.Read(context); + if (device == device2) + { + return; + } + if (device2 != null) + { + device2.Aftertouch -= _aftertouch.Read(context); + } + if (device != null) + { + NodeContextPath path = context.CaptureContextPath(); + context.GetEventDispatcher(out var dispatcher); + MIDI_AftertouchEventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_AftertouchEventData e) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnAftertouch(dev, in e, c); + }); + }; + _currentDevice.Write(device, context); + _aftertouch.Write(value3, context); + device.Aftertouch += value3; + } + else + { + _currentDevice.Clear(context); + _aftertouch.Clear(context); + } + } + + private void WriteAftertouchEventData(in MIDI_AftertouchEventData eventData, FrooxEngineContext context) + { + Channel.Write(eventData.channel, context); + Note.Write(eventData.note, context); + Pressure.Write(eventData.pressure, context); + NormalizedPressure.Write(eventData.pressure / 127f, context); + } + + private void OnAftertouch(MIDI_InputDevice device, in MIDI_AftertouchEventData eventData, FrooxEngineContext context) + { + WriteAftertouchEventData(in eventData, context); + Aftertouch.Execute(context); + } + + public MIDI_AftertouchEvent() + { + Device = new GlobalRef(this, 0); + Channel = new ValueOutput(this); + Note = new ValueOutput(this); + Pressure = new ValueOutput(this); + NormalizedPressure = new ValueOutput(this); + } +} \ No newline at end of file diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_CC_Event.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_CC_Event.cs new file mode 100644 index 0000000..747be92 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_CC_Event.cs @@ -0,0 +1,102 @@ +using System; +using System.Linq; +using Newtonsoft.Json.Linq; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Elements.Core; +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using Obsidian.Elements; +using Obsidian; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; + +[NodeName("MIDI CC Event")] +[NodeCategory("Obsidian/Devices")] +public class MIDI_CC_Event : VoidNode +{ + public readonly GlobalRef Device; + + public Call ControlChange; + + public readonly ValueOutput Channel; + + public readonly ValueOutput Controller; + + public readonly ValueOutput ControllerDefinition; + + public readonly ValueOutput Value; + + public readonly ValueOutput NormalizedValue; + + private ObjectStore _currentDevice; + + private ObjectStore _controlChange; + + public override bool CanBeEvaluated => false; + + private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context) + { + MIDI_InputDevice device2 = _currentDevice.Read(context); + if (device == device2) + { + return; + } + if (device2 != null) + { + device2.Control -= _controlChange.Read(context); + } + if (device != null) + { + NodeContextPath path = context.CaptureContextPath(); + context.GetEventDispatcher(out var dispatcher); + MIDI_CC_EventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_CC_EventData e) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnControl(dev, in e, c); + }); + }; + _currentDevice.Write(device, context); + _controlChange.Write(value3, context); + device.Control += value3; + } + else + { + _currentDevice.Clear(context); + _controlChange.Clear(context); + } + } + + private void WriteCCEventData(in MIDI_CC_EventData eventData, FrooxEngineContext context) + { + Channel.Write(eventData.channel, context); + Controller.Write(eventData.controller, context); + if (Enum.IsDefined(typeof(MIDI_CC_Definition), eventData.controller)) + { + ControllerDefinition.Write((MIDI_CC_Definition)Enum.ToObject(typeof(MIDI_CC_Definition), eventData.controller), context); + } + else + { + ControllerDefinition.Write(MIDI_CC_Definition.UNDEFINED, context); + } + Value.Write(eventData.value, context); + NormalizedValue.Write(eventData.value / 127f, context); + } + + private void OnControl(MIDI_InputDevice device, in MIDI_CC_EventData eventData, FrooxEngineContext context) + { + WriteCCEventData(in eventData, context); + ControlChange.Execute(context); + } + + public MIDI_CC_Event() + { + Device = new GlobalRef(this, 0); + Channel = new ValueOutput(this); + Controller = new ValueOutput(this); + ControllerDefinition = new ValueOutput(this); + Value = new ValueOutput(this); + NormalizedValue = new ValueOutput(this); + } +} \ No newline at end of file diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_ChannelPressureEvent.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_ChannelPressureEvent.cs new file mode 100644 index 0000000..f98bcc3 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_ChannelPressureEvent.cs @@ -0,0 +1,87 @@ +using System; +using System.Linq; +using Newtonsoft.Json.Linq; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Elements.Core; +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using Obsidian.Elements; +using Obsidian; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; + +[NodeName("MIDI Channel Pressure Event")] +[NodeCategory("Obsidian/Devices")] +public class MIDI_ChannelPressureEvent : VoidNode +{ + public readonly GlobalRef Device; + + public Call ChannelPressure; + + public readonly ValueOutput Channel; + + public readonly ValueOutput Pressure; + + public readonly ValueOutput NormalizedPressure; + + private ObjectStore _currentDevice; + + private ObjectStore _channelPressure; + + public override bool CanBeEvaluated => false; + + private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context) + { + MIDI_InputDevice device2 = _currentDevice.Read(context); + if (device == device2) + { + return; + } + if (device2 != null) + { + device2.ChannelPressure -= _channelPressure.Read(context); + } + if (device != null) + { + NodeContextPath path = context.CaptureContextPath(); + context.GetEventDispatcher(out var dispatcher); + MIDI_ChannelPressureEventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_ChannelPressureEventData e) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnChannelPressure(dev, in e, c); + }); + }; + _currentDevice.Write(device, context); + _channelPressure.Write(value3, context); + device.ChannelPressure += value3; + } + else + { + _currentDevice.Clear(context); + _channelPressure.Clear(context); + } + } + + private void WriteChannelPressureEventData(in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) + { + Channel.Write(eventData.channel, context); + Pressure.Write(eventData.pressure, context); + NormalizedPressure.Write(eventData.pressure / 127f, context); + } + + private void OnChannelPressure(MIDI_InputDevice device, in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) + { + WriteChannelPressureEventData(in eventData, context); + ChannelPressure.Execute(context); + } + + public MIDI_ChannelPressureEvent() + { + Device = new GlobalRef(this, 0); + Channel = new ValueOutput(this); + Pressure = new ValueOutput(this); + NormalizedPressure = new ValueOutput(this); + } +} \ No newline at end of file diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_NoteEvents.cs similarity index 54% rename from ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs rename to ProjectObsidian/ProtoFlux/Devices/MIDI_NoteEvents.cs index cc8a984..e105e87 100644 --- a/ProjectObsidian/ProtoFlux/Devices/MIDI_InputEvents.cs +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_NoteEvents.cs @@ -11,9 +11,9 @@ namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; -[NodeName("MIDI Input Events")] +[NodeName("MIDI Note Events")] [NodeCategory("Obsidian/Devices")] -public class MIDI_InputEvents : VoidNode +public class MIDI_NoteEvents : VoidNode { public readonly GlobalRef Device; @@ -21,25 +21,19 @@ public class MIDI_InputEvents : VoidNode public Call NoteOff; - public Call ChannelPressure; - - //public readonly ObjectOutput Source; - public readonly ValueOutput Channel; public readonly ValueOutput Note; - public readonly ValueOutput Velocity; + public readonly ValueOutput Velocity; - public readonly ValueOutput Pressure; + public readonly ValueOutput NormalizedVelocity; private ObjectStore _currentDevice; - private ObjectStore _noteOn; + private ObjectStore _noteOn; - private ObjectStore _noteOff; - - private ObjectStore _channelPressure; + private ObjectStore _noteOff; public override bool CanBeEvaluated => false; @@ -54,87 +48,65 @@ private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context { device2.NoteOn -= _noteOn.Read(context); device2.NoteOff -= _noteOff.Read(context); - device2.ChannelPressure -= _channelPressure.Read(context); } if (device != null) { NodeContextPath path = context.CaptureContextPath(); context.GetEventDispatcher(out var dispatcher); - MIDI_NoteOnOffEventHandler value = delegate (MIDI_InputDevice dev, MIDI_NoteOnOffEventData e) + MIDI_NoteEventHandler value = delegate (MIDI_InputDevice dev, MIDI_NoteEventData e) { dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) { OnNoteOn(dev, in e, c); }); }; - MIDI_NoteOnOffEventHandler value2 = delegate (MIDI_InputDevice dev, MIDI_NoteOnOffEventData e) + MIDI_NoteEventHandler value2 = delegate (MIDI_InputDevice dev, MIDI_NoteEventData e) { dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) { OnNoteOff(dev, in e, c); }); }; - MIDI_ChannelPressureEventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_ChannelPressureEventData e) - { - dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) - { - OnChannelPressure(dev, in e, c); - }); - }; _currentDevice.Write(device, context); _noteOn.Write(value, context); _noteOff.Write(value2, context); - _channelPressure.Write(value3, context); device.NoteOn += value; device.NoteOff += value2; - device.ChannelPressure += value3; } else { _currentDevice.Clear(context); _noteOn.Clear(context); _noteOff.Clear(context); - _channelPressure.Clear(context); } } - private void WriteNoteOnOffEventData(in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) + private void WriteNoteOnOffEventData(in MIDI_NoteEventData eventData, FrooxEngineContext context) { Channel.Write(eventData.channel, context); Note.Write(eventData.note, context); Velocity.Write(eventData.velocity, context); + NormalizedVelocity.Write(eventData.velocity / 127f, context); } - private void WriteChannelPressureEventData(in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) - { - Channel.Write(eventData.channel, context); - Pressure.Write(eventData.pressure, context); - } - - private void OnNoteOn(MIDI_InputDevice device, in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) + private void OnNoteOn(MIDI_InputDevice device, in MIDI_NoteEventData eventData, FrooxEngineContext context) { WriteNoteOnOffEventData(in eventData, context); NoteOn.Execute(context); } - private void OnNoteOff(MIDI_InputDevice device, in MIDI_NoteOnOffEventData eventData, FrooxEngineContext context) + private void OnNoteOff(MIDI_InputDevice device, in MIDI_NoteEventData eventData, FrooxEngineContext context) { WriteNoteOnOffEventData(in eventData, context); NoteOff.Execute(context); } - private void OnChannelPressure(MIDI_InputDevice device, in MIDI_ChannelPressureEventData eventData, FrooxEngineContext context) - { - WriteChannelPressureEventData(in eventData, context); - ChannelPressure.Execute(context); - } - - public MIDI_InputEvents() + public MIDI_NoteEvents() { Device = new GlobalRef(this, 0); Channel = new ValueOutput(this); Note = new ValueOutput(this); - Velocity = new ValueOutput(this); - Pressure = new ValueOutput(this); + Velocity = new ValueOutput(this); + NormalizedVelocity = new ValueOutput(this); } } \ No newline at end of file diff --git a/ProjectObsidian/ProtoFlux/Devices/MIDI_PitchWheelEvent.cs b/ProjectObsidian/ProtoFlux/Devices/MIDI_PitchWheelEvent.cs new file mode 100644 index 0000000..40400ea --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Devices/MIDI_PitchWheelEvent.cs @@ -0,0 +1,89 @@ +using System; +using System.Linq; +using Newtonsoft.Json.Linq; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Elements.Core; +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using Obsidian.Elements; +using Obsidian; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Devices; + +[NodeName("MIDI Pitch Wheel Event")] +[NodeCategory("Obsidian/Devices")] +public class MIDI_PitchWheelEvent : VoidNode +{ + public readonly GlobalRef Device; + + public Call PitchWheel; + + public readonly ValueOutput Channel; + + public readonly ValueOutput Value; + + public readonly ValueOutput NormalizedValue; + + private ObjectStore _currentDevice; + + private ObjectStore _pitchWheel; + + public override bool CanBeEvaluated => false; + + private void OnDeviceChanged(MIDI_InputDevice device, FrooxEngineContext context) + { + MIDI_InputDevice device2 = _currentDevice.Read(context); + if (device == device2) + { + return; + } + if (device2 != null) + { + device2.PitchWheel -= _pitchWheel.Read(context); + } + if (device != null) + { + NodeContextPath path = context.CaptureContextPath(); + context.GetEventDispatcher(out var dispatcher); + MIDI_PitchWheelEventHandler value3 = delegate (MIDI_InputDevice dev, MIDI_PitchWheelEventData e) + { + dispatcher.ScheduleEvent(path, delegate (FrooxEngineContext c) + { + OnPitch(dev, in e, c); + }); + }; + _currentDevice.Write(device, context); + _pitchWheel.Write(value3, context); + device.PitchWheel += value3; + } + else + { + _currentDevice.Clear(context); + _pitchWheel.Clear(context); + } + } + + private void WritePitchEventData(in MIDI_PitchWheelEventData eventData, FrooxEngineContext context) + { + Channel.Write(eventData.channel, context); + Value.Write(eventData.value, context); + + // should be 1 at 16383, -1 at 0 + NormalizedValue.Write(eventData.value == 8192 ? 0f : MathX.Remap(eventData.value, 0f, 16383f, -1f, 1f), context); + } + + private void OnPitch(MIDI_InputDevice device, in MIDI_PitchWheelEventData eventData, FrooxEngineContext context) + { + WritePitchEventData(in eventData, context); + PitchWheel.Execute(context); + } + + public MIDI_PitchWheelEvent() + { + Device = new GlobalRef(this, 0); + Channel = new ValueOutput(this); + Value = new ValueOutput(this); + NormalizedValue = new ValueOutput(this); + } +} \ No newline at end of file diff --git a/ProjectObsidian/Settings/MIDI_Settings.cs b/ProjectObsidian/Settings/MIDI_Settings.cs index 5098286..c8c8b5c 100644 --- a/ProjectObsidian/Settings/MIDI_Settings.cs +++ b/ProjectObsidian/Settings/MIDI_Settings.cs @@ -4,7 +4,6 @@ using System.Text; using System.Threading.Tasks; using FrooxEngine; -//using Melanchall.DryWetMidi.Multimedia; using Elements.Core; using Elements.Assets; using Commons.Music.Midi; @@ -45,38 +44,14 @@ public void Remove() } } - //[NonPersistent] [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] public readonly SyncList InputDevices; - //[NonPersistent] [SettingSubcategoryList("DeviceToItem", null, null, null, null, null)] public readonly SyncList OutputDevices; private LocaleData _localeData; - //private DataFeedItem InputDeviceToItem(ISyncMember item) - //{ - // MIDI_Device device = (MIDI_Device)item; - // DataFeedGroup dataFeedGroup = new DataFeedGroup(); - // List list = new List(); - // foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), "InputDevices", "GetInputDeviceForSubsetting", device.DeviceName.Value)) - // { - // //UniLog.Log("ItemKey: " + item2.ItemKey); - // //var idx = item2.ItemKey.IndexOf(".InputDevices"); - // //var changedKey = item2.ItemKey.Substring(0, idx); - // //UniLog.Log("ChangedKey: " + changedKey); - // //item2.InitBase(changedKey, null, null, changedKey); - // //item2.InitBase(item2.ItemKey + "." + device.DeviceName.Value, null, null, item2.ItemKey); - // var parts = item2.ItemKey.Split('.'); - // var newLocaleKey = "Settings." + string.Join(".", parts.Take(2)); - // item2.InitBase(item2.ItemKey, null, null, newLocaleKey.AsLocaleKey()); - // list.Add(item2); - // } - // dataFeedGroup.InitBase(device.DeviceName.Value, null, null, device.DeviceName.Value, null, null, null, list); - // return dataFeedGroup; - //} - private DataFeedItem DeviceToItem(ISyncMember item) { MIDI_Device device = (MIDI_Device)item; @@ -86,6 +61,7 @@ private DataFeedItem DeviceToItem(ISyncMember item) var getter = device.IsOutput ? "GetOutputDeviceForSubsetting" : "GetInputDeviceForSubsetting"; foreach (DataFeedItem item2 in SettingsDataFeed.EnumerateSettingProperties(typeof(MIDI_Device), null, typeof(MIDI_Settings), subcat, getter, device.DeviceName.Value)) { + // Simplify locale key var parts = item2.ItemKey.Split('.'); var newLocaleKey = "Settings." + string.Join(".", parts.Take(2)); item2.InitBase(item2.ItemKey, null, null, newLocaleKey.AsLocaleKey()); @@ -121,8 +97,8 @@ protected override void OnStart() _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices", "Output Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.DeviceName", "Device Name"); - _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Breadcrumb", "Output Devices"); - _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Breadcrumb", "Input Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.OutputDevices.Breadcrumb", "MIDI Output Devices"); + _localeData.Messages.Add("Settings.MIDI_Settings.InputDevices.Breadcrumb", "MIDI Input Devices"); _localeData.Messages.Add("Settings.MIDI_Settings.AllowConnections", "Allow Connections"); _localeData.Messages.Add("Settings.MIDI_Settings.DeviceFound", "Device Found"); _localeData.Messages.Add("Settings.MIDI_Settings.Remove", "Remove"); @@ -152,8 +128,6 @@ private void UpdateLocale(LocaleSettings settings = null) [SyncMethod(typeof(Action), new string[] { })] public void RefreshDeviceLists() { - //InputDevices.Clear(); - //OutputDevices.Clear(); foreach(var device in InputDevices.Concat(OutputDevices)) { device.DeviceFound.Value = false; @@ -167,14 +141,6 @@ public void RefreshDeviceLists() { RegisterOutputDevice(output); } - //foreach (var device in Melanchall.DryWetMidi.Multimedia.InputDevice.GetAll()) - //{ - // RegisterInputDevice(device); - //} - //foreach (var device in OutputDevice.GetAll()) - //{ - // RegisterOutputDevice(device); - //} } private void RegisterInputDevice(IMidiPortDetails details) @@ -187,16 +153,10 @@ private void RegisterInputDevice(IMidiPortDetails details) if (device == null) { device = InputDevices.Add(); - //device.Details = details; device.DeviceName.Value = details.Name; } - else - { - //device.Device = inputDevice; - } device.Details = details; device.DeviceFound.Value = true; - //device.IsOutput = false; } private void RegisterOutputDevice(IMidiPortDetails details) @@ -213,6 +173,5 @@ private void RegisterOutputDevice(IMidiPortDetails details) } device.Details = details; device.DeviceFound.Value = true; - //device.IsOutput = true; } } \ No newline at end of file From 44627e5fe679955e09c275cad0b3b88e4352f874 Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:10:22 +0100 Subject: [PATCH 7/9] Finish up MIDI input device support for now --- .../Components/Devices/MIDI_CC_Value.cs | 26 +++--- .../Components/Devices/MIDI_InputDevice.cs | 28 +++---- .../Devices/MIDI_PitchWheel_Value.cs | 79 ++++++++++++++++++- 3 files changed, 108 insertions(+), 25 deletions(-) diff --git a/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs index f55eab0..b4c1ba7 100644 --- a/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs +++ b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs @@ -18,6 +18,8 @@ public class MIDI_CC_Value : Component public readonly Sync AutoMap; + public readonly Sync Channel; + public readonly Sync ControllerNumber; public readonly Sync OverrideDefinition; @@ -57,6 +59,7 @@ private void OnControl(MIDI_InputDevice device, MIDI_CC_EventData eventData) { AutoMap.Value = false; ControllerNumber.Value = eventData.controller; + Channel.Value = eventData.channel; if (OverrideDefinition.Value.HasValue) { if (Enum.IsDefined(typeof(MIDI_CC_Definition), eventData.controller)) @@ -69,20 +72,23 @@ private void OnControl(MIDI_InputDevice device, MIDI_CC_EventData eventData) } } } - if (OverrideDefinition.Value.HasValue && OverrideDefinition.Value.Value != MIDI_CC_Definition.UNDEFINED) + if (Channel.Value == eventData.channel) { - if (eventData.controller == (int)OverrideDefinition.Value.Value) + if (OverrideDefinition.Value.HasValue && OverrideDefinition.Value.Value != MIDI_CC_Definition.UNDEFINED) { - Value.Value = eventData.value; - NormalizedValue.Value = eventData.value / 127f; + if (eventData.controller == (int)OverrideDefinition.Value.Value) + { + Value.Value = eventData.value; + NormalizedValue.Value = eventData.value / 127f; + } } - } - else - { - if (eventData.controller == ControllerNumber.Value) + else { - Value.Value = eventData.value; - NormalizedValue.Value = eventData.value / 127f; + if (eventData.controller == ControllerNumber.Value) + { + Value.Value = eventData.value; + NormalizedValue.Value = eventData.value / 127f; + } } } }); diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs index 98700ba..424f5fb 100644 --- a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -227,49 +227,49 @@ private void OnMessageReceived(object sender, MidiReceivedEventArgs args) //SysEx events are probably not worth handling case MidiEvent.SysEx1: - //if (DEBUG) UniLog.Log("SysEx1"); + //if (DEBUG) UniLog.Log("UnhandledEvent: SysEx1"); break; case MidiEvent.SysEx2: // Same as EndSysEx - //if (DEBUG) UniLog.Log("SysEx2"); + //if (DEBUG) UniLog.Log("UnhandledEvent: SysEx2"); break; case MidiEvent.Program: - if (DEBUG) UniLog.Log("Program"); + if (DEBUG) UniLog.Log("UnhandledEvent: Program"); break; case MidiEvent.MtcQuarterFrame: - if (DEBUG) UniLog.Log("MtcQuarterFrame"); + if (DEBUG) UniLog.Log("UnhandledEvent: MtcQuarterFrame"); break; case MidiEvent.SongPositionPointer: - if (DEBUG) UniLog.Log("SongPositionPointer"); + if (DEBUG) UniLog.Log("UnhandledEvent: SongPositionPointer"); break; case MidiEvent.SongSelect: - if (DEBUG) UniLog.Log("SongSelect"); + if (DEBUG) UniLog.Log("UnhandledEvent: SongSelect"); break; case MidiEvent.TuneRequest: - if (DEBUG) UniLog.Log("TuneRequest"); + if (DEBUG) UniLog.Log("UnhandledEvent: TuneRequest"); break; case MidiEvent.MidiClock: - if (DEBUG) UniLog.Log("Clock"); + if (DEBUG) UniLog.Log("UnhandledEvent: Clock"); break; case MidiEvent.MidiTick: - if (DEBUG) UniLog.Log("MidiTick"); + if (DEBUG) UniLog.Log("UnhandledEvent: MidiTick"); break; case MidiEvent.MidiStart: - if (DEBUG) UniLog.Log("MidiStart"); + if (DEBUG) UniLog.Log("UnhandledEvent: MidiStart"); break; case MidiEvent.MidiStop: - if (DEBUG) UniLog.Log("MidiStart"); + if (DEBUG) UniLog.Log("UnhandledEvent: MidiStart"); break; case MidiEvent.MidiContinue: - if (DEBUG) UniLog.Log("MidiContinue"); + if (DEBUG) UniLog.Log("UnhandledEvent: MidiContinue"); break; case MidiEvent.ActiveSense: - if (DEBUG) UniLog.Log("ActiveSense"); + if (DEBUG) UniLog.Log("UnhandledEvent: ActiveSense"); break; case MidiEvent.Reset: // Same as Meta - if (DEBUG) UniLog.Log("Reset"); + if (DEBUG) UniLog.Log("UnhandledEvent: Reset"); break; default: break; diff --git a/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs index 5f28270..dc914bd 100644 --- a/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs +++ b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs @@ -1 +1,78 @@ - \ No newline at end of file +using Elements.Core; +using FrooxEngine; +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Collections.Generic; +using Commons.Music.Midi.RtMidi; +using CoreMidi; +using Commons.Music.Midi; +using Obsidian.Elements; +using System.Runtime.Remoting.Contexts; + +namespace Obsidian; + +[Category(new string[] { "Obsidian/Devices" })] +public class MIDI_PitchWheel_Value : Component +{ + public readonly SyncRef InputDevice; + + public readonly Sync Channel; + + public readonly Sync Value; + + public readonly Sync NormalizedValue; + + private MIDI_InputDevice _device; + + protected override void OnStart() + { + base.OnStart(); + InputDevice.OnTargetChange += OnTargetChange; + if (InputDevice.Target != null) + { + _device = InputDevice.Target; + InputDevice.Target.PitchWheel += OnPitchWheel; + } + } + + protected override void OnPrepareDestroy() + { + base.OnPrepareDestroy(); + if (_device != null) + { + _device.PitchWheel -= OnPitchWheel; + _device = null; + } + } + + private void OnPitchWheel(MIDI_InputDevice device, MIDI_PitchWheelEventData eventData) + { + RunSynchronously(() => + { + if (eventData.channel == Channel.Value) + { + Value.Value = eventData.value; + NormalizedValue.Value = eventData.value == 8192 ? 0f : MathX.Remap(eventData.value, 0f, 16383f, -1f, 1f); + } + }); + } + + private void OnTargetChange(SyncRef syncRef) + { + if (syncRef.Target == null && _device != null) + { + _device.PitchWheel -= OnPitchWheel; + _device = null; + } + else if (syncRef.Target != null) + { + if (_device != null) + { + _device.PitchWheel -= OnPitchWheel; + } + _device = syncRef.Target; + _device.PitchWheel += OnPitchWheel; + } + } +} \ No newline at end of file From da3974bd163abdb152b6720bf826475c628c596a Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:22:45 +0100 Subject: [PATCH 8/9] Turn off debug --- ProjectObsidian/Components/Devices/MIDI_InputDevice.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs index 424f5fb..55f0595 100644 --- a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -43,7 +43,7 @@ public class MIDI_InputDevice : Component public event MIDI_PitchWheelEventHandler PitchWheel; - private const bool DEBUG = true; + private const bool DEBUG = false; protected override void OnStart() { From 5091b96c9180acbaa7f471a6ff57a68167a51dfb Mon Sep 17 00:00:00 2001 From: Nytra <14206961+Nytra@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:47:02 +0100 Subject: [PATCH 9/9] Use OnDispose and fix a debug log statement --- ProjectObsidian/Components/Devices/MIDI_CC_Value.cs | 4 ++-- ProjectObsidian/Components/Devices/MIDI_InputDevice.cs | 6 +++--- ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs index b4c1ba7..8bbf2c5 100644 --- a/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs +++ b/ProjectObsidian/Components/Devices/MIDI_CC_Value.cs @@ -41,9 +41,9 @@ protected override void OnStart() } } - protected override void OnPrepareDestroy() + protected override void OnDispose() { - base.OnPrepareDestroy(); + base.OnDispose(); if (_device != null) { _device.Control -= OnControl; diff --git a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs index 55f0595..5bd246d 100644 --- a/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs +++ b/ProjectObsidian/Components/Devices/MIDI_InputDevice.cs @@ -85,9 +85,9 @@ private async void ReleaseDeviceAsync() _inputDevice = null; } - protected override void OnPrepareDestroy() + protected override void OnDispose() { - base.OnPrepareDestroy(); + base.OnDispose(); if (_inputDevice != null) { ReleaseDeviceAsync(); @@ -197,7 +197,7 @@ private void OnMessageReceived(object sender, MidiReceivedEventArgs args) var events = MidiEvent.Convert(args.Data, args.Start, args.Length); foreach (var e in events) { - UniLog.Log(e.ToString()); + if (DEBUG) UniLog.Log(e.ToString()); RunSynchronously(() => { _lastEvent.Value = e.ToString(); diff --git a/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs index dc914bd..3280950 100644 --- a/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs +++ b/ProjectObsidian/Components/Devices/MIDI_PitchWheel_Value.cs @@ -36,9 +36,9 @@ protected override void OnStart() } } - protected override void OnPrepareDestroy() + protected override void OnDispose() { - base.OnPrepareDestroy(); + base.OnDispose(); if (_device != null) { _device.PitchWheel -= OnPitchWheel;