From ab3fca1ae25c2ea2a95a8d93a1fc3e8bef0d0e69 Mon Sep 17 00:00:00 2001
From: Fudgerboy <91767657+Fudgerboy@users.noreply.github.com>
Date: Thu, 4 Apr 2024 06:44:49 +0000
Subject: Wed, Apr 3, 2024, 11:44 PM -07:00

---
 wk4/pset/volume/volume.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100644 wk4/pset/volume/volume.c

(limited to 'wk4/pset/volume/volume.c')

diff --git a/wk4/pset/volume/volume.c b/wk4/pset/volume/volume.c
new file mode 100644
index 0000000..0cde962
--- /dev/null
+++ b/wk4/pset/volume/volume.c
@@ -0,0 +1,53 @@
+// Modifies the volume of an audio file
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+// Number of bytes in .wav header
+const int HEADER_SIZE = 44;
+
+int main(int argc, char *argv[])
+{
+    // Check command-line arguments
+    if (argc != 4)
+    {
+        printf("Usage: ./volume input.wav output.wav factor\n");
+        return 1;
+    }
+
+    // Open files and determine scaling factor
+    FILE *input = fopen(argv[1], "r");
+    if (input == NULL)
+    {
+        printf("Could not open file.\n");
+        return 1;
+    }
+
+    FILE *output = fopen(argv[2], "w");
+    if (output == NULL)
+    {
+        printf("Could not open file.\n");
+        return 1;
+    }
+
+    float factor = atof(argv[3]);
+
+    // TODO: Copy header from input file to output file
+    uint8_t header[HEADER_SIZE];
+    fread(header, HEADER_SIZE, 1, input);
+    fwrite(header, HEADER_SIZE, 1, output);
+
+    // TODO: Read samples from input file and write updated data to output file
+    int16_t buffer;
+
+    while (fread(&buffer, sizeof(int16_t), 1, input))
+    {
+        buffer *= factor;
+        fwrite(&buffer, sizeof(uint16_t), 1, output);
+    }
+
+    // Close files
+    fclose(input);
+    fclose(output);
+}
-- 
cgit v1.2.3