我正在try 写一个音频反向过滤器的代码,将反向CS50课程(编程新手)音频WAV文件.我设法完成了整个任务,并在一个输入文件上进行了try ,但我听到的声音颠倒了过来,然而,判断50函数指出,我的文件没有正确颠倒.当我不知道问题出在哪里时,我很难发现问题所在.我希望有人能发现我遗漏的一个明显的问题.
我只是一直通读代码,找不到具体的问题.我try 颠倒我的输出文件,它听起来与输入文件一模一样,但我不能确定它是否在幕后实际上是相同的.
#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
// TODO #1
if (argc != 3)
{
printf("Usage: ./reverse inputfilename.wav outputfilename.wav\n");
return 1;
}
// Open input file for reading
// TODO #2
FILE *input = fopen(argv[1], "r");
if (input == NULL)
{
printf("Could not open %s.\n", argv[1]);
return 1;
}
// Read header
// TODO #3
WAVHEADER *buffer = malloc(1 * sizeof(WAVHEADER));
fread(buffer, sizeof(WAVHEADER), 1, input);
// Use check_format to ensure WAV format
// TODO #4
if (check_format(*buffer) == 1)
{
printf("input file format not supported\n");
return 1;
}
// Open output file for writing
// TODO #5
FILE *output = fopen(argv[2], "w");
if (output == NULL)
{
fclose(input);
printf("Could not create %s.\n", argv[2]);
return 5;
}
// Write header to file
// TODO #6
fwrite(buffer, sizeof(WAVHEADER), 1, output);
// Use get_block_size to calculate size of block
// TODO #7
int block_size = get_block_size(*buffer);
// Write reversed audio to file
// TODO #8
FILE *temp = malloc(block_size);
fseek(input, -1 * block_size, SEEK_END);
fread(temp, block_size, 1, input);
fwrite(temp, block_size, 1, output);
while (ftell(input) > 44 || ftell(input) == 44)
{
fseek(input, -2 * block_size, SEEK_CUR);
fread(temp, block_size, 1, input);
fwrite(temp, block_size, 1, output);
}
fclose(input);
fclose(output);
free(temp);
free(buffer);
}
int check_format(WAVHEADER header)
{
// TODO #4
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)
{
// TODO #7
int answer = 0;
answer = (header.bitsPerSample / 8) * header.numChannels;
return answer;
}