Создать аудиофайл с помощью W3C Web Speech API
Можно ли использовать W3C Web Speech API для написания кода Javascript, который генерирует аудиофайл (wav, ogg или mp3) с голосом, говорящим заданный текст? Я имею в виду, я хочу сделать что-то вроде:
window.speechSynthesis.speak(new SpeechSynthesisUtterance("0 1 2 3"))
но я хочу, чтобы звук, сгенерированный с его помощью, выводился не на динамики, а в файл.
1 ответ
Требование невозможно при использовании только Web Speech API, см. Re: MediaStream, ArrayBuffer, Blob аудио-результат из voice () для записи? Как реализовать параметр для возврата Blob, ArrayBuffer или AudioBuffer из вызова window.speechSynthesis.speak()
Хотя требование возможно с использованием библиотеки, например, espeak
или же meSpeak
, см. Как создать или преобразовать текст в аудио в браузере Chromium?,
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
В зависимости от аппаратного обеспечения системы Как захватить сгенерированный звук из вызова window.speechSynthesis.speak()?,