录自己一段音频,后续根据文字生成自己音色的音频(java实现)

news2024/10/21 16:03:12

目前自定义TTS(文字转语音)技术已经比较成熟了,在很多场景都有运用。比较常见的多是一些系统预制好的音色,然后提供文字,即可出来这个音色出来的音频。

随着AI技术的不断发展,以及大家对自定义音色的产品诉求有所增加(譬如导航用自己的声音、用女神的声音、录别人一段音然后假装是这个人说话),现在也能比较容易的实现自己录一段音频,然后以此为模板,后续生成该音色的音频,即语音复刻功能。

下面我们用java实现一个语音复刻功能,其实比较简单,刻出来的音色也还算可以,听起来和本人相似度8成,好在是免费的。想要更相似的程度,就需要花钱了。

第一步 准备自己的录音文件

自行准备一个音频文件,可以用手机自己录个导出来,格式:WAV、MP3、M4A。时长就15秒左右即可。

然后将音频上传到阿里云oss中,得到一个oss地址,主要目的是获得一个可以公开访问的音频地址。也可以上传到别处,如果音频直接就是一个网络地址也可以。具体文档地址是:简介与SDK代码示例_智能语音交互(ISI)-阿里云帮助中心

然后开通阿里云智能语音服务,https://common-buy.aliyun.com/?spm=a2c4g.11186623.0.0.767c21f5AUyKdW&commodityCode=nlsService

开通之后你就可以复刻自己的音频了。

第二步 复刻自己音色的模型

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.4</version>
</dependency>
package org.example;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;

public class CosyVoiceDemo {
    //域名
    private static final String DOMAIN = "nls-slp.cn-shanghai.aliyuncs.com";
    // API版本
    private static final String API_VERSION = "2019-08-19";

    private static final IAcsClient client;

    static {
        // 创建DefaultAcsClient实例并初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-shanghai",
                System.getenv("AK_ID"),
                System.getenv("AK_SECRET"));
        client = new DefaultAcsClient(profile);
    }

    public static void main(String[] args) throws InterruptedException {
        String voicePrefix = "your-voice-prefix";
        String url = "your-file-url";
        cosyClone(voicePrefix, url);
        //cosyList(voicePrefix);
    }

    private static void cosyList(String voicePrefix) {
        CommonRequest request = buildRequest("ListCosyVoice");
        request.putBodyParameter("VoicePrefix", voicePrefix);
        String response = sendRequest(request);
        System.out.println(response);
    }

    private static void cosyClone(String voicePrefix, String url) {
        CommonRequest cloneRequest = buildRequest("CosyVoiceClone");
        cloneRequest.putBodyParameter("VoicePrefix", voicePrefix);
        cloneRequest.putBodyParameter("Url", url);
        // 设定等待超时时间为15s
        cloneRequest.setSysReadTimeout(15000);
        long startTime = System.currentTimeMillis();
        String response = sendRequest(cloneRequest);
        long endTime = System.currentTimeMillis();
        System.out.println(response);
        System.out.println("cost: "+ (endTime - startTime) + " 毫秒");
    }

    private static CommonRequest buildRequest(String popApiName) {
        CommonRequest request = new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain(DOMAIN);
        request.setVersion(API_VERSION);
        request.setAction(popApiName);
        request.setProtocol(ProtocolType.HTTPS);
        return request;
    }

    private static String sendRequest(CommonRequest request) {
        try {
            CommonResponse response = client.getCommonResponse(request);
            return response.getData();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }
}

填入你在智能语音交互那里得到的AK、Secret,填入音频地址,然后调用cosyClone方法,该方法执行完毕后会得到一个你设置的前缀开通的模型名称,保存这个模型名,后续用TTS生成音频时就用这个模型名称。

第三步 根据模型生成任意文字的音频

复刻出自己音色的模型后,你就可以使用这个模型去生成任意文字的音频了。

文档地址是流式文本语音合成Java SDK_智能语音交互(ISI)-阿里云帮助中心

见最下面的代码FlowingSpeechSynthesizerDemo,里面修改synthesizer.setVoice("siyue")这里修改为你上一步复刻出来的模型名称,flowingTts.wav这个文件地址换成你要保存的地址。然后就可以运行后,就能得到一个复刻好的声音了,听一听吧。

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

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

相关文章

curl支持ssl错误:curl: (60) SSL certificate problem: certificate is not yet valid

在测试curl命令的时候发现curl: (60) SSL certificate problem: certificate is not yet valid出现这个错误&#xff0c;已经设置了ssl证书路径&#xff0c;最终发现是板子上时间不对&#xff0c;设置时间后可以正常使用。

论文研读 | End-to-End Object Detection with Transformers

DETR&#xff1a;端到端目标检测的创新 —— 作者 Nicolas Carion 等人 一、背景与挑战 目标检测是计算机视觉领域的一个核心任务&#xff0c;要求模型精确识别图像中的物体类别和位置。传统方法如 Faster R-CNN&#xff0c;因其区域建议网络等复杂结构&#xff0c;使得模型调…

网络安全基础知识点_网络安全知识基础知识篇

文章目录 一、网络安全概述1.1 定义1.2 信息安全特性1.3 网络安全的威胁1.4 网络安全的特征 二、入侵方式2.1 黑客2.1.1 入侵方法2.1.2 系统的威胁2.2 IP欺骗与防范2.2.1 TCP等IP欺骗基础知识2.2.2 IP欺骗可行的原因2.2.3 IP欺骗过程2.2.4 IP欺骗原理2.2.5 IP欺骗防范2.3 Sniff…

