当前位置: 首页 > 后端技术 > Java

虚拟偶像的歌声原来是这样产生的!

时间:2023-04-01 18:59:28 Java

HMSCore音频编辑服务(AudioEditorKit)6.6.0版本上线,新增歌声合成能力。通过歌词和曲调,结合不同风格的音乐,机器还可以生成极其逼真的歌声。支持歌词字词级输入进行音素转换,生成与歌词对应的歌声。可灵活调整音高、滑音、呼吸音、颤音等细节参数,让歌声更加逼真。歌声合成服务可广泛应用于音视频创意制作、音视频娱乐、音乐教育、虚拟偶像等领域。例如在音乐创作或短视频创意编辑中,歌声合成服务可以帮助用户自由创作合成歌曲,让创作更加丰富多彩。在虚拟偶像领域,通过歌声合成,可以赋予虚拟人物以特定音色演唱的能力,让虚拟人物的形象更加生动。在音乐游戏或歌唱教育中,歌声合成可以快速生成标准参考语音,提高音频制作效率,节省人力成本。歌声合成效果听到歌声合成媲美真人的歌声效果,是不是迫不及待的想要开始使用了呢?下面是歌声合成的具体集成方法。快来亲自尝试集成吧!1.开发准备1.1注册开发者在开发应用前,您需要在华为开发者联盟网站上注册开发者并完成实名认证。具体请参见账号注册与认证。1.2创建项目和应用参考创建项目,然后在项目下创建应用,完成应用的创建。具体配置如下:选择平台:选择“Web”。1.3开启相关服务要使用音频编辑器服务,您需要在AppGalleryConnect上打开音频编辑器服务开关。详情请参见打开服务开关。2、集成歌声合成功能2.1同步接口(流式)2.1.1获取access_token认证信息使用从开发者联盟接口获取的clientID和对应的key发送HTTPSPOST请求获取查询access_token。获取方式请参见客户端凭证。2.1.2根据access_token调用同步接口(streaming方式)通过以上步骤得到的access_token信息,发送HTTPSPOST调用同步接口(streaming方式)。示例代码(Java)如下:requestUrl="https://audioeditor-api-drcn.cloud.huawei.com/v1/audioeditor/gateway/ai/ttsing/sync"。/***调用同步接口(流式)*@paramaccessToken根据clientId和key获取的token*@throwsExceptionIO异常*/privatestaticvoidsyncTask(StringaccessToken)throwsException{//设置请求头PostMethodpostMethod=新的PostMethod(requestUrl);postMethod.setRequestHeader("Content-Type","application/json;charset=utf-8");postMethod.setRequestHeader("X-Request-ID","9af1aeda-531b-407a-80b4-65b40ef77bd6");postMethod.setRequestHeader("X-Package-Name","com.huawei.demo");postMethod.setRequestHeader("X-国家代码","cn");postMethod.setRequestHeader("HMS-APPLICATION-ID","123456");postMethod.setRequestHeader("certFingerprint","xxxxx");postMethod.setRequestHeader("Authorization","Bearer"+accessToken);//设置请求体MapbodyMap=newHashMap<>();MapdataMap=newHashMap<>();MapconfigMap=newHashMap<>();//filePath是MusicXML文件路径(包含文件名、后缀)StringlyricFilePath="filePath";dataMap.put("歌词",FileUtils.readFileToString(新文件(lyricFilePath),"UTF-8"));dataMap.put("语言","中文");configMap.put("类型",1);configMap.put("outputEncoderFormat",0);bodyMap.put("数据",dataMap);bodyMap.put("config",configMap);RequestEntityrequestEntity=newStringRequestEntity(JSONObject.toJSONString(bodyMap),"application/json","UTF-8");postMethod.setRequestEntity(requestEntity);HttpClienthttpClient=newHttpClient();intret=httpClient.executeMethod(postMethod);如果(ret==200){标题responseHeader=postMethod.getResponseHeader("content-type");if("application/octet-stream".equals(responseHeader.getValue())){InputStreamrpsContent=postMethod.getResponseBodyAsStream();//filePath是保存文件的路径(包括文件名和后缀)StringfilePath="filePath";FileUtils.copyInputStreamToFile(rpsContent,newFile(filePath));}else{StringerrorString=postMethod.getResponseBodyAsString();System.out.println(errorString);}}else{System.out.println("callApifailed:ret="+ret+"rsp="+postMethod.getResponseBodyAsString());}}2.2异步接口2.2.1创建异步任务通过access_token信息发送HTTPSPOST创建歌声合成异步任务/***调用创建异步任务接口*@paramaccessToken根据clientId和key获取的token*@throwsExceptionIO异常*/privatestaticvoidcreatAsyncTask(StringaccessToken)throwsException{//设置请求头PostMethodpostMethod=新的PostMethod(requestUrl);postMethod.setRequestHeader("Content-Type","application/json;charset=utf-8");postMethod.setRequestHeader("X-Request-ID","9af1aeda-531b-407a-80b4-65b40ef77bd6");postMethod.setRequestHeader("X-Package-Name","com.huawei.demo");postMethod.setRequestHeader("X-国家代码","cn");postMethod.setRequestHeader("HMS-APPLICATION-ID","123456");postMethod.setRequestHeader("certFingerprint","xxxxx");postMethod.setRequestHeader("Authorization","Bearer"+accessToken);//设置请求体MapbodyMap=newHashMap<>();MapdataMap=newHashMap<>();MapconfigMap=newHashMap<>();//filePath是MusicXML文件路径(包含文件名、后缀)StringlyricFilePath="filePath";dataMap.put("歌词",FileUtils.readFileToString(新文件(lyricFilePath),"UTF-8"));dataMap.put("语言","中文");configMap.put("类型",1);configMap.put("outputEncoderFormat",0);bodyMap.put("数据",dataMap);bodyMap.put("config",configMap);RequestEntityrequestEntity=newStringRequestEntity(JSONObject.toJSONString(bodyMap),"application/json","UTF-8");postMethod.setRequestEntity(requestEntity);HttpClienthttpClient=newHttpClient();intret=httpClient.executeMethod(postMethod);字符串rpsCointent=postMethod.getResponseBodyAsString();如果(ret==200){System.out.println(rpsContent);}else{System.out.println("callApi失败:ret="+ret+"rsp="+rpsContent);}}2.2.2查询异步任务状态发送HTTPSPOST通过access_token信息查询歌声合成异步任务状态/***调用查询异步任务状态接口*@paramaccessToken根据clientId和key获取Token*@throwsExceptionIO异常*/privatestaticvoidqueryAsyncTaskInfo(StringaccessToken)throwsException{//设置请求头PostMethodpostMethod=newPostMethod(请求网址);postMethod.setRequestHeader("Content-Type","application/json;charset=utf-8");postMethod.setRequestHeader("X-Request-ID","9af1aeda-531b-407a-80b4-65b40ef77bd6");postMethod.setRequestHeader("X-Package-Name","com.huawei.demo");postMethod.setRequestHeader("X-国家代码","cn");postMethod.setRequestHeader("HMS-APPLICATION-ID","123456");postMethod.setRequestHeader("certFingerprint","xxxxx");postMethod.setRequestHeader("Authorization","Bearer"+accessToken);//设置请求体MapbodyMap=newHashMap<>();//taskId对应的值为创建异步任务时返回的任务ID(taskId)bodyMap.put("taskId","taskId");RequestEntityrequestEntity=newStringRequestEntity(JSONObject.toJSONString(bodyMap),"application/json","UTF-8");postMethod.setRequestEntity(requestEntity);HttpClienthttpClient=newHttpClient();intret=httpClient.executeMethod(postMethod);字符串rpsContent=postMethod。getResponseBodyAsString();如果(ret==200){System.out.println(rpsContent);}else{System.out.println("callApi失败:ret="+ret+"rsp="+rpsContent);}}2.2.3取消异步任务通过access_token信息发送HTTPSPOST取消异步任务/***调用取消异步任务接口*@paramaccessToken根据clientId和key获取token*@throwsExceptionIO异常*/privatestaticvoidcancelAsuncTask(StringaccessToken)throwsException{//设置请求头PostMethodpostMethod=newPostMethod(请求网址);postMethod.setRequestHeader("Content-Type","application/json;charset=utf-8");postMethod.setRequestHeader("X-Request-ID","9af1aeda-531b-407a-80b4-65b40ef77bd6");postMethod.setRequestHeader("X-Package-Name","com.huawei.demo");postMethod.setRequestHeader("X-国家代码","cn");postMethod.setRequestHeader("HMS-APPLICATION-ID","123456");postMethod.setRequestHeader("certFingerprint","xxxxx");postMethod.setRequestHeader("Authorization","Bearer"+accessToken);//设置请求体MapbodyMap=newHashMap<>();//taskId对应的值为创建异步任务时返回的任务ID(taskId)bodyMap.put("taskId","taskId");RequestEntityrequestEntity=newStringRequestEntity(JSONObject.toJSONString(bodyMap),"application/json","UTF-8");postMethod.setRequestEntity(requestEntity);HttpClienthttpClient=newHttpClient();intret=httpClient.executeMethod(postMethod);字符串rpsContent=postMethod.getResponseBodyAsString();如果(ret==200){System.out.println(rpsContent);}else{System.out.println("callApi失败:ret="+ret+"rsp="+rpsContent);除了歌声合成能力,音频编辑服务还提供丰富的音频处理能力,如音频基础编辑、AI配音伴奏提取、空间渲染、变声降噪等,为全球开发者提供性能卓越、易于上手的服务。使用、开放接口助力开发了解更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMS最新技术资讯核心~