wav合並(檔頭問題) |
尚未結案
|
dsp
一般會員 發表:14 回覆:23 積分:7 註冊:2003-10-14 發送簡訊給我 |
各位前輩好
我改檔頭的第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 發送簡訊給我 |
|
dsp
一般會員 發表:14 回覆:23 積分:7 註冊:2003-10-14 發送簡訊給我 |
|
mine
中階會員 發表:28 回覆:129 積分:56 註冊:2004-03-31 發送簡訊給我 |
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 發送簡訊給我 |
上面的大大謝謝你
我合檔有全部都有聲音了
我看書寫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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |