Вот это условие - никогда не выполняется if(chunk.chunkId == CT_data){
почему - фиг его знает. Надо за шаг до этой проверки получить логгирование chunkId и offset из читаемого файла.
И посмотреть внутрь самого файла. Соотвествует ли реальности.
MuffinLover, после "if( chunk.chunkId == CT_fmt )" ты ничего не записываешь в chunk, но ожидаешь, что тип поменялся. Видимо вместо fmtChunk должен быть chunk
maaGames, https://pastebin.com/mZ15SS5K
О, вот так находит data chunk, но почему-то два раза 0_0
RIFF Size: 21895392
RIFF Type: WAVE
fmt
DATA FOUND 0
eofeofDATA FOUND 1
MuffinLover, ну после eof не стоит ничего читать из файла. А после двух eof - тем более!
Не знаю, UB или не UB, скорее всего, чтение файла после eof не происходит и в chunk остаётся "мусор" с прошлого раза. Я бы ожидал, что исключеие кинет, но, не кидает, как видим.
В начале цикла while проверяй, что не eof. Вообще перед каждым чтением проdеряй, что не eof.
MuffinLover, while(rawWavFile) и while( !rawWavFile.fail() ) - одно и то же и было правильно. Правильнее, чем rawWavFile.eof(). значит seekg в конце цикла передвигал не в eof положение и следующая итерация запускалась, но считать уже ничего не получалось и chunk оставался старый, а на следующей итерации уже fail срабатывал.
maaGames, https://pastebin.com/3W85fXWr
Огромное спасибо! И вот такой последний глупый вопрос
RIFF Size: 21895392
RIFF Type: WAVE
fmt
data
Channels num: 0
asd
А почему он fmtChunk норм парсит, а dataChunk все нули, не парсит :C