全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1903
推到 Plurk!
推到 Facebook!

將許多wav檔的buffer合併存成一個新的wav

尚未結案
o1016
一般會員


發表:4
回覆:7
積分:2
註冊:2003-03-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-09 13:06:16 IP:61.223.xxx.xxx 未訂閱
很抱歉~我之前有問過這個問題了~可是後來我不是用TMemoryStream的做法來合併聲音檔的buffer~我是自己定一個short *soundbf來存wav檔的buffer~~存完後用記憶體播音測試的結果都ok~~~只是我現在需要將這些buffer存成一個新的wav檔~我不知道要用什麼方法才行?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-09 13:16:42 IP:140.135.xxx.xxx 未訂閱
o1016您好:  
引言:只是我現在需要將這些buffer存成一個新的wav檔~我不知道要用什麼方法才行?
我看了您上次的文章: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27889 用TMemoryStream的方式 要存成新的wav檔,應該可以用下面的方式
 
     TMemoryStream* wav=new TMemorySytrem();
     //您之前的合併處理         wav->SaveToFile("New.wav"); //但是做這動作之前必須包含wav的檔頭資訊才行
     delete wav;
    
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
o1016
一般會員


發表:4
回覆:7
積分:2
註冊:2003-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-09 16:45:56 IP:61.223.xxx.xxx 未訂閱
那那那..請問如果我不是用TMemoryStream的方式的話....該怎麼做?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-09 16:59:43 IP:140.135.xxx.xxx 未訂閱
o1016您好:  
引言:請問如果我不是用TMemoryStream的方式的話....該怎麼做?
那您之前的方式是如何做的呢??? 方便貼上的您的方式讓大家幫您看看嗎??? 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
o1016
一般會員


發表:4
回覆:7
積分:2
註冊:2003-03-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-09 17:34:08 IP:61.223.xxx.xxx 未訂閱
恩~~貼這樣不知道大家能不能了解... 我還算新手~~~如果寫的方式很奇怪~~ 請給予指教~這個是我用一本書上的範例修改而成的~ -------------------------------------------------------------------- int TForm1::open(char* fname,int j,int i)    {   if(pVoiceBuffer[i])         pVoiceBuffer[i] = NULL;    if(v2)         v2 = NULL;      if(f) { f=NULL;}     PlayBtn->Enabled    = true;     sOpenFileName = fname;     f = new TFileStream( sOpenFileName , fmShareDenyWrite );     cpHeader = new char[44];     f->ReadBuffer(cpHeader,44);     f->Seek(22,soFromBeginning);     f->Read(&sChannels,sizeof(short));     f->Seek(24,soFromBeginning);     f->Read(&lSamplingRate,sizeof(long));      f->Seek(34,soFromBeginning);      f->Read(&sBitsPerSample,sizeof(short));      f->Seek(40,soFromBeginning);     f->Read(&lFileSize,sizeof(long));      if(sBitsPerSample == 8)             iSampleSize = lFileSize;     else if(sBitsPerSample == 16)             iSampleSize = lFileSize/2;     else     {         MessageDlg("Not PCM formats!!",mtInformation,TMsgDlgButtons()<Seek(44,soFromBeginning); f->ReadBuffer( pVoiceBuffer[i],lFileSize ); gg[i]= iSampleSize*2; v2= new short [iSampleSize j]; if (i==3) { a=0; for(int x=0;x<=i;x ) { memcpy(v2 (a/2),pVoiceBuffer[x],gg[x]); a =gg[x]; } } addsize =lFileSize; return (iSampleSize); } //------------------------------------------------------------------------------ void __fastcall TForm1::PlayBtnClick(TObject *Sender) { char *s; int j=0; s="今.wav"; j=open(s,j,0); s="天.wav"; j=j open(s,j,1); s="天.wav"; j=j open(s,j,2); s="氣.wav"; j=j open(s,j,3); Play(); addsize=0; }
o1016
一般會員


發表:4
回覆:7
積分:2
註冊:2003-03-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-09 17:40:29 IP:61.223.xxx.xxx 未訂閱
v2為我所有聲音的buffer檔.. 尚未加入標頭檔~ 到時候我會再加上去... 所以我現在想將這些buffer存成一個新的wav檔..
o1016
一般會員


發表:4
回覆:7
積分:2
註冊:2003-03-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-12 21:14:02 IP:61.223.xxx.xxx 未訂閱
恩~`可能我用的方式有點奇怪吧~ 我在試試別的方法~ 總之~還是很謝謝你回答我的問題!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-12 22:33:58 IP:140.135.xxx.xxx 未訂閱
o1016您好:   幫不上忙實在是不好意思...   不過,我說說我的想法您參考一下   假設有wav1與wav2,下面的code是將wav2除了Header以外的   資訊存入buffer[]中     
 
byte buffer[100000]="0";
 if (OpenDialog1->Execute())
  {
   TMemoryStream* wav1 = new TMemoryStream();
   wav1->LoadFromFile(OpenDialog1->FileName);
   BYTE bBuf=0;       for (int i=44;i< wav1->Size;i  )  //從第45byte開始讀出
    {
     wav1->Position=i;
     bBuf=i;
     wav1->Read(&bBuf,1);  //寫wav1->Write(&bBuf, 1);
     buffer[i-44]=bBuf;
    }
     delete wav1;
   }
   
緊接著把它(budder[])寫入wav1結尾資料之後,再修改Header內的資訊... 最後再用之前提到的方式存成New.wav 不知道我這樣想有沒有錯< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/05/18 19:13:21
系統時間:2024-04-27 0:12:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!