CCITT A-law 这种格式的WAV文件怎么播放?(50分)

  • 主题发起人 主题发起人 f_inter
  • 开始时间 开始时间
F

f_inter

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样可以播放这种格式的WAV文件。能告诉我怎么实现吗?代码或者用什么控件
谢谢
 
怎么都没回?是分太少?
 
我可以播放任何 PCM 文件,但我的方法是 对文件一块一块的反编码,然后再用 WaveOut 函数播放。
可能编程太麻烦。
 
难道没别的办法了?
 
你是想把A—LOW的文件用声卡以WAV的方式播放出来吗?
这样的话用函数就可以。函数我有。
 
对啊。就是想这样。用声卡播放出来
你有?能给我不?
ppjq@21cn.com
应该不大吧
 
wgd2001
不知道你在不。。。请帮帮忙
 
wgd2001
函数能否公开?
 
自己提一下
 
我可以给你。
 
邮件我已经发过去了。
 


文件说明
==========
TWEDITL.LIB - 语音处理函数库库文件
TWEDITL.H - 语音处理函数库头文件
TWEDITL.TXT - 语音处理函数库说明文件
EXAMPLES - 语音处理函数库示例程序目录(含示例语音)
UTILITY - 语音处理实用程序目录(由演示程序编译)
TWEDITLW - 语音处理函数库的 WINDOWS 版本 ( DLL库 )


返回码常量定义
================

FILE_CREATE_ERR 文件创建失败
FILE_OPEN_ERR 文件打开失败
WAVE_FORMAT_ERR WAV文件格式错误
WAVE_FOURBIT_ERR WAV文件为 4 bits 格式
ALLOC_ERR 内存分配失败
OTHER_ERR 其它类型错误


函数原型声明
==============

一. 语音格式转换函数:

unsigned char a_u(unsigned char);
unsigned char u_a(unsigned char);
int Falaw_to_ulaw(char*, char*);
int Fulaw_to_alaw(char*, char*);
unsigned char p_w(unsigned char);
unsigned char w_p(unsigned char);
int pcm_to_wave(char*, char*);
int wave_to_pcm(char*, char*);
int alaw_to_linear(unsigned char);
unsigned char linear_to_alaw(int);

二. 语音编缉函数:

int fcopy(char*, char*);
int GenerateVoiceFile(char*, int, int,do
uble);
int GenerateVoiceBuf(int*, int, int,do
uble);
int SaveBuftoFile(unsigned char*, char*, long);
long SpecialCutFile(char*);
void CutBufVoice(int*, int*, int, int);
long CutFileVoice(char*, char*, long, long);
long GetBufItems(double);
double FlenToVtime(long, int);
int LoadBuffromFileC(int*, char*, long, long, unsigned int);
int GetOutlinefromFile( int*, char*, long, long, unsigned int);
void AmBufVoice(int*, unsigned int, int);
int AmFileVoice(char*, char*,do
uble);
long CatFileVoice(char*, char*, char*);
void linear_to_disp(int*, unsigned int, float);
void disp_to_linear(int*, unsigned int, float);
int InsertVoiceFile(char*, char*, char*, long);
int removemute(char*, char*, long, unsigned int,int);
int TW_Seperate(char*, char*, long, long, int);
long TW_CutHeadTailMute(char*, char*, long, long, int);
int GetAm(char*, long, long);
int SetVoiceAm(char*, char*, int);
int MixTwoVoice(char*,do
uble, char*,do
uble, char*);
int ad2wav(char wavfname[256],char adfname[256],int adkind,int bitn,unsigned long Password);


函数功能说明
==============

一. 语音格式转换函数:

unsigned char a_u(unsigned char)
-----------------------------------
功能 : 转换一个字节的 a律码到 u律码
参数 : a律码
返回 : u律码

unsigned char u_a(unsigned char)
-----------------------------------
功能 : 转换一个字节的 u律码到 a律码
参数 : u律码
返回 : a律码

int Falaw_to_ulaw(char* , char* )
------------------------------------
功能 : 转换 a律格式的文件到 u律格式
参数 : 1. a律格式的源文件名
2. u律格式的目标文件名
返回 : 小于0 时为错误退出

int Fulaw_to_alaw(char* , char* )
------------------------------------
功能 : 转换 u律格式的文件到 a律格式
参数 : 1. u律格式的源文件名
2. a律格式的目标文件名
返回 : 小于0 时为错误退出

