百度语音合成简单案例(将文字转化为相应的语音)

参考链接:http://ai.baidu.com/docs#/TTS-API/top

1.项目的目录结构

2.效果图

3核心代码

TtsMain.java

package com.baidu.speech.restapi.ttsdemo;

import com.baidu.speech.restapi.common.DemoException;
import com.baidu.speech.restapi.common.ConnUtil;
import com.baidu.speech.restapi.common.TokenHolder;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class TtsMain {

    public static void main(String[] args) throws IOException, DemoException {
        (new TtsMain()).run();
    }

    //  填写网页上申请的appkey 如 $apiKey="g8eBUMSokVB1BHGmgxxxxxx"
    private final String appKey = "UMSokVB1BHxxxxxwwe";

    // 填写网页上申请的APP SECRET 如 $secretKey="94dc99566550d87f8fa8ece112xxxxx"
    private final String secretKey = "544ca4657baxxxxxx241";

    // text 的内容为"欢迎使用百度语音合成"的urlencode,utf-8 编码
    // 可以百度搜索"urlencode"
    private final String text = "《我们都是追梦人》\r\n" +
            "作曲 : 常石磊,\r\n" +
            "作词 : 王平久,编曲 : 柒玖、于昊,\r\n" +
            "每个身影 同阳光奔跑,\r\n" +
            "我们挥洒汗水 回眸微笑,\r\n" +
            "一起努力 争做春天的骄傲,\r\n" +
            "懂得了梦想,越追越有味道,\r\n" +
            "我们都是追梦人,千山万水 奔向天地跑道,\r\n" +
            "你追我赶 风起云涌春潮,海阔天空 敞开温暖怀抱,我们都是追梦人,在今天 勇敢向未来报到,\r\n" +
            "当明天 幸福向我们问好,最美的风景是拥抱,\r\n" +
            "啦……啦……啦……,\r\n" +
            "每次奋斗 拼来了荣耀,\r\n" +
            "我们乘风破浪 举目高眺,";

    // 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
    private final int per = 0;
    // 语速,取值0-15,默认为5中语速
    private final int spd = 5;
    // 音调,取值0-15,默认为5中语调
    private final int pit = 5;
    // 音量,取值0-9,默认为5中音量
    private final int vol = 5;

    // 下载的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav
    private final int aue = 6;

    public final String url = "http://tsn.baidu.com/text2audio"; // 可以使用https

    private String cuid = "1234567JAVA";

    private void run() throws IOException, DemoException {
        TokenHolder holder = new TokenHolder(appKey, secretKey, TokenHolder.ASR_SCOPE);
        holder.refresh();
        String token = holder.getToken();

        // 此处2次urlencode, 确保特殊字符被正确编码
        String params = "tex=" + ConnUtil.urlEncode(ConnUtil.urlEncode(text));
        params += "&per=" + per;
        params += "&spd=" + spd;
        params += "&pit=" + pit;
        params += "&vol=" + vol;
        params += "&cuid=" + cuid;
        params += "&tok=" + token;
        params += "&aue=" + aue;
        params += "&lan=zh&ctp=1";
        System.out.println(url + "?" + params); // 反馈请带上此url,浏览器上可以测试
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setConnectTimeout(5000);
        PrintWriter printWriter = new PrintWriter(conn.getOutputStream());
        printWriter.write(params);
        printWriter.close();
        String contentType = conn.getContentType();
        if (contentType.contains("audio/")) {
            byte[] bytes = ConnUtil.getResponseBytes(conn);
            String format = getFormat(aue);
            File file = new File("result." + format); // 打开mp3文件即可播放
            // System.out.println( file.getAbsolutePath());
            FileOutputStream os = new FileOutputStream(file);
            os.write(bytes);
            os.close();
            System.out.println("audio file write to " + file.getAbsolutePath());
        } else {
            System.err.println("ERROR: content-type= " + contentType);
            String res = ConnUtil.getResponseString(conn);
            System.err.println(res);
        }
    }

    // 下载的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav
    private String getFormat(int aue) {
        String[] formats = {"mp3", "pcm", "pcm", "wav"};
        return formats[aue - 3];
    }
}

