Wav檔案格式及相關API解釋

來源:互聯網
上載者:User

什麼是Wav檔案.
Wav檔案直接反映了一個聲音在每個時刻的大小值,比如說以下一段波形:
我們按每人0.1秒取一點,得到的wav檔案數值就是0,1,1,-1,0,1。因此,假如我們能把許多Wav檔案的資料直接相加,你聽到的就是所有的聲音,這就是混音器的原理。
下面我們分析一下Wav檔案結構:
我們可以開啟一個Wav檔案直接看其二進位碼:
C:/user/wave/22.wav
00000000 5249 4646 9CB6 1E00 5741 5645 666D 7420
00000010 1000 0000 0100 0200 2256 0000 44AC 0000
00000020 0200 0800 6461 7461 78B6 1E00 7F7F 7F7F  
00000030.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F  
00000040.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F
00000050.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F  
00000060.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F  
00000070.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F  
00000080.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F
00000090.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F  
000000A0.7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F 7F7F
大家可以看到wav檔案儲存體格式如下:
 
"RIFF"  
×××× 檔案大小  
"WAVE"  
"fmt"  
×××× PCMWAWFORMAT——資料結構大小  
××××  
…… 資料結構“PCMWAVEFORMAT”
××××  
data  
×××× 資料大小  
∶ 資料  
 
首先是字串“RIFF”,表示此檔案遵循一種標準格式名為“資源互換檔案格式”(Resource Intercharge Format)。後面緊跟四個位元組指明檔案大小。其次是字串“WAVE”和“fmt”,後面緊跟一個名為“PCMWAVEFORMAT”的結構,最後是字串“data”,緊跟資料大小及所有資料。PIFF檔案為一種樹狀結構,基本構成單位是“塊”,圖5.2中是wav檔案中“塊”關係圖。

圖 5.2
,wav檔案結構為兩層,由父塊“RIFF”和兩個子塊“fmt”、“data”組成。“fmt”塊包含wav檔案格式資訊,“data”塊包含資料資訊。  

2003-7-22 15:29:00   

查看評語»»»   

 2003-7-23 15:52:38    WAV 檔案編輯(截取,合并,插入)的實現原理

確切地說 WAV 檔案的編輯其實就是拼合檔案,並重建檔案頭.
僅此而已.  

 

 2003-7-25 18:15:00    稍候::說一下WAVEOUT 等 API.

稍候::說一下WAVEOUT 等 API.

 

 2003-11-12 9:58:58    多媒體處理的API

多媒體處理的API

waveInAddBuffer向聲音輸入裝置發送緩衝區
waveInClose關閉聲音輸入裝置
waveInGetDevCaps擷取聲音輸入裝置效能
waveInGetErrorText擷取聲音出錯的資訊文本
waveInGetID擷取聲音輸入裝置ID
waveInGetNumDevs返回聲音輸入裝置數量
waveInGetPosition擷取聲音裝置輸入位置
waveInMessage向聲音輸入裝置發送資訊
waveInOpen開啟聲音輸入裝置
waveInPrepareHeader預備聲音輸入緩衝區
waveInReset停止聲音輸入裝置工作
waveInStart停止聲音輸入裝置工作
waveInStop停止聲音輸入
waveInUnprepareHeader清除預備的音效檔頭
waveOutBreakLoop中斷聲音輸出迴圈
waveOutClose關閉聲音輸出裝置
waveOutGetDevCaps擷取聲音輸出裝置效能
waveOutGetErrorText擷取聲音出錯文本
waveOutGetID擷取聲音輸出裝置ID
waveOutGetNumDevs擷取聲音輸出裝置數量
waveOutGetPitch擷取聲音輸出的強度
waveOutGetPlaybackRate擷取聲音回放率
waveOutGetPosition擷取聲音回放位置
waveOutGetVolume擷取聲音音量
waveOutMessage向聲音輸出裝置發送訊息
waveOutOpen開啟聲音輸出裝置
waveOutPause暫停聲音回放
waveOutPrepareHeader預備聲音回放資料區塊
waveOutReset停止聲音回放
waveOutRestart重開始聲音回放
waveOutSetPitch設定波形輸出強度
waveOutSetPlaybackRate設定回放率
waveOutSetVolume設定輸出音量
waveOutUnprepareHeader清除預備聲音資料區塊
waveOutWrite寫入聲音輸出裝置

 

 2003-11-24 10:06:16    1媒體控制介面

