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

Android开发中,百度语音集成之一

我们在开发中,用到实时语音的时候,会有讯飞、百度、阿里,今天主要讲解的是百度语音之语音合成:

public class YuYinUtil {

    private static final Logger logger = LogManager.getLogger(YuYinUtil.class);

    public static final String YU_YIN_HE_CHENG_URL = "http://tsn.baidu.com/text2audio";

    /**
     * 语音合成
     * 
     * @param token 百度token
     * @param text  发音文本
     * @param vol   音量 0-15
     * @param per   发音人 0-普通女声、1-普通男声、3-度逍遥、4度丫丫
     * @param spd   语速 0-15
     * @param aue   格式 3为mp3格式(默认); 4为pcm-16k;5为pcm-8k;6为wav(内容同pcm-16k);
     *              注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。
     * @throws UnsupportedEncodingException
     */
    @SuppressWarnings("deprecation")
    public void generateYuYin(String token, String text, String vol, String per, String spd, String pit, String aue,
            String outputFile) {

        logger.debug("调用语音合成接口");
        logger.debug("text:" + text);
        logger.debug("vol:" + vol);
        logger.debug("per:" + per);
        logger.debug("spd:" + spd);
        logger.debug("pit:" + pit);
        logger.debug("aue:" + aue);

        CloseableHttpClient httpClient = HttpClients.createMinimal();

        // 百度语音要求tex字段进行两次url encode,post实体中会进行一次encode
        String encodeText;
        try {
            encodeText = URLEncoder.encode(text, "utf-8");
        } catch (UnsupportedEncodingException e1) {
            throw new RuntimeException(e1);
        }
//        encodeText = URLEncoder.encode(encodeText, "utf-8");

//        String url = YU_YIN_HE_CHENG_URL + "?lan=zh&ctp=1&cuid=abcdxxx&tok=" + token + "&tex=" + encodeText
//                + "&vol=9&per=0&spd=5&pit=5&aue=3";
//        url = URLEncoder.encode(url, "utf-8");

//        HttpGet get = new HttpGet(url);

        HttpPost post = new HttpPost(YU_YIN_HE_CHENG_URL);

        List<NameValuePair> params = new ArrayList<>();
        // 语言 目前只支持zh固定值
        params.add(new BasicNameValuePair("lan", "zh"));
        // 客户端类型选择 web端写1
        params.add(new BasicNameValuePair("ctp", "1"));
        // cuid 用户唯一标识,用来计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内
        params.add(new BasicNameValuePair("cuid", "kelvinylon"));
        // token
        params.add(new BasicNameValuePair("tok", token));
        // text 语音文本
        params.add(new BasicNameValuePair("tex", encodeText));
        // 以下是选填项
        // vol 音量 0-15
        if (vol != null) {
            params.add(new BasicNameValuePair("vol", vol));
        }

        // per 发音人 0、1、3、4
        if (per != null) {
            params.add(new BasicNameValuePair("per", per));
        }

        // spd 语速 0-15
        if (spd != null) {
            params.add(new BasicNameValuePair("spd", spd));
        }
        
        // pit 语调
        if(pit != null) {
            params.add(new BasicNameValuePair("pit", pit));
        }

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

        UrlEncodedFormEntity entity;
        try {
            entity = new UrlEncodedFormEntity(params);
        } catch (UnsupportedEncodingException e1) {
            throw new RuntimeException(e1);
        }
        post.setEntity(entity);

        RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(5000)
                .setSocketTimeout(20000).build();
//        get.setConfig(config);
        post.setConfig(config);
        try {
            CloseableHttpResponse resp = httpClient.execute(post);
            HttpEntity respEntity = resp.getEntity();
            String contentType = respEntity.getContentType().getValue();
            System.out.println(contentType);
            if (contentType.equals("application/json")) {
                throw new RuntimeException("错误:contentType为json,此请求的contentType应为音频文件");
            }
            InputStream contentIn = respEntity.getContent();
            File outFile = new File(outputFile);
            if(!outFile.getParentFile().exists()) {
                boolean b = outFile.getParentFile().mkdirs();
                if(!b) {
                    throw new RuntimeException("创建父文件夹失败");
                }
            }
            
            FileOutputStream fout = new FileOutputStream(outputFile);
            try {
                IOUtils.copy(contentIn, fout);
            } finally {
                IOUtils.closeQuietly(contentIn);
                IOUtils.closeQuietly(fout);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void generateYuYin(String token, String text, String outputFile) {
        generateYuYin(token, text, null, null, null, null, null, outputFile);
    }

    /**
     * 语音识别成文字
     * 
     * @param in
     * @param token
     * @return
     */
    public String reconizeYuYin(InputStream in, String token) {
        return null;
    }

}
 

相关文章:

Android开发中,百度语音集成之一

我们在开发中&#xff0c;用到实时语音的时候&#xff0c;会有讯飞、百度、阿里&#xff0c;今天主要讲解的是百度语音之语音合成&#xff1a; public class YuYinUtil { private static final Logger logger LogManager.getLogger(YuYinUtil.class); public static final St…...

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查&#xff0c;原因是npm默认安装的mongodb插件是最新版6.3.0 &#xff0c;而mongodb数据库版本是4.0.0 &#xff0c;两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件&#xff0c;再安…...

Ubuntu 常用命令之 gunzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 gunzip是一个在Ubuntu系统下用于解压缩文件的命令。它主要用于解压.gz格式的文件。这个命令是gzip命令的反向操作&#xff0c;gzip用于压缩文件&#xff0c;而gunzip则用于解压缩文件。 gunzip命令的参数有 -c 或 --stdout 或 -…...

sun.misc.BASE64Encoder 进行maven打包时报错

报错如下&#xff1a; 报错代码&#xff0c;是因为引用了sun.misc.BASE64Decoder等类不属于JDK标准库范畴&#xff0c;但在JDK中包含了该类&#xff0c;可以直接使用。在jdk1.9中就不存在了。 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;BASE64Encoder enc…...

[DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案

[网络故障] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案 问题描述 最近&#xff0c;我在使用CSDN插件浏览 MOOC 网站时&#xff0c;遇到了一些网络故障。具体表现为&#xff1a; MOOC 中国大学慕课网&#xff1a;www.icourse163.org点击CSDN插件首页的 MOOC&#xff08…...

CSS设计器的使用

目录 css的概念 css的优势 css的基本语法 html中引入css样式 CSS基本选择器 选择器的使用 初级选择器&#xff1a; 标签选择器 类选择器 id选择器 高级选择器(结构选择器&#xff09; ①后代选择器(E F) ②子选择器(E>F) ③相邻兄弟选择器(EF) ④通用兄弟选择器(…...

3d渲染太慢怎么办?2024效果图云渲染AI加速来袭

在不断变革的数码技术世界中&#xff0c;三维渲染技术在影视制作、游戏开发以及建筑设计等多个领域得到了广泛运用。然而&#xff0c;高清质量的三维项目的离线渲染时间长久一直是困扰 CG 工作者的一大难题。通常来讲&#xff0c;渲染一帧画面可能需要几分钟到几小时&#xff0…...

指针函数函数指针回调函数相关知识

指针函数&#xff1a; 本质上是一个函数&#xff0c;返回值是一个指针类型&#xff1b;不能返回局部变量的地址&#xff0c;因为其所存储在栈区&#xff0c;在函数调用结束时&#xff0c;被OS回收了&#xff1b;可以返回的情况&#xff1a;全局变量的地址、static修饰的局部变…...

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…...

Unity闪屏Logo去除

1.新建一个C#脚本&#xff0c;命名为 “SkipSplashScreen” &#xff08;代码如下&#xff09;。 using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using UnityEngine.UI;#if !UNITY_EDITOR using UnityEngine; using UnityEn…...

Git账户密码http方式的配置

Git账户密码http方式的配置 入门 git在提交时每次都需要输入密码和账号信息&#xff0c;可以将账号和密码进行持久化存储&#xff0c; 当git push的时候输入一次用户名和密码就会被记录&#xff0c; 不需要每次输入&#xff0c;提高效率&#xff0c;进行一下配置&#xff1…...

【JUC】三十二、邮戳锁StampedLock

文章目录 1、邮戳锁2、锁饥饿问题的解决思路3、邮戳锁的特点4、代码演示&#xff1a;邮戳锁的传统读写用法5、代码演示&#xff1a;邮戳锁之乐观读6、邮戳锁的缺点7、终章回顾 前面提到了从无锁 ⇒ 独占锁 ⇒ 读写锁&#xff0c;但读写锁存在写锁饥饿的情况。 &#x1f4d5;【读…...

城市里的“蛋壳运动空间”

近年来&#xff0c;秉承"发展群众体育&#xff0c;服务健康中国”的理念&#xff0c;全国各地持续推进全民健身与全民健康的融合发展。越来越多的口袋公园、户外运动设施出现在城市各个角落&#xff0c;一定程度上提升了全民运动的便利性和幸福感。 但是&#xff0c;遇到…...

Linux宝塔面板本地部署Discuz论坛发布到公网访问【无需公网IP】

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…...

Android Canvas状态save与restore,Kotlin

Android Canvas状态save与restore&#xff0c;Kotlin private fun f1() {val bitmap BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val canvas Canvas(bitmap)val paint Paint(Paint.ANTI_ALIAS_FLAG)paint.color Color.RED…...

python爬取网页图片并下载

python爬取网页图片并下载之GET类型 准备工作 【1】首先需要准备好pycharm&#xff0c;并且保证环境能够正常运行 【2】安装request模块 pip install requestsimport request导入request内置模块 【3】安装lxml模块 pip install lxmlfrom lxml import etree导入lxml.etre…...

亚马逊prime会员日活动是免费的吗?prime day怎么选产品促销?——站斧浏览器

亚马逊prime会员日活动是免费的吗&#xff1f; 实际上&#xff0c;亚马逊prime会员日活动并不是免费的。亚马逊prime会员日是亚马逊推出的一项会员特权服务&#xff0c;只有成为亚马逊prime会员的消费者才能享受该项服务。而成为亚马逊prime会员需要支付一定的费用&#xff0c…...

二叉树题目:输出二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;输出二叉树 出处&#xff1a;655. 输出二叉树 难度 6 级 题目描述 要求 给定二叉树的根结点 root \textt…...

apache poi_5.2.5 实现对表格单元格的自定义变量名进行图片替换

apache poi_5.2.5 实现对表格单元格的自定义变量名进行图片替换 实现思路 1.首先定位到自定义变量名 2.然后先清除自定义变量名&#xff0c;可利用setText(null,0)来清除 3.在自定义变量名的位置添加图片&#xff0c;使用下面的代码 4.对于图片布局有要求的&#xff0c;利用C…...

Kafka--Kafka日志索引详解以及生产常见问题分析与总结

一、Kafka的Log日志梳理 ​ 这一部分数据主要包含当前Broker节点的消息数据(在Kafka中称为Log日志)。这是一部分无状态的数据&#xff0c;也就是说每个Kafka的Broker节点都是以相同的逻辑运行。这种无状态的服务设计让Kafka集群能够比较容易的进行水平扩展。比如你需要用一个新…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...