Отслеживание границы персонажа с использованием синтеза речи - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь использовать API синтеза речи:

https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis

Что я хочу сделать, это выделить данное слово во время его чтения вслух.Обратите внимание, я не хочу, чтобы он просто выделил один символ, а все слово - по сути, селектор .char.

Проблема в том, что мой вариант использования довольно сложный.

Мне нужна система, которая может обрабатывать символы CJK (особенно китайские), может обрабатывать традиционные и упрощенные символы, а также вкрапленные непереведенные английские слова.Все китайские слова должны иметь Pinyin (романизацию), а также перевод, связанный с ними в структурированном виде.

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

<div class="block-rawhtml normal-font"><ruby class="pinyined-char"><span class="char traditional speak selected-text" style=""><span class="ind-char">新</span><span class="ind-char">年</span><span class="ind-char">快</span><span class="ind-char">樂</span></span><span class="char simplified"><span class="ind-char">新</span><span class="ind-char">年</span><span class="ind-char">快</span><span class="ind-char">乐</span></span><rp>(</rp><rt>xīn nián kuài lè</rt><rp>)</rp><span class="translation">Happy New Year!</span></ruby> </div>

Теперь эта разметка генерируетпредложение вроде этого:

新年快樂

Проблема в том, что когда я использую API синтеза речи, пограничное событие срабатывает после того, как слово прочитано (что приводит к некоторому отставанию при отображении выделения), а также неУдар по каждому индексу символов, как я и ожидал (он работает только на границе слова, что для символов CJK кажется немного размытым).

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

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

https://developer.mozilla.org/en-US/docs/Web/Events/mark

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

Все, что я хочу сделать, это выделить все китайское слово, когда читается отдельный символ, и для всехсимволы для попадания на пограничное (или другое) событие.

 msg.onboundary = function (event) {
       $('.selected-text').removeAttr('style');
       highlight(event.charIndex);
            };

 function highlight(index) {
       $('.traditional .ind-char, .all .ind-char').eq(index).parent().css('color', '#FFF').css('background-color', '#337ab7').addClass('selected-text');
        }

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

...