# 歌声合成
# 初始化
此接口,从插件 1.2.44 开始支持。 文档内插件版本号,仅做示例参考,插件最新版本, 以此处为准
歌声合成,输入歌词和旋律,合成对应的歌声,目前仅支持女声音色
{
"pages": [
"pages/index/index"
"plugins": {
"chatbot": {
"version": "1.2.44",
"provider": "wx8c631f7e9f2465e1"
"requiredBackgroundModes": [
"audio"
"sitemapLocation": "sitemap.json"
var plugin = requirePlugin("chatbot");
App({
onLaunch: function () {
plugin.init({
appid: "P5Ot9PHJDechCYqDFAW1AiK6OtG3Ja", //小程序示例账户,仅供学习和参考
openid: "", //用户的openid,非必填,建议传递该参数
success: () => {}, //非必填
fail: (error) => {}, //非必填
});
});
# 调用歌声合成接口
使用示例
const data = {
"singer_id": 1,
"scores": [
"start": 0.125,
"end": 0.7520833333333333,
"pitch": "D4",
"word": "窗",
"slur": false,
"sent_break": false
"start": 0.7520833333333333,
"end": 1.3291666666666666,
"pitch": "G4",
"word": "外",
"slur": false,
"sent_break": false
"start": 1.3291666666666666,
"end": 1.6635416666666667,
"pitch": "F#4",
"word": "",
"slur": true,
"sent_break": false
"start": 1.6635416666666667,
"end": 1.9322916666666667,
"pitch": "F#4",
"word": "的",
"slur": false,
"sent_break": false
"start": 1.9322916666666667,
"end": 2.209375,
"pitch": "G4",
"word": "麻",
"slur": false,
"sent_break": false
"start": 2.209375,
"end": 3.3427083333333334,
"pitch": "G4",
"word": "雀",
"slur": false,
"sent_break": true
"start": 3.5791666666666666,
"end": 3.845833333333333,
"pitch": "F#4",
"word": "在",
"slur": false,
"sent_break": false
"start": 3.845833333333333,
"end": 4.136458333333334,
"pitch": "G4",
"word": "",
"slur": true,
"sent_break": false
"start": 4.136458333333334,
"end": 4.427083333333333,
"pitch": "G4",
"word": "电",
"slur": false,
"sent_break": false
"start": 4.427083333333333,
"end": 4.942708333333333,
"pitch": "F#4",
"word": "线",
"slur": false,
"sent_break": false
"start": 4.942708333333333,
"end": 5.263541666666667,
"pitch": "E4",
"word": "杆",
"slur": false,
"sent_break": false
"start": 5.263541666666667,
"end": 5.609375,
"pitch": "F#4",
"word": "上",
"slur": false,
"sent_break": false
"start": 5.609375,
"end": 5.954166666666667,
"pitch": "E4",
"word": "多",
"slur": false,
"sent_break": false
"start": 5.954166666666667,
"end": 6.770833333333333,
"pitch": "D4",
"word": "嘴",
"slur": false,
"sent_break": true
plugin.api.nlp("midilyric2song_json_wx_gen", data).then((res) => {
console.log("svs result : ", res);
if (res.status != 0) {
wx.hideLoading();
wx.lin.showMessage({
type: "error",
content: "后台异常"
return
var result_url = res.url
console.log("result_url", result_url)
let maxTry = 60; // 最大尝试次数
let cnt = 0; // 轮询次数
let interval = 1000; // 每秒轮询一次
// 因为小程序对请求的返回时间有限制,本接口先返回处理结果的 url、同时异步地合成歌声,合成结束后会将 wav 格式的歌声结果上传至该 url
// 因此,前端需要轮询该 url 获取请求结果。
let timer = setTimeout(function f() {
cnt += 1
console.log('启动轮询: ', cnt)
wxutil.showLoading("后台处理中...")
console.log("result_url", result_url)
wx.request({
url: result_url,
success (res) {
console.log("errorcode:", res.data.errorcode)
if (res.data.errorcode === undefined) {
console.log("成功...")
this.playAudio({'src': result_url}) // 请求成功,播放歌声文件
clearTimeout(timer);
wx.hideLoading()
wx.lin.showMessage({
type: "success",
content: "处理完毕!"
} else {
console.log("ReTrying...")
// 请求失败
if (cnt > maxTry){
clearTimeout(timer);
wx.hideLoading()
wx.lin.showMessage({
type: "error",
content: "请求失败,请重试!"
} else {
console.log("test...")
setTimeout(f, interval)
fail() {
// 请求失败
clearTimeout(timer);
wx.hideLoading();
wx.lin.showMessage({
type: "error",
content: "请求失败,请稍后再试!"
});
}, interval);
});
# 请求参数
字段 | 类型 | 描述 |
---|---|---|
singer_id
|
int
|
AI 歌手的音色,
1
表示女声,目前仅支持
1
|
scores
|
array
|
音符组成的列表,其中每个音符包含音符起止、音高、歌词、是否连音、是否句尾等信息 |
start
|
float
|
音符的起始时间 |
end
|
float
|
音符的结束时间。同一个音符的结束时间应晚于起始时间。相邻的 2 个音符在时间上不能有重叠 |
pitch
|
string
|
音符的音高,比如
C4
|
word
|
string
|
音符的歌词,比如
我
,仅限1个汉字或空字符串(仅当音符是连音的时候,此处为空字符串)
|
slur
|
bool
|
音符是否是连音。连音音符必须和上一个音符是时间不间断的。一句歌词的第一个音符不能是连音 |
sent_break
|
bool
|
音符是否是一句歌词包含的最后一个音符 |
# 返回结果示例
- 请求成功
{
"status": 0,
"msg": "Success",
"url": "https://yushu-76346.gzc.vod.tencent-cloud.com/3f5782ff9f32477983d664b511efea23.wav",
- 请求失败
{
"status": -1,