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

如何將資料寫入去檔頭????

答題得分者是:Windyboy
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-02 09:28:16 IP:61.64.xxx.xxx 未訂閱
若要播放去擋頭的WAV檔,就必須將前44BYTE的資料寫回到去檔頭中... 還必須將當初WAV檔的格式如幾聲道獲取樣頻率多少等... 相同的格式寫入去檔頭中才可順利播放... 小弟我目前卡在不知將如何把資料寫回到去檔頭中..... 比方我要開啟一個test.pcm的去檔頭檔案...他原本格式是 取樣頻率48000,單聲道,Reolution=16BIT 該如何還原呢??? 小弟我找到這個程式碼 //變數宣告 DWORD SizeOfFile; DWORD SizeWaveChunk; WORD WaveTypeFormat; //PCM. WORD MonoStereo; //0x01 Mono. 0x02 Stereo. DWORD SampleRate; DWORD BytesSample; WORD BlockAlignment; WORD BitsSample; DWORD SizeDataChunk; DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. SaveToFile(AnsiString SaveFileName) { HANDLE HFile; //Create a waveform audio file. HFile=CreateFile(SaveFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(HFile==INVALID_HANDLE_VALUE) throw("Error on CreateFile"); //Define the file format is waveform audio WriteFile(HFile,"RIFF",4,&Temp,NULL); //0~3 Byte m_SizeOfFile=44 nDataChunks*2-8; WriteFile(HFile,&SizeOfFile,4,&Temp,NULL); //4~7 Byte WriteFile(HFile,"WAVE",4,&Temp,NULL); //8~11 Byte //Waveform format WriteFile(HFile,"fmt ",4,&Temp,NULL); //12~15 Byte WriteFile(HFile,&SizeWaveChunk,4,&Temp,NULL); //16~19 Byte WriteFile(HFile,&WaveTypeFormat,2,&Temp,NULL); //20~12 Byte WriteFile(HFile,&MonoStereo,2,&Temp,NULL); //22~23 Byte WriteFile(HFile,&SampleRate,4,&Temp,NULL); //24~27 Byte WriteFile(HFile,&BytesSample,4,&Temp,NULL); //28~31 Byte WriteFile(HFile,&BlockAlignment,2,&Temp,NULL); //32~33 Byte WriteFile(HFile,&BitsSample,2,&Temp,NULL); //34~35 Byte //Waveform data size WriteFile(HFile,"data",4,&Temp,NULL); //36~39 Byte SizeOfData=nDataChunks*2; WriteFile(HFile,&SizeOfData,4,&Temp,NULL); //40~43 Byte //寫入音訊資料段(44~ Byte) WriteFile(m_HFile,WaveData,SizeOfData,&Temp,NULL); CloseHandle(HFile); } 是由koni前輩提供的...但是我編譯時會出現錯誤說.... 不知該如何解決呢....小弟這問題可能很蠢... 但是這真的困擾我很久了說...
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-02 09:42:36 IP:219.84.xxx.xxx 未訂閱
引言: 若要播放去擋頭的WAV檔,就必須將前44BYTE的資料寫回到去檔頭中... 還必須將當初WAV檔的格式如幾聲道獲取樣頻率多少等... 相同的格式寫入去檔頭中才可順利播放... 小弟我目前卡在不知將如何把資料寫回到去檔頭中..... 比方我要開啟一個test.pcm的去檔頭檔案...他原本格式是 取樣頻率48000,單聲道,Reolution=16BIT 該如何還原呢??? 小弟我找到這個程式碼 //變數宣告 DWORD SizeOfFile; DWORD SizeWaveChunk; WORD WaveTypeFormat; //PCM. WORD MonoStereo; //0x01 Mono. 0x02 Stereo. DWORD SampleRate; DWORD BytesSample; WORD BlockAlignment; WORD BitsSample; DWORD SizeDataChunk; DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. SaveToFile(AnsiString SaveFileName) { HANDLE HFile; //Create a waveform audio file. HFile=CreateFile(SaveFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(HFile==INVALID_HANDLE_VALUE) throw("Error on CreateFile"); //Define the file format is waveform audio WriteFile(HFile,"RIFF",4,&Temp,NULL); //0~3 Byte m_SizeOfFile=44 nDataChunks*2-8; WriteFile(HFile,&SizeOfFile,4,&Temp,NULL); //4~7 Byte WriteFile(HFile,"WAVE",4,&Temp,NULL); //8~11 Byte //Waveform format WriteFile(HFile,"fmt ",4,&Temp,NULL); //12~15 Byte WriteFile(HFile,&SizeWaveChunk,4,&Temp,NULL); //16~19 Byte WriteFile(HFile,&WaveTypeFormat,2,&Temp,NULL); //20~12 Byte WriteFile(HFile,&MonoStereo,2,&Temp,NULL); //22~23 Byte WriteFile(HFile,&SampleRate,4,&Temp,NULL); //24~27 Byte WriteFile(HFile,&BytesSample,4,&Temp,NULL); //28~31 Byte WriteFile(HFile,&BlockAlignment,2,&Temp,NULL); //32~33 Byte WriteFile(HFile,&BitsSample,2,&Temp,NULL); //34~35 Byte //Waveform data size WriteFile(HFile,"data",4,&Temp,NULL); //36~39 Byte SizeOfData=nDataChunks*2; WriteFile(HFile,&SizeOfData,4,&Temp,NULL); //40~43 Byte //寫入音訊資料段(44~ Byte) WriteFile(m_HFile,WaveData,SizeOfData,&Temp,NULL); CloseHandle(HFile); } 是由koni前輩提供的...但是我編譯時會出現錯誤說.... 不知該如何解決呢....小弟這問題可能很蠢... 但是這真的困擾我很久了說...
紅色部份的Code拿掉, 再將你的PCM音訊資料讀入WaveData, 就可以了^_^ WaveData應該是宣告為 Byte WaveData; 使用TFileStream或fopen都可以將你的PCM音訊資料讀入. -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-02 09:59:33 IP:61.64.xxx.xxx 未訂閱
我在這邊也出現錯誤說 SaveToFile(AnsiString SaveFileName) 謝謝你的回應    //變數宣告 DWORD SizeOfFile; DWORD SizeWaveChunk; WORD WaveTypeFormat; //PCM. WORD MonoStereo; //0x01 Mono. 0x02 Stereo. DWORD SampleRate; DWORD BytesSample; WORD BlockAlignment; WORD BitsSample; DWORD SizeDataChunk; DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. SaveToFile(AnsiString SaveFileName) { HANDLE HFile; //Create a waveform audio file. HFile=CreateFile(SaveFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(HFile==INVALID_HANDLE_VALUE) throw("Error on CreateFile"); //Define the file format is waveform audio WriteFile(HFile,"RIFF",4,&Temp,NULL); //0~3 Byte m_SizeOfFile=44 nDataChunks*2-8; WriteFile(HFile,&SizeOfFile,4,&Temp,NULL); //4~7 Byte WriteFile(HFile,"WAVE",4,&Temp,NULL); //8~11 Byte //Waveform format WriteFile(HFile,"fmt ",4,&Temp,NULL); //12~15 Byte WriteFile(HFile,&SizeWaveChunk,4,&Temp,NULL); //16~19 Byte WriteFile(HFile,&WaveTypeFormat,2,&Temp,NULL); //20~12 Byte WriteFile(HFile,&MonoStereo,2,&Temp,NULL); //22~23 Byte WriteFile(HFile,&SampleRate,4,&Temp,NULL); //24~27 Byte WriteFile(HFile,&BytesSample,4,&Temp,NULL); //28~31 Byte WriteFile(HFile,&BlockAlignment,2,&Temp,NULL); //32~33 Byte WriteFile(HFile,&BitsSample,2,&Temp,NULL); //34~35 Byte //Waveform data size WriteFile(HFile,"data",4,&Temp,NULL); //36~39 Byte SizeOfData=nDataChunks*2; WriteFile(HFile,&SizeOfData,4,&Temp,NULL); //40~43 Byte //寫入音訊資料段(44~ Byte) WriteFile(m_HFile,WaveData,SizeOfData,&Temp,NULL); CloseHandle(HFile); }
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-02 10:13:20 IP:219.84.xxx.xxx 未訂閱
Hi mtmkid: 我不太了解你回這篇文章想表達的是什麼耶~~ 能夠說清楚些嗎@.@? 我看的有點 [霧沙沙] ....呵呵 -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-02 10:49:18 IP:61.64.xxx.xxx 未訂閱
對不起喔!!表達的不清楚....真是抱歉 小弟我寫了一個錄音程式可錄成WAV檔案和去檔頭的PCM檔案 去檔頭的PCM檔案就是把WAV檔的前44Byte刪掉所產生的... 而現在我想要播放PCM檔案就必須把刪掉的44Byte寫回來才可播放.... 我的問題卡在該如何將這44Byte寫回來呢??? 這44Byte,某段落位元中都代表著原本WAV檔案的格式 比如說22~23Byte是代表單聲或立體聲... 我該如何將這44Byte的資料依序寫回到PCM檔案中呢??? 不知道該怎麼下手說!!!!
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-02 11:22:22 IP:219.84.xxx.xxx 未訂閱
Hi mtmkid: 你這個問題不就是你一開始發文的問題嗎? 你第一篇發文中的Code只要修改一下就可以使用了, 我在第二篇發文中就是在解釋說要怎麼修改你那段Code, 然後你發第三篇文章的用意才是我真正不了解的文章, 是說你不清楚我在寫什麼嗎...還是...@.@?...呵呵 難道~~這就是傳說中的 [代溝] 嗎XD ^_______^ -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-02 13:33:03 IP:61.62.xxx.xxx 未訂閱
呵呵呵...真是拍謝啦.... 你說只要Code修改一下就可以了 但是小弟我照你的方式修改了還是不能WORK說 不好意思小弟我功力太淺了... SaveToFile(AnsiString SaveFileName) 再這一行編譯出現錯誤,程式不能跑呢 感謝你的回應!! 發表人 - mtmkid 於 2004/10/02 13:37:57
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-02 13:50:42 IP:219.84.xxx.xxx 未訂閱
Hi^^ 你把錯誤訊息PO出來唄! 這樣講我也不知你錯在什麼地方, 因為我那樣改過後就可以RUN了 如果能將你的CODE放上來會更好。 -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-02 14:00:57 IP:61.62.xxx.xxx 未訂閱
真的很感謝Windyboy版主不惜厭煩的幫忙阿!!讓小弟我好感動喔!! 我的錯誤程式是這樣子的 [
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-02 14:16:24 IP:219.84.xxx.xxx 未訂閱
你的問題不是SaveToFile這個Func有問題, 而是呼叫的問題, 例如你在Form1下Button1的Click事件中呼叫 那你SaveToFile的函式原型就要放在Click事件的上面, 意思就是要在你呼叫SaveToFile之前先宣告 或者是把SaveToFile改成 TForm1::SaveToFile(AnsiString SaveFileName) { } 在.h檔裡加一行 public: SaveToFile(AnsiString SaveFileName); 讓SaveToFile變成Form1的成員函式 就不會出現那些Error了 幫忙是應該的啦...哪天我搞不好也需要你的幫忙^^ 互相囉:) -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-02 16:11:05 IP:61.62.xxx.xxx 未訂閱
請問這行是有做什麼動作呢 SaveToFile(AnsiString SaveFileName) 為什麼要有這行??
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-10-02 17:38:20 IP:219.84.xxx.xxx 未訂閱
這是我測OK的Code,試試看吧!    .cpp ===============================================
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
BYTE *WaveData;
DWORD SizeOfFile;
DWORD SizeWaveChunk;
WORD WaveTypeFormat; //PCM.
WORD MonoStereo; //0x01 Mono. 0x02 Stereo.
DWORD SampleRate;
DWORD BytesSample;
WORD BlockAlignment;
WORD BitsSample;
DWORD SizeDataChunk;
DWORD Temp; //lpNumberOfBytesWritten.
WORD nDataChunks; //Sample numbers.
DWORD SizeOfData; //The size of real WAV data.
DWORD SizeChunk; //(one)Sample width.
SaveToFile(AnsiString SaveFileName)
{
HANDLE HFile;    //Create a waveform audio file.
HFile=CreateFile(SaveFileName.c_str(),
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);    if(HFile==INVALID_HANDLE_VALUE)
throw("Error on CreateFile");    //Define the file format is waveform audio
WriteFile(HFile,"RIFF",4,&Temp,NULL); //0~3 Byte    SizeOfFile=44 nDataChunks*2-8;    WriteFile(HFile,&SizeOfFile,4,&Temp,NULL); //4~7 Byte
WriteFile(HFile,"WAVE",4,&Temp,NULL); //8~11 Byte    //Waveform format
WriteFile(HFile,"fmt ",4,&Temp,NULL); //12~15 Byte
WriteFile(HFile,&SizeWaveChunk,4,&Temp,NULL); //16~19 Byte
WriteFile(HFile,&WaveTypeFormat,2,&Temp,NULL); //20~12 Byte
WriteFile(HFile,&MonoStereo,2,&Temp,NULL); //22~23 Byte
WriteFile(HFile,&SampleRate,4,&Temp,NULL); //24~27 Byte
WriteFile(HFile,&BytesSample,4,&Temp,NULL); //28~31 Byte
WriteFile(HFile,&BlockAlignment,2,&Temp,NULL); //32~33 Byte
WriteFile(HFile,&BitsSample,2,&Temp,NULL); //34~35 Byte    //Waveform data size
WriteFile(HFile,"data",4,&Temp,NULL); //36~39 Byte    SizeOfData=nDataChunks*2;    WriteFile(HFile,&SizeOfData,4,&Temp,NULL); //40~43 Byte    //寫入音訊資料段(44~ Byte)
WriteFile(HFile,WaveData,SizeOfData,&Temp,NULL);    CloseHandle(HFile);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TFileStream *fsPCM = new TFileStream("C:\\Test.pcm", fmOpenRead);
  WaveData = new BYTE[fsPCM->Size];      fsPCM->Read(WaveData, fsPCM->Size);
  SaveToFile("C:\\Test.wav");      delete WaveData;
  delete fsPCM;
}
//---------------------------------------------------------------------------
.h ===================================================== //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif ==================================================== -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-10-02 20:59:30 IP:61.64.xxx.xxx 未訂閱
原來是這樣子的阿,突然覺得我自己好蠢喔...< >< > 目前已經可以順利RUN這個程式了 但是產生的WAV檔怎麼不能播放呢??? 是不是這些變數要給他數值呢??/ DWORD SizeOfFile; DWORD SizeWaveChunk; WORD WaveTypeFormat; //PCM. WORD MonoStereo=1; //0x01 Mono. 0x02 Stereo. DWORD SampleRate; DWORD BytesSample; WORD BlockAlignment; WORD BitsSample; DWORD SizeDataChunk; DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. 不知道是不是呢??? 感激
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-10-03 01:10:21 IP:219.84.xxx.xxx 未訂閱
是的 WAV檔的前44 Byte都有其意義, 建議你先去多查查Wave的Format, 這樣才知道程式的用意何在, 到Google打wav file format 就可以查到很多資料了。 -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-10-03 13:26:52 IP:61.64.xxx.xxx 未訂閱
DWORD SizeOfFile;     //4~7 Byte檔案總長度 DWORD SizeWaveChunk=16; //16~19 Byte說明資料結構PCMWAVEFORMAT的大小,我給他的值為16 WORD WaveTypeFormat=1;//20~12Byte wave檔的聲音檔格式,我給他的值為1 WORD MonoStereo=1; //22~23Byte聲音幾聲道1為單聲2為立體聲,給1 DWORD SampleRate=48000;//24~27 Byte每秒的取樣數,給48000 DWORD BytesSample=48000;//28~31 Byte每秒資料量,給48000 WORD BlockAlignment=1;//32~33 Byte區塊大小,給1 WORD BitsSample=8;//34~35 Byte取樣位元數,給8 DWORD SizeDataChunk;//40~43 Byte檔案大小 DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. 不知道是不是這樣給數值呢??? 其中檔案總長度和檔案大小該如何得知呢??? 去檔頭中的資料已被刪掉該從何得知呢??? 這四各變數該給什麼數值呢???我不清楚做什麼用的說?? DWORD Temp; //lpNumberOfBytesWritten. WORD nDataChunks; //Sample numbers. DWORD SizeOfData; //The size of real WAV data. DWORD SizeChunk; //(one)Sample width. 煩請前輩在幫我解惑!!!感激!!
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-10-04 09:33:58 IP:220.130.xxx.xxx 未訂閱
Hi mtmkid: 我覺得你應該自己再去多查點資料, 先將觀念建立好, 這樣你就會知道WAVE的檔頭該放什麼東西, 哪些變數該於什麼樣的數值你自己就會一清二楚, 不是我不回答你, 只是我覺得這些東西是查一下資料就會做的出來的, 也不用問人, 試著做出一個WAVE檔後, 播放看看就知道對不對了, 網路真的是什麼都有, Google真的是超好用,^_______^ 千萬不要怪我不回答你的問題啊~~ 我只是覺得這樣對你比較好^^ 最後再補充一句, 就是 單單有PCM的資料, 要怎麼得知它原來的Sample Rate等等的資料, 我還真不知道呢@.@? -------------------------- ~天下本無事 庸人自擾之~
mtmkid
一般會員


