chrome.ttsEngine

Opis

Aby wdrożyć mechanizm zamiany tekstu na mowę za pomocą rozszerzenia, użyj interfejsu API chrome.ttsEngine. Jeśli rozszerzenie zostanie zarejestrowane przy użyciu tego interfejsu API, będzie ono otrzymywać zdarzenia zawierające wypowiedź do wypowiedzenia i inne parametry, gdy dowolne rozszerzenie lub aplikacja Chrome używa interfejsu API tts do generowania mowy. Rozszerzenie może następnie za pomocą dowolnej dostępnej technologii internetowej syntetyzować i generować mowę oraz wysyłać zdarzenia z powrotem do funkcji wywołującej, by zgłosić stan.

Uprawnienia

ttsEngine

Pojęcia i zastosowanie

Rozszerzenie może zarejestrować się jako mechanizm rozpoznawania mowy. W ten sposób może przechwycić niektóre lub wszystkie wywołania funkcji, takich jak tts.speak() i tts.stop(), i zapewnić alternatywną implementację. Rozszerzenia mogą wykorzystywać dowolną dostępną technologię internetową do generowania mowy, w tym strumieniowe przesyłanie dźwięku z serwera i dźwięku HTML5. Rozszerzenie może nawet robić coś innego z wypowiedziami, np. wyświetlać napisy w wyskakującym okienku lub wysyłać je w postaci komunikatów na zdalny serwer.

Aby zaimplementować mechanizm przekształcania tekstu na mowę, rozszerzenie musi zadeklarować uprawnienie „ttsEngine”, a następnie zadeklarować wszystkie podane głosy w pliku manifestu rozszerzenia w ten sposób:

{
  "name": "My TTS Engine",
  "version": "1.0",
  "permissions": ["ttsEngine"],
  "tts_engine": {
    "voices": [
      {
        "voice_name": "Alice",
        "lang": "en-US",
        "event_types": ["start", "marker", "end"]
      },
      {
        "voice_name": "Pat",
        "lang": "en-US",
        "event_types": ["end"]
      }
    ]
  },
  "background": {
    "page": "background.html",
    "persistent": false
  }
}

Rozszerzenie może określać dowolną liczbę głosów.

Parametr voice_name jest wymagany. Nazwa powinna być wystarczająco opisowa, aby umożliwić rozpoznanie nazwy głosu i używanej wyszukiwarki. W mało prawdopodobnym przypadku, gdy 2 rozszerzenia rejestrują głosy o tej samej nazwie, klient może podać identyfikator rozszerzenia, które powinno wykonać syntezę.

Parametr lang jest opcjonalny, ale zdecydowanie zalecany. Prawie zawsze można zsyntetyzować mowę w jednym języku. Gdy wyszukiwarka obsługuje więcej niż 1 język, może łatwo zarejestrować osobny głos dla każdego z nich. W rzadkich przypadkach, gdy 1 głos posługuje się więcej niż 1 językiem, najlepiej jest wymienić 2 osobne głosy i obchodzić się z nimi wewnętrznie za pomocą tej samej logiki. Jeśli jednak chcesz utworzyć głos, który będzie obsługiwać wypowiedzi w dowolnym języku, pomiń parametr lang w pliku manifestu rozszerzenia.

Wreszcie parametr event_types jest wymagany, jeśli wyszukiwarka może wysyłać zdarzenia, by aktualizować klienta w celu zaktualizowania postępu syntezy mowy. Zalecamy co najmniej obsługę typu zdarzenia 'end' w celu sygnalizowania zakończenia mowy. W przeciwnym razie Chrome nie może zaplanować wypowiedzi w kolejce.

Po wczytaniu rozszerzenie może zastąpić listę zadeklarowanych głosów, wywołując chrome.ttsEngine.updateVoices. (Pamiętaj, że parametry używane w programowym wywołaniu funkcji updateVoices mają postać wielbłąda: np. voiceName, w przeciwieństwie do pliku manifestu, który korzysta z voice_name).

