我想通了。我删除了结构只是为了看看我在做什么。完成最终项目后,我将重新合并该结构。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *original, *fast, *slow, *slowdown;
unsigned int ChunkSize, Subchunk1Size, Subchunk2Size, RIFFSize, fmtSize, dataSize, SampleRate, ByteRate;
unsigned short int AudioFormat, NumChannels, BlockAlign, BitsPerSample;
char ChunkID[5], Format[5], Subchunk1ID[5], Subchunk2ID[5];
ChunkID[4] = '\0';
Format[4] = '\0';
Subchunk1ID[4] = '\0';
Subchunk2ID[4] = '\0';
char path[FILENAME_MAX], dfast[FILENAME_MAX], dslow[FILENAME_MAX], dslowdown[FILENAME_MAX];
printf("Enter path to Alejandro_project.wav file: ");
scanf("%s", path);
strcpy(dfast, path);
dfast[strlen(path) - 21] = '\0';
strcpy(dslow, dfast);
strcpy(dslowdown, dslow);
strcat(dfast, "Alejandro_fast.wav");
strcat(dslow, "Alejandro_slow.wav");
strcat(dslowdown, "Alejandro_slowdown.wav");
original = fopen(path, "rb");
if (!original) {
printf("Error: file does not exist.\n");
return EXIT_FAILURE;
}
fread(ChunkID, 4, 1, original);
fread(&ChunkSize, 4, 1, original);
fread(Format, 4, 1, original);
fread(Subchunk1ID, 4, 1, original);
fread(&Subchunk1Size, 4, 1, original);
fread(&AudioFormat, 2, 1, original);
fread(&NumChannels, 2, 1, original);
fread(&SampleRate, 4, 1, original);
fread(&ByteRate, 4, 1, original);
fread(&BlockAlign, 2, 1, original);
fread(&BitsPerSample, 2, 1, original);
fread(Subchunk2ID, 4, 1, original);
fread(&Subchunk2Size, 4, 1, original);
fmtSize = Subchunk1Size + 8;
dataSize = Subchunk2Size + 8;
RIFFSize = ChunkSize + 8 - (fmtSize + dataSize);
printf("RIFF Size: %d\n", RIFFSize);
printf("fmt Size: %d\n", fmtSize);
printf("data Size: %d\n\n", dataSize);
printf("ChunkID: %s\n", ChunkID);
printf("ChunkSize: %d\n", ChunkSize);
printf("Format: %s\n\n", Format);
printf("Subchunk1ID: %s\n", Subchunk1ID);
printf("Subchunk1Size: %d\n", Subchunk1Size);
printf("AudioFormat: %d\n", AudioFormat);
printf("NumChannels: %d\n", NumChannels);
printf("SampleRate: %d\n", SampleRate);
printf("ByteRate: %d\n", ByteRate);
printf("BlockAlign: %d\n", BlockAlign);
printf("BitsPerSample: %d\n\n", BitsPerSample);
printf("Subchunk2ID: %s\n", Subchunk2ID);
printf("Subchunk2Size: %d\n", Subchunk2Size);
fseek(original, 0, SEEK_SET);
fast = fopen(dfast, "wb");
unsigned int fastSampleRate = SampleRate * 2;
unsigned int fastByteRate = 2 * fastSampleRate;
fwrite(ChunkID, 4, 1, fast);
fwrite(&ChunkSize, 4, 1, fast);
fwrite(Format, 4, 1, fast);
fwrite(Subchunk1ID, 4, 1, fast);
fwrite(&Subchunk1Size, 4, 1, fast);
fwrite(&AudioFormat, 2, 1, fast);
fwrite(&NumChannels, 2, 1, fast);
fwrite(&fastSampleRate, 4, 1, fast);
fwrite(&fastByteRate, 4, 1, fast);
fwrite(&BlockAlign, 2, 1, fast);
fwrite(&BitsPerSample, 2, 1, fast);
fwrite(Subchunk2ID, 4, 1, fast);
fwrite(&Subchunk2Size, 4, 1, fast);
short int data;
unsigned int i;
for (i = 0; i < Subchunk2Size / 2; i++) {
fread(&data, 2, 1, original);
fwrite(&data, 2, 1, fast);
}
fclose(fast);
fseek(original, 0, SEEK_SET);
slow = fopen(dslow, "wb");
unsigned int slowSampleRate = SampleRate / 2;
unsigned int slowByteRate = 2 * slowSampleRate;
fwrite(ChunkID, 4, 1, slow);
fwrite(&ChunkSize, 4, 1, slow);
fwrite(Format, 4, 1, slow);
fwrite(Subchunk1ID, 4, 1, slow);
fwrite(&Subchunk1Size, 4, 1, slow);
fwrite(&AudioFormat, 2, 1, slow);
fwrite(&NumChannels, 2, 1, slow);
fwrite(&slowSampleRate, 4, 1, slow);
fwrite(&slowByteRate, 4, 1, slow);
fwrite(&BlockAlign, 2, 1, slow);
fwrite(&BitsPerSample, 2, 1, slow);
fwrite(Subchunk2ID, 4, 1, slow);
fwrite(&Subchunk2Size, 4, 1, slow);
for (i = 0; i < Subchunk2Size / 2; i++) {
fread(&data, 2, 1, original);
fwrite(&data, 2, 1, slow);
}
fclose(slow);
fclose(original);
system("pause");
return EXIT_SUCCESS;
}