Текст в говор на родния език на Javascript

Правя проект за училище, където ще учим децата да смятат за първи път. За съжаление тези деца не могат да четат, така че задачата ще им бъде разказана на техния роден език, който в този случай е холандски.

Разгледах наоколо и повечето javascript библиотеки за текст към реч предоставят страхотна поддръжка за английски, но не и за който и да е друг език. Също така HTML5 voiceSynthesis не поддържа холандски:

Гласове за синтез на реч, поддържани в момента в 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 машина да отворите „Run“ (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")

Ако вашето приложение се изпълнява само локално, т.е. не се хоства, не е нужно да стартирате chrome с командата --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 за преобразуване на текст в реч. Алтернатива е да използвате iframes вместо видео маркера, но тогава ще трябва да добавите забавяне от ~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