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
Przegląd
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.
Plik manifestu
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żyjevent.charIndex
, aby określić bieżącą pozycję mowy.'sentence'
: osiągnięto granicę 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ł 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
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
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
Opcje określone w metodzie tts.speak().
Właściwości
-
gender
VoiceGender opcjonalnie
Wycofane od Chrome 92Pł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
Płeć została wycofana i będzie ignorowana.
Enum
Metody
updateVoices()
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
TtsVoice[]
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.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 wersjeParametr
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