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łaszać stan.
Uprawnienia
ttsEnginePojęcia i zastosowanie
Rozszerzenie może zarejestrować się jako silnik mowy. Dzięki temu 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 z 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, np. tak:
{
"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ł zaplanować wypowiedzi w kolejce.
Po wczytaniu rozszerzenie może zastąpić listę zadeklarowanych głosów, wywołując metodę chrome.ttsEngine.updateVoices. (Pamiętaj, że parametry używane w wywołaniu programowym do
updateVoices są zapisywane w formacie camelCase, np. voiceName, w przeciwieństwie do pliku manifestu, w którym używany jest format
voice_name).
Możliwe typy zdarzeń, które możesz wysyłać, odpowiadają typom zdarzeń, które otrzymuje metoda speak():
'start': silnik zaczął odtwarzać 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 odczytać 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 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 pokazano poniżej:
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 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ć żądania mowy i dynamicznie zdecydować, czy je 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 ze znakiem zmiennoprzecinkowym, czyli jako typ Float32Array w JavaScript.
-
charIndex
number opcjonalny
Indeks znaku powiązany z tym buforem audio.
-
isLastBuffer
wartość logiczna opcjonalna
Wartość „true” (prawda), jeśli ten bufor audio jest ostatnim buforem dla wypowiadanego tekstu.
AudioStreamOptions
Zawiera format strumienia audio, który ma 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”
„instalowanie”
„installed”
„failed”
LanguageStatus
Stan instalacji języka.
Właściwości
-
błąd
ciąg znaków opcjonalny
Szczegółowe informacje o nieudanych instalacjach. Opcjonalnie wypełniane, jeśli nie udało się zainstalować języka.
-
installStatus
Stan instalacji.
-
lang
ciąg znaków
Ciąg znaków języka w formacie kod języka-kod regionu, przy czym kod regionu może zostać pominięty. Przykłady: 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żyć 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 to najniższa, a 2 to najwyższa wysokość głosu. Wartość 1,0 odpowiada domyślnej wysokości głosu.
-
szybkość reakcji
number opcjonalny
Tempo mówienia w porównaniu z domyślnym tempem dla tego głosu. Domyślna szybkość to 1,0, czyli zwykle około 180–220 słów na minutę. 2,0 oznacza dwukrotnie większą szybkość, a 0,5 – dwukrotnie mniejszą. 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 przytnij 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ść mowy w zakresie od 0 do 1 włącznie, gdzie 0 to najniższa, 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
ciąg znaków
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”
„extension”
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. Po pomyślnym zakończeniu działania 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
-
osoba wysyłająca prośbę
-
lang
ciąg znaków
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Uruchamiane, gdy klient TTS wysyła żądanie dotyczące stanu instalacji języka.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(requestor: TtsClient, lang: string) => void
-
osoba wysyłająca prośbę
-
lang
ciąg znaków
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opcjonalnie: jeśli wyszukiwarka obsługuje zdarzenie wstrzymania, powinna wstrzymać aktualnie odczytywaną wypowiedź (jeśli taka jest) do momentu otrzymania zdarzenia wznowienia lub zdarzenia zatrzymania. Pamiętaj, że zdarzenie zatrzymania powinno również 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ź
ciąg znaków
-
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ź
ciąg znaków
-
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 tekstowy 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 wskaże, że język nie jest już potrzebny.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
osoba wysyłająca prośbę
-
lang
ciąg znaków
-
uninstallOptions
-