原文地址:https://www.cnblogs.com/zyt-bg/p/10405816.html

时间: 2024-11-12 22:30:49

百度语音合成简单案例(将文字转化为相应的语音)的相关文章

微信学习总结 15 百度语音合成

百度语音合成通过REST API的方式给开发者提供一个通用的HTTP接口,基于该接口,开发者可以轻松的获取语音合成能力,本文档描述了使用语音合成服务REST API的方法. 对本文中将提到的名词约定如下: 语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 应用程序:在开发中调用了API.具有语音合成功能的产品线产品. 功能介绍 REST API支持对一段文本的合成,其中对于文本格式以及参数有一定的要求.请按照文档中描

Android Studio下Android应用开发集成百度语音合成使用方法样例

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51093134 Android Studio下Android应用开发集成百度语音合成使用方法样例 首先,语音合成是指将文本信息转换成声音.意思就是将文本转化为声音,让你的应用开口说话.国内在业内比较有名的第三方语音合成平台有百度语音和科大讯飞. 本博文集成的是百度语音合成,其主要特点是: 完全永久免费 业界首创完全永久免费新形式,为开发者提供最流畅最自然的语音合成服务.完全免费,永久使

jquery简单案例

昨天写了一篇关于jquery选择器的学习的记录,后边发现关于jquery的学习不能只依靠简单的文档,必须动手写出一些实际的东西,这样会学习的更好,今天呢,就给大家带来利用jquery实现文字和图片提示的效果. jquery文字提示 先看下效果: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> <title>

C# 百度语音合成

语音合成及TTS,我们尝试使用百度的语音合成技术 不过我发现 有一种缺点在于没有离线包让我有些很不舒服,可能是在线版的 原因微软语音识别技术在Windows 2000是默认集成在系统组件中 或许我们不必去寻找新的语音合成替代方案,不过在线版一旦离线 只有Game Over,Hah不过有一点好处在于使用方便适合广发开发 者,第二百度语音合成后的音频流,妹子的声音听着较舒服 如果可 以在"卡哇伊"的萌妹妹,一定会更好,不过应该在解决一下声音坚 硬的感觉或许会更好,虽然语音合成技术发展这么多

百度语音合成AI

注意:不要使用Dw编辑PHP代码,会因为编码问题出错!!<?php require_once 'AipSpeech.php'; // 你的 APPID AK SK const APP_ID = '112***00'; const API_KEY = '6EkSeI*****aFV4GjpB2q'; const SECRET_KEY = 'mSPm*******qayf81XSbYBxu'; $client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

百度语音合成api/sdk及demo

1.流程 1)换取token 用Api Key 和 SecretKey.访问https://openapi.baidu.com/oauth/2.0/token 换取 token // appKey = Va5yQRHl********LT0vuXV4 // appSecret = 0rDSjzQ20XUj5i********PQSzr5pVw2 https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&clie

keepalived简单案例

---------------------------------- 一.前言 二.环境 三.Keepalived体系架构 四.安装Keepalived 五.案例配置 ---------------------------------- 一.前言 keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的

[Design Pattern] Mediator Pattern 简单案例

Meditor Pattern,即调解模式,用一个调解类类处理所有的沟通事件,使得降低多对象之间的沟通难度,属于行为类的设计模式.为了方便理解记忆,我也称其为,沟通模式. 下面是一个调解模式的简单案例. ChatRoom 提供公用发送短信的方法.User 全部通过 ChatRoom 类发送信息进行沟通.MediatorPatternDemo 演示调解模式. 代码实现 ChatRoom 提供发送信息的方法 public class ChatRoom { public static void sho

[Design Pattern] Iterator Pattern 简单案例

Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单案例. Iterator 定义了迭代接口, 仅 hasNext 和 next 两个方法.Container 定义了集合的接口,必须包含一个返回迭代器类 Iterator 的方法.NameRepository 是容器的具体类,实现 Container 接口,并拥有一个内部类 NameIterator