about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/brr.zig37
-rw-r--r--src/main.zig6
2 files changed, 24 insertions, 19 deletions
diff --git a/src/brr.zig b/src/brr.zig
index aad554d..3a0c94c 100644
--- a/src/brr.zig
+++ b/src/brr.zig
@@ -4,47 +4,48 @@ const c = @cImport({
     @cInclude("alsa/asoundlib.h");
 });
 
-pub fn brr(file: []const u8) void {
+pub fn brr(file: []const u8) !void {
     _ = c.mpg123_init();
 
     const handle = c.mpg123_new(null, null) orelse {
         std.log.warn("Failed to create mpg123 handle\n", .{});
         return;
     };
-    defer c.mpg123_delete(handle);
 
     const file_path = file.ptr;
     if (c.mpg123_open(handle, file_path) != 0) {
-        std.log.warn("Filed to open the file: {}\n", .{file_path});
+        std.log.warn("Filed to open the file: {s}\n", .{file_path});
         return;
     }
 
-    var pcm: c.snd_pcm_t = undefined;
+    var pcm: ?*c.snd_pcm_t = undefined;
     if (c.snd_pcm_open(&pcm, "default", c.SND_PCM_STREAM_PLAYBACK, 0) < 0) {
         std.log.warn("Failed to open ALSA device\n", .{});
         return;
     }
-    defer c.snd_pcm_close(pcm);
+    var params: ?*c.snd_pcm_hw_params_t = null;
+    _ = c.snd_pcm_hw_params_malloc(&params);
 
-    var params: *c.snd_pcm_hw_params_t = undefined;
-    c.snd_pcm_hw_params_malloc(&params);
-    defer c.snd_pcm_hw_params_free(params);
+    _ = c.snd_pcm_hw_params(pcm, params);
+    _ = c.snd_pcm_hw_params_set_access(pcm, params, c.SND_PCM_FORMAT_S16_LE);
+    _ = c.snd_pcm_hw_params_set_channels(pcm, params, 2);
+    _ = c.snd_pcm_hw_params_set_rate(pcm, params, 44100, 0);
 
-    c.snd_pcm_hw_params(pcm, params);
-    c.snd_pcm_hw_params_set_access(pcm, params, c.SND_PCM_FORMAT_S16_LE);
-    c.snd_pcm_hw_params_set_channels(pcm, params, 2);
-    c.snd_pcm_hw_params_set_rate(pcm, params, 44100, 0);
-
-    c.snd_pcm_hw_params(pcm, params);
+    _ = c.snd_pcm_hw_params(pcm, params);
 
     var buffer: [4096]u8 = undefined;
 
     while (true) {
-        var done: c.size_t = 0;
-        c.mpg123_read(handle, &buffer[0], buffer.len, &done);
+        var done: usize = 0;
+        _ = c.mpg123_read(handle, &buffer[0], buffer.len, &done);
 
-        if (done == 0) break;
+        if (done == 0) {
+            _ = c.mpg123_delete(handle);
+            _ = c.snd_pcm_hw_params_free(params);
+            _ = c.snd_pcm_close(pcm);
+            break;
+        }
 
-        c.snd_pcm_writei(pcm, &buffer[0], done / 4);
+        _ = c.snd_pcm_writei(pcm, &buffer[0], done / 4);
     }
 }
diff --git a/src/main.zig b/src/main.zig
index 498b928..e054495 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -59,7 +59,11 @@ pub fn main() !void {
             .TCP => try socket_server.start_server(),
             .WINDOW => try sdl_window.present_sdl_window(),
             // TODO: parse options for arguments
-            .BRR => try brr.brr(args[2]),
+            // TODO: fix compile errors
+            // .BRR => try brr.brr(args[2]),
+            else => {
+                return;
+            },
         }
     }