104 lines
3.1 KiB
C++
104 lines
3.1 KiB
C++
// ----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
struct WAVE
|
|
{
|
|
char riffId[4];
|
|
int riffBytes;
|
|
char waveId[4];
|
|
};
|
|
|
|
union CHUNK
|
|
{
|
|
struct
|
|
{
|
|
char fmtId[4];
|
|
int fmtBytes;
|
|
short audioFormat;
|
|
short numChannels;
|
|
int samplesPerSec;
|
|
int bytesPerSec;
|
|
short blockAlign;
|
|
short bitsPerSample;
|
|
short byteExtra;
|
|
} FMT;
|
|
|
|
struct
|
|
{
|
|
char dataId[4];
|
|
int dataBytes;
|
|
} DATA;
|
|
};
|
|
|
|
for (int arg = 1; arg < argc; arg++) {
|
|
FILE *fp = fopen(argv[arg], "rb");
|
|
if (fp == NULL) {
|
|
printf("Couldn't read %s\n", argv[arg]);
|
|
}
|
|
|
|
printf("%s\n", argv[arg]);
|
|
|
|
WAVE wave;
|
|
CHUNK chunk;
|
|
|
|
fread(&wave, 1, sizeof(wave), fp);
|
|
if (strncmp(wave.riffId, "RIFF", 4) != 0 ||
|
|
strncmp(wave.waveId, "WAVE", 4) != 0) {
|
|
printf(" riffId: %-4.4s\n", wave.riffId);
|
|
printf(" riffBytes: %d\n", wave.riffBytes);
|
|
printf(" waveId: %-4.4s\n", wave.waveId);
|
|
printf("!!!\n");
|
|
return 1;
|
|
}
|
|
|
|
int offset = ftell(fp);
|
|
|
|
while (fread(&chunk.DATA, 1, sizeof(chunk.DATA), fp) != 0) {
|
|
if (strncmp(chunk.DATA.dataId, "data", 4) == 0) {
|
|
}
|
|
else if (strncmp(chunk.DATA.dataId, "fmt ", 4) == 0) {
|
|
fseek(fp, offset, SEEK_SET);
|
|
fread(&chunk.FMT, 1, sizeof(chunk.FMT), fp);
|
|
|
|
if (chunk.FMT.audioFormat != 1) {
|
|
printf(" audioFormat: %d\n", chunk.FMT.audioFormat);
|
|
printf("!!!\n");
|
|
break;
|
|
}
|
|
if (chunk.FMT.blockAlign !=
|
|
(chunk.FMT.bitsPerSample * chunk.FMT.numChannels) / 8) {
|
|
printf(" numChannels: %d\n", chunk.FMT.numChannels);
|
|
printf(" blockAlign: %d\n", chunk.FMT.blockAlign);
|
|
printf(" bitsPerSample: %d\n", chunk.FMT.bitsPerSample);
|
|
printf("!!!\n");
|
|
break;
|
|
}
|
|
printf("channels=%1d samplesPerSec=%5d bitsPerSamples=%2d\n",
|
|
chunk.FMT.numChannels,
|
|
chunk.FMT.samplesPerSec,
|
|
chunk.FMT.bitsPerSample);
|
|
}
|
|
else {
|
|
printf(" Id: %-4.4s\n", chunk.DATA.dataId);
|
|
printf(" Bytes: %d\n", chunk.DATA.dataBytes);
|
|
}
|
|
|
|
offset += 8 + chunk.DATA.dataBytes;
|
|
fseek(fp, offset, SEEK_SET);
|
|
}
|
|
fclose(fp);
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|