From b6d338ca17ec06a171f68efb1384f2ccab452d1f Mon Sep 17 00:00:00 2001 From: Umur Gedik Date: Fri, 3 Oct 2025 18:38:39 +0300 Subject: [PATCH 1/3] add: device playback information query methods --- src/zaudio.c | 15 +++++++++++++++ src/zaudio.zig | 11 ++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/zaudio.c b/src/zaudio.c index 9422395..91d2c62 100644 --- a/src/zaudio.c +++ b/src/zaudio.c @@ -458,6 +458,21 @@ void* zaudioDeviceGetUserData(ma_device* handle) { assert(handle != NULL); return handle->pUserData; } + +ma_uint32 zaudioDeviceGetSampleRate(ma_device* handle) { + assert(handle != NULL); + return handle->sampleRate; +} + +ma_format zaudioDeviceGetPlaybackFormat(ma_device* handle) { + assert(handle != NULL); + return handle->playback.format; +} + +ma_uint32 zaudioDeviceGetPlaybackChannels(ma_device* handle) { + assert(handle != NULL); + return handle->playback.channels; +} //-------------------------------------------------------------------------------------------------- void zaudioEngineConfigInit(ma_engine_config* out_config) { assert(out_config != NULL); diff --git a/src/zaudio.zig b/src/zaudio.zig index f827579..ee96adf 100644 --- a/src/zaudio.zig +++ b/src/zaudio.zig @@ -1976,6 +1976,15 @@ pub const Device = opaque { } extern fn ma_device_get_master_volume(device: *const Device, volume: *f32) Result; + pub const getSampleRate = zaudioDeviceGetSampleRate; + extern fn zaudioDeviceGetSampleRate(device: *const Device) u32; + + pub const getPlaybackFormat = zaudioDeviceGetPlaybackFormat; + extern fn zaudioDeviceGetPlaybackFormat(device: *const Device) Format; + + pub const getPlaybackChannels = zaudioDeviceGetPlaybackChannels; + extern fn zaudioDeviceGetPlaybackChannels(device: *const Device) u32; + pub const Type = enum(c_int) { playback = 1, capture = 2, @@ -3084,7 +3093,7 @@ fn zaudioMalloc(size: usize, _: ?*anyopaque) callconv(.c) ?*anyopaque { const mem = mem_allocator.?.alignedAlloc( u8, - .fromByteUnits(mem_alignment), + @ctz(@as(usize, mem_alignment)), size, ) catch @panic("zaudio: out of memory"); From e4302c717d26ba3aa8f19dd0b701740ec99c5aa8 Mon Sep 17 00:00:00 2001 From: Umur Gedik Date: Sun, 5 Oct 2025 02:12:19 +0300 Subject: [PATCH 2/3] fix: zig 0.15 and 0.14 compatibility --- src/zaudio.zig | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/zaudio.zig b/src/zaudio.zig index ee96adf..bad388e 100644 --- a/src/zaudio.zig +++ b/src/zaudio.zig @@ -3091,9 +3091,16 @@ fn zaudioMalloc(size: usize, _: ?*anyopaque) callconv(.c) ?*anyopaque { mem_mutex.lock(); defer mem_mutex.unlock(); + const zig_version = @import("builtin").zig_version; + + const alignment = comptime if (zig_version.minor == 14) + @ctz(@as(usize, mem_alignment)) + else + std.mem.Alignment.fromByteUnits(mem_alignment); + const mem = mem_allocator.?.alignedAlloc( u8, - @ctz(@as(usize, mem_alignment)), + alignment, size, ) catch @panic("zaudio: out of memory"); @@ -3337,7 +3344,10 @@ test "zaudio.audio_buffer" { init(std.testing.allocator); defer deinit(); - var samples = try std.ArrayList(f32).initCapacity(std.testing.allocator, 1000); + const zig_version = @import("builtin").zig_version; + const ArrayList = if (zig_version.minor == 15) std.ArrayList else std.ArrayListUnmanaged; + + var samples = try ArrayList(f32).initCapacity(std.testing.allocator, 1000); defer samples.deinit(std.testing.allocator); var prng = std.Random.DefaultPrng.init(0); From bf0bc882c50eb117cacdb4f629008850e72a5888 Mon Sep 17 00:00:00 2001 From: Umur Gedik Date: Sun, 5 Oct 2025 02:17:44 +0300 Subject: [PATCH 3/3] fix: memory alignment compatibility --- src/zaudio.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zaudio.zig b/src/zaudio.zig index bad388e..5311101 100644 --- a/src/zaudio.zig +++ b/src/zaudio.zig @@ -3094,7 +3094,7 @@ fn zaudioMalloc(size: usize, _: ?*anyopaque) callconv(.c) ?*anyopaque { const zig_version = @import("builtin").zig_version; const alignment = comptime if (zig_version.minor == 14) - @ctz(@as(usize, mem_alignment)) + mem_alignment else std.mem.Alignment.fromByteUnits(mem_alignment);