handle raw midi data

This commit is contained in:
Chikashi Miyama 2019-10-26 22:15:30 +02:00
parent b56eacd72e
commit cf59b7f739
9 changed files with 1644 additions and 1570 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@ namespace cylvester
public class PdBackendEditor : Editor public class PdBackendEditor : Editor
{ {
private PdBackend pdBackend_; private PdBackend pdBackend_;
private SerializedProperty controlMessageReceivedProperty_; private SerializedProperty midiMessageReceivedProperty_;
private readonly string[] samples_ = private readonly string[] samples_ =
{ {
@ -33,8 +33,8 @@ namespace cylvester
serializedObject.Update(); serializedObject.Update();
pdBackend_ = (PdBackend) target; pdBackend_ = (PdBackend) target;
controlMessageReceivedProperty_ = serializedObject.FindProperty("controlMessageReceived"); midiMessageReceivedProperty_ = serializedObject.FindProperty("midiMessageReceived");
EditorGUILayout.PropertyField(controlMessageReceivedProperty_); EditorGUILayout.PropertyField(midiMessageReceivedProperty_);
if (Application.isPlaying) if (Application.isPlaying)
{ {

View file

@ -1,6 +1,4 @@
using System.Collections; using UnityEngine;
using System.Collections.Generic;
using UnityEngine;
namespace cylvester namespace cylvester
{ {
@ -8,12 +6,12 @@ namespace cylvester
{ {
[SerializeField,Range(1,16)] private int channel = 1; [SerializeField,Range(1,16)] private int channel = 1;
public void OnControlMessageReceived(ControlMessage mes) public void OnMidiMessageReceived(MidiMessage mes)
{ {
if (mes.Channel == channel - 1) if (mes.Status - 176 == channel - 1)
{ {
var x = (mes.ControlNumber - 64) / 10f; var x = (mes.Data1 - 64) / 10f;
var y = (mes.ControlValue - 64) / 10f; var y = (mes.Data2 - 64) / 10f;
transform.position = new Vector3(x, y, 0f); transform.position = new Vector3(x, y, 0f);
} }
} }

View file

@ -4,19 +4,18 @@ using UnityEngine.Events;
namespace cylvester namespace cylvester
{ {
[Serializable] [Serializable]
public class UnityControlEvent : UnityEvent<ControlMessage> public class UnityControlEvent : UnityEvent<MidiMessage>
{} {}
public struct ControlMessage public struct MidiMessage
{ {
public byte Channel; public byte Status;
public byte ControlNumber; public byte Data1;
public byte ControlValue; public byte Data2;
} }
public interface IMidiParser : IDisposable public interface IMidiParser : IDisposable
{ {
event Action<ControlMessage> ControlMessageReceived; event Action<MidiMessage> MidiMessageReceived;
} }
public class MidiParser : IMidiParser public class MidiParser : IMidiParser
@ -28,13 +27,6 @@ namespace cylvester
DataByte2 DataByte2
} }
private struct MidiMessage
{
public byte Status;
public byte Data1;
public byte Data2;
}
private MidiMessage message_; private MidiMessage message_;
private Accept accept_ = Accept.StatusByte; private Accept accept_ = Accept.StatusByte;
private readonly IPdReceiver pdReceiver_; private readonly IPdReceiver pdReceiver_;
@ -74,17 +66,7 @@ namespace cylvester
private void Invoke() private void Invoke()
{ {
if (176 <= message_.Status || message_.Status <= 191) MidiMessageReceived?.Invoke(message_);
{
var controlMessage = new ControlMessage
{
Channel = (byte) (message_.Status - 176),
ControlNumber = message_.Data1,
ControlValue = message_.Data2
};
ControlMessageReceived?.Invoke(controlMessage);
}
} }
public void Dispose() public void Dispose()
@ -92,7 +74,7 @@ namespace cylvester
pdReceiver_.DataReceived -= onDataReceived_; pdReceiver_.DataReceived -= onDataReceived_;
} }
public event Action<ControlMessage> ControlMessageReceived; public event Action<MidiMessage> MidiMessageReceived;
} }
} }

View file

@ -14,7 +14,7 @@ namespace cylvester
public class PdBackend : MonoBehaviour, IPdBackend public class PdBackend : MonoBehaviour, IPdBackend
{ {
[SerializeField] UnityControlEvent controlMessageReceived = null; [SerializeField] UnityControlEvent midiMessageReceived = null;
public int samplePlayback; public int samplePlayback;
@ -32,7 +32,7 @@ namespace cylvester
private List<IUpdater> updaters_; private List<IUpdater> updaters_;
private Action onSamplePlaybackChanged_; private Action onSamplePlaybackChanged_;
private Action<ControlMessage> onControlMessageReceived_; private Action<MidiMessage> onMidiMessageReceived_;
private void Awake() private void Awake()
{ {
@ -53,12 +53,12 @@ namespace cylvester
onSamplePlaybackChanged_ = () => { pdSender_.Send(new[]{(byte)PdMessage.SampleSound, (byte)samplePlayback}); }; onSamplePlaybackChanged_ = () => { pdSender_.Send(new[]{(byte)PdMessage.SampleSound, (byte)samplePlayback}); };
onControlMessageReceived_ = (message) => { onMidiMessageReceived_ = (message) => {
controlMessageReceived.Invoke(message); midiMessageReceived.Invoke(message);
}; };
samplePlaybackObserver_.ValueChanged += onSamplePlaybackChanged_; samplePlaybackObserver_.ValueChanged += onSamplePlaybackChanged_;
midiParser_.ControlMessageReceived += onControlMessageReceived_; midiParser_.MidiMessageReceived += onMidiMessageReceived_;
dspController_.State = true; dspController_.State = true;
} }
@ -68,7 +68,7 @@ namespace cylvester
dspController_.State = false; dspController_.State = false;
pdSender_?.Dispose(); pdSender_?.Dispose();
samplePlaybackObserver_.ValueChanged -= onSamplePlaybackChanged_; samplePlaybackObserver_.ValueChanged -= onSamplePlaybackChanged_;
midiParser_.ControlMessageReceived -= onControlMessageReceived_; midiParser_.MidiMessageReceived -= onMidiMessageReceived_;
} }
public void Update() public void Update()

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a136572b1ed0a3d4baf99141901819b6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -6,6 +6,7 @@
"com.unity.analytics": "3.3.2", "com.unity.analytics": "3.3.2",
"com.unity.collab-proxy": "1.2.16", "com.unity.collab-proxy": "1.2.16",
"com.unity.ext.nunit": "1.0.0", "com.unity.ext.nunit": "1.0.0",
"com.unity.ide.rider": "1.1.0",
"com.unity.ide.vscode": "1.1.2", "com.unity.ide.vscode": "1.1.2",
"com.unity.multiplayer-hlapi": "1.0.2", "com.unity.multiplayer-hlapi": "1.0.2",
"com.unity.package-manager-ui": "2.2.0", "com.unity.package-manager-ui": "2.2.0",

View file

@ -1,5 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00 
# Visual Studio 15 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{5B580621-09B4-68CB-B5F4-5B9DD210A60F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{5B580621-09B4-68CB-B5F4-5B9DD210A60F}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{3CC9D2C0-C461-07D9-EDF3-4FFB4DE5C299}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{3CC9D2C0-C461-07D9-EDF3-4FFB4DE5C299}"