Как получить доступ к аудио результату из Speech Synthesis API?

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

1 ответ

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

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

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

https://developer.chrome.com/extensions/tts

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

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

Заметки-

1 Если вы предоставляете TTS Engine такой интерфейс, он не может тривиально расширять существующий 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)
Другие вопросы по тегам