Javascript – Как получить больше голосов для преобразования текста в речь?Jquery

Программирование на jquery
Ответить
Anonymous
 Javascript – Как получить больше голосов для преобразования текста в речь?

Сообщение Anonymous »

Я создал этот небольшой скрипт, в котором вы можете ввести какое-то сообщение, и он его зачитывает.
Я решил эту проблему с помощью FireFox SpeechSynthesis API.
Как мне получить больше голосов и поддержку большего количества языков?

Примечание. В SO есть «ошибка». Если я отредактирую свой вопрос, отредактирую сценарий и протестирую его, то
загрузятся 4 голоса. Если я запускаю фрагмент кода в обычном режиме, то не загружаются
голоса, а только голос по умолчанию.


Код: Выделить всё

if ('speechSynthesis' in window) {
// Speech Synthesis supported
} else {
// Speech Synthesis Not Supported
alert("Sorry, your browser doesn't support text to speech!");
}

const voices = speechSynthesis.getVoices();
populateVoiceList();

if (typeof speechSynthesis !== 'undefined' && speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = populateVoiceList;
}

var selectedLang = $("#voiceSelect").find("option").attr("data-lang");
var selectedVoice = $("#voiceSelect").find("option").attr("data-pos");

$("#voiceSelect").change(function() {
selectedLang = $(this).find("option:selected").attr("data-lang");
selectedVoice = $(this).find("option:selected").attr("data-pos");
});

$("#start").click(function() {
var msg = new SpeechSynthesisUtterance();

msg.text = $("#message").val();
msg.lang = selectedLang;
msg.voice = voices[selectedVoice];

console.log(msg);

window.speechSynthesis.speak(msg);
});

// Hide Dropdown if there is only one voice
if ($("#voiceSelect option").length == 0) {
$("#voiceSelect").hide();
}

function populateVoiceList()
{
if (typeof speechSynthesis === 'undefined') {
return;
}

for (let i = 0; i < voices.length; i++) {
const option = document.createElement('option');
option.textContent = `${voices[i].name} (${voices[i].lang})`;

if (voices[i].default) {
option.textContent += ' — DEFAULT';
}

option.setAttribute('data-lang', voices[i].lang);
option.setAttribute('data-name', voices[i].name);
option.setAttribute('data-voice-uri', voices[i].voiceURI);
option.setAttribute('data-pos', i);

document.getElementById("voiceSelect").appendChild(option);
}
}

Код: Выделить всё

.flex-container {
display: flex;
}


JSFiddle

Подробнее здесь: https://stackoverflow.com/questions/741 ... -to-speech
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»