调用通义千问实现语音合成并将合成的音频通过扬声器播放

1. 作者介绍

郭建东,男,西安工程大学电子信息学院,2024级研究生
研究方向:机器视觉与人工智能
电子邮件:1229963266@qq.com

高金年,男,西安工程大学电子信息学院,2024级研究生,张宏伟人工智能课题组
研究方向:机器人与智能装备控制技术
电子邮件:2432529790@qq.com

2. 调用通义千问实现语音合成并将合成的音频通过扬声器播放

2.1.通义千问语音合成简介

通义千问是阿里云推出的一个大型语言模型,基于先进的深度学习技术打造,能够理解和生成自然语言,在多轮对话、知识问答等多种应用场景中发挥重要作用。
优点:它具有高度准确的语言理解能力,能精准把握用户问题和意图;支持多种语言输入输出,如中文、英文等;还具备出色的多轮对话支持能力,可依据上下文进行交互,提供自然流畅的对话体验。

2.2语音合成

语音合成,又称文本转语音(Text-to-Speech,TTS),是将文本转换为自然语音的技术。该技术基于机器学习算法,通过学习大量语音样本,掌握语言的韵律、语调和发音规则,从而在接收到文本输入时生成真人般自然的语音内容。
作用:在通义千问的应用生态中,语音合成技术至关重要。它将模型生成的文本转化为语音,实现了人机交互的语音化,让用户能通过语音接收信息,极大地提升了交互的便捷性和自然度。
例如在智能客服场景中,用户提问后,通义千问给出的回答可通过语音合成直接播报,无需用户阅读文字,尤其适用于不方便看屏幕的场景,提高了服务效率和用户体验。

2.3.通义千问语音合成算法

  1. CosyVoice 模型介绍:
    CosyVoice是通义实验室依托大规模预训练语言模型,深度融合文本理解和语音生成的新一代生成式语音合成大模型,在自然语音生成方面表现卓越。支持多语言生成,涵盖中文、英文、日文、粤语和韩语五种语言,满足不同地区用户的需求;具备强大的音色和情感控制能力,仅需3 - 10秒的原始音频,就能生成模拟音色,包含韵律和情感等细节,还能通过富文本或自然语言形式对生成语音的情感和韵律进行细粒度控制,使生成的语音更加生动自然。
  2. 语音合成算法原理
    (1) 文本分析:对输入的文本进行深入分析,包括词汇、语法、语义理解,识别文本中的关键词、短语结构以及语义关系,为后续的语音参数生成提供基础。例如分析句子“今天天气真好”,确定“今天”是时间词,“天气真好”表达积极的天气状况描述。
    (2) 声学模型:根据文本分析结果,结合声学知识,预测生成语音所需的声学参数,如基频、共振峰、时长等,这些参数决定了语音的音高、音色和语速等特征。
    (3) 波形生成:利用预测得到的声学参数,通过特定的算法生成语音波形,最终转化为可播放的音频信号。

3. 代码实现

3.1开通服务并获取 API - KEY

(1) 百度搜索阿里云
(2) 注册账号
在这里插入图片描述

3)击右侧控制台
在这里插入图片描述
(4) 点击左边导航搜索向量检索服务DashVector
在这里插入图片描述
(5) 在Cluster列表中,点击创建Cluster
在这里插入图片描述
(6) 在API-KEY管理中,创建自己的API-KEY密钥
在这里插入图片描述

3.2将获取的 API - KEY配置到环境变量

(1) 在Windows系统桌面中按Win+Q键,在搜索框中搜索编辑系统环境变量,单击打开系统属性界面。
(2) 在系统属性窗口,单击环境变量,然后在系统变量区域下单击新建,变量名填DASHSCOPE_API_KEY,变量值填入您的DashScope API Key。
(3) 依次单击三个窗口的确定,关闭系统属性配置页面,完成环境变量配置。
(4) 打开CMD(命令提示符)窗口或Windows PowerShell窗口,执行如下命令检查环境变量是否生效。
在这里插入图片描述
CMD查询命令:echo %DASHSCOPE_API_KEY%
在这里插入图片描述

3.3 安装最新版 SDK

通过运行以下命令安装DashScope Python SDK:pip install -U dashscope
在这里插入图片描述
当终端出现Successfully installed … dashscope-x.x.x的提示后,表示您已经成功安装DashScope Python SDK。

3.4 安装需要的库

