使用微软云人工智能,合成带感情的语音

使⽤微软云⼈⼯智能,合成感情的语⾳
以前公司下达了⼀个需求,要求⽤语⾳做⼴播,因为⼴播⾥⾯包含姓名,所以不能难以直接录制,需要使⽤合成语⾳。
⼀开始考虑到时间以及优先级问题,这边使⽤了百度的合成语⾳。
但是百度语⾳相对僵硬,⽽且没有感情,效果不甚满意。
不久前时间相对充沛,这边就使⽤了觉得最完美的⽅案——使⽤微软云的⼈⼯智能合成语⾳。
因为这个语⾳可以设置感情,没有机器合成那种僵硬的感觉,可以说是⽐真⼈还真⼈。
不过要注意⼀点,创建微软云账号,需要绑定⼀张visa卡。如果没有的话,可以淘宝或者申请微软云学⽣账号。
创建好微软云合成语⾳服务之后,就可以直接使⽤了。
收费:
每个⽉都有25万字的合成额度,如果需求量不⼤的话,已经够⽤了。如果需求量⼤,可以将通⽤的语⾳保存到服务器,将不通⽤项,如姓名,以单字的形式,请求后再存⼊服务器。每次访问时,先检查服务器存不存在这个字,如没有再请求api接⼝。
下⾯是简单使⽤的具体代码:
<script type="text/javascript">
const sdk = SpeechSDK
var synthesizer = null;
/**
* 初始化微软语⾳
*/
function synthesizeMsSpeech() {
const speechConfig = sdk.SpeechConfig.fromSubscription("你的密匙", "你的地区,如 eastus 不能输⼊中⽂");
synthesizer = new sdk.SpeechSynthesizer(speechConfig);
}
/**雪芙蓉冰车
* 使⽤微软语⾳说话
* @param {Object} word
*/
function msSpeek(text) {
//微软⼈⼯智能语⾳,需要使⽤xml字符串做配置
let ssml = `<speak version="1.0" xmlns="/2001/10/synthesis"
xmlns:mstts="/2001/mstts" xml:lang="en-US">
<voice name="zh-cn-XiaoxiaoNeural">
<mstts:express-as >
${text}
</mstts:express-as>
</voice>
</speak>`
synthesizer.speakSsmlAsync(
ssml,
result => {
if (Details) {
<(Details);
} else {
// console.log(JSON.stringify(result));
}
synthesizer.close();
},
error => {
console.log(error);深度水产
synthesizer.close();
});
}
synthesizeMsSpeech();
msSpeek("你好,我是你的优乐美!")
</script>
</body>
密匙就不解释了,微软云控制台可以看到,地区可以选eastus eastus2,以及另外⼏个, 具体看控制台上显⽰的地区
另外为⽅便理解,附带⼀个带界⾯的语⾳合成⽹页:
欢快 闲聊 冷静 ⽣⽓ 紧张 哭泣 轻蔑 严肃 亲切 温和 伤感 客服 数字助理 新闻
</select>多肽修饰
<br>
<br>
<button type="button" onclick="clickPlayBtn()">播放</button>
<button type="button" onclick="clickDownBtn()">下载</button>
</div>
<!-- 去除语⾳直接播放的sdk。在sdi.min.js,搜索play(),去除第⼆个play,这样不会输⼊到流的时候,依然先⾃动播放语⾳,形成⼲扰 --> <script src="static/js/microsoft.speech.sdk.1.js"></script>
<script type="text/javascript">
const sdk = SpeechSDK
var synthesizer = null;
//还有很多种
const STYLE = {
cheerful: "cheerful", //欢快
chat: "chat", //闲聊
calm: "calm", //冷静
angry: "angry", //⽣⽓
fearful: "fearful" //紧张
}
/**
* 初始化微软语⾳
*/
function synthesizeMsSpeech() {
const speechConfig = sdk.SpeechConfig.fromSubscription("你的微软云密匙", "你的地区,如eastus");  synthesizer = new sdk.SpeechSynthesizer(speechConfig);
}
/**
* 请求微软语⾳
* @param {Object} text
*/
function requestMsAudio(text, ) {
return new Promise((resolve, reject) => {
let xmlObj = `<speak version="1.0" xmlns="/2001/10/synthesis"
xmlns:mstts="/2001/mstts" xml:lang="en-US">
<voice name="zh-cn-XiaoxiaoNeural">
<mstts:express-as >
${text}
</mstts:express-as>
</voice>
</speak>`
const ssml = xmlObj;
synthesizer.speakSsmlAsync(
ssml,
result => {
/
/ synthesizer.close();  //关闭后,会只获取⼀轮
if (Details) {
<(Details);
reject(result)
} else {
let arrayBuffer = result.audioData
let blob = new Blob([arrayBuffer], {
type: 'autio/wave'
});
var src = ateObjectURL(blob);
resolve(src)
}
},
error => {
console.log(error);
reject(error)
// synthesizer.close();
});
})
}
/**
* 使⽤微软语⾳说话
* @param {Object} text
周广普*/
function msSpeek(text, ) {
return new Promise((resolve, reject) => {
requestMsAudio(text, style).then((src) => {
var mp3 = new Audio(src);
//播放完之后,执⾏事件
mp3.addEventListener("ended", () => {
resolve();
})
mp3.play().catch(playError); //播放语⾳
});
})
}
/**
* 合并播放,先播放完⼀个,再播放另⼀个
* @param {Object} src 资源链接
* @param {Object} text 要⽣成的⽂字
*/
function mergeSpeek(src, text, ){
return new Promise((resolve, reject) => {
requestMsAudio(text, style).then((msSrc) => {
playAudio(src).then(()=>{
var mp3 = new Audio(msSrc);
//播放完之后,执⾏事件
mp3.addEventListener("ended", () => {resolve();})
mp3.play().catch(playError); //播放语⾳
})
});
})
}
/**
* 下载微软语⾳
* @param {Object} text
*/
function msDownload(text, style) {
return new Promise((resolve, reject) => {
requestMsAudio(text, style).then((src) => {
const pattern=/[`~!@#$^&*()=|{}':;',\\\[\]\.<>\/?~!@#¥……&*()——|{}【】';:""'。,、?\s]/g;    let name = place(pattern," ");
_download(src, name +".wav")
});
})
};
/**
* 播放⾳频,then为播放完后的回调
* @param {Object} src
*/
function playAudio(src) {顶喷
return new Promise((resolve, reject) => {
var mp3 = new Audio(src);
//播放完之后,执⾏事件
mp3.addEventListener("ended", () => {
resolve();
})
mp3.play().catch(playError); //播放语⾳
})
}
/**
* 播放失败后的统⼀回调
*/
const playError = function(){
<("播放失败,播放前,请先点击页⾯,以允许播放。")
}
}
// 下载
function _download(src, filename) {
var eleLink = ateElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
// 字符内容转变成blob地址
eleLink.href = src;
// ⾃动触发点击
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除游戏推广系统
veChild(eleLink);
};
synthesizeMsSpeech();
/**
* 点击下载后触发
*/
function clickPlayBtn(){
let text = ElementById("mainTxt").value;  let style = ElementById("style").value
if(text.length > 0){
msSpeek(text, style)
}
}
/**
* 点击下载后触发
*/
function clickDownBtn(){
let text = ElementById("mainTxt").value;  let style = ElementById("style").value
if(text.length > 0){
msDownload(text, style)
}
}
</script>
</body>

本文发布于:2024-09-25 01:16:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/201024.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:播放   合成   感情
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议