Для преобразования в моно сначала необходимо изменить информацию заголовка, связанную с полем numChannels:
header->numChannels = 1;
header->subchunk2Size /= 2;
header->chunkSize = header->subchunk2Size + 36;
header->byteRate /= 2;
header->blockAlign /= 2;
Затем вы открываете новый файл и записываете в него измененный заголовок:
FILE *fp2 = fopen("new.wav", "wb");
fwrite(header, HEADER_SIZE, 1, fp2);
Создание буфера, который может содержать половинки образца:
size_t channel_size = (size_t) (header->bitsPerSample / 8);
char sample[channel_size];
Чтение и запись левого канала и игнорирование правого канала для всех сэмплов.
for (int i = 0; i < header->subchunk2Size; i += channel_size) {
fread(sample, channel_size, 1, fp1);
fwrite(sample, channel_size, 1, fp2);
fread(sample, channel_size, 1, fp1);
}
При этом будет создан файл, размер которого наполовину меньше исходного, и будет слышен только левый канал. Примечание. Это не означает, что звук будет исходить только от левого наушника.