|
| 1 | +const std = @import("std"); |
| 2 | + |
| 3 | +pub fn Init(config_file: [*c]const u8, rate: u16, options: InitOptions) c_int { |
| 4 | + return WildMidi_Init(config_file, rate, options); |
| 5 | +} |
| 6 | + |
| 7 | +pub fn GetVersion() c_long { |
| 8 | + return WildMidi_GetVersion(); |
| 9 | +} |
| 10 | + |
| 11 | +pub const MidiFile = struct { |
| 12 | + handle: [*c]c_long, |
| 13 | + |
| 14 | + pub fn getOutput(self: MidiFile, buffer: [*c]u8, size: usize) c_int { |
| 15 | + return WildMidi_GetOutput(self.handle, buffer, size); |
| 16 | + } |
| 17 | + |
| 18 | + pub fn getInfo(self: MidiFile) *WildMidiInfo { |
| 19 | + return WildMidi_GetInfo(self.handle); |
| 20 | + } |
| 21 | + |
| 22 | + pub fn setOption(self: MidiFile, options: c_uint, setting: c_uint) c_int { |
| 23 | + return WildMidi_SetOption(self.handle, options, setting); |
| 24 | + } |
| 25 | + |
| 26 | + pub fn close(self: MidiFile) void { |
| 27 | + _ = WildMidi_Close(self.handle); |
| 28 | + } |
| 29 | +}; |
| 30 | + |
| 31 | +pub fn Open(midi_file: []const u8) !MidiFile { |
| 32 | + const midi_file_terminated = try std.mem.concat(std.heap.c_allocator, u8, &.{ midi_file, "\x00" }); |
| 33 | + defer std.heap.c_allocator.free(midi_file_terminated); |
| 34 | + |
| 35 | + const handle = WildMidi_Open(@ptrCast([*c]const u8, midi_file_terminated)); |
| 36 | + |
| 37 | + return MidiFile{ |
| 38 | + .handle = handle, |
| 39 | + }; |
| 40 | +} |
| 41 | + |
| 42 | +pub fn OpenBuffer(midi_buffer: [*c]const u8, size: c_uint) MidiFile { |
| 43 | + const handle = WildMidi_OpenBuffer(midi_buffer, size); |
| 44 | + |
| 45 | + return MidiFile{ |
| 46 | + .handle = handle, |
| 47 | + }; |
| 48 | +} |
| 49 | + |
| 50 | +pub fn GetError() [*c]u8 { |
| 51 | + return WildMidi_GetError(); |
| 52 | +} |
| 53 | + |
| 54 | +pub fn MasterVolume(master_volume: c_short) c_int { |
| 55 | + return WildMidi_MasterVolume(master_volume); |
| 56 | +} |
| 57 | + |
| 58 | +pub const InitOptions = enum(c_uint) { |
| 59 | + Default = 0x0, |
| 60 | + LogVolume = 0x1, |
| 61 | + EnhancedResampling = 0x2, |
| 62 | + Reverb = 0x4, |
| 63 | + Loop = 0x8, |
| 64 | + SaveAsType0 = 0x1000, |
| 65 | + RoundTempo = 0x2000, |
| 66 | + StripSilence = 0x4000, |
| 67 | + TextAsLyric = 0x8000, |
| 68 | +}; |
| 69 | + |
| 70 | +pub const WildMidiInfo = extern struct { |
| 71 | + copyright: [*c]u8, |
| 72 | + current_sample: c_uint, |
| 73 | + approx_total_samples: c_uint, |
| 74 | + mixer_options: c_ushort, |
| 75 | + total_midi_time: c_uint, |
| 76 | +}; |
| 77 | + |
| 78 | +extern fn WildMidi_Init(config_file: [*c]const u8, rate: u16, options: InitOptions) c_int; |
| 79 | +extern fn WildMidi_GetVersion() c_long; |
| 80 | +extern fn WildMidi_Open(midi_file: [*c]const u8) [*c]c_long; |
| 81 | +extern fn WildMidi_OpenBuffer(midi_buffer: [*c]const u8, size: c_uint) [*c]c_long; |
| 82 | +extern fn WildMidi_Close(handle: [*]c_long) c_int; |
| 83 | +extern fn WildMidi_GetOutput(handle: [*c]c_long, buffer: [*c]u8, size: usize) c_int; |
| 84 | +extern fn WildMidi_GetInfo(handle: [*]c_long) [*c]WildMidiInfo; |
| 85 | +extern fn WildMidi_GetError() [*c]u8; |
| 86 | +extern fn WildMidi_MasterVolume(master_volume: c_short) c_int; |
| 87 | +extern fn WildMidi_SetOption(handle: [*]c_long, options: c_uint, setting: c_uint) c_int; |
0 commit comments