unsigned char p_w(unsigned char)
-----------------------------------
功能 : 转换一个字节的 a律码到 WAV格式码
参数 : a律码
返回 : WAV格式码

unsigned char w_p(unsigned char)
-----------------------------------
功能 : 转换一个字节的 WAV格式码到 a律码
参数 : WAV格式码
返回 : a律码

int pcm_to_wave(char* , char* )
-----------------------------------
功能 : 转换 a律格式的文件到 WAV格式
参数 : 1. a律格式的源文件名
2. WAV格式的目标文件名
返回 : 小于0 时为错误退出

int wave_to_pcm(char* , char* )
-----------------------------------
功能 : 转换 WAV格式的文件到 a律格式
参数 : 1. WAV格式的源文件名
2. a律格式的目标文件名
返回 : 小于0 时为错误退出

int alaw_to_linear(unsigned char)
-------------------------------------
功能 : 转换一个字节的 a律码到一个整型的线性码
参数 : a律码
返回 : 线性码

unsigned char linear_to_alaw(int)
------------------------------------
功能 : 转换一个整型的线性码到一个字节的 a律码
参数 : 线性码
返回 : a律码

int ADPCM2WAV(char wavfname[256],
char adfname[256],
int adkind,
int bitn,
unsigned long Password)
------------------------------------------------------------------------
功能 : 转换 ADPCM (压缩的 TW 语音) 到 WAV 格式的文件
参数 : 1. WAV 格式文件名
2. ADPCM 格式文件名
3. ADPCM 文件压缩律(目前仅能转换压缩比为 RATE_32K 的语音文件)
4. WAV 文件的编码位数(0 : 8 bits, 1 : 16 bits)
5. 语音卡序列号

返回 : 小于0 时为错误退出


二. 语音编缉函数:

int fcopy(char*, char*)
---------------------------
功能 : 拷贝文件
参数 : 1. 源文件名
2. 目标文件名
返回 : 小于0 时为错误退出

int GenerateVoiceFile(char*, int, int,do
uble)
--------------------------------------------------
功能 : 生成特定语音 a律文件
参数 : 1. 生成语音文件名
2. 语音频率(0~8000)
3. 语音振幅(0~4095)
4. 语音时间(1/10秒)
返回 : 小于0 时为错误退出

int GenerateVoiceBuf(int* ,int ,int ,double)
------------------------------------------------
功能 : 生成特定语音线性码缓冲区
参数 : 1. 生成语音的线性码缓冲区指针
2. 语音频率(0~8000)
3. 语音振幅(0~4095)
4. 语音时间(1/10秒)
返回 : 小于0 时为错误退出

int SaveBuftoFile(unsigned char *, char*, long)
---------------------------------------------------
功能 : 存线性码的缓冲区到 a律文件
参数 : 1. 线性码缓冲区指针
2. 目标文件名
3. 缓冲区长度
返回 : 小于0 时为错误退出

long SpecialCutFile(char* )
-------------------------------
功能 : 特殊裁剪语音文件, 将语音文件长度剪为 512字节的整数倍
参数 : 特殊裁剪文件名
返回 : 小于0 时为错误退出, 否则为裁剪后的语音文件长度

void CutBufVoice(int*, int*, int, int)
------------------------------------------
功能 : 裁剪缓冲区语音
参数 : 1. 裁剪缓冲区指针
2. 目标缓冲区指针
3. 裁剪位置
4. 裁剪长度
返回 : 无
说明 : 将裁剪缓冲区中的从裁剪位置开始长度为裁剪长度的
语音裁剪到目标缓冲区中

long CutFileVoice(char*, char*, long, long)
-----------------------------------------------
功能 : 裁剪文件语音
参数 : 1. 裁剪文件名
2. 目标文件名
3. 裁剪文件起始位置
4. 裁剪长度
返回 : 小于0 时为错误退出, 否则为目标文件长度
说明 : 将裁剪文件中的从裁剪文件起始位置开始长度为裁剪
长度的语音裁剪到目标文件中

long GetBufItems(double)
----------------------------
功能 : 计算指定语音时间所需单元数(字节:文件 / 字:缓冲区)
参数 : 语音时间
返回 : 计算结果
说明 : 假定压缩比率为 RATE_64K

