diff options
author | makefunstuff <[email protected]> | 2024-07-05 16:41:48 +0200 |
---|---|---|
committer | makefunstuff <[email protected]> | 2024-07-05 16:41:48 +0200 |
commit | 3aa30a037b4e636d4e314f4f8b9a73fd6584ba56 (patch) | |
tree | bcc329a4ab241f95dee3c47885c98d9b99771ec2 /src/brr.zig | |
parent | 85fd03f41fa8f6ac21ae849b710fc06f34200830 (diff) | |
download | tinkerbunk-3aa30a037b4e636d4e314f4f8b9a73fd6584ba56.tar.gz |
upd
Diffstat (limited to '')
-rw-r--r-- | src/brr.zig | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/brr.zig b/src/brr.zig index 6e63a68..9c57076 100644 --- a/src/brr.zig +++ b/src/brr.zig @@ -4,16 +4,17 @@ const c = @cImport({ @cInclude("alsa/asoundlib.h"); }); -pub fn brr(allocator: std.mem.Allocator, file: []const u8) !void { +pub fn brr(allocator: std.mem.Allocator, file: [*:0]const u8) !void { _ = c.mpg123_init(); const handle = c.mpg123_new(null, null) orelse { std.log.warn("Failed to create mpg123 handle\n", .{}); return; }; - const file_path: [*c]const u8 = @ptrCast(file); - if (c.mpg123_open(handle, file_path) != c.MPG123_OK) { - std.log.warn("Failed to open the file: {s}\n", .{file_path}); + std.log.debug("file {s}", .{file}); + + if (c.mpg123_open(handle, file) != c.MPG123_OK) { + std.log.warn("Failed to open the file: {s}\n", .{file}); return; } @@ -39,7 +40,6 @@ pub fn brr(allocator: std.mem.Allocator, file: []const u8) !void { } _ = c.snd_pcm_hw_params_any(pcm, params); - _ = c.snd_pcm_hw_params(pcm, params); _ = c.snd_pcm_hw_params_set_access(pcm, params, c.SND_PCM_ACCESS_RW_INTERLEAVED); _ = c.snd_pcm_hw_params_set_format(pcm, params, c.SND_PCM_FORMAT_S16_LE); _ = c.snd_pcm_hw_params_set_channels(pcm, params, @as(c_uint, @intCast(channels))); @@ -56,9 +56,21 @@ pub fn brr(allocator: std.mem.Allocator, file: []const u8) !void { _ = &mpg123_buffer; defer allocator.free(mpg123_buffer); - while (c.mpg123_read(handle, @as(?*anyopaque, @ptrCast(mpg123_buffer.ptr)), buffer_size, &done) == c.MPG123_OK) { - _ = c.snd_pcm_writei(pcm, @as(?*anyopaque, @ptrCast(mpg123_buffer.ptr)), done / 4); + var result: c_int = 0; + while (true) { + result = c.mpg123_read(handle, @as(?*anyopaque, @ptrCast(mpg123_buffer.ptr)), buffer_size, &done); + switch (result) { + c.MPG123_OK => { + _ = c.snd_pcm_writei(pcm, @as(?*anyopaque, @ptrCast(mpg123_buffer.ptr)), done / 4); + }, + else => { + const err_str = c.mpg123_strerror(handle); + std.log.warn("Failed to read from file\n {}, {s}", .{ result, err_str }); + break; + }, + } } + _ = c.mpg123_delete(handle); _ = c.snd_pcm_hw_params_free(params); _ = c.snd_pcm_close(pcm); |