diff options
| author | Julian Hurst <julian.hurst@digdash.com> | 2024-11-21 14:56:36 +0100 |
|---|---|---|
| committer | Julian Hurst <julian.hurst@digdash.com> | 2024-11-21 15:02:14 +0100 |
| commit | 15a04a5dad595fa774da1085253159a6e71b9a05 (patch) | |
| tree | dfc639cf6c1b6c0c59c625be5e34bea4d9cd0dfa /midi | |
| parent | 1793341797569b42f6623e5bfdf9098e3e80ef19 (diff) | |
| download | hare-midi-15a04a5dad595fa774da1085253159a6e71b9a05.tar.gz | |
Add writeevents and writemidievents
Diffstat (limited to 'midi')
| -rw-r--r-- | midi/midi.ha | 18 |
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) { |
