summaryrefslogtreecommitdiff
path: root/midi/midi.ha
diff options
context:
space:
mode:
Diffstat (limited to 'midi/midi.ha')
-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) {