(1) 首先需要创建虚拟环境
(2) 在搜索栏中输入Windows PowerShell,以 管理员身份 运行(避免权限问题)。
(3) 创建一个新虚拟环境,名字为py39_env(可以自己改)。
在这里插入图片描述
(4) 激活环境。
在这里插入图片描述
(5) 安装需要的库
在这里插入图片描述

3.5运行代码

若没有将API Key配置到环境变量中,需将下面这行代码注释放开,并将apiKey替换为自己的API Key——# dashscope.api_key = “apiKey”

import pyaudio
import dashscope
from dashscope.audio.tts_v2 import *from http import HTTPStatus
from dashscope import Generation# 若没有将API Key配置到环境变量中,需将下面这行代码注释放开,并将apiKey替换为自己的API Key
# dashscope.api_key = "apiKey"
model = "cosyvoice-v1"
voice = "longxiaochun"class Callback(ResultCallback):_player = None_stream = Nonedef on_open(self):print("websocket is open.")self._player = pyaudio.PyAudio()self._stream = self._player.open(format=pyaudio.paInt16, channels=1, rate=22050, output=True)def on_complete(self):print("speech synthesis task complete successfully.")def on_error(self, message: str):print(f"speech synthesis task failed, {message}")def on_close(self):print("websocket is closed.")# stop playerself._stream.stop_stream()self._stream.close()self._player.terminate()def on_event(self, message):print(f"recv speech synthsis message {message}")def on_data(self, data: bytes) -> None:print("audio result length:", len(data))self._stream.write(data)def synthesizer_with_llm():callback = Callback()synthesizer = SpeechSynthesizer(model=model,voice=voice,format=AudioFormat.PCM_22050HZ_MONO_16BIT,callback=callback,)messages = [{"role": "user", "content": "请介绍一下你自己"}]responses = Generation.call(model="qwen-turbo",messages=messages,result_format="message",  # set result format as 'message'stream=True,  # enable stream outputincremental_output=True,  # enable incremental output )for response in responses:if response.status_code == HTTPStatus.OK:print(response.output.choices[0]["message"]["content"], end="")synthesizer.streaming_call(response.output.choices[0]["message"]["content"])else:print("Request id: %s, Status code: %s, error code: %s, error message: %s"% (response.request_id,response.status_code,response.code,response.message,))synthesizer.streaming_complete()print('requestId: ', synthesizer.get_last_request_id())if __name__ == "__main__":synthesizer_with_llm()

4.参考链接

https://help.aliyun.com/zh/model-studio/user-guide/text-to-speech?spm=a2c4g.11186623.help-menu-2400256.d_1_0_4.53e247bbJYVV91&scm=20140722.H_2842586._.OR_help-T_cn~zh-V_1
(点击CosyVoice的将LLM生成的文本实时转成语音并通过扬声器播放模块,点击Python运行的代码进行复制。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/75684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu软件包离线下载安装

1、下载软件包tcpd,并在/var/cache/apt/archives目录中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …

您的数据是如何出现在暗网上的?

暗网是互联网上的一个隐秘角落,人们可以在那里保持匿名。暗网经常与深网混淆,但它们并不完全相同。 深网是指网络上所有未被搜索引擎索引的内容。这包括电子邮件帐户、私人数据库和付费服务等。这并不违法,只是无法通过简单的 Google 搜索找…

原型模式及其应用

引言 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过构造函数来创建。这种模式通过克隆现有对象来创建新对象,从而避免了复杂的初始化过程。本文将探讨原型模式的好…

thinkphp漏洞再现

Thinkphp5x远程命令执行及getshell 1、开环境 2、使用工具攻击 开启工具 输入地址,点击漏洞检测 存在漏洞之后,选择漏洞,执行命令 3、也可以执行远程命令 执行命令 ?sindex/think\app/invokefunction&functioncall_user_func_array&…

Day16 -实例:Web利用邮箱被动绕过CDN拿真实ip

本想测试一下全局ping,刚好注册的时候收到了邮件,刚好去做一下复现。 原理:主动让对方站点给我们发邮件(注册、修改密码、订阅推送等)我们查看邮件原文,原文里存在真实的邮件站点ip 特点:邮件…

vue3 数据监听(watch、watchEffect)

1、watch 1.1基本使用 作用:数据监听 语法: watch(监听的数据, (改变后的数据, 改变前的数据) > { console.log(newVal, oldVal); }) 注意点:watch写法上支持一个或者多个监听源,这些监听源必须只能是getter/effect函数…

网盘解析工具更新,解决了一些bug

解析工具v1.2.1版本更新,本次是小版本更新,修复了一些bug。 之前小伙伴反应的网盘进入文件后不能返回上一级,现在这个bug修复了,已经可以点击了。 点击资源后会回到资源那一级目录,操作上是方便了不少。 增加了检查自…

推荐1款简洁、小巧的实用收音机软件,支持手机和电脑

聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装,下载…

六十天前端强化训练之第三十一天之Webpack 基础配置 大师级讲解(接下来几天给大家讲讲工具链与工程化)

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、Webpack 核心概念解析 二、实战:多资源打包配置(含完整代码) 三、配置深度解析(重点部分说明) 四、效果演示…

机器学习——Bagging、随机森林

相比于Boosting的集成学习框架,Bagging(Bootstrap Sampling,自助聚集法,又称为自助采样)作为一种自助聚集且并行化的集成学习方法,其通过组合多个基学习器的预测结果来提高模型的稳定性和泛化能力。其中随机森林是Bagging学习框架…

【蓝桥杯】每日练习 Day13

前言 今天做了不少题,但是感觉都太水了,深思熟虑之下主播决定拿出两道相对不那么水的题来说一下(其实还是很水)。 两道问题,一道是日期问题(模拟),一道是区间合并问题。 日期差值 …

HTML输出流

HTML 输出流 JavaScript 中**「直接写入 HTML 输出流」**的核心是通过 document.write() 方法向浏览器渲染过程中的数据流动态插入内容。以下是详细解释&#xff1a; 一、HTML 输出流的概念 1. 动态渲染过程 HTML 文档的加载是自上而下逐行解析的。当浏览器遇到 <script&…

理解文字识别:一文读懂OCR商业化产品的算法逻辑

文字识别是一项“历久弥新”的技术。早在上世纪初&#xff0c;工程师们就开始尝试使用当时有限的硬件设备扫描并识别微缩胶片、纸张上的字符。随着时代和技术的发展&#xff0c;人们在日常生活中使用的电子设备不断更新换代&#xff0c;文字识别的需求成为一项必备的技术基础&a…

开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(五)

一、前言 在上一节中&#xff0c;学习了如何使用vLLM来部署Whisper-large-v3-turbo模型。不过&#xff0c;在实际使用时&#xff0c;模型一次只能处理30秒的音频。今天&#xff0c;将结合实际业务&#xff0c;介绍如何处理一段完整的音频&#xff0c;并生成相应的字幕文件。 相…

“十五五”时期航空弹药发展环境分析

1&#xff0e;“十五五”时期航空弹药发展环境分析 &#xff08;标题&#xff1a;小二号宋体居中&#xff09; 一、建言背景介绍 &#xff08;一级标题&#xff1a;黑体三号&#xff0c;首行空两格&#xff09; 航空弹药作为现代战争的核心装备&#xff0c;其发展水平直接关乎…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录&#xff0c;点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏&#xff1a; IDEA 1. 问…

蓝桥杯 临时抱佛脚 之 二分答案法与相关题目

二分答案法&#xff08;利用二分法查找区间的左右端点&#xff09; &#xff08;1&#xff09;估计 最终答案可能得范围 是什么 &#xff08;2&#xff09;分析 问题的答案 和 给定条件 之间的单调性&#xff0c;大部分时候只需要用到 自然智慧 &#xff08;3&#xff09;建…

学习爬虫的第二天——分页爬取并存入表中

阅读提示&#xff1a;我现在还在尝试爬静态页面 一、分页爬取模式 以豆瓣Top250为例&#xff1a; 基础url:豆瓣电影 Top 250https://movie.douban.com/top250 分页参数:?start0&#xff08;第一页&#xff09;、?start25&#xff08;第二页&#xff09;等 每页显示25条数…

第 8 章:使用更好的库_《C++性能优化指南》_notes

使用更好的库 第八章核心知识点解析编译与测试建议总结优化原则重点内容&#xff1a;第一部分&#xff1a;多选题&#xff08;10题&#xff09;第二部分&#xff1a;设计题答案与解析多选题答案&#xff1a;设计题答案示例&#xff08;部分&#xff09;&#xff1a; 测试用例设…

RabbitMQ 学习整理1 - 基础使用

项目代码&#xff1a;RabbitMQDemo: 学习RabbitMQ的一些整理 基本概念 RabbitMQ是一种基于AMQP协议的消息队列实现框架RabbitMQ可以用于在系统与系统之间或者微服务节点之间&#xff0c;进行消息缓存&#xff0c;消息广播&#xff0c;消息分配以及限流消峰处理RabbitMQ-Serve…