Opis
Aby zaimplementować mechanizm zamiany tekstu na mowę, użyj rozszerzenia API chrome.ttsEngine
. Jeśli rozszerzenie zarejestruje się za pomocą tego interfejsu API, otrzyma zdarzenia zawierające wypowiedź do odczytania oraz inne parametry, gdy dowolne rozszerzenie lub aplikacja Chrome użyje interfejsu API tts
do generowania mowy. Rozszerzenie może następnie wykorzystać dowolną dostępną technologię internetową do syntetyzowania i generowania mowy, a następnie wysyłania zdarzeń z powrotem do funkcji wywołującej, by poinformować o stanie.
Uprawnienia
ttsEngine
Pojęcia i wykorzystanie
Rozszerzenie może zarejestrować się jako mechanizm mowy. Dzięki temu może on przechwytywać niektóre lub wszystkie połączenia
do funkcji takich jak tts.speak()
i tts.stop()
, oraz zapewnić alternatywną implementację.
Rozszerzenia mogą wykorzystywać dowolną dostępną technologię internetową do mowy, w tym do strumieniowego przesyłania dźwięku.
z serwera – audio HTML5. Rozszerzenie może nawet zrobić coś innego
za pomocą wypowiedzi, np. wyświetlania napisów w wyskakującym okienku lub wysyłania ich jako wiadomości dziennika
i serwera zdalnego.
Aby można było zaimplementować mechanizm zamiany tekstu na mowę, rozszerzenie musi zadeklarować parametr „ttsEngine” uprawnienia, a następnie zadeklaruj wszystko głosy udostępniane przez rozszerzenie w pliku manifestu, na 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ć wystarczająco opisowa, aby identyfikować
nazwy głosu i używanego silnika. w mało prawdopodobnym przypadku, gdy 2 rozszerzenia rejestrują głosy.
o tej samej nazwie klient może określić identyfikator rozszerzenia, które powinno wykonać syntezę.
Parametr lang
jest opcjonalny, ale zdecydowanie zalecany. Niemal zawsze, syntezator mowy może
mówić tylko w jednym języku. Jeśli wyszukiwarka obsługuje więcej niż 1 język, może łatwo
zarejestrować osobny głos dla każdego języka. W rzadkich przypadkach, gdy pojedynczy głos może
obsługuje więcej niż 1 język, najłatwiej jest podać 2 osobne głosy i obsługiwać je za pomocą
i używają tej samej logiki. Jeśli jednak chcesz utworzyć głos, który będzie obsługiwać wypowiedzi w dowolnym
język, usuń parametr lang
z pliku manifestu rozszerzenia.
Parametr event_types
jest też wymagany, jeśli wyszukiwarka może wysyłać zdarzenia w celu zaktualizowania klienta.
na postęp syntezy mowy. Wymagane minimum to obsługa typu zdarzenia 'end'
wskazująca,
po zakończeniu mówienia jest zdecydowanie zalecane. W przeciwnym razie Chrome nie może zaplanować wypowiedzi umieszczonych w kolejce.
Po załadowaniu rozszerzenie może zastąpić listę zadeklarowanych głosów, wywołując
chrome.ttsEngine.updateVoices
(Zwróć uwagę, że parametry używane w programowym wywołaniu funkcji
updateVoices
są zapisane w etui w kształcie wielbłąda: np. 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ń używanym przez metodę speak()
otrzymuje:
'start'
: mechanizm zaczął wymawiać słowa.'word'
: osiągnięto granicę słowa. Aby określić bieżącą mowę, użyjevent.charIndex
pozycji.'sentence'
: osiągnięto granicę zdań. Użyj funkcjievent.charIndex
, aby określić bieżącą pozycji mowy.'marker'
: osiągnięto znacznik SSML. Aby określić bieżącą mowę, użyjevent.charIndex
pozycji.'end'
: wyszukiwarka zakończyła wypowiedź.'error'
: wystąpił błąd związany z wyszukiwarką i nie można odczytać tej wypowiedzi. Podaj więcej informacje wevent.errorMessage
.
Zdarzenia 'interrupted'
i 'cancelled'
nie są wysyłane przez mechanizm mowy. są generowane
automatycznie przez Chrome.
Klienty zamiany tekstu na mowę mogą uzyskiwać informacje głosowe z pliku manifestu rozszerzenia, wywołując
tts.getVoices
, zakładając, że zostały zarejestrowane detektory zdarzeń mowy w sposób opisany poniżej.
Obsługa zdarzeń związanych z mową
Aby można było generować mowę na prośbę klientów, rozszerzenie musi zarejestrować detektory w obu
onSpeak
i onStop
lubią to:
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 głosowe do rozszerzenia, zależy wyłącznie od
czy rozszerzenie obsługuje w pliku manifestu podane parametry głosu i zarejestrowało
detektory utworów onSpeak
i onStop
. Innymi słowy, nie ma możliwości, aby rozszerzenie otrzymało
żądania mowy i dynamicznie zdecydować, czy obsłużyć.
Typy
AudioBuffer
Parametry zawierające bufor audio i powiązane z nim dane.
Właściwości
-
audioBuffer
SlateBuffer
Bufor dźwięku z mechanizmu zamiany tekstu na mowę. Powinien mieć dokładnie taką samą długość, audioStreamOptions.bufferSize i zakodowany jako mono, w polu audioStreamOptions.sampleRate, a jako liniowy pcm – 32-bitowy znak zmiennoprzecinkowy, tj. typ Float32Slate 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 audio jest ostatnim odczytywanym tekstem.
AudioStreamOptions
Zawiera format strumienia audio, który ma być wygenerowany przez wyszukiwarkę.
Właściwości
-
bufferSize
liczba
Liczba sampli w buforze audio.
-
sampleRate
liczba
Oczekiwana częstotliwość próbkowania w buforze audio.
SpeakOptions
Opcje określone dla metody tts.speak().
Właściwości
-
płeć
VoiceGender opcjonalnie
Wycofane od Chrome 92Płeć została wycofana i będzie ignorowana.
Płeć głosu syntetycznego.
-
lang
ciąg znaków opcjonalny
Język używany w syntezie w formacie język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
rzut
liczba opcjonalnie
Wypowiadanie tonacji mieści się w zakresie od 0 do 2 włącznie, przy czym 0 to najniższa ocena, a 2 – najwyższa. 1,0 odpowiada domyślnej tonacji tego głosu.
-
szybkość reakcji
liczba opcjonalnie
Szybkość mowy w stosunku do domyślnej szybkości tego głosu. Domyślna wartość to 1,0, zwykle od 180 do 220 słów na minutę. 2,0 to dwa razy szybciej, a 0,5 – mniej. Ta wartość musi mieścić się w przedziale od 0,1 do 10,0 włącznie. Jeśli dany głos nie obsługuje pełnego zakresu częstotliwości, nie zwracaj komunikatu o błędzie. Zamiast tego dopasuj szybkość do zakresu obsługiwanego przez głos.
-
voiceName
ciąg znaków opcjonalny
Nazwa głosu, który ma być używany w syntezie.
-
głośność
liczba opcjonalnie
Wypowiadana głośność mieści się w zakresie od 0 do 1 włącznie, przy czym 0 oznacza najniższą, a 1 – najwyższą, przy czym domyślna to 1,0.
VoiceGender
Płeć została wycofana i będzie ignorowana.
Typ wyliczeniowy
"male"
"female"
Metody
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Wywoływane przez wyszukiwarkę 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 dostępne głosy do syntezy mowy.
Wydarzenia
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opcjonalnie: jeśli wyszukiwarka obsługuje zdarzenie wstrzymania, powinna wstrzymać wypowiadaną aktualnie wypowiedź do momentu, gdy otrzyma zdarzenie wznowienia lub zakończenia. Pamiętaj, że zatrzymanie zdarzeń powinno też spowodować usunięcie stanu 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 możliwe było kontynuowanie wypowiadania bieżącej wypowiedzi. Pamiętaj, że zatrzymanie zdarzeń powinno też spowodować usunięcie stanu 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 rozszerzenia jako pierwszy pasuje do obiektu options.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
wypowiedź
ciąg znaków
-
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 rozszerzenia jako pierwszy pasuje do obiektu options. Różni się od ttsEngine.onSpeak tym, że Chrome oferuje usługi odtwarzania dźwięku i obsługuje wysyłanie zdarzeń czatu.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
wypowiedź
ciąg znaków
-
Opcje
-
audioStreamOptions
-
sendTtsAudio
funkcja
Parametr
sendTtsAudio
wygląda tak:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parametry zawierające bufor audio i powiązane z nim dane.
-
-
sendError
funkcja
Chrome w wersji 94 lub nowszej .Parametr
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,
)
Uruchamiane po nawiązaniu połączenia z tts.stop i to rozszerzenie może być w trakcie mówienia. Jeśli rozszerzenie otrzyma wywołanie onStop, a mowa zostanie już zatrzymana, nie powinno nic robić (nie może powodować wyświetlania błędu). Jeśli odtwarzanie mowy jest wstrzymane, powinno zostać anulowane.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:() => void