核心代码

调用逻辑

FreeSWITCH 是一款开源的软交换平台 ,核心用于处理语音 / 视频通话、实时通信(类似电话交换机的数字化版本)。东方仙盟比喻:FreeSWITCH 如同「仙盟总坛」,掌管所有仙门的传讯(通话)、法阵(通信协议)调度;Vosk ASR 是总坛下设的「听言司」,专门负责破译语音密语(语音转文字);mod_vosk 插件则是「传讯令旗」,让仙盟总坛能直接调用听言司的能力。
FreeSWITCH 调用 Vosk ASR 的 Client 示例代码
以下是简化版 FreeSWITCH Lua 客户端代码(FreeSWITCH 核心脚本语言),用于在通话中调用 Vosk ASR 识别语音:
lua
-- 【仙盟总坛-传讯指令】:加载 Vosk ASR 插件(竖起传讯令旗)
api = freeswitch.API()
vosk_load_result = api:execute("load mod_vosk")
if vosk_load_result ~= "OK" then
freeswitch.consoleLog("ERR", "【仙盟总坛】听言司令旗加载失败:" .. vosk_load_result .. "\n")
return
end
-- 【仙盟总坛-配置听言司】:设置 Vosk 服务地址、模型(给听言司下达密令)
vosk_config = {
server_url = "ws://localhost:2700", -- 听言司驻地(Vosk 服务地址)
model = "model-en-us", -- 听言司破译密典(语音模型)
sample_rate = 16000, -- 密语频率(语音采样率,必须与 Vosk 一致)
timeout = 5000 -- 传讯超时(等待听言司回复的时间)
}
-- 【仙盟总坛-启动听言司】:在通话中实时识别语音(调用听言司破译密语)
function start_vosk_asr(session)
-- 1. 检查通话状态(确认传讯通道畅通)
if not session:ready() then
freeswitch.consoleLog("ERR", "【仙盟总坛】传讯通道未就绪\n")
return
end
-- 2. 下达指令:让听言司开始监听通话语音(开启密语破译)
session:execute("vosk_asr", string.format(
"start %s %s %d",
vosk_config.server_url,
vosk_config.model,
vosk_config.sample_rate
))
-- 3. 实时接收听言司的破译结果(持续获取密语解读)
session:setEventCallback(function(event)
local event_name = event:getHeader("Event-Name")
-- 捕获 Vosk ASR 识别结果事件(听言司传回的破译密函)
if event_name == "VOSK_ASR_RESULT" then
local asr_text = event:getHeader("Vosk-ASR-Text")
freeswitch.consoleLog("INFO", "【听言司-破译结果】:" .. asr_text .. "\n")
-- 将识别结果发送给通话对方(转发密函)
session:say(asr_text, "en", "US")
end
end)
-- 4. 通话结束后停止听言司(收回传讯令旗)
session:onHangup(function()
session:execute("vosk_asr", "stop")
freeswitch.consoleLog("INFO", "【仙盟总坛】听言司已停止工作\n")
end)
-- 保持通话 10 秒,让听言司完成破译
session:sleep(10000)
end
-- 【启动仙盟传讯流程】:绑定到通话会话
session = freeswitch.Session()
if session:ready() then
freeswitch.consoleLog("INFO", "【仙盟总坛】启动听言司破译任务\n")
start_vosk_asr(session)
else
freeswitch.consoleLog("ERR", "【仙盟总坛】通话会话未就绪\n")
end
- mod_vosk 插件的作用 :该插件是 FreeSWITCH 与 Vosk ASR 之间的「桥梁」(仙盟传讯令旗),无需手动编写复杂的 WebSocket 通信代码,只需通过 FreeSWITCH 内置指令(如
vosk_asr start)即可调用 Vosk 能力。
核心调用逻辑:
- FreeSWITCH 负责采集通话中的语音数据;
- mod_vosk 插件将语音数据转发至 Vosk ASR 服务;
- Vosk 完成语音识别后,通过插件将文本结果返回给 FreeSWITCH;
- FreeSWITCH 可将识别结果用于语音播报、日志存储、智能交互等场景。
环境依赖:
- 需先编译安装 mod_vosk 插件到 FreeSWITCH 环境;
- 需部署 Vosk ASR 服务(本地或远程),确保 FreeSWITCH 能访问到 Vosk 的 WebSocket 地址。
东方仙盟:拥抱知识开源,共筑数字新生态
在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。
开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。
共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。
知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology