為止wav檔頭4~7不能改呢? |
尚未結案
|
dsp
一般會員 發表:14 回覆:23 積分:7 註冊:2003-10-14 發送簡訊給我 |
|
mine
中階會員 發表:28 回覆:129 積分:56 註冊:2004-03-31 發送簡訊給我 |
[quote]
這是影音的範疇你怎麼還是在 vcl 問^^" 不管了
最近找到ms的一份資料 發覺我之前知所以不知所以然在這裡給提供給你參考
RIFF Header
A RIFF file has an 8-byte RIFF header, identifying the file, and giving the residual length after the header (i.e. file_length - 8):
struct {
char id[4]; // identifier string = "RIFF"
DWORD len; // remaining length after this header
} riff_hdr;
The riff_hdr is immediately followed by a 4-byte data type identifier. For .WAV files this is "WAVE" as follows:
char wave_id[4]; // WAVE file identifier = "WAVE"
RIFF Chunks
The entire remainder of the RIFF file is "chunks". Each chunk has an 8-byte chunk header identifying the type of chunk, and giving the length in bytes of the data following the chunk header, as follows:
struct { // CHUNK 8-byte header
char id[4]; // identifier, e.g. "fmt " or "data"
DWORD len; // remaining chunk length after header
} chunk_hdr;
// data bytes follow chunk header
所以並不是修正第4-7 而是第5-8這是RIFF的定義(在buffer裡由0開始計數所以才是4-7的Byte)其DWORD值並不是filesize -4 而是filesize-RIFF struct所以是filesize-8 因為RIFF Handle為8Byte大小 之前你修正了這部份因為數值計算上有出入造成windows無法辦識(這也是爆音的來由)
再則你問如何播放有提供三種方式給你參考
引用 MMsystem Unit
sndPlaySound(filename;SND_SYNC ): BOOL;直接播檔
PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL;直接
由記憶體播放
for delphi;
playsound(Tstream.memory,0,SND_SYNC or SND_MEMORY);
引用 MPlayer Unit
或再經由Mediaplay去播(EX:mp1:TMediaplay)
mp1.FileName:='yourfile';
mp1.open;
mpl.play;這部份你再多看一下參考吧
---------------------------------------------
搞不懂!搞不懂!永遠都搞不懂!! 發表人 -
|
dsp
一般會員 發表:14 回覆:23 積分:7 註冊:2003-10-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |