当前位置: 首页 > article >正文

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

--本地AI电话机器人

  • 前言

书接上一篇,《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能

然而Android手机操作系统的声音调度策略,限制了声音的处理通道,没办法又拦截电话又使用听筒麦克风硬件,只能上抛给App做AI识别或转发给电脑坐席进行播放。

本篇章中,重点描述将语音转发给电脑坐席。Windows电脑与蓝牙电话的手机(插入外置USB蓝牙的手机)部署于同一个局域网(可以通过UDP广播寻址发现),在电脑中安装和运行一个软件App,充当“远程声音设备”。

通过“电脑CPU”+“手机CPU”的方式,把手机SIM电话卡通话的声音,通过局域网转发到电脑上进行播放和声音录制。并在这个基础之上实现通话过程中自动插播语音片段的能力,最终实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的实现方案。

Windows版“远程声音设备”程序的下载路径为:

拨号器声音程序:http://120.78.211.195:8060/sdk/DialerAudio_fx4.zip

拨号器SDK示例app:http://120.78.211.195:8060/sdk/SdkDemo.apk

USB蓝牙配件购买路径(参考):https://item.taobao.com/item.htm?_u=pk10l4ccbcd&id=649368472986

  • 远程声音设备的界面入口

Windows版“远程声音设备”程序,又称拨号器声音程序。是基于Windows DotNet Framework4构建的普通界面应用程序,能正常免安装运行于Win7及以上的Windows操作系统中。

程序运行后,会尝试通过局域网的UDP广播,寻找和配对连接同一个局域网内,已插入外置USB配件并正常运行【蓝牙电话SDK示例App】的手机。

不能正常连接上蓝牙电话的手机时,界面区域会标黄显示。若已成功连接上【蓝牙电话SDK示例App】的手机(简称“远程声音源”),则黄色消失且顶部状态文字将提示“声音源已连接”的字样,分别如下所示。

主界面:

首次启动拨号器声音程序,若之前从未配对过任何声音源时,拨号器声音程序会自动发起局域网UDP广播,并等待所有未处于连接状态的“远程声音源”反馈的应答。

如程序收到一个或多个“远程声音源”的应答,界面将显示标红的【声音源绑定提示区域】。用户可点击【重新绑定】按钮,在弹出的“局域网声音设备列表”中单选中要绑定的【蓝牙电话SDK示例App】的手机(每个手机或电脑使用单独固定的uuid来识别),点击【绑定声音源】按钮即可完成“远程声音设备--远程声音源”的绑定。如下图所示:

