2016-08-02 100 views
4

是否可以使用W3C网络语音API来编写生成音频文件(wav,ogg或mp3)的Javascript代码,并使用语音提供文本?我的意思是,我想要做的事,如:使用W3C网络语音API生成音频文件

window.speechSynthesis.speak(new SpeechSynthesisUtterance("0 1 2 3")) 

,但我想用它产生的声音不被输出到扬声器,但到文件。

回答

0

的要求是不可能的使用网络语音API独自一人,见Re: MediaStream, ArrayBuffer, Blob audio result from speak() for recording?How to implement option to return Blob, ArrayBuffer, or AudioBuffer from window.speechSynthesis.speak() call

虽然要求是可以使用的库,例如,espeakmeSpeak,看到How to create or convert text to audio at chromium browser?

fetch("https://gist.githubusercontent.com/guest271314/f48ee0658bc9b948766c67126ba9104c/raw/958dd72d317a6087df6b7297d4fee91173e0844d/mespeak.js") 
 
    .then(response => response.text()) 
 
    .then(text => { 
 
    const script = document.createElement("script"); 
 
    script.textContent = text; 
 
    document.body.appendChild(script); 
 

 
    return Promise.all([ 
 
     new Promise(resolve => { 
 
     meSpeak.loadConfig("https://gist.githubusercontent.com/guest271314/8421b50dfa0e5e7e5012da132567776a/raw/501fece4fd1fbb4e73f3f0dc133b64be86dae068/mespeak_config.json", resolve) 
 
     }), 
 
     new Promise(resolve => { 
 
     meSpeak.loadVoice("https://gist.githubusercontent.com/guest271314/fa0650d0e0159ac96b21beaf60766bcc/raw/82414d646a7a7ef11bb04ddffe4091f78ef121d3/en.json", resolve) 
 
     }) 
 
    ]) 
 
    }) 
 
    .then(() => { 
 
    // takes approximately 14 seconds to get here 
 
    console.log(meSpeak.isConfigLoaded()); 
 
    console.log(meSpeak.speak("what it do my ninja", { 
 
     amplitude: 100, 
 
     pitch: 5, 
 
     speed: 150, 
 
     wordgap: 1, 
 
     variant: "m7", 
 
     rawdata: "mime" 
 
    })); 
 
}) 
 
.catch(err => console.log(err));

也有变通办法利用MediaRecorder,根据系统的硬件How to capture generated audio from window.speechSynthesis.speak() call?