0

0

【百度AI语音合成】会员到访门店语音提醒

蓮花仙者

蓮花仙者

发布时间:2025-07-22 11:48:01

|

403人浏览过

|

来源于php中文网

原创

实现步骤 step1: 成为百度ai开放平台的开发者

【百度AI语音合成】会员到访门店语音提醒

我们有账号后登录,并点击此处(百度语音)创建一个应用,如下图所示。

【百度AI语音合成】会员到访门店语音提醒

然后就可以看到创建完成的应用和 APPID、API KEY 以及 Secret KEY。

【百度AI语音合成】会员到访门店语音提醒

Step2: 准备数据

语音合成是将文本转换为可播放的音频文件的服务,我们从大姚的订单库中找到一段订单信息文本如下:

三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)

Step3: 编写一个语音合成示例程序

有了第一步的 API KEY 以及 Secret KEY,以及第二步的数据,我们就可以编写一个示例代码来调用百度AI开放平台的文字识别功能。

准备开发环境

小帅选择使用Java来快速搭建一个原型,关于如何安装Java,可以参考百度经验哦。百度AI提供了非常完善的API文档和封装调用更方便的工具包。接下来小帅将使用Maven来搭建工程环境。

pom.xml配置如下:

<dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.12.0</version>
</dependency>

编写代码

粘贴以下内容,不要忘记替换你的 APPID、APIKEY 以及 SECRETKEY 和 图片文件。

运行main方法即可。

import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import org.json.JSONObject;
import java.util.HashMap;
<p>public class Sample {
//第一步创建应用获取的三个值
private static String APPID = "你的 App ID";
private static String APIKEY = "你的 Api Key";
private static String SECRETKEY = "你的 Secret Key";</p><pre class="brush:php;toolbar:false;"><code>public static void main(String[] args) {
    // 初始化一个AipSpeech 
    AipSpeech client = new AipSpeech(APPID, APIKEY, SECRETKEY);

    // 调用接口 第二步准备的图片
    HashMap<String, Object> options = new HashMap();

    //合成的文本内容
    String text = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)";

    //发音人选择
    /**
     * 度小宇=1,度小美=0,度逍遥=3,度丫丫=4
     * 度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5
     **/
    options.put("per", "0");

    //语速,取值0-9,默认为5中语速
    options.put("spd", "3");

    TtsResponse res = client.synthesis(text, "zh", 1, options);
    byte[] data = res.getData();
    JSONObject res1 = res.getResult();

    if (data != null) {
        try {
            Util.writeBytesToFileSystem(data, "F:\testaudio\度小美Demooutput.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    if (res1 != null) {
        System.out.println(res1.toString());
    }
}

}

保存接口返回语音byte[] 转存为MP3格式文件。这里说明一下,默认返回就是MP3格式的数据哦。如果想要其他格式:

//3为mp3格式(默认);
//4为pcm-16k;
//5为pcm-8k;
//6为wav(内容同pcm-16k);
//注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。
options.put("aue", "3");

点击访问合成的示例MP3文件。

语音合成单例加载。10次测试耗时如下(单位:ms(毫秒))。第一次需要加载一次AUTH。耗时多了一些。后续基本都持平在710ms以内。

发送请求到返回数据耗时:1493
发送请求到保存文件耗时:1495
发送请求到返回数据耗时:611
发送请求到保存文件耗时:612
发送请求到返回数据耗时:609
发送请求到保存文件耗时:610
发送请求到返回数据耗时:473
发送请求到保存文件耗时:474
发送请求到返回数据耗时:549
发送请求到保存文件耗时:550
发送请求到返回数据耗时:673
发送请求到保存文件耗时:674
发送请求到返回数据耗时:754
发送请求到保存文件耗时:755
发送请求到返回数据耗时:676
发送请求到保存文件耗时:676
发送请求到返回数据耗时:582
发送请求到保存文件耗时:582
发送请求到返回数据耗时:662
发送请求到保存文件耗时:663
发送请求到返回数据平均耗时:708.2ms
发送请求到保存文件平均耗时:709.1ms
for (int i = 0; i < 10; i++) {
options = new HashMap<String, Object>();
options.put("per", "0");
options.put("spd", "3");
long startTime = System.currentTimeMillis();
TtsResponse res = client.synthesis(text, "zh", 1, options);
byte[] data = res.getData();
if (data != null) {
long endTime = System.currentTimeMillis();
System.out.println("发送请求到返回数据耗时:" + (endTime - startTime));
try {
Util.writeBytesToFileSystem(data, "F:	estaudio度小美Demooutput.mp3");
long saveEndTime = System.currentTimeMillis();
System.out.println("发送请求到保存文件耗时:" + (saveEndTime - startTime));
} catch (IOException e) {
e.printStackTrace();
}
}
JSONObject res1 = res.getResult();
if (res1 != null) {
System.out.println(res1.toString());
}
System.out.println();
}

【百度AI语音合成】会员到访门店语音提醒

SekoTalk
SekoTalk

商汤科技推出的AI对口型视频创作工具

下载

会员到访语音提醒搞起来,简单看一下业务流程图。主要看语音合成、语音提醒部分即可。

人脸会员识别可以看百度AI的官方解决方案 https://www.php.cn/link/bce15390acb84d49e513cb3f2963c523

本业务中人脸识别、摄像头厂商暂时没用百度AI。这一点我也很无奈。迫于公司要求呀。如果再来一次选择,绝对强制提议选择百度AI(怕太便宜而告终 你懂得)。

【百度AI语音合成】会员到访门店语音提醒

接口调用封装,并符合业务系统使用。

会员信息采集

【百度AI语音合成】会员到访门店语音提醒【百度AI语音合成】会员到访门店语音提醒【百度AI语音合成】会员到访门店语音提醒

后端会员人脸信息处理

/** </p><ul><li>会员人脸信息添加 </li><li>@param csFace </li><li>@return 
*/
@AutoLog(value = "会员人脸信息添加")
@ApiOperation(value="会员人脸信息添加", notes="会员人脸信息添加")
@PostMapping(value = "/add")
public Result<CsFace> add(@RequestBody CsFace csFace) {
Result<CsFace> result = new Result<CsFace>();
CsFaceGroup group = new CsFaceGroup();
try {
//这里存人脸信息到人脸库就不演示了。人脸库存入成功后业务系统再记录
csFaceService.save(csFace);
//把会员人脸信息提交给JOB等待后续执行。方便前端页面交互不等待
//人脸会员信息只是在一个JobFace类中增加一个List容器
public static List<CsFace> vipFaceMap = new ArrayList<CsFace>();
JobFace.vipFaceMap.add(csFace);
result.success("添加成功!");
} catch (Exception e) {
log.info(e.getMessage());
result.error500("操作失败-人脸服务存在异常");
}
return result;
}

会员到访定制提示音频合成定时任务

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.netand.common.factory.BDFactory;
import cn.netand.modules.csface.entity.CsFace;
import cn.netand.modules.csface.service.ICsFaceService;
import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;</li></ul><p>/** </p><ul><li><p>@Description 人脸会员音频生成 </p></li><li><p>@author 小帅丶 </p></li><li><p>@className VipVoiceJob  </p></li><li><p>@Date 2019/11/20 22:11 
**/
@Slf4j
public class VipVoiceJob implements Job {
@Value(value = "${xiaoshuai.path.upload}")
private String uploadpath;</p><p>@Autowired
private GeneralDealBeanUtil generalDealBeanUtil;</p><p>@Autowired
private ICsFaceService csFaceService;</p><p>//获取音频合成的客户端
AipSpeech aipSpeech = BDFactory.getAipSpeech();</p><p>@Value(value = "${xiaoshuai.domainVoice}")
private String domainVoice;</p><p>/** </p><ul><li>度小宇=1,度小美=0,度逍遥=3,度丫丫=4 </li><li>度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5 
**/
private static final List<String> audioType = Arrays.asList("1", "0", "3", "4", "106", "110", "111", "103", "5");
private static final String LANGUAGE_ZH = "zh";
private static final Integer CTP = 1;
private static final String AUDIO = ".mp3";</li></ul><p>//任务执行详情
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("execute VipVoiceJob = " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
List<CsFace> vipFaceMap = JobFace.vipFaceMap;
int vipFaceSize = vipFaceMap.size();
if (vipFaceSize > 0) {
vipFaceMap.forEach(csFace -> {
//获取会员信息
try {
generalAudio(csFace);
csFace.setVoiceStatus(1);
csFaceService.updateById(csFace);
} catch (Exception e) {
System.out.println(e.getMessage());
csFace.setVoiceStatus(2);
csFaceService.updateById(csFace);
}
});
JobFace.vipFaceMap.clear();
}
}</p><p>/** </p><ul><li>@Description 生成全部音库音频文件 </li><li>@Author 小帅丶 </li><li>@Date  2019/11/20 23:28 </li><li>@param face 会员人脸数据 </li><li>@return void 
**/
public void generalAudio(CsFace face) {
String ctxPath = uploadpath;
String bizPath = "audios";
File file = new File(ctxPath + File.separator + bizPath + File.separator + face.getId());
if (!file.exists()) {
file.mkdirs();// 创建文件根目录
}
long startTime = System.currentTimeMillis();
audioType.forEach(audioTypeStr -> {
HashMap<String, Object> options = new HashMap();
//合成的文本内容
String text = "XX门店提醒 " + face.getName() + " 会员到访";
//发音人选择
options.put("per", audioTypeStr);
//语速,取值0-9,默认为5中语速
options.put("spd", "3");
String fileName = audioTypeStr + AUDIO;
TtsResponse response = aipSpeech.synthesis(text, LANGUAGE_ZH, CTP, options);
byte[] data = response.getData();
if (data != null) {
try {
String savePath = file.getPath() + File.separator + fileName;
String filePath = bizPath + File.separator + face.getId() + File.separator + fileName;
if (null != face.getVoiceType() && face.getVoiceType().equals(Integer.parseInt(audioTypeStr))) {
filePath = filePath.replace("", "/");
face.setVoicePath(filePath);
face.setVoiceUrl(domainVoice + filePath);
}
Util.writeBytesToFileSystem(data, savePath);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
});
long endTime = System.currentTimeMillis();
System.out.println("总耗时 = " + (endTime - startTime) + "ms");
}
}

添加一条定时任务

【百度AI语音合成】会员到访门店语音提醒

会员音频提示文件生成

【百度AI语音合成】会员到访门店语音提醒

会员到访APP推送

【百度AI语音合成】会员到访门店语音提醒

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1944

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2118

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1162

2024.11.28

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1848

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

614

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2357

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

44

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.3万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号