Я хочу сделать ее совместимой с любым файлом расширения .wav, который следует за riff wav fmt. Это код, который у меня есть на данный момент.
WaveReader.h:
Код: Выделить всё
typedef struct {
unsigned char ChunkID[4];
uint32_t ChunkSize;
unsigned char Format[4];
unsigned char SubChunk1ID[4];
uint32_t SubChunk1Size;
uint16_t AudioFormat;
uint16_t NumChannels;
uint32_t SampleRate;
uint32_t BytesRate;
uint16_t BlockAlign;
uint16_t BitsPerSample;
unsigned char SubChunk2ID[4];
uint32_t SubChunk2Size;
} RiffWav;
Код: Выделить всё
RiffWav Header;
InFile = fopen(m_strFileName, "rb");
uint64_t Header_Size = 44;// sizeof(InFile);
CHAR* HeaderBuffer = new CHAR[Header_Size];
fread(HeaderBuffer, 0x01, Header_Size, InFile);
int NumChannels = Header.NumChannels;
int BitsPerSample = Header.BitsPerSample
Если я не использую функцию fseek, программа считывает правильные данные из большинства файлов .wav, за исключением нескольких.
Есть есть ли способ, которым мне не нужно использовать функцию fseek, чтобы эта программа была совместима с любыми файлами RIFF wav fmt?
Изменить:
Я выбрал смещение fseek вручную с помощью онлайн-программы чтения файлов .wav, а затем использовал визуальную студию, чтобы увидеть, насколько смещены данные заголовка.
В контексте количество каналов для одного из файлов было 2 в соответствии с онлайн-программой чтения файлов .wav и эта программа имела количество каналов 5200 и BitsPerSample, равный 2. Таким образом, после использования fseek(InFile, 12, SEEK_SET) чтение данных заголовка было правильным.
Подробнее здесь: https://stackoverflow.com/questions/697 ... -wav-files
Мобильная версия