summaryrefslogtreecommitdiff
path: root/midi
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst@digdash.com>2024-11-21 14:56:36 +0100
committerJulian Hurst <julian.hurst@digdash.com>2024-11-21 15:02:14 +0100
commit15a04a5dad595fa774da1085253159a6e71b9a05 (patch)
treedfc639cf6c1b6c0c59c625be5e34bea4d9cd0dfa /midi
parent1793341797569b42f6623e5bfdf9098e3e80ef19 (diff)
downloadhare-midi-15a04a5dad595fa774da1085253159a6e71b9a05.tar.gz
Add writeevents and writemidievents
Diffstat (limited to 'midi')
-rw-r--r--midi/midi.ha18
1 files changed, 15 insertions, 3 deletions
diff --git a/midi/midi.ha b/midi/midi.ha
index fd7a843..cdcb997 100644
--- a/midi/midi.ha
+++ b/midi/midi.ha
@@ -141,7 +141,12 @@ export fn writechunk(h: io::handle, c: trchunk) void = {
endian::beputu32(buf, l);
io::writeall(h, buf)!;
- for (const ev .. c.ev) {
+ writeevents(h, c.ev...);
+};
+
+export fn writeevents(h: io::handle, evs: event...) void = {
+ let buf: [4]u8 = [0...];
+ for (const ev .. evs) {
let dt = encodevlen(ev.deltatime);
endian::beputu32(buf, dt);
if (dt <= 127) {
@@ -155,14 +160,21 @@ export fn writechunk(h: io::handle, c: trchunk) void = {
};
match (ev.ev) {
case let m: midi =>
- io::writeall(h, [m.status])!;
- io::writeall(h, m.data)!;
+ writemidievents(h, m);
case =>
abort();
};
};
};
+export fn writemidievents(h: io::handle, evs: midi...) void = {
+ let buf: [4]u8 = [0...];
+ for (const ev .. evs) {
+ io::writeall(h, [ev.status])!;
+ io::writeall(h, ev.data)!;
+ };
+};
+
fn calclength(c: trchunk) u32 = {
let length = 0u32;
for (const ev .. c.ev) {