免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1352 | 回复: 0
打印 上一主题 下一主题

编写Windows下的G.729插件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-12 16:03 |只看该作者 |倒序浏览

不知道为什么Windows附带G.723的插件,却没有G.729的,很是郁闷。于是花了不少时间写了个,一直都是在Linux编程,到了Windows下反而很不习惯,本来应该更方便的东西反倒搞得很复杂,教训大le
需要准备的东西:G.729的代码或者连接库(VoiceAge提供免费的库),Win DDK。
因为在Windows中音频的存储格式一般都是wav,所以首先要了解wav的文件格式,有专门的文章介绍这个,在这里就不多说了。G.729的wav格式可参考这个
WAVEFORMATED FormatG729 =
{
WAVE_FORMAT_MSG729,            // wFormatTag,微软定义了很多wav的标签,这是其中一个(44),但是在我的系统里编译的时候却找不到这个标签,所以我用了另外一个,详细定义可查看mmreg.h这个文件
1,                                             // nChannels,单声道/多声道,1表示单声道
8000,                                        // nSamplesPerSec,采样频率
1000,                                        // nAvgBytesPerSec,码率,我用的是8kbits/s的编解码
10,                                            // nBlockAlign,字节为单位,因为编码源是160字节为单位的pcm16bit的音频流,按16:1的压缩率,编码后就是10字节
0,                                              // wBitsPerSample,没用
2                                               // cbSize,一般就是wSamplesPerBlock(我用的是80)的长度,
}
这个更详细的介绍可以在微软的msdn关于如何编写acm driver的文章里找到。
接下来就要用win ddk了,记住一定要装上windbg,很好用的调试工具。不过在调试状态下录音然后放出来的声音都是噪音,很受不了。
首先要选好跟你的系统匹配的编译环境。接下来就要写sources文件,类似Linux下的makefile文件,定义一下连接库,源文件等,在ddk中找个范例修改一下就好了。还有几个必须的文件如makefile、安装信息文件、rcv文件、resource template文件、def文件都是参考范例写一下就好了。文件齐备了后,直接build就好了。
ACM是一个通用的音频编解码管理器,所以有固定的接口函数:DriverProc,调用插件函数入口;
几个主要的消息:DRV_OPEN,打开插件;DRV_CLOSE,关闭插件;DRV_CONFIGURE,配置插件;ACMDM_STREAM_OPEN,确定是编码流还是解码流;ACMDM_STREAM_CLOSE,关闭音频流;ACMDM_STREAM_CONVERT,调用编/解码函数。
编码时,一般输入的是pcm16bit的音频流。解码输出的也应该是pcm16bit的音频流,如果是8bit的,还需要进行转换。
G.729的编解码函数因为版权问题,我就不细说了,只要设定好匹配的参数(如码率,samplesperblock等),然后封装好填写到stream open消息的处理函数中就行了。
编译通过后你会得到一个*.acm的文件,把它拷贝到win/system32目录下,然后把相关信息写入注册表,就可以使用了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1251/showart_41465.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP