Skip to content

Commit

Permalink
Updated MidiJack plugin.
Browse files Browse the repository at this point in the history
  • Loading branch information
Keijiro Takahashi authored and Keijiro Takahashi committed Jun 21, 2015
1 parent 7b69dfb commit 97cb6b0
Show file tree
Hide file tree
Showing 42 changed files with 890 additions and 489 deletions.
6 changes: 5 additions & 1 deletion Assets/MidiJack.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion Assets/MidiJack/Editor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

63 changes: 0 additions & 63 deletions Assets/MidiJack/Editor/MidiJackEditor.cs

This file was deleted.

100 changes: 100 additions & 0 deletions Assets/MidiJack/Editor/MidiJackWindow.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
//
// MidiJack - MIDI Input Plugin for Unity
//
// Copyright (C) 2013-2015 Keijiro Takahashi
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using UnityEngine;
using UnityEditor;
using System.Runtime.InteropServices;

namespace MidiJack
{
class MidiJackWindow : EditorWindow
{
#region Custom Editor Window Code

[MenuItem("Window/MIDI Jack")]
public static void ShowWindow()
{
EditorWindow.GetWindow<MidiJackWindow>("MIDI Jack");
}

void OnGUI()
{
var endpointCount = CountEndpoints();

// Endpoints
var temp = "Detected MIDI devices:";
for (var i = 0; i < endpointCount; i++)
{
var id = GetEndpointIdAtIndex(i);
var name = GetEndpointName(id);
temp += "\n" + id.ToString("X8") + ": " + name;
}
EditorGUILayout.HelpBox(temp, MessageType.None);

// Message history
temp = "Recent MIDI messages:";
foreach (var message in MidiDriver.Instance.History)
temp += "\n" + message.ToString();
EditorGUILayout.HelpBox(temp, MessageType.None);
}

#endregion

#region Update And Repaint

const int _updateInterval = 15;
int _countToUpdate;
int _lastMessageCount;

void Update()
{
if (--_countToUpdate > 0) return;

var mcount = MidiDriver.Instance.TotalMessageCount;
if (mcount != _lastMessageCount) {
Repaint();
_lastMessageCount = mcount;
}

_countToUpdate = _updateInterval;
}

#endregion

#region Native Plugin Interface

[DllImport("MidiJackPlugin", EntryPoint="MidiJackCountEndpoints")]
static extern int CountEndpoints();

[DllImport("MidiJackPlugin", EntryPoint="MidiJackGetEndpointIDAtIndex")]
static extern uint GetEndpointIdAtIndex(int index);

[DllImport("MidiJackPlugin")]
static extern System.IntPtr MidiJackGetEndpointName(uint id);

static string GetEndpointName(uint id) {
return Marshal.PtrToStringAnsi(MidiJackGetEndpointName(id));
}

#endregion
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 69 additions & 0 deletions Assets/MidiJack/Midi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//
// MidiJack - MIDI Input Plugin for Unity
//
// Copyright (C) 2013-2015 Keijiro Takahashi
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
namespace MidiJack
{
// MIDI channel names
public enum MidiChannel
{
Ch1, // 0
Ch2, // 1
Ch3,
Ch4,
Ch5,
Ch6,
Ch7,
Ch8,
Ch9,
Ch10,
Ch11,
Ch12,
Ch13,
Ch14,
Ch15,
Ch16,
All // 16
}

// MIDI message structure
public struct MidiMessage
{
public uint source; // MIDI source (endpoint) ID
public byte status; // MIDI status byte
public byte data1; // MIDI data bytes
public byte data2;

public MidiMessage(ulong data)
{
source = (uint)(data & 0xffffffffUL);
status = (byte)((data >> 32) & 0xff);
data1 = (byte)((data >> 40) & 0xff);
data2 = (byte)((data >> 48) & 0xff);
}

public override string ToString()
{
const string fmt = "s({0:X2}) d({1:X2},{2:X2}) from {3:X8}";
return string.Format(fmt, status, data1, data2, source);
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 97cb6b0

Please sign in to comment.