1
這是我的代碼部分用於讀取.wav文件使用mmio函數讀取列表塊失敗?
//Variable
wavehdr:TWaveHeader;
ckiRIFF,ckiFmt,ckiData,ckiLIST: TMMCKInfo;
mmioinfo: PMMIOInfo;
waveFmt: TWaveFormatEx;
buf: Array of smallint;
buf_recon: Array of double;
list:Array of longint; // THIS IS MY GUESS so it's definetly not work
HMMIO: hFile;
//Locate the "RIFF" chunk
ckiRIFF.fccType := mmioStringToFOURCC('WAVE',0);
mmioDescend(HMMIO, @ckiRIFF, nil, MMIO_FINDRIFF);
mmioAscend(HMMIO, @ckiRIFF, MMIO_FINDRIFF);
//Locate the "FMT" subchunk
ckiFmt.ckid := mmioStringToFOURCC('fmt', 0);
mmioDescend(HMMIO, @ckiFmt, nil, MMIO_FINDCHUNK);
mmioRead(HMMIO, @waveFmt, ckiFmt.cksize);
mmioAscend(HMMIO, @ckiFmt, 0);
//Locate the "LIST" chunk (THIS PART IS NOT WORK)
ckiLIST.fccType := mmioStringToFOURCC('LIST',0);
mmioDescend(HMMIO, @ckiLIST, nil, MMIO_FINDLIST);
mmioRead(HMMIO, @list, ckiLIST.cksize);
mmioAscend(HMMIO, @ckiFmt, 0);
//Locate the "data" subchunk
ckiData.ckid := mmioStringToFOURCC('data', 0);
if (mmioDescend(HMMIO, @ckiData, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) then begin
SetLength(buf, ckiData.cksize);
mmioRead(HMMIO, PAnsiChar(buf), ckiData.cksize);
而且它的工作只是完美,直到我意識到我錯過了LIST塊,這裏我只設法獲得「LIST」。這裏文件之前,我閱讀和寫回,並有單塊,它的數據
這裏的例子是後我閱讀和寫回
標誌着我走了一部分。所以,如果有人知道我錯在這裏請大家幫我
編輯1
我也跟着你的建議,但結果卻是這樣的編輯1 –
好像我錯過了什麼,這部分//讀取的塊數據的需要......我應該使用mmioRead(HMMIO,@inam,ckiINAM.cksize); ?以及我需要存儲什麼變量? –
好吧,我想出來感謝你的人。我仍然在挖掘它,因爲不是所有的wav文件都有INAM塊,而且有些INAM塊可能比存儲創建文件日期的塊等INAM塊大。你真棒! –