mach/src/sysaudio/util.zig
Stephen Gutekanst bca1543391 src/sysaudio: move mach-sysaudio@ce8ab30dd300b822224d14997c58c06520b642c9 package to here
Helps hexops/mach#1165

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-03-05 00:22:22 -07:00

61 lines
1.6 KiB
Zig

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 {}