線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1260
推到 Plurk!
推到 Facebook!

wav合並(檔頭問題)

尚未結案
dsp
一般會員


發表:14
回覆:23
積分:7
註冊:2003-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-26 12:09:41 IP:218.171.xxx.xxx 未訂閱
各位前輩好 我改檔頭的第4和5byte可是不知該怎麼存回去 各位前輩是否能指導一下 下面是我參考別人的程式改的 byte buffer[100000]="0"; byte buffer2[100000]="0"; int handle; if (OpenDialog->Execute()) { TMemoryStream* wav1 = new TMemoryStream(); wav1->LoadFromFile(OpenDialog->FileName); BYTE bBuf=0; for (int i=0;i< wav1->Size;i ) //從第0byte開始讀出 { wav1->Position=i; bBuf=i; wav1->Read(&bBuf,1); buffer[i]=bBuf; } if (OpenDialog->Execute()) { TMemoryStream* wav2 = new TMemoryStream(); wav2->LoadFromFile(OpenDialog->FileName); BYTE bBuf1=0; int i; for (int j=0;j< wav2->Size;j ) //從第0byte開始讀出 { wav2->Position=j; bBuf=i j; wav2->Read(&bBuf,1); buffer2[j]=bBuf; if(j==4) { buffer[j]=buffer[j] buffer2[j] ; } if(j==5) { buffer[j]=buffer[j] buffer[j]; } wav1->Write(&bBuf,1); } wav2->SaveToFile("C:\New2.wav"); } wav1->SaveToFile("C:\New.wav"); delete wav1; } 這個部分我用了很久檔頭都改不了 我聽說可以把陣列直接把陣列存成*.wav 可是我沒找到方法 拜託各位前輩能指導一下 謝謝
mine
中階會員


發表:28
回覆:129
積分:56
註冊:2004-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-26 21:19:38 IP:218.175.xxx.xxx 未訂閱
這是今天剛貼的程式給你作個參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50777
dsp
一般會員


發表:14
回覆:23
積分:7
註冊:2003-10-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-30 11:07:19 IP:218.171.xxx.xxx 未訂閱
大大你好 可是我還是存不好去阿 可否在講解一下
mine
中階會員


發表:28
回覆:129
積分:56
註冊:2004-03-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-31 00:26:55 IP:218.175.xxx.xxx 未訂閱
byte buffer[100000]="0"; int handle; if (OpenDialog->Execute()) { TMemoryStream* wav1 = new TMemoryStream(); wav1->LoadFromFile(OpenDialog->FileName); BYTE bBuf=0; for (int i=0;i< wav1->Size;i ) //從第0byte開始讀出 { wav1->Position=i; bBuf=i; wav1->Read(&bBuf,1); buffer[i]=bBuf; } if (OpenDialog->Execute()) { TMemoryStream* wav2 = new TMemoryStream(); wav2->LoadFromFile(OpenDialog->FileName); BYTE bBuf1=0; int i,wavlen; for (int j=58;j< wav2->Size;j ) //從第58byte開始讀出 { wav2->Position=j; bBuf1=j; wav2->Read(&bBuf1,1); buffer1[wav1->size j]=bBuf1; } 我並不知道你改4,5二個位置的用意何在 但是這應該會造成程式無法判別檔頭 如果這位置另有用意的話,合併的話一般只有處理fact跟data後的資料就行了 buffer1[46]:= xxx(hex計算後的數值start) buffer1[47]:= xxx buffer1[48]:= xxx buffer1[49]:= xxx(hex計算後的數值end)這是fact的部份如果是pcm會是 wav1->size wav2->size-58/2 這樣算首先得知道你的檔頭是不是58Byte 如果是44byte 只要修正buffer1[40]~buffer[43]建議再寫一個判定檔頭大小的fuction這部份不談寫回 wavlen=wav1->size wav2->size-58; wav1->clear; wav1->wirtebuffer(&buffer1,sizeof(wavlen)); wav1->savetofile('new.wav'); delete wav1; delete wav2;還有很多可以潤飾的地方 希望這對你有幫助 write跟writebuffer 的差別你再看一下我發問的文章 還有這是vcl討論區 是否考慮結案重新發問? ------------------------------------------------- 搞不懂!搞不懂!永遠都搞不懂!! 發表人 - mine 於 2004/05/31 00:50:52
dsp
一般會員


發表:14
回覆:23
積分:7
註冊:2003-10-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-01 22:46:23 IP:218.171.xxx.xxx 未訂閱
上面的大大謝謝你 我合檔有全部都有聲音了 我看書寫4~7和40~43都是跟檔案大小有關 以為都要改我就改了但只能用realone player放 我在看你寫的文章說4~7不要改我跟著做成功了謝謝 為什麼4~7不能改呢?我也不知 我只知道4~7是包含第4個byte到檔案結尾的長度 而40~43是從第44byte到檔案結尾的長度 為什麼只要改40~43我就不知了 至於用write我先把兩個wav檔放在陣列裡再用寫回去也是可以 但沒writebuffer這簡單 請問大大你知道要用那個指令可以直接放出來呢? 謝謝大大
mine
中階會員


發表:28
回覆:129
積分:56
註冊:2004-03-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-02 08:19:28 IP:61.221.xxx.xxx 未訂閱
重新到該區發問吧 !畢竟這不是vcl的討論範圍!方便以後的user看文章吧!! 版主大大會生氣的!! ____________________________________________ 這篇是灌水的! /_____\ 不要打我 我怕痛
系統時間:2024-05-17 15:10:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!