Opis
Aby zaimplementować mechanizm konwersji tekstu na mowę(TTS) za pomocą rozszerzenia, użyj interfejsu API chrome.ttsEngine
. Jeśli 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 oraz wysłać zdarzenia z powrotem do funkcji wywołania, aby przekazać stan.
Uprawnienia
ttsEngine
Pojęcia i zastosowanie
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ć alternatywne implementacje.
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 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 zaimplementować silnik TTS, rozszerzenie musi zadeklarować uprawnienie „ttsEngine”, a następnie zadeklarować wszystkie głosy, które udostępnia w pliku manifestu rozszerzenia, na przykład 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 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
number 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
ciąg znaków 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 żądaniu silnik może zdecydować, czy i kiedy odinstalować język. Jeśli wartość to Fałsz, do określenia momentu odinstalowania może zostać użyte inne kryterium, np. ostatnio używana aplikacja.
SpeakOptions
Opcje określone w metodzie tts.speak().
Właściwości
-
płeć
VoiceGender opcjonalny
Wycofane w wersji Chrome 92Płeć została wycofana i będzie ignorowana.
Płeć głosu syntetycznego.
-
lang
ciąg znaków opcjonalny
Język, który ma być użyty do syntezy, w formie language-region. Przykłady: „pl”, „pl-PL”, „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 wartość. Wartość 1,0 odpowiada domyślnej wysokości tego głosu.
-
szybkość reakcji
number 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 180–220 słów na minutę. 2,0 to dwa razy szybciej, a 0,5 to połowa 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
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, 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,
)
Jest wywoływany przez silnik, gdy próbuje się zainstalować język lub go odinstalować. 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 funkcję 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
ciąg znaków opcjonalny
Ciąg tekstowy opisujący błąd.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Wywoływany, gdy wywołana zostaje 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 wywoływać 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
-