發表:17
回覆:19
積分:7
註冊:2004-04-12

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-10-06 15:16:27 IP:61.64.xxx.xxx 未訂閱
成功了!!!總算是成功了!! 真是太感謝Windyboy版大用心良苦了....總算靠自己的力量解決了問題!!! m_SizeOfFile=44+nDataChunks*2-8; SizeOfData=nDataChunks*2; 仔細研究這兩行的用意總算了解 原來是利用去檔頭的檔案大小除以取樣頻率數    程式修改如下 我將它改成可自選讀某一個去檔頭的WAV檔..... 但是現在第一次讀去檔頭時順利改成WAV檔 第二次在讀去檔頭檔案時就出現錯誤了說.... if(HFile==INVALID_HANDLE_VALUE) throw("Error on CreateFile"); 不知道是什麼原因耶,困惑了我許久說....         
SaveToFile(AnsiString SaveFileName)
{    HANDLE HFile;    //Create a waveform audio file.
HFile=CreateFile(SaveFileName.c_str(),
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);    if(HFile==INVALID_HANDLE_VALUE)
throw("Error on CreateFile");    //Define the file format is waveform audio
WriteFile(HFile,"RIFF",4,&Temp,NULL); //0~3 Byte    SizeOfFile=44 SampleRate*SizeChunk-8;    WriteFile(HFile,&SizeOfFile,4,&Temp,NULL); //4~7 Byte
WriteFile(HFile,"WAVE",4,&Temp,NULL); //8~11 Byte    //Waveform format
WriteFile(HFile,"fmt ",4,&Temp,NULL); //12~15 Byte
WriteFile(HFile,&SizeWaveChunk,4,&Temp,NULL); //16~19 Byte
WriteFile(HFile,&WaveTypeFormat,2,&Temp,NULL); //20~12 Byte
WriteFile(HFile,&MonoStereo,2,&Temp,NULL); //22~23 Byte
WriteFile(HFile,&SampleRate,4,&Temp,NULL); //24~27 Byte
WriteFile(HFile,&BytesSample,4,&Temp,NULL); //28~31 Byte
WriteFile(HFile,&BlockAlignment,2,&Temp,NULL); //32~33 Byte
WriteFile(HFile,&BitsSample,2,&Temp,NULL); //34~35 Byte    //Waveform data size
WriteFile(HFile,"data",4,&Temp,NULL); //36~39 Byte    SizeOfData=SampleRate*SizeChunk;    WriteFile(HFile,&SizeOfData,4,&Temp,NULL); //40~43 Byte    //寫入音訊資料段(44~ Byte)
WriteFile(HFile,WaveData,SizeOfData,&Temp,NULL);    CloseHandle(HFile);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::OpenpcmExecute(TObject *Sender)
{
   OpenDialog1->Filter="去檔頭(*.pcm)|*.pcm";
   if (OpenDialog1->Execute()==true)
   {
      File_name=OpenDialog1->FileName;
      PCM->ShowModal();
      TFileStream *fsPCM = new TFileStream(OpenDialog1->FileName, fmOpenRead);
      WaveData = new BYTE[fsPCM->Size];
      SizeDataChunk=fsPCM->Size;
      SizeChunk=SizeDataChunk/SampleRate;
      fsPCM->Read(WaveData, fsPCM->Size);
      SaveToFile("C:\\t.wav");
      delete WaveData;
      delete fsPCM;       }
}
//---------------------------------------------------------------------------
 
系統時間:2024-05-17 10:28:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!