Untitled
unknown
c_cpp
2 years ago
1.9 kB
6
Indexable
#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include "wav.h" int check_format(WAVHEADER header); int get_block_size(WAVHEADER header); int main(int argc, char *argv[]) { // Ensure proper usage if (argc != 3) { printf("Usage: ./reverse input.wav output.wav\n"); return 1; } // Open input file for reading FILE *input = fopen(argv[1], "r"); if (input == NULL) { printf("Could not open %s.\n", argv[1]); return 1; } // Read header WAVHEADER header; fread(&header, sizeof(WAVHEADER), 1, input); // Use check_format to ensure WAV format if (check_format(header) != 1) { printf("Incorrect file format"); return 1; } // Open output file for writing FILE *output = fopen(argv[2], "w"); if (output == NULL) { printf("Could not open %s.\n", argv[2]); return 1; } // Write header to file fwrite(&header, sizeof(WAVHEADER), 1, output); // Use get_block_size to calculate size of block int blockSize = get_block_size(header); // Write reversed audio to file BYTE buffer[blockSize]; fseek(input, 0, SEEK_END); long audioLength = ftell(input) - sizeof(WAVHEADER); int audioBlock = audioLength / blockSize; for (int i = audioBlock - 1; i >= 0; i--) { fseek(input, sizeof(WAVHEADER) + i * blockSize, SEEK_SET); fread(buffer, blockSize, 1, input); fwrite(buffer, blockSize, 1, output); } fclose(input); fclose(output); } int check_format(WAVHEADER header) { if (header.format[0] == 'W' && header.format[1] == 'A' && header.format[2] == 'V' && header.format[3] == 'E') { return 1; } return 0; } int get_block_size(WAVHEADER header) { int blockSize = header.numChannels * (header.bitsPerSample / 8); return blockSize; }
Editor is loading...