Created
May 26, 2023 11:42
-
-
Save andrija-zikovic/c377f3fc0f958e6105866ce238f2b577 to your computer and use it in GitHub Desktop.
CS50/volume
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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]); | |
// 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); | |
// Read samples from input file and write updated data to output file | |
int16_t buffer; | |
while (fread(&buffer, sizeof(int16_t), 1, input)) | |
{ | |
// update volume | |
buffer *= factor; | |
fwrite(&buffer, sizeof(int16_t), 1, output); | |
} | |
// Close files | |
fclose(input); | |
fclose(output); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment