📄 tw2wav.txt
字号:
TW2WAV格式转换程序说明
TW2WAV.C程序由main()、pcm_wav()和p_w()三个函数组成。
一、pcm_wav() 函数实现将8位的PCM 码转换成8位的语音线性码,转换是按照A
律PCM 编码算法进行的。其转换算法是:
1.先将PCM 码进行55异或,得到变换码,并把PCM 码的符号位保留。
2.将变换码按下表进行变换,得到8位的线性码。
变换码 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 x 0 0 0 0 0 0 0
x 0 0 1 0 0 0 0 x 0 0 0 0 0 0 1
x 0 1 0 w 0 0 0 x 0 0 0 0 0 1 w
x 0 1 1 w x 0 0 x 0 0 0 0 1 w x
x 1 0 0 w x y 0 x 0 0 0 1 w x y
x 1 0 1 w x y z x 0 0 1 w x y z
x 1 1 0 w x y z x 0 1 w x y z 1
x 1 1 1 w x y z x 1 w x y z 1 1
3.将保留的PCM 码符号位置于D7,即得到转换后的8位线性码。
二、pcm_wav() 函数将PCM 格式文件转换成8 位的、采样频率为11.025KHz、单声道
的WAVE格式文件,其步骤是:
1.读取被转换文件的文件长度。
2.设定WAVE文件的采样频率、声道数、采样位数、放音速率和数据存放的偏移量等
参数,并根据被转换的PCM 文件的长度,算出转换后的WAVE文件的放音时长和语
音数据的长度,形成WAVE文件的文件头。WAVE文件的文件头用下列的三个数据结
构来写入。
typedef struct {
unsigned long ckID; /"RIFF"/
unsigned long filesize; /WAVE文件总长度/
unsigned long ckwv; /"WAVE"/
unsigned long ckft; /"fmt "/
unsigned long fmtsize; /WAVE文件格式部分长度/
} FH;
typedef struct waveformat_tag {
int wFormatTag;
int nChannels;
long int nSamplesPerSec;
long int nAvgBytesPerSec;
int nBlockAlign;
}WAVEFORMAT;
typedef struct pcmwave_format_tag {
WAVEFORMAT wf;
int wBitsPerSample;
} PCMWAVEFORMAT;
3.读取PCM 文件语音数据,调p_w() 函数转换成线性码,按照采样频率的对应关系
确定转换后的增加点。
4.将转换好的线性码存入WAVE文件的data部分。
三、main()函数完成文件名的输入等操作。
Oct 16,1995
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -