爸爸的零食魔法:解锁大雷成长的甜蜜秘诀

核心内容摘要

寻觅数字时代的视觉巅峰:97色综合网最新资源分享全攻略
探索“颜色”的无限可能:一款让你大开眼界的神奇软件

51-每日大赛:解锁女友心动瞬间,最新章节惊艳上线!

将手机电话通话声音通过udp传输到局域网的Python脚本--本地AI电话机器人上一篇手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心下一篇编写中

前言前面我们通过两个篇章《手机SIM卡通话中随时插入录音语音片段(Android方案)》《手机SIM卡通话中随时插入录音语音片段Windows方案》阐述了【手机打电话过程中随机插播预录语音片段】的功能和根据对方手机按下DTMF按键播放不同IVR应答语音片段给对方手机的能力。

在AI电话沟通时由于手机性能和算力的局限性通常AI交互的模型和算法无法部署到手机上。

这样的话就需要将拦截到的手机通话的声音数据通过网络局域网或互联网将语音包传输给AI算力服务器。

由其对语音进行ASR识别和语义理解并生成最终的应答TTS语音反馈回手机注入到电话通话中。

当前市面上主流的实时语音流的传输方式主要有两种1SIP/WebRTC协议及配套的RTP/RTCP语音数据传输。

2直接将语音数据以udp广播或组播的方式分发给局域网内多个设备。

前面我们花了很多的篇章和研发力量在SIP协议对接开源的FreeSwitch和VOS与呼叫中心上详情可参考文章《蓝牙电话与FreeSwitch服务器和UA坐席的通话》。

事实上手机电话通话做AI呼叫本质上跟SIP协议没有太大的依赖关系。

手机APP提取到通话声音后完全可以把这个声音数据直接传给局域网内的AI服务器或者让手机自己的AI模型来消费和应答这个声音会话。

众所周知SIP协议无法处理“通话号码带逗号-实现拨通后自动拨出分机号”这样的能力但你直接传的话就没有这种问题本文就是基于这样的场景使局域网内部署的一台AI服务器就可以通过udp数据包同时处理多台Android手机发来的AI呼叫请求并生成对应TTS语音应答。

由于数据交互全在局域网内进行因此其【端到端】通话的时延可以得到最大程度的保证TTL只有1跳或2跳路由的路径非常短。

这样既能利用AI算力服务器的堆叠密度又能同时处理和响应多路手机SIM卡的电话通话。

实现高效的AI呼叫和成本的压缩。

体验和下载地址智能拨号器Apphttp://

120.

78.

2

195:8060/Dialer.apk拨号器声音(Python源码)http://

120.

78.

2

195:8060/sdk/dialer_audio_py.zip当前商用方案是蓝牙电话的方案需要依赖一个外置的USB蓝牙的配件插入到手机上才能拦截到电话通话的声音数据。

因此需要额外购买一个USB蓝牙配件。

USB蓝牙配件购买路径(参考)https://item.jd.com/

html

方案的依赖配件关注过我们博客的朋友都知道目前拦截手机通话声音的蓝牙电话方案需要将USB蓝牙的配件插入到手机上才能在手机APP拦截到电话通话的事件和声音数据。

这个方案最大的好处是不限制手机市面上任何品牌型号的Android手机拿来装上app插上USB配件后就能拦截到电话通话语音。

普适性非常的广。

市面上任何新的手机和二手的手机都支持这样用。

依赖的手机配件如下图所示买来的USB蓝牙配件可以直接插在手机上使用。

但是因为是公共的标准配件需要有一个USB转typec的转接头才能插到Android手机上没有的话可以去京东淘宝拼多多买一个即可非常的便宜。

方案的依赖界面蓝牙电话方案使用Android手机APP通过插入手机的USB蓝牙来直接拦截电话通话的声音。

因此为了能让它将语音数据和通话事件公开到手机所在的局域网中需要对【智能拨号器app】进行一个基础的默认设置如下图所示【智能拨号器app】的设置选项卡中点击右上角齿轮图标打开【APP应用设置】界面后将原先默认的“SIP协议栈连接SIP平台”关闭为“协议栈手机IVR-AI语音处理”。

APP应用设置中做了这个默认设置切换了之后APP拦截到的电话通话声音将不再进行SIP协议的转发而是在手机APP自身和局域网内广播寻址找到【远程声音设备】进行电话通话声音数据的播放和输出。

Python客户端的命令行菜单本文的Python脚本的源代码即为拨号器的远程声音设备的标准输入输出的源文件它支持Windows/Linux/MacOS三大平台用DeepSeek帮我写的MacOS暂时没有这个电脑来调试不知道是否能运行和有声音^V^但Windows11和Ubuntu

1

04肯定能用。

详细的Windows和Ubuntu操作系统的安装和配置步骤已在附件下载路径《dialer_audio_py.zip》压缩包中的README.md文件内容中描述的很清楚了。

此处简要的列举一下执行了【pip install sounddevice numpy coloramapython main.py】命令之后随便输入help或直接按下Enter键打印的命令行提示内容如下所示# 进去后输入help 按提示逐个输入discover / bind 21ea5105736c3285 绑定后手机app上会弹框出来提示是否接受远程声音设备的绑定-需要手机APP上允许。

# 至此即可使用 call 10086 / hangup / dtmf 2 等指令正常在windows11中使用python连接局域网内的智能拨号器app来实时通话啦。

用户可以简单的使用如下指令来完成一个外呼的手机通话对手机进行远程操控如常用的拨打10086等待接通后说话 call 10086通话中发送DTMF数字 dtmf 2拨打完毕后挂断电话 hangup

拨号器声音程序架构其实有Python脚本的源代码之后什么架构啊、交互时序和指令内容啊都是多余的。

有啥不懂的直接跳转去看代码即可反正就六七个py文件而已非常的简洁易懂。

但这里为了便于理解还是画蛇添足一次Python脚本作为【远程声音设备】的程序主要使用udptcp结合的方式来进行工作的。

UDP协议负责进行广播找人、寻址和绑定双方的目标设备以及电话通话时直接传输上行和下行的全双工的语音数据。

UDP占用

的udp端口。

TCP协议负责建立稳定的连接保证通话的事件和状态能够准时、完整的在局域网双方设备之间进行数据交换。

TCP占用电脑的随机端口和手机的42700端口。

它们之间的逻辑架构如下图所示

Python程序的传输端口和交互指令Python脚本做为拨号器的远程声音设备交互指令和状态机总体还是比较简单的交互指令的时序图如下它主要分为三个阶段UDP发现、TCP连接、电话通话交互执行的详细json格式内容如下指令描述指令json格式内容UDP设备发现{ type: REQUEST_AUDIO, sn: 设备GUID或空字符串 }声音源响应{ type: RESPONSE_AUDIO, sn: f87cca772abcf96f, company: 设备厂商, ip:

192.

168.

3

241, port: 42700 }Call消息{ type: Call, number: 13800138000, call_type: normal }Answer消息{ type: Answer }Hangup消息{ type: Hangup }DTMF消息{ type: DTMF, digit: 1, duration: 100 }外呼响应{ type: OnCallDialing, number: 13800138000 }呼叫振铃事件{ type: OnCallProgress, number: 13800138000 }电话被接通{ type: OnCallConnected, number: 13800138000 }被拒接{ type: OnCallReject, reason: 用户拒接 }主动取消{ type: OnCallCancel, reason: 用户取消 }接通后挂断{ type: OnCallHangup, reason: 正常结束 }详细的交互指令内容见上述附件下载路径《dialer_audio_py.zip》压缩包中的README.md文件内容所述需要的可自行下载后查阅。

七、

总结经本篇章这么一顿操作我们也算是部分的代码开源了。

从文中各个章节的描述上看其实局域网内的数据交互是非常的简洁的。

事实上也本就该如此如果不考虑目前AI算力和芯片差异真正的【端到端】AI通话就应该是【手机-手机】通话跟网络局域网或互联网没有半毛钱关系。

只是因为当前手机算力不足没法跑AI的大模型才引出了将手机通话的语音传递到AI算力服务器上。

AI响应完毕后转成TTS语音数据再返回手机做注入而已。

这样就引出了【1个AI算力服务器多个Android手机】这样复用的高效率组合这样的场景下很明显直接使用UDP或RTP将语音数据通过一个udp端口发到AI服务器使AI服务器能够同时处理多路语音的呼叫是正常的标准做法。

我们通过这种方式在【拦截手机打电话的声音】基础之上很容易就能扩充出通话中【随机插播预录语音片段】、AI外呼、AI来电接听等高级功能。

本文的UDP寻址和电话语音数据的交互方式对同方向的语音和视频类应用也具有一定的参考意义。

少女视频-少女视频应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123