double FlenToVtime(long, int )
----------------------------------
功能 : 计算指定长度和压缩比率的文件的放音时间
参数 : 1. 文件长度
2. 压缩比率
返回 : 计算结果

int LoadBuffromFileC(int*, char*, long, long, unsigned int )
----------------------------------------------------------------
功能 : 从文件装载语音到缓冲区,并转换为线性码
(装载时的抽样比率为 (装载长度 : 缓冲区长度))
参数 : 1. 待装载线性码的缓冲区指针
2. 装载语音文件名
3. 装载文件起始位置
4. 装载长度
5. 缓冲区长度
返回 : 小于0 时为错误退出
说明 : 缓冲区须事先分配, 若要装载从装载位置到文件末尾的全部数据,
可设置参数4--装载长度 等于 -1

int GetOutlinefromFile( int*, char*, long, long, unsigned int)
------------------------------------------------------------------
功能 : 从文件装载语音波形的包络到缓冲区
(装载时的抽样比率为 (装载长度 : 缓冲区长度))
参数 : 1. 待装载线性码的缓冲区指针
2. 装载语音文件名
3. 装载文件起始位置
4. 装载长度
5. 缓冲区长度
返回 : 小于0 时为错误退出
说明 : 缓冲区须事先分配, 若要装载从装载位置到文件末尾的全部数据,
可设置参数4--装载长度 等于 -1

void AmBufVoice(int*, unsigned int, int)
--------------------------------------------
功能 : 放大缓冲区语音
参数 : 1. 待放大的线性码缓冲区指针
2. 缓冲区长度
3. 放大系数
返回 : 无

int AmFileVoice(char*, char*,do
uble)
-----------------------------------------
功能 : 放大文件语音
参数 : 1. 源文件名
2. 放大后的目标文件名
3. 放大系数
返回 : 小于0 时为错误退出

long CatFileVoice(char*, char*, char*)
------------------------------------------
功能 : 连接两个源语音文件到目标文件
参数 : 1. 源文件名1
2. 源文件名2
3. 目标文件名
返回 : 小于0 时为错误退出, 否则为目标文件长度

void linear_to_disp(int*, unsigned int, float)
--------------------------------------------------
功能 : 将线性码幅度按比例缩小到指定范围内, 以便于显示
参数 : 1. 线性码缓冲区指针
2. 缓冲区长度
3. 显示码最大幅度值
返回 : 无

void disp_to_linear(int*, unsigned int, float)
--------------------------------------------------
功能 : linear_to_disp 的反变换
参数 : 1. 线性码缓冲区指针
2. 缓冲区长度
3. 显示码最大幅度值
返回 : 无


int InsertVoiceFile(char*, char*, char*, long)
--------------------------------------------------
功能 : 插入文件语音
参数 : 1. 源文件名
2. 插入文件名
3. 目标文件名
4. 插入位置
返回 : 小于0 时为错误退出

long removemute(char*, char*, long, long, int)
--------------------------------------------------------
功能 : 语音文件去除静音
参数 : 1. 源文件名
2. 目标文件名
3. 静音最小长度
4. 噪音最大长度
5. 静音最大幅度(0~4095)
返回 : 小于0 时为错误退出, 否则为目标文件长度

int TW_Seperate(char*, char*, long, long, int)
------------------------------------------------
功能 : 分解语音文件
参数 : 1. 源语音文件名
2. 目标语音文件名的第一部分(不包括扩展名)
3. 静音最小长度
4. 静音中的噪音的最大长度
5. 静音的最大幅度
返回 : 小于0 时为错误退出, 否则为分解出的目标文件个数
说明 : 从语音文件中分离出所有被静音分隔的语音段, 每个语音段都
放到一个目标语音文件, 目标语音文件的文件名由第二个参数
加上扩展名"000","001", ..., "999" 构成

long TW_CutHeadTailMute(char*, char*, long, long, int)
--------------------------------------------------------
功能 : 剪掉语音文件中头和尾的静音
参数 : 1. 源语音文件名
2. 目标语音文件名
3. 静音最小长度
4. 静音中的噪音的最大长度
5. 静音的最大幅度
返回 : 小于0 时为错误退出, 否则为目标文件长度

int GetAm(char*, long, long)
--------------------------------
功能 : 取语音文件的平均幅度
参数 : 1. 语音文件名
2. 测试起始位置
3. 测试长度
返回 : 小于0 时为错误退出, 否则返回语音文件的平均幅度(0~4095)
说明 : 参数 3--测试长度设置为 -1 时, 测试范围为测试起始位置到
文件末尾