Możliwe typy zdarzeń, które możesz wysyłać, odpowiadają typom zdarzeń odbieranych przez metodę speak():

  • 'start': silnik rozpoczął wypowiadanie wypowiedzi.
  • 'word': osiągnięto granicę słowa. Użyj event.charIndex, aby określić bieżącą pozycję mowy.
  • 'sentence': osiągnięto granicę zdania. Użyj event.charIndex, aby określić bieżącą pozycję mowy.
  • 'marker': osiągnięto znacznik SSML. Użyj event.charIndex, aby określić bieżącą pozycję mowy.
  • 'end': silnik zakończył wypowiadanie wypowiedzi.
  • 'error': wystąpił błąd specyficzny dla wyszukiwarki i nie można odczytać tej wypowiedzi. Przekaż więcej informacji w: event.errorMessage.

Zdarzenia 'interrupted' i 'cancelled' nie są wysyłane przez mechanizm rozpoznawania mowy – są generowane automatycznie przez Chrome.

Klienty zamiany tekstu na mowę mogą pobrać informacje głosowe z pliku manifestu rozszerzenia, wywołując metodę tts.getVoices, jeśli zostały zarejestrowane detektory zdarzeń mowy w sposób opisany poniżej.

Obsługa zdarzeń związanych z mową

Aby generować mowę na żądanie klientów, rozszerzenie musi zarejestrować słuchaczy zarówno w polu onSpeak, jak i onStop. Na przykład:

const speakListener = (utterance, options, sendTtsEvent) => {
  sendTtsEvent({type: 'start', charIndex: 0})

  // (start speaking)

  sendTtsEvent({type: 'end', charIndex: utterance.length})
};

const stopListener = () => {
  // (stop all speech)
};

chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);

Decyzja o tym, czy wysłać dane żądanie mowy do rozszerzenia, zależy wyłącznie od tego, czy obsługuje ono podane parametry głosowe w swoim pliku manifestu i czy zarejestrowało słuchaczy języków onSpeak i onStop. Inaczej mówiąc, nie ma możliwości, aby rozszerzenie otrzymało żądanie mowy i nie mogło dynamicznie zdecydować, czy je obsługuje.

Typy

AudioBuffer

Chrome 92 i nowsze wersje

Parametry zawierające bufor audio i powiązane dane.

Właściwości

  • audioBuffer

    ArrayBuffer

    Bufor dźwięku z mechanizmu przetwarzania tekstu na mowę. Powinien mieć dokładnie taką długość jak audioStreamOptions.bufferSize i być zakodowany jako mono z wartością audioStreamOptions.sampleRate oraz jako liniowy pcm, 32-bitową liczbą zmiennoprzecinkową ze znakiem, czyli w formacie Float32Array w języku JavaScript.

  • charIndex

    Liczba opcjonalnie

    Indeks znaków powiązany z tym buforem audio.

  • isLastBuffer

    wartość logiczna opcjonalna

    Prawda, jeśli ten bufor dźwięku jest ostatnim odczytywanym tekstem.

AudioStreamOptions

Chrome 92 i nowsze wersje

Zawiera format strumienia audio, który powinien zostać wyprodukowany przez silnik.

Właściwości

  • bufferSize

    Liczba

    Liczba próbek w buforze audio.

  • sampleRate

    Liczba

    Oczekiwana częstotliwość próbkowania w buforze audio.

SpeakOptions

Chrome 92 i nowsze wersje

Opcje określone w metodzie tts.speak().

Właściwości

  • gender

    VoiceGender opcjonalnie

    Wycofane od Chrome 92

    Płeć została wycofana i będzie ignorowana.

    Płeć głosu na potrzeby syntezy mowy.

  • lang

    ciąg znaków opcjonalny

    Język używany do syntezy w postaci język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.

  • rzut

    Liczba opcjonalnie

    Tony wypowiedzi w przedziale od 0 do 2 włącznie, gdzie 0 to najniższa ocena, a 2 to najwyższa. 1,0 odpowiada domyślnemu tonu tego głosu.

  • szybkość reakcji

    Liczba opcjonalnie

    Szybkość mowy w odniesieniu do domyślnej szybkości wypowiedzi dla tego głosu. Domyślna wartość to 1, 0 – zwykle od 180 do 220 słów na minutę. 2,0 – 2 razy szybciej, a 0,5 – o połowę szybciej. Gwarantowana jest wartość z zakresu od 0,1 do 10,0 włącznie. Jeśli głos nie obsługuje pełnego zakresu stawek, nie zwracaj błędu. Zamiast tego skracaj szybkość do zakresu obsługiwanego przez głos.

  • voiceName

    ciąg znaków opcjonalny

    Nazwa głosu, który ma zostać użyty do syntezy.

  • wolumin

    Liczba opcjonalnie

    Głośność mowy z zakresu od 0 do 1 włącznie, gdzie 0 to najniższa wartość, a 1 – najwyższa, a domyślnie 1,0.