1媒體控制介面

MCI(Media Control Interface)媒體控制介面是MircroSoft提供的一組多媒體裝置和檔案的標準介面,它的好處是可以方便地控制絕大多數多媒體裝置包括音頻、視頻、影碟、錄影等多媒體裝置,而不需要知道它們的內部工作狀況。但是古人云:成也蕭何,敗也蕭何。MCI雖然看上去高大全,但對於一些進階應用程式來說,它是遠遠不夠的。好比Visual C++雖然看上去無所不能,卻需要程式員自己開發多媒體引擎一樣。對於MCI指令集,我們將只作簡單介紹,重點放在後面的波形檔案混音器上。

MCI的控制方式:

一般說來,程式員使用兩個函數就可以與MCI打交道了:

MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg,
DWORD dwFlags, DWORD dwParam );

命令字串方式,用接近於日常生活用語的方式發送控制命令,適用於進階編程如VB、TOOLBOOK等。

MCIERROR mciSendString(LPCTSTR lpszCommand,LPTSTR lpszReturnStr
ing, UINT cchReturn, HANDLE hwndCallback);

命令訊息方式,用專業文法發送控制訊息,適用於VC等語言編程,此方式直接與MCI裝置打交道。

 

對於mciSendCommand,第一個參數指定了裝置標識,這個標識會在程式員開啟MCI裝置時由系統提供。第二個參數指定將如何控制裝置,詳細請查閱後面“MCI指令”一欄。第三個參數為訪問標識,第四個參數一般是一個資料結構,標識程式在訪問MCI時要的一些資訊。有關詳細資料,請查閱本光碟片配套書。

對於mciSendString,第一個參數為一串控制字元串,返回資訊由系統填入第二個參數,第三個參數指明返回資訊的最大長度,若對MCI裝置設定了"notify"標誌則需要在第四個參數填上返回視窗控制代碼。

舉例:

mciSendCommand(DeviceID,MCI_CLOSE,NULL,NULL);//關閉一個MCI裝置;

mciSendString("open aaa.avi",0,0,0); //開啟檔案"aaa.avi";

MCI的裝置類型:

MCI的裝置類型有:

裝置描述 描述字串 說明
 
MCI_ALL_DEVICE_ID   所有裝置
 
MCI_DEVTYPE_ANIMATION Animation 動畫裝置
 
MCI_DEVTYPE_CD_AUDIO Cdaudio CD音頻
 
MCI_DEVTYPE_DAT Dat 數字音頻
 
MCI_DEVTYPE_DIGITAL_VIDEO Digitalvideo 數位視訊
 
MCI_DEVTYPE_OTHER Other 未定義裝置
 
MCI_DEVTYPE_OVERLAY Overlay 重疊視頻
 
MCI_DEVTYPE_SCANNER Scanner 掃描器
 
MCI_DEVTYPE_SEQUENCER Sequencer MIDI 序列器
 
MCI_DEVTYPE_VCR Vcr  合式錄影機
 
MCI_DEVTYPE_VIDEODIS Videodisc 雷射視盤
 
MCI_DEVTYPE_WAVEFORM_AUDIO waveaudio Wave 音頻
 
對於未在上面定義的MCI裝置,使用者可查看system.ini檔案中[mci]部分,例如:

[mci]

cdaudio=mcicda.drv
sequencer=mciseq.drv
waveaudio=mciwave.drv
avivideo=mciavi.drv
videodisc=mcipionr.drv
vcr=mcivisca.drv
ActiveMovie=mciqtz.drv
QTWVideo=mciqtw.drv
MPEGVideo=C:/PROGRA~1/XING/XINGMP~1/xmdrv95.dll
其中最後兩句分別指明了Apple的QuickTime裝置,裝置名稱為"QTWVidio"、MPEG影像裝置,裝置名稱為"MPEGVideo"。

