Opis
Aby zaimplementować mechanizm konwersji tekstu na mowę(TTS) za pomocą rozszerzenia, użyj interfejsu chrome.ttsEngine
API. Jeśli Twoje rozszerzenie zarejestruje się za pomocą tego interfejsu API, będzie otrzymywać zdarzenia zawierające wypowiedź do wymówienia i inne parametry, gdy dowolne rozszerzenie lub aplikacja w Chrome będzie używać interfejsu API tts
do generowania mowy. Rozszerzenie może następnie użyć dowolnej dostępnej technologii internetowej do syntezy i wyprowadzenia mowy, a także wysłać zdarzenia z powrotem do funkcji wywołania, aby przekazać stan.
Uprawnienia
ttsEngine
Omówienie
Rozszerzenie może zarejestrować się jako mechanizm przetwarzania mowy. Dzięki temu może przechwytywać niektóre lub wszystkie wywołania funkcji takich jak tts.speak
i tts.stop
oraz zapewniać ich alternatywne wykonanie.
Rozszerzenia mogą swobodnie korzystać z dowolnej dostępnej technologii internetowej do odtwarzania mowy, w tym strumieniowego dźwięku z serwera i dźwięku w formacie HTML5. Rozszerzenie może nawet wykonywać inne czynności z wypowiedziami, np. wyświetlać napisy w wyskakującym oknie lub wysyłać je jako komunikaty logowania na serwer zdalny.
Plik manifestu
Aby zaimplementować silnik TTS, rozszerzenie musi zadeklarować uprawnienie „ttsEngine”, a następnie zadeklarować wszystkie głosy, które udostępnia w pliku manifestu rozszerzenia. Przykład:
{
"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 zawierać dowolną liczbę głosów.
Parametr voice_name
jest wymagany. Nazwa powinna być na tyle opisowa, aby można było z niej określić nazwę głosu i używanego silnika. W bardzo rzadkich przypadkach, gdy 2 rozszerzenia zarejestrują głosy o tej samej nazwie, klient może podać identyfikator rozszerzenia, które ma przeprowadzić syntezę.
Parametr lang
jest opcjonalny, ale zdecydowanie zalecany. Prawie zawsze głos może syntetyzować mowę tylko w jednym języku. Gdy 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 podać 2 osobne głosy i obsługiwać je za pomocą tej samej logiki wewnętrznej. 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.
Na koniec parametr event_types
jest wymagany, jeśli silnik może wysyłać zdarzenia, aby aktualizować klienta na temat postępów syntezy mowy. Zdecydowanie zalecamy obsługę co najmniej typu zdarzenia 'end'
, aby wskazywać, kiedy kończy się mowa. W przeciwnym razie Chrome nie będzie mógł zaplanować wypowiedzi w kolejce.
Po załadowaniu rozszerzenie może zastąpić listę zadeklarowanych głosów, wywołując funkcję chrome.ttsEngine.updateVoices
. (Pamiętaj, że parametry używane w automatycznym wywołaniu funkcji updateVoices
są w alfabecie łacińskim z dużą literą: voiceName
, w przeciwieństwie do pliku manifestu, który używa voice_name
.)
Możliwe typy zdarzeń, które możesz wysyłać, odpowiadają typom zdarzeń, które otrzymuje metoda speak()
:
'start'
: silnik zaczął wypowiadać wypowiedź.'word'
: osiągnięto granicę słowa. Użyj właściwościevent.charIndex
, aby określić bieżącą pozycję w mowie.'sentence'
: osiągnięto granicę zdania. Użyjevent.charIndex
, aby określić bieżącą pozycję mowy.'marker'
: osiągnięto znacznik SSML. Użyj właściwościevent.charIndex
, aby określić bieżącą pozycję w mowie.'end'
: silnik zakończył wypowiadanie wypowiedzi.'error'
: wystąpił błąd związany z wyszukiwarką i nie można wymówić tego wyrażenia. Przekaż więcej informacji w sekcjievent.errorMessage
.
Zdarzenia 'interrupted'
i 'cancelled'
nie są wysyłane przez mechanizm rozpoznawania mowy, lecz generowane automatycznie przez Chrome.
Klienci usług konwertujących tekst na mowę mogą uzyskać informacje o głosie z pliku manifestu rozszerzenia, wywołując funkcję tts.getVoices
, o ile masz zarejestrowanych słuchaczy zdarzeń związanych z mową zgodnie z opisem poniżej.
Obsługa zdarzeń związanych z mową
Aby generować mowę na żądanie klientów, Twoje rozszerzenie musi zarejestrować słuchaczy zarówno dla onSpeak
, jak i onStop
, w ten sposób:
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ć określone żądanie dotyczące mowy do rozszerzenia, zależy wyłącznie od tego, czy rozszerzenie obsługuje określone parametry głosu w swoim pliku manifestu i czy ma zarejestrowanych słuchaczy dla onSpeak
i onStop
. Innymi słowy, rozszerzenie nie może otrzymać prośby o wypowiedź i dynamicznie zdecydować, czy ma 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ę. Jego długość powinna być równa parametrowi audioStreamOptions.bufferSize i zakodowana jako mono z parametrem audioStreamOptions.sampleRate oraz jako linearny pcm, 32-bitowy podpisany typ float, czyli typ Float32Array w JavaScript.
-
charIndex
numer opcjonalny
Indeks znaków powiązany z tym buforem audio.
-
isLastBuffer
logiczna opcjonalna
Prawda, jeśli ten bufor audio jest ostatnim dla wypowiadanego tekstu.
AudioStreamOptions
Zawiera format strumienia audio, który powinien być wygenerowany 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"
„installing”
„zainstalowany”
„failed”
LanguageStatus
Stan instalacji języka.
Właściwości
-
błąd
string opcjonalny
Szczegółowe informacje o błędach instalacji. Opcjonalnie wypełniane, jeśli nie udało się zainstalować języka.
-
installStatus
Stan instalacji.
-
lang
ciąg znaków
Ciąg tekstowy w formie kodu języka i kodu regionu, gdzie region 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ść prawda, jeśli klient TTS chce natychmiast odinstalować język. Na podstawie tego parametru i informacji o występującym użytkowniku silnik może zdecydować, czy i kiedy odinstalować język. Jeśli wartość jest równa fałsz, do określenia momentu odinstalowania może zostać użyte inne kryterium, np. ostatnio używana aplikacja.
SpeakOptions
Opcje określone w metodie 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 syntetycznego.
-
lang
string opcjonalny
Język, który ma być użyty do syntezy, w formie language-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
rzut
numer opcjonalny
Wysokość głosu w zakresie od 0 do 2, gdzie 0 to najniższa, a 2 najwyższa wartość. Wartość 1,0 odpowiada domyślnej wysokości tego głosu.
-
szybkość reakcji
numer opcjonalny
Szybkość mówienia w porównaniu z domyślną szybkością tego głosu. 1,0 to domyślna szybkość, która wynosi zwykle od 180 do 220 słów na minutę. 2,0 oznacza dwukrotnie szybsze działanie, a 0,5 – połowę szybkości. Wartość ta musi się zawierać w przedziale od 0,1 do 10,0 (włącznie). Jeśli głos nie obsługuje pełnego zakresu częstotliwości, nie zwracaj błędu. Zamiast tego ograniczaj częstotliwość do zakresu obsługiwanego przez głos.
-
voiceName
string opcjonalny
Nazwa głosu używanego na potrzeby syntezy.
-
głośność
numer opcjonalny
Głośność mowy w zakresie od 0 do 1, gdzie 0 to najniższa, a 1 to najwyższa wartość.Wartość domyślna to 1,0.
TtsClient
Identyfikator klienta, który prosi o stan.
Właściwości
-
id
ciąg znaków
Klient wysyła prośbę o zarządzanie językiem. W przypadku rozszerzenia jest to unikalny identyfikator rozszerzenia. W przypadku funkcji Chrome jest to czytelna nazwa funkcji.
-
źródło
Typ osoby przesyłającej prośbę.
TtsClientSource
Typ osoby przesyłającej prośbę.
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,
)
Funkcja wywoływana przez silnik, gdy podejmowane jest próby zainstalowania języka lub gdy język jest odinstalowywany. Jest też używany w odpowiedzi na prośbę o stan klienta. Gdy głos zostanie zainstalowany lub odinstalowany, silnik powinien też wywołać metodę ttsEngine.updateVoices, aby zarejestrować głos.
Parametry
-
status
Stan instalacji języka.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Wywoływany przez silnik w celu zaktualizowania listy głosów. Ta lista zastępuje wszystkie głosy zadeklarowane w pliku manifestu rozszerzenia.
Parametry
-
Głosy
TtsVoice[]
Tablica obiektów
tts.TtsVoice
reprezentujących dostępne głosy do syntezy mowy.
Wydarzenia
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Wywoływane, gdy klient TTS poprosi o zainstalowanie nowego języka. Mechanizm powinien spróbować pobrać i zainstalować język, a potem wywołać metodę ttsEngine.updateLanguage z otrzymanym wynikiem. W przypadku powodzenia silnik powinien też wywołać ttsEngine.updateVoices, aby zarejestrować nowo dostępne głosy.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:(requestor: TtsClient, lang: string) => void
-
zgłaszający
-
lang
ciąg znaków
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Wywoływane, gdy klient TTS prosi o stan instalacji języka.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:(requestor: TtsClient, lang: string) => void
-
zgłaszający
-
lang
ciąg znaków
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opcjonalnie: jeśli silnik obsługuje zdarzenie wstrzymania, powinien wstrzymać aktualnie wypowiadane zdanie (jeśli takie występuje), dopóki nie otrzyma zdarzenia wznowienia lub zatrzymania. Pamiętaj, że zdarzenie stop powinno też anulować stan wstrzymania.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Opcjonalnie: jeśli silnik obsługuje zdarzenie wstrzymania, powinien też obsługiwać zdarzenie wznowienia, aby kontynuować wypowiadanie bieżącego wyrażenia (jeśli takie istnieje). Pamiętaj, że zdarzenie stop powinno też anulować stan wstrzymania.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Wywoływany, gdy użytkownik wywoła funkcję tts.speak() i jeden z głosów z pliku manifestu tego rozszerzenia jako pierwszy pasuje do obiektu options.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
wypowiedź
ciąg znaków
-
Opcje
-
sendTtsEvent
funkcja
Parametr
sendTtsEvent
ma postać:(event: tts.TtsEvent) => void
-
event
Zdarzenie z mechanizmu zamiany tekstu na mowę wskazujące stan tego wypowiedzenia.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Wywoływany, gdy użytkownik wywoła tts.speak() i jeden z głosów z pliku manifestu tego rozszerzenia jako pierwszy pasuje do obiektu options. Różnica między ttsEngine.onSpeak polega na tym, że Chrome zapewnia usługi odtwarzania dźwięku i obsługuje wysyłanie zdarzeń TTS.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
wypowiedź
ciąg znaków
-
Opcje
-
audioStreamOptions
-
sendTtsAudio
funkcja
Parametr
sendTtsAudio
ma postać:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parametry zawierające bufor audio i powiązane dane.
-
-
sendError
funkcja
Chrome 94 lub nowszyParametr
sendError
ma postać:(errorMessage?: string) => void
-
errorMessage
string opcjonalny
Ciąg tekstowy opisujący błąd.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Wywoływany, gdy wywoływana jest funkcja tts.stop, a rozszerzenie może być w trakcie mówienia. Jeśli rozszerzenie otrzyma wywołanie onStop, a mowa jest już zatrzymana, nie powinno nic robić (nie powinno generować błędu). Jeśli mowa jest wstrzymana, powinno to anulować stan wstrzymania.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Wywoływany, gdy klient TTS wskazuje, że dany język nie jest już potrzebny.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
ma postać:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
zgłaszający
-
lang
ciąg znaków
-
uninstallOptions
-