src/sysaudio: move mach-sysaudio@ce8ab30dd300b822224d14997c58c06520b642c9 package to here

Helps hexops/mach#1165

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-03-04 18:44:39 -07:00 committed by Stephen Gutekanst
parent d64d30c7db
commit bca1543391
16 changed files with 7876 additions and 0 deletions

61
src/sysaudio/util.zig Normal file
View file

@ -0,0 +1,61 @@
const std = @import("std");
const main = @import("main.zig");
pub const DevicesInfo = struct {
list: std.ArrayListUnmanaged(main.Device),
default_output: ?usize,
default_input: ?usize,
pub fn init() DevicesInfo {
return .{
.list = .{},
.default_output = null,
.default_input = null,
};
}
pub fn clear(device_info: *DevicesInfo) void {
device_info.default_output = null;
device_info.default_input = null;
device_info.list.clearRetainingCapacity();
}
pub fn get(device_info: DevicesInfo, i: usize) main.Device {
return device_info.list.items[i];
}
pub fn default(device_info: DevicesInfo, mode: main.Device.Mode) ?main.Device {
const index = switch (mode) {
.playback => device_info.default_output,
.capture => device_info.default_input,
} orelse {
for (device_info.list.items) |device| {
if (device.mode == mode) {
return device;
}
}
return null;
};
return device_info.get(index);
}
pub fn setDefault(device_info: *DevicesInfo, mode: main.Device.Mode, i: usize) void {
switch (mode) {
.playback => device_info.default_output = i,
.capture => device_info.default_input = i,
}
}
};
pub fn Range(comptime T: type) type {
return struct {
min: T,
max: T,
pub fn clamp(range: @This(), val: T) T {
return std.math.clamp(val, range.min, range.max);
}
};
}
pub fn doNothing() callconv(.C) void {}