?? wav2tw.txt
字號:
WAV2TW格式轉換程序說明
WAV2TW.C程序由main()、WAVE_TO_PCM()和wavechar_pcm()三個函數組成。
一、wavechar_pcm() 函數實現將8 位的語音線性碼轉換成8 位的PCM 碼,轉換是按照
A 律PCM 編碼算法進行的。其轉換算法是:
1.先將8位線性碼的D7位保存,若D7=1,則置D7=0,若D7=0,則將D6 -- D0位取
反得到變換碼。
2.將變換碼按下表進行變換,得到8位的中間碼。
中間碼 變換碼
M7 M6 M5 M4 M3 M2 M1 M0 --- D7 D6 D5 D4 D3 D2 D1 D0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
x 0 1 0 w 0 0 0 0 0 0 0 0 0 1 w
x 0 1 1 w x 0 0 0 0 0 0 0 1 w x
x 1 0 0 w x y 0 0 0 0 0 1 w x y
x 1 0 1 w x y z 0 0 0 1 w x y z
x 1 1 0 w x y z 0 0 1 w x y z 1
x 1 1 1 w x y z 0 1 w x y z 1 1
3.將中間碼進行55異或運算,并將保留的線性碼的D7位的值賦給M7,即得到轉換成
的PCM碼。
二、WAVE_TO_PCM() 函數將WAVE格式文件轉換成8位的PCM 語音文件,其步驟是:
1.讀取被轉換文件的文件頭,判斷該文件是否合法的WAVE文件。WAVE文件的頭4個
字節應為"RIFF",接著的4個字節應是文件總長度的字節數,再下來的4個字節
應是"WAVE"。本程序采用下面的數據結構來讀取文件頭。
struct {
long int ckID;
long int filesize;
long int ckwv;
long int ckft;
} filehead;
2.讀取被轉換文件的格式說明部分,判斷該文件是何種WAVE文件,獲取該文件的采
樣頻率、聲道數、采樣位數、放音速率和數據存放的偏移量等參數。WAVE文件的
格式參數可用如下的數據結構來讀取。
typedef struct waveformat_tag {
int wFormat_Tag; /波形文件中的聲音編碼方式/
int nChannels; /聲道數/
long int nSamplesPerSec; /聲音的采樣頻率/
long int nAvgbytesPerSec; /重放波形數據時每秒平均字節數/
int nBlockAlign; /一個采樣所占用的字節數/
}WAVEFORMAT;
typedef struct pcmwave_format_tag {
WAVEFORMAT wf;
int wBitsPerSample; /一個采樣中的實際位數/
} PCMWAVEFORMAT;
3.找到WAVE文件的data部分的始點,讀取語音數據,若聲道數為2,則把左右聲道
的采樣值平均后做為語音數據,并按照采樣頻率確定要轉換的點,然后把要轉換
的點的語音數據變換成8位的線性碼,調wavechar_pcm()函數轉換成PCM 碼。
4.將轉換成功后的PCM 文件長度進行剪栽,使其長度變為512 字節的整數倍。
四、main()函數完成文件名的輸入等操作。
Oct 16,1995
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -