当下基于Freeswitch想开发一个语音电话机器人相关的前置模块,我做了哪些事? 要点如下
- 从源码编译构建Freeswitch:
使用docker,基于官方推荐的image构建Freeswitch,这一步重要,为后面生成代码补全做准备,主要是要发了解 编译构建过程和相关的命令 - 在构建好的image上搭建自动化vim/nvim IDE:
主要组件为 nvim+youcompleteme+bear+clang+python3,当然少不我自己使用的init.nvim, 最终完成后没有去删除编译的结果缓存之类的文件时,docker commit 后成的image达5个G+ - compilation database:
使用bear为编写c/cpp配置代码提示和自动补全的compilation database, - 配置使用Codeium提供代码预测补全
- 写新module:
参考官方样例 mod_skel,并且可以正常编译运行读取文件配置并输出”hello world” - 语音流处理相关:
了解如何获取rtp中的语音流,主要是使用media bug,这里参考了record session以及网上的开发案例 - sip phone软电话的配置和使用
- asr/tts对接(todo):
以mrcp还有websocket的方式对接asr/tts; 实际项目中使用的asr噪音处理不是很好,总是把噪音误转写,除了音源输入设备上进行减噪还有其他的噪音处理方式,如对语音流进行VAD去噪,这又是一个module可写可接入 - 使用lua管理ivr电话/asr/tts/录音等通话流程(todo):
还在继续,整个过程上少不了问LLM,把LLM当作 it helps people get stared, helps in writting code;
参考了上网上的开发案例以及零碎的技术文章,这一点那一点对照整合;
还有官方的tech doc,这一部分给出的参考不一定非常详细但比较明确;
对于new boy(对于自己来说还好大学时做过一点c/cpp的项目)来说,c/ccp写的项目 单是编译要了解 automake, cmake 的使用,gcc/clang 编译相关的 -I -fPIC等参数含义,编译过程中的一点依赖库不存在问题,版本兼容性问题,让这个解决问题的过程很漫长;
工欲善其事,必先利其器: 对于静态语言开发,自动化环境可谓是必不可少的利器,不像golang的toolchain比较一步到位,cpp得自己生成compilation database或者.ycm_extra_conf.py
参考:
https://github.com/rizsotto/Bear?tab=readme-ov-file#how-to-use
https://github.com/ycm-core/YouCompleteMe?tab=readme-ov-file#option-1-use-a-compilation-database
《FreeSWITCH案例大全》
mod_skel