数据结构编程实践20讲(Python版)—16有向图

本文目录 16 有向图(Directed Graph)S1 说明特征应用领域S2 示例S3 问题:利用有向图构建贝叶斯网络Python代码代码说明结果S4 问题:有依赖的任务调度Python代码代码说明结果S5 问题:基于有向图的搜索引擎排序算法Python代码代码说明结果往期链接 01 数组02 链表03 栈04 队…

成都睿明智科技有限公司电商服务可靠不?

在这个短视频风起云涌的时代&#xff0c;抖音不仅成为了人们娱乐消遣的首选平台&#xff0c;更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司&#xff0c;作为抖音电商服务领域的佼佼者&#xff0c;正以其独到的洞察力和专业的服务&#xff0c;助力无数品牌在这片沃…

使用redis存储股股票数据及近一个月的行情数据

使用redis存储股票数据及近一个月的行情数据 性能瓶颈redis的使用odoo连接redis股票数据的读写结论 性能瓶颈 股票行情对数据的实时性是有要求的&#xff0c;在数据同步时如果都从数据库中查询数据&#xff0c;对于股票行情数据来说是有些慢了&#xff0c;因此我们使用redis来…

视频网站开发:Spring Boot框架的高效实现

5 系统实现 5.1用户信息管理 管理员管理用户信息&#xff0c;可以添加&#xff0c;修改&#xff0c;删除用户信息信息。下图就是用户信息管理页面。 图5.1 用户信息管理页面 5.2 视频分享管理 管理员管理视频分享&#xff0c;可以添加&#xff0c;修改&#xff0c;删除视频分…

HCIP-HarmonyOS Application Developer 习题(十五)

&#xff08;判断&#xff09;1、在HarmonyOs中发布带权限公共事件&#xff0c;发布者首先要在config.json中申请所需的权限。 答案&#xff1a;正确 分析&#xff1a;发布携带权限的公共事件&#xff1a;构造CommonEventPublishInfo对象&#xff0c;设置订阅者的权限。 &#…

基于springboot vue的音乐播放系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

【Postman】如何导出导入数据文件?Postman链接分享?

方式一&#xff1a;postman分享链接 1.1 导出 1.2 导入 1.3 导入完成后删除分享的链接 方式二&#xff1a;postman导出导入json 2.1 导出 2.2 post导入json数据

智慧监管:EasyCVR视频汇聚智能分析平台助力有限空间作业实现全天候可视化监控

随着工业化和城市化进程的加快&#xff0c;有限空间作业&#xff08;如地下管道、储罐、隧道等&#xff09;在各类企事业单位中日益频繁。然而&#xff0c;这类作业环境复杂、危险系数高&#xff0c;对作业人员的安全管理和实时监控提出了严峻挑战。为了保障有限空间作业的安全…

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

cocos Creator + fairyGUI 快速入门

版本 Creator 3.8.x&#xff0c;FairyGUI 2022 大部分内容来自 https://en.fairygui.com/docs/sdk/creator 1.新建cocos项目&#xff0c;根目录运行 npm install --save fairygui-cc 引入 fairyGUI库 2.assets目录之外新建fairyGUI项目 3.fairyGUI中编辑UI 完成后发布到Creato…

细数RAG的12个痛点,英伟达高级架构师亲授解决方案

检索增强式生成&#xff08;RAG&#xff09;是一种使用检索提升语言模型的技术。具体来说&#xff0c;就是在语言模型生成答案之前&#xff0c;先从广泛的文档数据库中检索相关信息&#xff0c;然后利用这些信息来引导生成过程。这种技术能极大提升内容的准确性和相关性&#x…

野外便携定位终端|北斗三代短报文通信终端|移动通信终端

QM200B北斗三号便携终端是一款面对野外环境的北斗三代便携设备&#xff0c;具有低功耗、体积小、重量轻等特点。该设备不仅集成了北斗三代区域短电文通信、北斗三代定位功能、移动通信功能&#xff0c;同时具有语音对讲功能&#xff0c;配有液晶屏和功能按键&#xff0c;可在海…

一文彻底弄清Redis的布隆过滤器

布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的数据结构&#xff0c;用于快速判断一个元素是否在集合中。它能够节省大量内存&#xff0c;但它有一个特点&#xff1a;可能存在误判&#xff0c;即可能会认为某个元素存在于集合中&#xff0c;但实际上不存…

说了很久的建筑转大模型,也不过是想在职场完成赎身

问&#xff1a;为什么从规划转行到大模型&#xff1f; 1、房子卖不掉了&#xff0c;城镇化进入存量时代&#xff0c;发展的蛋糕有限&#xff0c;规划行业式微&#xff1b;而且生态规划更多是保护性规划&#xff0c;不是发展性规划&#xff0c;地方政府的驱动力不足。 2、智能…

ArchLinux VSCode 1.94.2无法安装or更新解决办法

此方法参考了这篇博客https://www.debugpoint.com/failed-connect-raw-githubusercontent-com-port-443/#google_vignette 某一次paru后&#xff0c;一直报错503什么的&#xff0c;在archlinux官网看到pacman安装的是个Open VSX版本的&#xff0c;是Arch官方的版本&#xff0c;…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

Vxe UI vue vxe-table grid 如何滚动、定位到指定行或列

Vxe UI vue vxe-table vxe-grid 在表格中有时候需要对数据会列进行操作。可以会定位到某一行或某一列&#xff0c;vxe-table 中提供了丰富的函数式 API&#xff0c;可以轻松对行与列进行各种的灵活的操作。 定位到指定行与列 通过调用 scrollColumn(columnOrField) 方法&…