使用Amazon Chime SDK实现PSTN背景噪声抑制
关键要点
背景噪声问题 通话或会议中的背景噪声常常会让人感到沮丧,Amazon Voice Focus旨在解决这一问题。技术介绍 Amazon Voice Focus通过深度学习技术,实时减少通话中的背景噪声,提升语音清晰度。开发者集成 开发者可以将此功能集成到自己的应用程序中,利用Amazon Chime SDK的灵活性。实践演示 本文包含如何实现Amazon Voice Focus的演示应用程序的详细步骤。许多人在通话或会议中都经历过令人困扰的背景噪声,无论是与开车中的人交谈,还是在嘈杂的客服中心接听电话,背景噪音都可能分散注意力,降低生产力。为此,我们非常高兴地宣布推出适用于公共电话网络的Amazon Voice Focus。
Amazon Voice Focus是一款屡获大奖的深度学习噪声抑制应用,利用机器学习技术,实时减少音频中的噪声,在不增加可感知通话延迟的情况下提高通话质量。它可以降低风声、风扇声、流水声、割草机声、狗吠声、打字声以及纸张翻动声等噪声的音量。与其检测噪声,我们训练了机器学习模型来识别语音,剩余的就是我们要尝试抑制的噪声。
魔方加速器app下载开发者现在可以使用Amazon Chime SDK公共交换电话网络PSTN音频将此功能集成到自己的应用程序中。Amazon Chime SDK PSTN音频使开发者能够更轻松地构建自定义电话应用,利用无服务器的AWS Lambda功能提供的灵活性和操作简单性。您可以使用Amazon Chime SDK构建自助服务应用,以降低电话解决时间和自动化信息响应。
在本文中,我们将演示如何实现Amazon Voice Focus功能,构建一个示例,创建两方通话,并可以随时打开或关闭Amazon Voice Focus,以体验其对通话清晰度的提升。这个语音应用程序是用Python编写的AWS Lambda函数,创建了一个电话号码,接听后将提示您输入目标电话号码进行连接。一旦双方连接,Amazon Voice Focus噪声抑制默认开启,但可以通过按键盘上的数字进行禁用和重新启用。
Amazon Voice Focus演示应用架构
本文所用的AWS组件包括:
组件描述Amazon Chime SDK PSTN音频路由呼叫事件到AWS LambdaAmazon Simple Storage Solution (S3)存储wav文件用于播放自定义消息AWS Lambda处理通话流程逻辑的服务器无状态函数要了解有关如何构建启用PSTN的语音应用程序的更多信息,可以参考我们的文档。请注意,使用这些服务将会产生AWS账户的费用。
架构包括以下组件:
ChimeSdkPstnLambda 用Python编写的AWS Lambda函数,与Amazon Chime SDK PSTN音频关联,用于处理通话流逻辑。Amazon Chime PSTN音频 将通话事件路由到您的AWS Lambda。电话号码 一个与SIP媒体应用程序规则一起使用的电话号。wavFiles 存储自定义消息的Amazon S3桶。前提条件安装 node V16/npm安装 AWS Command Line Interface (AWS CLI)为将用于此演示的账户/区域配置 AWS凭证有创建Amazon Chime SIP媒体应用和电话号码的权限确保您的服务配额在useast1或uswest2中未达到电话号码、语音连接器、SIP媒体应用及SIP媒体应用规则的限制操作步骤安装完依赖项后,克隆仓库并运行部署脚本:
bashgit clone https//githubcom/awssamples/amazonchimesdkpstnaudiovoicefocusgitcd amazonchimesdkpstnvoicefocus/deploysh (接受CDK部署提示)
成功部署CDK组件后,注意输出中的ChimeSdkPstnVoiceFocusStackinboundPhoneNumber,这是在“资源创建”部分描述的电话号码,它将在演示中作为接入电话号码使用。
接下来,直接拨打该电话号码,您将听到“请输入您希望拨打的号码”的留言,此时您输入一个11位的美国号码。然后您将与该号码连接,并且一旦接通,双方都可以开始对话,默认启用了Amazon Voice Focus。通话过程中,两位参与者可以按下键盘上的0来禁用其音频流发送给其他参与者的Amazon Voice Focus,这样背景噪音将不会被抑制;同样,通过按下1则可以重新启用。
当至少有一位通话参与者处于嘈杂环境时,这种好处尤为明显。然而,也可以通过轻敲或刮擦设备的麦克风来模拟噪声。如果您拥有两部手机并能够同时听到通话的两个端口,轻敲其中一部手机的麦克风时,另一部手机的扬声器将无法听到该噪声。按下0键后,您将突然听到此前被抑制的噪声。如果你像我一样有多部手机,且我在爱尔兰,因此当我拨打美国号码时,通常会有长途国际通话中常见的背景噪声。但是当Amazon Voice Focus启用时,我再也听不到该噪声,音频清晰度大幅提升。
工作原理ChimeSdkPstnLambda是这个演示的主要呼叫路由逻辑,具有简单的流程:
对于新的呼叫,播放问候语并收集输入的目标号码。将呼叫者与目标号码连接。为两个通话参与者启用Amazon Voice Focus。启用一个监听器,支持任一参与者重新启用或禁用Amazon Voice Focus。当拨打该电话号码时,SIP媒体应用程序规则将路由呼叫到SIP媒体应用程序。这将用NEWINBOUNDCALL事件调用您的ChimeSdkPstnLambda函数,并执行newcallhandler函数。然后,该函数会执行playandgetdigitsaction函数,通过PlayAudioAndGetDigits动作响应AWS Lambda调用,参数设置为要播放的wav文件、输入错误时要播放的失败wav文件、与用户输入匹配的正则表达式模式和入站呼叫者的CallID。
如果用户输入符合条件的11位号码,您的ChimeSdkPstnLambda函数将触发ACTIONSUCCESS事件,并包含用户输入的目标号码。接下来,我们可以使用这些信息响应CallAndBridge动作。成功后,我们将建立通话,并使用enablevoicefocus函数为双方开启Amazon Voice Focus 我们将通过创建一个动作列表来返回:
pythondef enablevoicefocus(event) actions = [] for call in event[CallDetails][Participants] actionsappend(voicefocusaction(call[CallId] True)) return response(actions[0] actions[1])
VoiceFocus动作只需要设置两个参数,enabled的值为True或False,以及参与者的CallID 这两个CallID在我们成功连接两个参与者后的调用事件中均可获取:
pythondef voicefocusaction(callid enabled) return { Type VoiceFocus Parameters { Enable enabled CallId callid } }
如果成功启用Amazon Voice Focus,系统将再次返回ACTIONSUCCESSFUL事件。现在,双方均已启用Amazon Voice Focus,我们希望给参与者提供禁用和重新启用背景噪声抑制的功能,通过他们的按键输入实现。
我们通过发送ReceiveDigits动作来收集和通知我们何时按下按键。然后,我们根据给定参与者音频流的状态设置Amazon Voice Focus的状态:

