Преобразование текста в речь на родном языке Javascript

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

Я искал, и большинство библиотек javascript для преобразования текста в речь предоставляют отличную поддержку для английского языка, но не для любого другого языка. Также HTML5 SpeechSynthesis не поддерживает голландский язык:

Голоса синтеза речи в настоящее время поддерживаются в Chrome 35

В ходе дальнейшего исследования я наткнулся на статью, в которой вы можете использовать Google Translate Voice для преобразования любого текста в речь.

Вы берете это как базовый URL: http://translate.google.com/translate_tts

Прикрепите свой язык, который хотите, так что в моем случае голландский

http://translate.google.com/translate_tts?tl=nl

и прикрепите свой текст:

«Это тест» переведен на голландский

Вы ожидали, что это будет работать с более длинным текстом, но это не так.

Преобразование текста в речь, которое не работает

Есть ли другие решения? Google Voice довольно хорошо говорит по-голландски, поэтому хотелось бы, чтобы ссылка как-то работала.


person tim    schedule 29.05.2014    source источник


Ответы (1)


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это, вероятно, не разрешено Google. Не используйте это без разрешения Google.

Преобразование текста в речь Google можно использовать с текстами любого размера. Однако это требует небольшой настройки.

Вот сценарий:

function textToSpeech(text, language) {
    if(text === undefined || text === null || text.length === 0)
        return

    var vid = document.createElement("video")
    var textParts = []

    text.split(" ").forEach(function(word) {
        var textPartsIndex = textParts.length - 1
        var currentStr = textParts[textPartsIndex]
        if(currentStr !== undefined && currentStr.length + word.length < 100)
            textParts[textPartsIndex] += " " + word
        else
            textParts.push(word)
    })

    function play(txt) {
        vid.src = "http://translate.google.com/translate_tts?tl=" + language + "&q=" + txt
        vid.load()
        vid.play()
    }

    var partIndex = 0
    play(textParts[partIndex])

    vid.addEventListener("ended", function() {
        var part = textParts[++partIndex]
        if(part !== undefined)
            play(part)
        else
            vid.removeEventListener("ended")
    })
}

ПЕРЕД его использованием вы должны закрыть все экземпляры браузера Chrome, а на компьютере с Windows открыть «Выполнить» (WIN + R) и ввести «chrome --no-referrers» без «

Теперь вы можете писать на своей странице (я не понимаю по-голландски, поэтому это просто образец текста, который я нашел)

textToSpeech("Ik ga ervan uit dat de mens een groot vermogen bezit om externe informatie op te slorpen ,\" legt professor Georges uit . Hij kan zelfs 5 tot 6 maal méér informatie verwerken dan het debiet van het gesproken woord , 120 woorden per minuut . Teamgeest is voor mij geen ijdel woord . In de tweede plaats komen puur betekenisloze verhaspelingen niet in aanmerking , want die zijn niet ontstaan door verwarring met een ander woord .", "nl")

Если ваше приложение запускается только локально, то есть не размещено, вам не нужно запускать хром с командой --no-referrers.

Причина отключения рефереров заключается в том, что Google отменяет ваш запрос, если есть реферер-заголовок.

ВЕРСИЯ IFRAME, КОТОРАЯ НЕ ТРЕБУЕТ - без рефереров

http://jsfiddle.net/9tTeg/

<body>
<script>
textToSpeech("Ik ga ervan uit dat de mens een groot vermogen bezit om externe informatie op te slorpen ,\" legt professor Georges uit . Hij kan zelfs 5 tot 6 maal méér informatie verwerken dan het debiet van het gesproken woord , 120 woorden per minuut . Teamgeest is voor mij geen ijdel woord . In de tweede plaats komen puur betekenisloze verhaspelingen niet in aanmerking , want die zijn niet ontstaan door verwarring met een ander woord .", "nl")

function textToSpeech(text, language) {
    if(text === undefined || text === null || text.length === 0)
        return

    var vid = document.createElement("iframe")
    document.body.appendChild(vid)
    var textParts = []

    text.split(" ").forEach(function(word) {
        var textPartsIndex = textParts.length - 1
        var currentStr = textParts[textPartsIndex]
        if(currentStr !== undefined && currentStr.length + word.length < 100)
            textParts[textPartsIndex] += " " + word
        else
            textParts.push(word)
    })

    function play(txt) {
        vid.src = "http://translate.google.com/translate_tts?tl=" + language + "&q=" + txt
    }

    var partIndex = 0
    play(textParts[partIndex])

    var intervalId = setInterval(function() {
        var part = textParts[++partIndex]
        if(part !== undefined)
            play(part)
        else
            clearInterval(intervalId)       
    }, 9000)
}
</script>
</body>

Улучшения: вместо разделения строки по словам используйте точку и запятую, чтобы паузы были более естественными. Каждая часть в настоящее время воспроизводится по 9 секунд каждая, но если слова сгруппированы точками и запятыми, вы можете вместо этого рассчитать количество времени, которое каждая часть имеет, глядя на длину части, поскольку 9 секунд могут быть слишком много, тогда .

person Jan Sommer    schedule 29.05.2014
comment
Хорошо, но я не могу сказать детям, чтобы они запускали Chrome вот так. - person tim; 29.05.2014
comment
Это лучшее, что вы получите, если захотите использовать браузер и службу преобразования текста в речь Google. Альтернативой является использование iframe вместо тега видео, но тогда вам придется добавить задержку ~ 10 секунд между всеми запросами, так как вы не узнаете, когда закончится воспроизведение звука. - person Jan Sommer; 29.05.2014
comment
Или проявите изобретательность! Отправьте детям по электронной почте .lnk-файл с указанием chrome --no-referrer. Конечно, вы также можете заплатить за услугу преобразования текста в речь. - person Jan Sommer; 29.05.2014
comment
Правда что! Мы могли бы просто захотеть использовать встроенное видео с нашим собственным голосом на частном канале Youtube. Жаль, что в 2014 году не существует простого решения для преобразования текста в речь. - person tim; 29.05.2014