Opis
Użyj interfejsu chrome.ttsEngine API, aby wdrożyć silnik zamiany tekstu na mowę(TTS) za pomocą rozszerzenia. Jeśli rozszerzenie zarejestruje się za pomocą tego interfejsu API, będzie otrzymywać zdarzenia zawierające wypowiedź do odczytania i inne parametry, gdy dowolne rozszerzenie lub aplikacja Chrome użyje interfejsu tts API do generowania mowy. Rozszerzenie może następnie użyć dowolnej dostępnej technologii internetowej do syntezy i odtwarzania mowy oraz wysyłania zdarzeń z powrotem do funkcji wywołującej, aby zgłosić stan.
Uprawnienia
ttsEnginePojęcia i zastosowanie
Rozszerzenie może zarejestrować się jako silnik mowy. W ten sposób może przechwytywać niektóre lub wszystkie wywołania funkcji, takich jak tts.speak() i tts.stop(), i zapewniać alternatywną implementację.
Rozszerzenia mogą bezpłatnie korzystać z dowolnej dostępnej technologii internetowej do odtwarzania mowy, w tym przesyłania strumieniowego dźwięku z serwera i dźwięku HTML5. Rozszerzenie może nawet robić z wypowiedziami coś innego, np. wyświetlać napisy w wyskakującym okienku lub wysyłać je jako wiadomości dziennika na serwer zdalny.
Aby wdrożyć silnik TTS, rozszerzenie musi zadeklarować uprawnienie „ttsEngine”, a następnie zadeklarować wszystkie głosy, które udostępnia, 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 identyfikować nazwę głosu i używany silnik. W rzadkich przypadkach, gdy 2 rozszerzenia zarejestrują głosy o tej samej nazwie, klient może określić identyfikator rozszerzenia, które ma przeprowadzić syntezę.
Parametr lang jest opcjonalny, ale zdecydowanie zalecany. Głos może prawie zawsze syntetyzować mowę tylko w jednym języku. Jeśli silnik obsługuje więcej niż 1 język, może łatwo zarejestrować osobny głos dla każdego z nich. W rzadkich przypadkach, gdy jeden głos może obsługiwać więcej niż 1 język, najłatwiej jest po prostu wymienić 2 osobne głosy i obsługiwać je 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.
Parametr event_types jest wymagany, jeśli silnik może wysyłać zdarzenia, aby informować klienta o postępach w syntezie mowy. Zalecamy obsługę co najmniej typu zdarzenia 'end', aby wskazywać, kiedy mowa się kończy. W przeciwnym razie Chrome nie będzie mógł planować wypowiedzi w kolejce.
Po załadowaniu rozszerzenie może zastąpić listę zadeklarowanych głosów, wywołując metodę browser.ttsEngine.updateVoices. (Pamiętaj, że parametry używane w wywołaniu programowym do
updateVoices są zapisywane w formacie camel case, np. voiceName, w przeciwieństwie do pliku manifestu, w którym używa się formatu
voice_name).
Możliwe typy zdarzeń, które możesz wysyłać, odpowiadają typom zdarzeń, które otrzymuje metoda speak():
'start': silnik zaczął odczytywać wypowiedź.'word': osiągnięto granicę słowa. Użyjevent.charIndex, aby określić bieżącą pozycję mowy.'sentence': osiągnięto koniec zdania. Użyjevent.charIndex, aby określić bieżącą pozycję mowy.'marker': osiągnięto znacznik SSML. Użyjevent.charIndex, aby określić bieżącą pozycję mowy.'end': silnik zakończył odczytywanie wypowiedzi.'error': wystąpił błąd specyficzny dla wyszukiwarki i nie można wypowiedzieć tego wyrażenia. Przekaż więcej informacji w sekcjievent.errorMessage.
Zdarzenia 'interrupted' i 'cancelled' nie są wysyłane przez silnik mowy, ale generowane automatycznie przez Chrome.
Klienci korzystający z funkcji zamiany tekstu na mowę mogą uzyskać informacje o głosie z pliku manifestu rozszerzenia, wywołując funkcję tts.getVoices, pod warunkiem że zarejestrujesz odbiorniki zdarzeń mowy zgodnie z opisem poniżej.
Obsługa zdarzeń mowy
Aby generować mowę na żądanie klientów, rozszerzenie musi zarejestrować odbiorniki dla obu tych zdarzeń:onSpeak i onStop, jak w tym przykładzie:
const speakListener = (utterance, options, sendTtsEvent) => {
sendTtsEvent({type: 'start', charIndex: 0})
// (start speaking)
sendTtsEvent({type: 'end', charIndex: utterance.length})
};
const stopListener = () => {
// (stop all speech)
};
browser.ttsEngine.onSpeak.addListener(speakListener);
browser.ttsEngine.onStop.addListener(stopListener);
Decyzja o tym, czy wysłać dane żądanie mowy do rozszerzenia, zależy wyłącznie od tego, czy rozszerzenie obsługuje dane parametry głosu w swoim pliku manifestu i czy zarejestrowało odbiorniki dla onSpeak i onStop. Innymi słowy, rozszerzenie nie może otrzymać prośby o przetworzenie mowy i dynamicznie zdecydować, czy ją obsłużyć.
Typy
AudioBuffer
Parametry zawierające bufor audio i powiązane dane.
Właściwości
-
audioBuffer
ArrayBuffer
Bufor audio z mechanizmu zamiany tekstu na mowę. Powinien mieć długość dokładnie audioStreamOptions.bufferSize i być zakodowany jako mono, z częstotliwością próbkowania audioStreamOptions.sampleRate oraz jako liniowy PCM, 32-bitowy podpisany zmiennoprzecinkowy, czyli typ Float32Array w JavaScript.
-
charIndex
number opcjonalny
Indeks znaku powiązany z tym buforem audio.
-
isLastBuffer
wartość logiczna opcjonalna
Wartość „true”, jeśli ten bufor audio jest ostatnim buforem dla wypowiadanego tekstu.
AudioStreamOptions
Zawiera format strumienia audio, który powinien być generowany przez silnik.
Właściwości
-
bufferSize
liczba
Liczba próbek w buforze audio.
-
sampleRate
liczba
Częstotliwość próbkowania oczekiwana w buforze audio.
LanguageInstallStatus
Stan instalacji głosu.
Typ wyliczeniowy
„notInstalled”
„instalacja”
„installed”
„failed”
LanguageStatus
Stan instalacji języka.
Właściwości
-
błąd
ciąg znaków opcjonalny
Szczegóły błędów instalacji. Opcjonalnie wypełniane, jeśli nie udało się zainstalować języka.
-
installStatus
Stan instalacji.
-
lang
tekst
Ciąg tekstowy w formacie kod języka-kod regionu, przy czym kod regionu może zostać pominięty. Przykłady to en, en-AU, zh-CH.
LanguageUninstallOptions
Opcje odinstalowania danego języka.
Właściwości
-
uninstallImmediately
wartość logiczna
Wartość „true”, jeśli klient TTS chce natychmiast odinstalować język. Na podstawie tego parametru i informacji o osobie wysyłającej żądanie silnik może zdecydować, czy i kiedy odinstalować język. Jeśli wartość jest fałszywa, może używać innych kryteriów, np. ostatniego użycia, aby określić, kiedy odinstalować aplikację.
SpeakOptions
Opcje określone w metodzie tts.speak().
Właściwości
-
płeć
VoiceGender opcjonalny
Wycofane w Chrome 92Płeć została wycofana i będzie ignorowana.
Płeć głosu syntezatora mowy.
-
lang
ciąg znaków opcjonalny
Język, który ma być używany do syntezy, w formacie język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
rzut
number opcjonalny
Wysokość głosu w zakresie od 0 do 2, gdzie 0 oznacza najniższą, a 2 – najwyższą wysokość. Wartość 1,0 odpowiada domyślnej wysokości głosu.
-
szybkość reakcji
number opcjonalny
Tempo mówienia w stosunku do domyślnego tempa dla tego głosu. Domyślna szybkość to 1,0, czyli zwykle około 180–220 słów na minutę. 2,0 to dwa razy szybciej, a 0,5 to dwa razy wolniej. Wartość ta na pewno będzie mieścić się w przedziale od 0,1 do 10,0 (włącznie). Jeśli głos nie obsługuje pełnego zakresu szybkości, nie zwracaj błędu. Zamiast tego ogranicz szybkość do zakresu obsługiwanego przez głos.
-
voiceName
ciąg znaków opcjonalny
Nazwa głosu używanego na potrzeby syntezy.
-
głośność
number opcjonalny
Głośność mówienia w zakresie od 0 do 1 włącznie, gdzie 0 to najniższa głośność, a 1 to najwyższa głośność.Wartość domyślna to 1,0.
TtsClient
Identyfikator klienta, który wysyła prośbę o stan.
Właściwości
-
id
tekst
Klient wysyła żądanie zarządzania językiem. W przypadku rozszerzenia jest to unikalny identyfikator rozszerzenia. W przypadku funkcji Chrome jest to zrozumiała dla człowieka nazwa funkcji.
-
źródło
Typ wnioskodawcy.
TtsClientSource
Typ wnioskodawcy.
Typ wyliczeniowy
"chromefeature"
„rozszerzenie”
VoiceGender
Płeć została wycofana i będzie ignorowana.
Typ wyliczeniowy
„male”
„female”
Metody
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Wywoływana przez silnik, gdy próbuje się zainstalować język i gdy język jest odinstalowywany. Wywoływana również w odpowiedzi na żądanie stanu od klienta. Gdy głos jest instalowany lub odinstalowywany, silnik powinien też wywołać metodę ttsEngine.updateVoices, aby zarejestrować głos.
Parametry
-
status
Stan instalacji języka.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Wywoływana przez silnik w celu zaktualizowania listy głosów. Ta lista zastępuje wszystkie głosy zadeklarowane w pliku manifestu tego rozszerzenia.
Parametry
-
Głosy
TtsVoice[]
Tablica obiektów
tts.TtsVoicereprezentujących dostępne głosy do syntezy mowy.
Wydarzenia
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Wywoływane, gdy klient TTS prosi o zainstalowanie nowego języka. Mechanizm powinien spróbować pobrać i zainstalować język oraz wywołać funkcję ttsEngine.updateLanguage z wynikiem. W przypadku powodzenia silnik powinien też wywołać funkcję ttsEngine.updateVoices, aby zarejestrować nowo dostępne głosy.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(requestor: TtsClient, lang: string) => void
-
użytkownik wysyłający prośbę
-
lang
tekst
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Wywoływane, gdy klient TTS zażąda stanu instalacji języka.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(requestor: TtsClient, lang: string) => void
-
użytkownik wysyłający prośbę
-
lang
tekst
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opcjonalnie: jeśli wyszukiwarka obsługuje zdarzenie wstrzymania, powinna wstrzymać bieżącą wypowiedź, jeśli taka istnieje, do momentu otrzymania zdarzenia wznowienia lub zdarzenia zatrzymania. Pamiętaj, że zdarzenie zatrzymania powinno też wyczyścić stan wstrzymania.
Parametry
-
callback
funkcja
Parametr
callbackwyglą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ć odczytywanie bieżącej wypowiedzi, jeśli taka istnieje. Pamiętaj, że zdarzenie zatrzymania powinno również wyczyścić stan wstrzymania.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Wywoływana, gdy użytkownik wywoła funkcję tts.speak(), a jeden z głosów z pliku manifestu tego rozszerzenia jako pierwszy pasuje do obiektu opcji.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
wypowiedź
tekst
-
Opcje
-
sendTtsEvent
funkcja
Parametr
sendTtsEventwygląda tak:(event: tts.TtsEvent) => void
-
zdarzenie
Zdarzenie z mechanizmu zamiany tekstu na mowę wskazujące stan tej wypowiedzi.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Wywoływana, gdy użytkownik wywoła funkcję tts.speak(), a jeden z głosów z pliku manifestu tego rozszerzenia jako pierwszy pasuje do obiektu opcji. Różni się od ttsEngine.onSpeak tym, że Chrome udostępnia usługi odtwarzania dźwięku i obsługuje wysyłanie zdarzeń tts.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
wypowiedź
tekst
-
Opcje
-
audioStreamOptions
-
sendTtsAudio
funkcja
Parametr
sendTtsAudiowygląda tak:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parametry zawierające bufor audio i powiązane dane.
-
-
sendError
funkcja
Chrome 94 lub nowszaParametr
sendErrorwygląda tak:(errorMessage?: string) => void
-
Komunikat o błędzie
ciąg znaków opcjonalny
Ciąg znaków opisujący błąd.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Wywoływane, gdy wywoływana jest funkcja tts.stop, a to rozszerzenie może być w trakcie odczytywania tekstu. Jeśli rozszerzenie otrzyma wywołanie onStop, a mowa została już zatrzymana, nie powinno nic robić (nie powinno zgłaszać błędu). Jeśli mowa jest w stanie wstrzymania, ta czynność powinna anulować ten stan.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Wywoływane, gdy klient TTS wskazuje, że język nie jest już potrzebny.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
użytkownik wysyłający prośbę
-
lang
tekst
-
uninstallOptions
-