VoiceGender

Chrome 54 i nowszy Wycofane od Chrome 70

Płeć została wycofana i będzie ignorowana.

Enum

Metody

updateVoices()

Chrome 66 i nowsze wersje
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

Wywoływane przez system w celu zaktualizowania listy głosów. Ta lista zastępuje wszystkie głosy zadeklarowane w pliku manifestu tego rozszerzenia.

Parametry

  • Głosy

    Tablica obiektów tts.TtsVoice reprezentujących głosy dostępne do syntezy mowy.

Wydarzenia

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

Opcjonalnie: jeśli wyszukiwarka obsługuje zdarzenie wstrzymania, powinna wstrzymać bieżącą odczytywaną wypowiedź (jeśli ma miejsce) do momentu otrzymania zdarzenia wznowienia lub zatrzymania. Pamiętaj, że zdarzenie zatrzymania powinno też wyczyścić stan wstrzymania.

Parametry

  • wywołanie zwrotne

    funkcja

    Parametr callback wygląda tak:

    ()=>void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

Opcjonalnie: jeśli wyszukiwarka obsługuje zdarzenie wstrzymania, powinna też obsługiwać zdarzenie wznowienia, aby kontynuować czytanie bieżącej wypowiedzi (jeśli występuje). Pamiętaj, że zdarzenie zatrzymania powinno też wyczyścić stan wstrzymania.

Parametry

  • wywołanie zwrotne

    funkcja

    Parametr callback wygląda tak:

    ()=>void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

Wywoływana, gdy użytkownik wywołuje funkcję tts.speak(), a jeden z głosów z pliku manifestu tego rozszerzenia jest pierwszym, który pasuje do obiektu opcji.

Parametry

  • wywołanie zwrotne

    funkcja

    Parametr callback wygląda tak:

    (utterance: string,options: SpeakOptions,sendTtsEvent: function)=>void

    • wypowiedź

      string,

    • Opcje
    • sendTtsEvent

      funkcja

      Parametr sendTtsEvent wygląda tak:

      (event: tts.TtsEvent)=>void

      • event

        Zdarzenie z mechanizmu zamiany tekstu na mowę wskazujące stan danej wypowiedzi.

onSpeakWithAudioStream

Chrome 92 i nowsze wersje
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Wywoływana, gdy użytkownik wywołuje funkcję tts.speak(), a jeden z głosów z pliku manifestu tego rozszerzenia jest pierwszym, który pasuje do obiektu opcji. Różni się od ttsEngine.onSpeak tym, że Chrome zapewnia usługi odtwarzania dźwięku i obsługuje wysyłanie zdarzeń TXT.

Parametry

  • wywołanie zwrotne

    funkcja

    Parametr callback wygląda tak:

    (utterance: string,options: SpeakOptions,audioStreamOptions: AudioStreamOptions,sendTtsAudio: function,sendError: function)=>void

    • wypowiedź

      string,

    • Opcje
    • audioStreamOptions
    • sendTtsAudio

      funkcja

      Parametr sendTtsAudio wygląda tak:

      (audioBufferParams: AudioBuffer)=>void

      • audioBufferParams

        Parametry zawierające bufor audio i powiązane dane.

    • sendError

      funkcja

      Chrome 94 i nowsze wersje

      Parametr sendError wygląda tak:

      (errorMessage?: string)=>void

      • errorMessage

        ciąg znaków opcjonalny

        Ciąg tekstowy opisujący błąd.

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

Wywoływane, gdy dzwonisz na tts.stop, a to rozszerzenie może być w trakcie mówienia. Jeśli rozszerzenie otrzyma wywołanie do onStop, a mowa została już zatrzymana, nie powinno ono wykonywać żadnych działań (nie spowoduje zgłoszenia błędu). Jeśli mowa jest w stanie wstrzymania, powinna zostać anulowana.

Parametry

  • wywołanie zwrotne

    funkcja

    Parametr callback wygląda tak:

    ()=>void