Как получить доступ к звуковому результату из API синтеза речи?

API синтеза речи позволяет использовать функцию преобразования текста в речь в бета-версии Chrome. Однако результаты запросов TTS автоматически воспроизводятся браузером. Как получить доступ к результатам аудио для постобработки и отключить стандартное поведение API?


person Nawaf Alsulami    schedule 02.02.2014    source источник
comment
См. этот ответ - stackoverflow.com/q/9893175/1256219 - вам нужно сделать HTTP-запрос самостоятельно   -  person brandall    schedule 03.02.2014
comment
Я надеялся, что способ программного доступа к звуковому результату будет согласованным в моем приложении. HTTP-запросы пока подойдут. Надеюсь, API скоро позволит это. @brandall спасибо.   -  person Nawaf Alsulami    schedule 03.02.2014
comment
API не предлагает вывод, поэтому вам придется использовать getUserMedia на данный момент (фу)   -  person dandavis    schedule 08.04.2015


Ответы (1)


Для системы TTS нет стандартного аудиовыхода, и это кажется вполне преднамеренным, поэтому вряд ли это изменится в ближайшее время.

Чтобы понять почему, вы можете взглянуть на другую сторону этого интерфейса, где расширение браузера может действовать как механизм TTS и предоставлять голоса, которые может использовать клиент:

Быть действующим механизмом TTS, доступным через этот API в Chrome, означает поддерживать запуск/приостановку/отмену и возобновление запросов TTS и отправки обновлений о ходе выполнения в виде событий следующих типов:

https://developer.chrome.com/extensions/tts#type-TtsEvent

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

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

Примечания-

1 Если вы предоставите механизму TTS такой интерфейс, он не сможет тривиально расширить существующий API событий TTS, поскольку браузер проверяет их:

// attempt to add properties to an otherwise legal event in an Engine:
sendTTSev({'type': 'end', 'charIndex': len, foo:'george'});
...
Uncaught Error: Invalid value for argument 2. Property 'foo': Unexpected property.
    at validate (extensions::schemaUtils:34:13)
    at Object.normalizeArgumentsAndValidate  (extensions::schemaUtils:117:3)
    at Object.<anonymous> (extensions::binding:361:30)
    at sendTtsEvent (extensions::ttsEngine:17:22)
person lossleader    schedule 08.04.2015