int SetVoiceAm(char*, char*, int)
-------------------------------------
功能 : 设置语音文件幅度
参数 : 1. 源语音文件名
2. 目标语音文件名
3. 设定语音幅度值(0~4095)
返回 : 小于0 时为错误退出

int MixTwoVoice(char*,do
uble, char*,do
uble, char*)
--------------------------------------------------------
功能 : 混和两个语音文件
参数 : 1. 第一个源语音文件名
2. 第一个源语音文件的混和增益
3. 第二个源语音文件名
4. 第二个源语音文件的混和增益
5. 目标文件名
返回 : 小于0 时为错误退出
说明 : 本函数将两个源语音文件的信号分别乘上各自的增益后线性叠
加在一起, 形成目标文件, 若目标文件有明显的溢出现象, 就
应该减小增益

int ad2wav(char wavfname[256],char adfname[256],int adkind,int bitn,unsigned long SerialNo)
------------------------------------------------------------------------------------------------
功能 : 转换 ADPCM 文件到 WAV 文件
参数 : 1. WAV 源语音文件名
2. ADPCM 目标语音文件名
3. 压缩率 (RATE_40=0, RATE_32=1, RATE_24=2, RATE_16=3)
注意 :目前仅 RATE_32 有效
4. WAVE 文件编码位数 (BIT_16=0, BIT_8=1)
注意 :目前仅 BIT_8 有效
5. 密码
返回 : 小于0 时为错误退出
说明 : 此函数的使用必须要有密码, 此密码是本函数的专用密码,和语音卡
的普通密码不同, 且本函数仅能在语音卡驱动已装载的环境下使用。


演示程序说明
==============

所有的演示程序均在目录 EXAMPLES 下

1. TW格式文件到 WAV格式文件转换的演示
TW2WAV.PRJ
TW2WAV.C

2. WAV格式文件到 TW格式文件转换的演示
WAV2TW.PRJ
WAV2TW.C

3. 生成特定语音文件的演示
GENVOICE.PRJ
GENVOICE.C

4. 裁剪语音文件的演示
CUTFILE.PRJ
CUTFILE.C

5. 连接语音文件的演示
CATVOICE.PRJ
CATVOICE.C

6. 放大语音文件的演示
AMVOICE.PRJ
AMVOICE.C

7. 检测语音文件平均幅度的演示
GETAM.PRJ
GETAM.C

8. 特殊裁剪语音文件的演示
TRCVOICE.PRJ
TRCVOICE.C

9. 自动语音音量大小调整的演示
STAVOICE.PRJ
STAVOICE.C

10. 显示语音波形的演示
DWAVE.PRJ
DWAVE.C

11. 显示语音波形包络的演示
do
UTLINE.PRJ
do
UTLINE.C

12. 去除语音文件中所有的静音的演示
CUTMUTE.PRJ
CUTMUTE.C

13. 裁剪语音文件头和尾的静音的演示
TWTRIM.PRJ
TWTRIM.C

14. 分解语音文件的演示
TWSEP.PRJ
TWSEP.C


实用程序说明
==============

所有的实用程序均在目录 UTILITY 下

1. TW格式文件到 WAV格式文件转换
TW2WAV.EXE

2. WAV格式文件到 TW格式文件转换
WAV2TW.EXE

3. 生成特定语音文件
GENVOICE.EXE

4. 裁剪语音文件
CUTFILE.EXE

5. 连接语音文件
CATVOICE.EXE

6. 放大语音文件
AMVOICE.EXE

7. 检测语音文件平均幅度
GETAM.EXE

8. 特殊裁剪语音文件
TRCVOICE.EXE

9. 自动语音音量大小调整
STAVOICE.EXE

10. 显示语音波形
DWAVE.EXE

11. 显示语音波形包络
do
UTLINE.EXE

12. 去除语音文件中所有的静音
CUTMUTE.EXE

13. 裁剪语音文件头和尾的静音
TWTRIM.EXE

14. 分解语音文件
TWSEP.EXE

 
接受答案了.
 
wgd2001:能否给我发一份?谢谢
 
wgd2001:能否给我发一份?谢谢 wjs@sncrc.com
抱歉,忘了邮箱地址[:D]
 

Similar threads

后退
顶部