Skip to content

Commit 02af9f2

Browse files
committed
Added support for midi messages
1 parent f0d7019 commit 02af9f2

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

lib/osc/message.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ defmodule OSC.Message do
117117
{{:osc_rgba, [red: r, green: g, blue: b, alpha: a]}, rest}
118118
end
119119

120+
defp get_next_value(?m, <<port, status, data1, data2, rest::binary>>) do
121+
{{:osc_midi, [port_id: port, status: status, data1: data1, data2: data2]}, rest}
122+
end
123+
120124
@doc """
121125
Construct an OSC message
122126
"""
@@ -176,6 +180,10 @@ defmodule OSC.Message do
176180
value_or_zero(colors[:blue]), value_or_zero(colors[:alpha])>>}
177181
end
178182

183+
defp construct_args({:osc_midi, values}, {tags, args}) do
184+
{tags <> <<?m>>, args <> <<values[:port_id], values[:status], values[:data1], values[:data2]>>}
185+
end
186+
179187
defp value_or_zero(nil), do: 0
180188
defp value_or_zero(value), do: value
181189
end

test/osc/message_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ defmodule OSC.MessageTest do
9898
assert {"/ab", [{:osc_rgba, [red: 0x01, green: 0x02, blue: 0x03, alpha: 0x04]}, {:osc_integer, 1000}]} = OSC.Message.parse(msg)
9999
end
100100

101+
test "parses a midi message" do
102+
msg = <<"/ab", 0, ",m", 0, 0, 0x01020304::size(32)>>
103+
assert {"/ab", [{:osc_midi, [port_id: 0x01, status: 0x02, data1: 0x03, data2: 0x04]}]} = OSC.Message.parse(msg)
104+
105+
msg = <<"/ab", 0, ",mi", 0, 0x01020304::size(32), 1000 :: [signed, big, size(32)]>>
106+
assert {"/ab", [{:osc_midi, [port_id: 0x01, status: 0x02, data1: 0x03, data2: 0x04]}, {:osc_integer, 1000}]} = OSC.Message.parse(msg)
107+
end
108+
101109
test "construct a simple message" do
102110
assert <<"/ab", 0, ",", 0, 0, 0>> = OSC.Message.construct("/ab", [])
103111

@@ -156,5 +164,10 @@ defmodule OSC.MessageTest do
156164
assert <<"/ab", 0, ",r", 0, 0, 0x00000000::size(32)>> =
157165
OSC.Message.construct("/ab", [{:osc_rgba, []}])
158166
end
167+
168+
test "construct a midi message" do
169+
assert <<"/ab", 0, ",m", 0, 0, 0x01020304::size(32)>> =
170+
OSC.Message.construct("/ab", [{:osc_midi, [port_id: 0x01, status: 0x02, data1: 0x03, data2: 0x04]}])
171+
end
159172
end
160173

0 commit comments

Comments
 (0)