在MCI編程中,既可以將裝置描述當裝置名稱,也可以將描述字串當裝置名稱,一個極端偷懶的辦法是程式員不要在程式中指定裝置名稱,Windows將自動根據副檔名識別裝置類型。

舉個例子來說,開啟一個多媒體檔案有以下三種方式:
[1]:自動識別:開啟一個"WAV"檔案
MCI_OPEN_PARMS mciOpen;
mciOpen.lpstrDeviceType=0;
mciOpen.lpstrElementName="aaa.wav";
mciSendCommand(NULL,MCI_OPEN, MCI_OPEN_ELEMENT,
(DWORD)&mciOpen);

[2]:指定裝置描述:開啟CD播放器
MCI_OPEN_PARMS mciOpen;
mciOpen.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_CD_AUDIO ;
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID,
(DWORD)&mciOpen);

[3]:指定描述字串: 開啟一個AVI檔案
MCI_OPEN_PARMS mciOpen;
mciOpen.lpstrDeviceType="avivideo";
mciOpen.lpstrElementName="aaa.avi";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
(DWORD)&mciOpen);

注意三種開啟檔案中,函數第三個參數的區別,後面會講到這種區別。

 

MCI指令

MCI使用如下指令:

MCI_BREAK
 設定中斷鍵,預設是”CTRL+BREAK"
 
MCI_CAPTURE
 抓取當前幀並存入指定檔案,僅用於數位視訊
 
MCI_CLOSE
 關閉裝置
 
MCI_CONFIGURE
 彈出配置對話方塊,僅用於數位視訊
 
MCI_COPY
 拷貝資料至剪貼簿
 
MCI_CUE
 延時播放或錄音
 
MCI_CUT
 刪除資料
 
MCI_DELETE
 刪除資料
 
MCI_ESCAPE
 僅用於雷射視頻
 
MCI_FREEZE
 將顯示定格
 
MCI_GETDEVCAPS
 擷取裝置資訊
 
MCI_INDEX
 當前螢幕顯示與否,僅用於VCR裝置
 
MCI_INFO
 擷取字串資訊
 
MCI_LIST
 擷取輸入裝置數量,支援數位視訊和VCR裝置
 
MCI_LOAD
 裝入一個檔案
 
MCI_MARK
 取消或做一個記號,與MCI_SEEK配套
 
MCI_MARK
 取消或做一個記號,與MCI_SEEK配套
 
MCI_MONITOR
 為數位視訊指定報告裝置
 
MCI_OPEN
 開啟裝置
 
MCI_PASTE
 粘帖資料
 
MCI_PAUSE
 暫停當前動作
 
MCI_PLAY
 播放
 
MCI_PUT
 設定源、目的和邊框矩形
 
MCI_QUALITY
 定義裝置預設品質
 
MCI_RECORD
 開始錄製
 
MCI_RESERVE
 分配硬碟空間
 
MCI_RESTORE
 拷貝一個bmp檔案至幀緩衝
 
MCI_RESUME
 使一個暫停裝置重新啟動
 
MCI_SAVE
 儲存資料
 
MCI_SEEK
 更改媒體位置
 
MCI_SET
 設定裝置資訊
 
MCI_SETAUDIO
 設定音量
 
MCI_SETTIMECODE
 啟用或取消VCR裝置的時間碼
 
MCI_SETTUNER
 設定VCR裝置頻道
 
MCI_SETVIDEO
 設定video參數
 
MCI_SIGNAL
 在工作區上設定指定空間
 
MCI_STATUS
 擷取裝置資訊
 
MCI_STEP
 使播放裝置跳幀
 
MCI_STOP
 停止播放
 
MCI_SYSINFO
 返回MCI裝置資訊
 
MCI_UNDO
 取消操作
 
MCI_UNFREEZE
 使使用MCI_UNFREEZE的視頻緩衝區恢複運動
 
MCI_UPDATE
 更新顯示地區
 
MCI_WHERE
 擷取裝置裁減矩形
 
MCI_WINDOW
 指定圖形裝置視窗和視窗特性

其中比較常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.