pythondef controlvoicefocus(callid event) if event[ActionData][ReceivedDigits] == 0 enabled = False elif event[ActionData][ReceivedDigits] == 1 enabled = True return response(voicefocusaction(callid enabled))
当其中一位参与者挂断电话时,我们将使用Hangup动作结束第二位参与者的通话流程。
顺序图清理要清理此演示,请执行 cdk destroy
结论本演示展示了如何利用Amazon Chime SDK PSTN音频的VoiceFocus动作进行电话通话背景噪声的抑制,以提高语音清晰度。此外,这里还演示了一些其他操作,如 CallAndBridge、PlayAudioAndGetDigits、PlayAudio、ReceiveDigits 和 Hangup,这些操作均可在简易的Python Lambda函数中实现。您可以利用本演示中展示的技术和开发模式,实施各种解决方案,以支持远程工作、多联络电话的移动工作者、交互式语音响应IVR菜单,以及增强基于云或在场的呼叫中心。VoiceFocus只是目前可用的一系列支持的PSTN操作之一。
项目代码请参考我们的GitHub仓库 Amazon Chime SDK PSTN Audio Voice Focus
其他阅读资料:
要了解更多关于Amazon Chime SDK PSTN音频的信息,请参考 文档
标签 Amazon Chime SDK、chime、Communication Developer Services、cpaas、Noise Suppression、Programmable chat、Programmable video、Programmable Voice、PSTN、PSTN Calling、SIP trunking、Voice APIs、Voice Focus、WebRTC
Gareth Nathan
Gareth是Amazon Chime SDK电话工程团队的首席工程师,热衷于构建能让开发者将实时媒体功能集成到自己的应用程序和统一通信平台中的服务。
在 Amazon Bedrock预览版中导入自定义模型 新闻博客
在 Amazon Bedrock (预览版) 中导入自定义模型作者:Danilo Poccia 发表于 2024年4月23日,分类:Amazon Bedrock、Amazon SageMaker、公告...
无服务器参与者指南:AWS reInvent 2023 计算博客
AWS reInvent 2023 无服务器参与者指南作者:Marcia Villalba,2023年11月14日发表于Amazon API Gateway、Amazon EventBridge、AW...