如何进行javascript唱歌?

时间:2018-10-15 02:10:52

标签: javascript audio text-to-speech webspeech-api

我看到Web语音API中使用“好消息”(和“坏消息”)的声音。但是我想知道如何制作自己的自定义歌曲。似乎在唱同样的笔记。我可以通过它给我每个单词想要的注释吗?

编辑:以下评论指出“好消息”是mac声音。因此,以下代码可能仅在Mac上有效。我正在为PC和Mac寻找更通用的解决方案。

if (!window.speechSynthesis) {
    alert("Your browser doesn't support speechSynthesis !!");
}

var voices;
function loadVoices() {
    voices = window.speechSynthesis.getVoices();
    if (voices.length == 0) alert("cannot get voices !!");
    console.log(voices.map(function (x) {return x.name;}));
}

var msg = new SpeechSynthesisUtterance("la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la-la");

function sing(name) {
    speechSynthesis.cancel();
    loadVoices();
    msg.voice = voices[0];
    for (var i = 0; i < voices.length; i++)
    if (voices[i].name == name) msg.voice = voices[i];
    speechSynthesis.speak(msg);
}

setTimeout(function() {
sing('Good News');
},1000); // let browser initialize for a sec

我注意到Web Speech API has something called pitch。但是在弄乱它之后,这个词并没有真正“唱歌”。您可以看到一个codepen here。另外,我不认为我可以将频率转换为音高,例如中音C为261.6 Hz。

我还注意到另一个名为meSing.js的库,但是声音听起来太机械了: http://usdivad.com/mesing/ 我从github下载了mesing.js,并将其使用的硬编码语音更改为基础语音库(meSpeak.js)中提供的其他语音,即使语音发生了变化,它仍然听起来很机器人。

我喜欢第一个“好消息”的音质,但我想知道如何制作自定义音色,这可能吗?

编辑:也许我可以只讲一个字就接受“好消息”。然后以不同的音高设置播放。我必须看一下音高范围。还在实验中。.

0 个答案:

没有答案