📄 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 + -