【绑定声音源】按钮点击后,目标手机上会立即弹出“远程声音设备主动绑定”的确认提示框。如上一篇章的内容所述,绑定后手机就可以跟局域网内的电脑坐席进行通话声音和事件的互动了。(电脑坐席绑定手机,需要手机弹框提示确认。但手机主动去绑电脑坐席不会弹框,请知悉。

主界面中,由于电脑程序和手机App启动先后顺序的原因,可能存在电脑坐席从未绑定声音源且蓝牙电话手机也未配对远程声音的情况。不用着急,这个是正常现象。此时点击界面右上角的设置图标,在弹出的菜单项中点击【搜索声音源】菜单项,程序会再次发送局域网UDP广播寻找在线的声音源,如下图所示:

如程序收到一个或多个“远程声音源”的应答,界面将显示标红的【声音源绑定提示区域】。用户可点击【重新绑定】按钮,进行绑定即可。

正常连接到声音源的主界面中,如果有来电,且“来电自动接听”的复选框未勾选,则底部图标处会显示【接听】的字样,此时点击文字或图标,均会做接听操作,如上图右侧内容所示。

  • 手动录制和试听IVR开场白声音

与【蓝牙电话SDK示例App】手机程序类似,拨号器声音程序也增设了“接通后播放IVR引导提示语”的复选框。

拨号器声音程序默认存放一条voice_10086.wav的wav语音片段,用户可以自由选择从电脑中【导入】8000采样单声道16位深的wav文件进行导入,也可以使用【录制】按钮,自己手动录制语音文件进行IVR声音引导播放。

【录制】按钮的弹出框和【播放】按钮的弹出框如下图所示,用户可以在下述界面进行IVR文件的试听和手动录制操作:

文件导入时,只能导入wav文件,且为了程序能正常解析和播放,请务必选择下述格式的采样和声道的声音数据的文件:

采样率:8000采样

声道数:单声道

比特位:16位位深

  • 外呼拨打和DTMF发送

与【蓝牙电话SDK示例App】手机程序类似,拨号器声音程序界面中,右上角有个设置图标。用户可以点击菜单中的【拨打电话】和【发送dtmf】按钮,在弹出框中进行对应的内容输入和按钮操作。如下图所示:。

  • 附:Windows11安全的“解除锁定”未签名程序

与Win7、Win8、Win10版本的操作系统不同,在Windows11中,使用免安装的exe程序,会莫名其妙触发“此文件来自其它计算机,可能被阻止以帮助保护该计算机”的锁定。

用户需要在电脑中右键【DialerAudio.exe】文件后,在【属性】界面中勾选“解除锁定”的复选框。之后双击运行才不会弹框提示风险。

用户也可右键【DialerAudio.exe】文件,“以管理员身份运行”来规避这个弹框。

在Windows11的操作系统中,进行上述额外操作后,即可正常双击运行免安装的exe程序。

否则,双击运行exe程序时将会弹出下述的【Windows已保护你的电脑】的对话框,阻止用户进一步运行这个程序。如下图所示:

在对话框界面中,用户也可以点击【更多信息】这个按钮,在之后显示的【仍要运行】按钮中点击后,即可正常跳过这个弹出框。后续再次双击运行【DialerAudio.exe】文件也不再弹出提示框。仅供参考。

  • 总结

本文介绍了Windows电脑上运行的【蓝牙电话SDK示例app】的远程声音坐席的程序。用户可使用本程序,搭配上一篇章的【蓝牙电话SDK示例app】,实现通话过程中自动插播语音片段的能力,最终实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的实现方案。

有细心的读者可能已经发现:【蓝牙电话SDK示例app】手机程序有“接通后播放IVR引导提示语”的功能,现在【拨号器声音程序】也有“接通后播放IVR引导提示语”的复选框,那么它们之间是如何协同工作的呢?

从通话声音的传输来看,当前我们一路通话的声音数据传递顺序是:电脑坐席--蓝牙电话App--手机--呼叫目标。

因此,当两个程序的复选框都勾选时,若【蓝牙电话SDK示例app】的IVR文件内容未播放完毕,则目标手机听到的就是【蓝牙电话SDK示例app】的IVR声音;当【蓝牙电话SDK示例app】的IVR文件内容已播放完毕且【拨号器声音程序】的IVR文件内容仍然没有播放完时,继续播放【拨号器声音程序】的IVR文件内容的声音。全部都播放完毕后,才会切换到电脑坐席的麦克风的声音。

(举个例子,手机的IVR语音时长5s,电脑坐席的IVR语音时长17s,电话接通后,目标手机前5s听到的是手机的IVR语音内容,第6s开始听到的是电脑坐席第6s的IVR语音内容。通话17s后,目标手机听到的是电脑坐席的麦克风的声音内容)

因此,本篇章的内容,是与上一篇章《手机打电话通话时如何向对方播放录制的IVR引导词声音》强关联的一个附属应用。【蓝牙电话SDK示例app】没有本篇章的【拨号器声音程序】也能正常工作。但由于Android声音调度策略的特性,要实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的能力,仅仅单靠一个手机是无法实现的,需要引入另外一个CPU的设备进行协同工作才行。

本篇章编写的内容,仅仅是在Windows操作系统中对上述能力的一个实现,而且这个【拨号器声音程序】的源代码是开放的。

读者或用户也可根据我们的程序和交互协议和逻辑,扩展出适合自己的业务和商业逻辑。本篇章的内容,对电脑--手机相互协同的逻辑交互和打电话能力扩展的演进方向,也能起到一定的参考作用。


上一篇:手机打电话通话时如何向对方播放录制的IVR引导词声音

下一篇:编写中。

相关文章:

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段 --本地AI电话机器人 前言 书接上一篇,《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能。…...

SpringCloud——负载均衡

一.负载均衡 1.问题提出 上一篇文章写了服务注册和服务发现的相关内容。这里再提出一个新问题,如果我给一个服务开了多个端口,这几个端口都可以访问服务。 例如,在上一篇文章的基础上,我又新开了9091和9092端口,现在…...

Python Transformers 库介绍

Hugging Face 的 Transformers 库是一个用于自然语言处理(NLP)的强大 Python 库,它提供了对各种预训练模型的访问和使用接口。该库具有以下特点和功能: 主要特点 丰富的预训练模型:Transformers 库包含了大量的预训练模型,如 BERT、GPT - 2、RoBERTa、XLNet 等。这些模型…...

string的基本使用

string的模拟实现 string的基本用法string的遍历(三种方式):关于auto(自动推导):范围for: 迭代器普通迭代器(可读可改)const迭代器(可读不可改) string细小知识点string的常见接口引…...

深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南

作为大禹智库的向量数据库高级研究员,同时也是《向量数据库指南》的作者,我在过去30年的向量数据库和AI应用实战中见证了这项技术的演进与革新。今天,我将以专业视角为您深入剖析Mlivus Cloud的核心组件之一——rootcoord,这个组件在系统架构中扮演着至关重要的角色。如果您…...

docker 代理配置冲突问题

问题描述 执行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…...

Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解

Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解 Nginx 反向代理与负载均衡配置,Header 透传到后端应用(参数全解版)一、Nginx 反向代理与负载均…...

Python常用的第三方模块之【pymysql库】操作数据库

pymysql是在Python3.x版本中用于连接MySQL服务器的一个实现库,Python2中则是使用musqldb。 PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,它允许我们直接在 Python 中执行 SQL 语句并与 MySQL 数据库进行交互。下面我们将详细介绍如何使用 PyMySQL 进…...

【Python数据分析】Pandas模块之pd.concat 函数

💭 写在前面:合并多个数据框,收集各种数据,并将其合并为一个数据框进行分析。本章我们介绍 Pandas 库中数据框合并的函数 —— concat。 0x00 引入:数据框的合并操作 合并多个数据框:收集各种数据,并将其合并为一个数据框进行分析。 下面介绍一些常用的 Pandas 库中数…...

矫平机深度解析:操作实务、行业标准与智能化升级

一、精细操作指南:不同材料的矫平参数设定 1. 常见金属矫平参数参考表 材料类型 厚度范围(mm) 辊缝初始值(mm) 矫平速度(m/min) 压力系数(k值) 低碳钢(…...

【高频考点精讲】CSS accent-color属性:如何快速自定义表单控件的颜色?

用CSS accent-color属性3分钟搞定表单控件换肤,原来这么简单! 前几天有个学员问我,checkbox和radio这些表单控件默认样式太丑了,有没有什么办法能快速改颜色?" 我一看这问题就乐了——这不正是CSS accent-color属性的拿手好戏吗?今天咱们就来好好聊聊这个被低估的C…...

C# 综合示例 库存管理系统7 主界面(FormMain)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 图99A-22 主界面窗口设计 主界面是多文档界面容器,需要将窗体属性IsMdiContainer设置为True。关于多文档界面编程请参看教程第7.12节《多文档界面》。 主界面并不提…...

vue项目中axios统一或单独控制接口请求时间

先说统一 这里将请求时间统一控制在12秒 // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 0 const axiosInstance axios.create()// 覆写库的超时默认值 // 现在,在超时前,所有请求时间统一控制在10秒 axiosInstance.defaults.ti…...

Codeforces Round 1020 (Div. 3) A-D

A. Dr. TC https://codeforces.com/contest/2106/problem/A 题目大意: 对输入字符串每个位置字符依次翻转(1->0 , 0->1) 比如: 101 001 翻转位置1 111 2 100 3 题解: 观察数学特征:ansn…...

系统思考:看清问题背后的结构

组织的挑战,往往不是因为不努力,而是“看不清” 结束了为期两天系统思考课程的第一天,被学员的全情投入深深打动。我们用系统结构图,一步步揭示那些表面看起来“习以为常”的问题: 什么原因跨部门协作总是磕磕绊绊&am…...

netlist

在电子设计自动化(EDA)中,网表(Netlist) 是描述电路设计连接关系的核心数据结构,本质上是电路元件(如逻辑门、晶体管、模块)及其互连关系的 文本化或结构化表示。它是从抽象设计&…...

如何实现Android屏幕和音频采集并启动RTSP服务?

技术背景 在移动直播和视频监控领域,实现高效的屏幕和音频采集并提供流媒体服务是关键技术之一。本文将详细介绍如何基于大牛直播SDK实现Android屏幕和麦克风/扬声器采集,并启动轻量级RTSP服务以对外提供拉流的RTSP URL。在Android平台上,轻…...

Langchain_Agent+数据库

本处使用Agent数据库,可以直接执行SQL语句。可以多次循环查询问题 前文通过chain去联系数据库并进行操作; 通过链的不断内嵌组合,生成SQL在执行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…...

QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码

(1) (2)本类的继承关系如下,所以说分隔条属于容器: (3)本类的属性: (4) 这是一份 QSplitter 的举例代码,注意其构造函数时候的传参&am…...

Huffman(哈夫曼)解/压缩算法实现

一、文件压缩 哈夫曼压缩算法需要对输入的文件&#xff0c;逐字节扫描&#xff0c;统计出不同字节出现的数量&#xff08;频率&#xff09;&#xff0c;根据的得到的频率生成一组叶子节点&#xff0c;这些节点存储着<字节信息>和<频率>,通常需要按频率排序后存储在…...

迭代器模式:统一数据遍历方式的设计模式

迭代器模式&#xff1a;统一数据遍历方式的设计模式 一、模式核心&#xff1a;将数据遍历逻辑与数据结构解耦 在软件开发中&#xff0c;不同的数据结构&#xff08;如数组、链表、集合&#xff09;有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…...

Oracle_开启归档日志和重做日志

在Oracle中&#xff0c;类似于MySQL的binlog的机制是归档日志&#xff08;Archive Log&#xff09;和重做日志&#xff08;Redo Log&#xff09; 查询归档日志状态 SELECT log_mode FROM v$database; – 输出示例&#xff1a; – LOG_MODE – ARCHIVELOG (表示已开启) – NO…...

LeetCode每日一题4.23

题目 问题分析 计算每个数字的数位和&#xff1a;对于从 1 到 n 的每个整数&#xff0c;计算其十进制表示下的数位和。 分组&#xff1a;将数位和相等的数字放到同一个组中。 统计每个组的数字数目&#xff1a;统计每个组中有多少个数字。 找到并列最多的组&#xff1a;返回数…...

线性代数-矩阵的秩

矩阵的秩&#xff08;Rank&#xff09;是线性代数中的一个重要概念&#xff0c;表示矩阵中线性无关的行&#xff08;或列&#xff09;的最大数量。它反映了矩阵所包含的“有效信息”的维度&#xff0c;是矩阵的核心特征之一。 直观理解 行秩与列秩&#xff1a; 行秩&#xff1…...

RunnerGo API性能测试实战与高并发调优

API 性能测试通过模拟不同负载场景&#xff0c;量化评估 API 的响应时间、吞吐量、稳定性、可扩展性等性能指标&#xff0c;关注其在正常、高峰甚至极限负载下的表现。这有助于确保 API 稳定高效地运行&#xff0c;为调用者提供优质服务。 接下来&#xff0c;我们借助 RunnerG…...

STM32——相关软件安装

本文是根据江协科技提供的教学视频所写&#xff0c;旨在便于日后复习&#xff0c;同时供学习嵌入式的朋友们参考&#xff0c;文中涉及到的所有资料也均来源于江协科技&#xff08;资料下载&#xff09;。 Keil5 MDK安装 1.安装Keil5 MDK2.安装器件支持包方法一&#xff1a;离线…...

数据结构入门【算法复杂度】超详解深度解析

&#x1f31f; 复杂度分析的底层逻辑 复杂度是算法的"DNA"&#xff0c;它揭示了两个核心问题&#xff1a; 数据规模(n)增长时&#xff0c;资源消耗如何变化&#xff1f; 不同算法在极端情况下的性能差异有多大&#xff1f; 数学本质解析 复杂度函数 T(n)O(f(n))…...

java多线程(7.0)

目录 ​编辑 定时器 定时器的使用 三.定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 定时器 定时器是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的…...

Long类型封装Json传输时精度丢失问题

在信息做传输时&#xff0c;经常会使用到类型转换&#xff0c;这个时候因为一些问题会导致精度的丢失。在支付业务中这种问题更为致命。 这里我主动生成一个支付订单并将相关信息使用base64编码为一个二维码返回给前端进行支付&#xff0c;前端进行支付时我通过回调方法发现回调…...

《从GPT崛起,看AI重塑世界》

《从GPT崛起,看AI重塑世界》 GPT 诞生:AI 领域的震撼弹 2022 年 11 月 30 日,OpenAI 发布了一款名为 ChatGPT 的人工智能聊天机器人程序,宛如一颗重磅炸弹投入了平静的湖面,迅速在全球范围内引发了轩然大波,成为了科技领域乃至大众舆论场中最热门的话题之一。一时间,无…...