Opis
Do odtwarzania syntetycznego tekstu na mowę (TTS) używaj interfejsu API chrome.tts
. Zapoznaj się też z powiązanym interfejsem API ttsEngine
, który umożliwia rozszerzeniu wdrożenie mechanizmu rozpoznawania mowy.
Chrome udostępnia te funkcje w systemach Windows (za pomocą SAPI 5), Mac OS X i ChromeOS przy użyciu funkcji syntezy mowy oferowanych przez system operacyjny. Na wszystkich platformach użytkownik może instalować rozszerzenia, które rejestrują się jako alternatywne wyszukiwarki mowy.
Uprawnienia
tts
Pojęcia i zastosowanie
Wygeneruj mowę
Aby mówić, zadzwoń pod numer speak()
z rozszerzenia. Na przykład:
chrome.tts.speak('Hello, world.');
Aby natychmiast przestać mówić, zadzwoń pod numer stop()
:
chrome.tts.stop();
Możesz udostępniać opcje, które kontrolują różne właściwości mowy, takie jak szybkość czy ton. Na przykład:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Warto też określić język, by wybrać syntezator obsługujący ten język (i jego dialekt regionalny, jeśli dotyczy).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Domyślnie każde wywołanie z adresem speak()
przerywa wszystkie trwające wypowiedzi i od razu je wypowiada. Aby sprawdzić, czy połączenie może cokolwiek zakłócać, możesz wywołać isSpeaking()
. Możesz też użyć opcji enqueue
, aby dodać tę wypowiedź do kolejki wypowiedzi, które zostaną wypowiedziane po zakończeniu bieżącej wypowiedzi.
chrome.tts.speak('Speak this first.');
chrome.tts.speak(
'Speak this next, when the first sentence is done.', {'enqueue': true});
Pełny opis wszystkich opcji znajdziesz w sekcji tts.speak()
. Nie wszystkie mechanizmy mowy obsługują
wszystkie opcje.
Aby wykryć błędy i mieć pewność, że wywołujesz funkcję speak()
prawidłowo, przekaż funkcję wywołania zwrotnego, która nie przyjmuje żadnych argumentów. W wywołaniu zwrotnym sprawdź, czy w polu runtime.lastError
nie ma błędów.
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
Wywołanie zwrotne jest realizowane natychmiast, zanim wyszukiwarka zacznie generować mowę. Wywołanie zwrotne ma na celu ostrzeżenie o błędach składni podczas korzystania z interfejsu TTS API i nie wychwycenie wszystkich możliwych błędów, które mogą wystąpić podczas syntetyzowania i generowania mowy. Aby wykryć te błędy również, musisz użyć detektora zdarzeń, który został opisany w następnej sekcji.
Odsłuchiwanie zdarzeń
Aby otrzymywać więcej informacji w czasie rzeczywistym o stanie syntezowanej mowy, przekaż odbiornik zdarzenia w opcjach do funkcji speak()
w ten sposób:
chrome.tts.speak(
utterance,
{
onEvent: function(event) {
console.log('Event ' + event.type + ' at position ' + event.charIndex);
if (event.type == 'error') {
console.log('Error: ' + event.errorMessage);
}
}
},
callback
);
Każde zdarzenie obejmuje typ zdarzenia, indeks znaków bieżącej mowy w odniesieniu do wypowiedzi oraz opcjonalny komunikat o błędzie (w przypadku zdarzeń błędów). Typy zdarzeń:
'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.'interrupted'
: ta wypowiedź została przerwana przez inne połączenie z numeremspeak()
lubstop()
i nie została zakończona.'cancelled'
: ta wypowiedź została dodana do kolejki, ale została anulowana przez inne połączenie z numeremspeak()
lubstop()
i nigdy nie zaczęła się mówić.'error'
: wystąpił błąd specyficzny dla wyszukiwarki i nie można odczytać tej wypowiedzi. Szczegóły znajdziesz tutaj:event.errorMessage
.
Cztery typy zdarzeń – 'end'
, 'interrupted'
, 'cancelled'
i 'error'
– są nieostateczne. Po odebraniu jednego z tych zdarzeń ta wypowiedź nie będzie już mówić ani nie będą odbierane żadne nowe zdarzenia.
Niektóre głosy mogą nie obsługiwać wszystkich typów wydarzeń, a niektóre głosy mogą w ogóle nie wysyłać żadnych wydarzeń. Jeśli nie chcesz używać głosu, o ile nie wysyła określonych zdarzeń, przekaż wymagane zdarzenia w elemencie requiredEventTypes
obiektu options lub użyj funkcji getVoices()
, aby wybrać głos zgodny z Twoimi wymaganiami. Poniżej opisujemy oba te typy.
Znaczniki SSML
Wyrażenia wykorzystywane w tym interfejsie API mogą zawierać znaczniki wykorzystujące język znaczników syntezy mowy (SSML). Jeśli używasz SSML, pierwszy argument funkcji speak()
powinien być pełnym dokumentem SSML z nagłówkiem XML i tagiem <speak>
najwyższego poziomu, a nie fragmentem dokumentu.
Na przykład:
chrome.tts.speak(
'<?xml version="1.0"?>' +
'<speak>' +
' The <emphasis>second</emphasis> ' +
' word of this sentence was emphasized.' +
'</speak>'
);
Nie wszystkie wyszukiwarki mowy obsługują wszystkie tagi SSML, a niektóre w ogóle nie obsługują SSML. Jednak wszystkie wyszukiwarki muszą ignorować SSML, których nie obsługują, i nadal odczytywać tekst.
Wybierz głos
Domyślnie Chrome wybiera głos, który jest najbardziej odpowiedni dla każdej wypowiedzi, którą chcesz wypowiedzieć, na podstawie języka. W większości systemów Windows, Mac OS X i ChromeOS synteza mowy dostępna przez system operacyjny powinna być w stanie odczytać dowolny tekst w co najmniej jednym języku. Niektórzy użytkownicy mogą jednak korzystać z różnych głosów z systemu operacyjnego i z mechanizmów rozpoznawania mowy zaimplementowanych przez inne rozszerzenia do Chrome. W takich przypadkach możesz zaimplementować kod niestandardowy, aby wybrać właściwy głos lub przedstawić użytkownikowi listę dostępnych opcji.
Aby uzyskać listę wszystkich głosów, wywołaj funkcję getVoices()
i przekaż do niej funkcję, która otrzymuje jako argument tablicę obiektów TtsVoice
:
chrome.tts.getVoices(
function(voices) {
for (var i = 0; i < voices.length; i++) {
console.log('Voice ' + i + ':');
console.log(' name: ' + voices[i].voiceName);
console.log(' lang: ' + voices[i].lang);
console.log(' extension id: ' + voices[i].extensionId);
console.log(' event types: ' + voices[i].eventTypes);
}
}
);
Typy
EventType
Typ wyliczeniowy
"start"
"end"
"sentence"
"marker"
TtsEvent
Zdarzenie mechanizmu zamiany tekstu na mowę służący do przekazywania informacji o stanie wypowiedzi.
Właściwości
-
charIndex
Liczba opcjonalnie
Indeks bieżącego znaku w wypowiedzi. W przypadku wydarzeń tekstowych zdarzenie jest uruchamiane na końcu jednego słowa i przed początkiem następnego.
charIndex
oznacza punkt w tekście na początku następnego słowa, które zostanie wypowiedziane. -
errorMessage
ciąg znaków opcjonalny
Opis błędu, jeśli typ zdarzenia to
error
. -
length
Liczba opcjonalnie
Chrome 74 i nowszyDługość następnej części wypowiedzi. Na przykład w przypadku zdarzenia
word
jest to długość słowa, które zostanie wypowiedziane jako następne. Jeśli mechanizm rozpoznawania mowy nie ustawi tego ustawienia, otrzyma on wartość -1. -
Niestandardowy typ treści
Typ może mieć postać
start
od razu po rozpoczęciu mowy,word
po osiągnięciu granicy słowa,sentence
po osiągnięciu granicy zdania,marker
po osiągnięciu elementu znaku SSML,end
po osiągnięciu końca wypowiedzi,interrupted
, gdy wypowiedź zostanie zatrzymana lub przerwana przed jej zakończeniem,cancelled
– gdy zostanie usunięta z kolejki przed jej syntezą, luberror
, gdy wystąpi jakikolwiek inny błąd. Gdy wstrzymasz mowę, zdarzeniepause
jest wywoływane, jeśli konkretna wypowiedź zostanie wstrzymana w środku, orazresume
, jeśli wznowiona jest wypowiedź. Pamiętaj, że wstrzymywanie i wznawianie zdarzeń może nie być wywołane, jeśli między wypowiedziami wstrzymana jest mowa.
TtsOptions
Opcje mowy dla mechanizmu zamiany tekstu na mowę.
Właściwości
-
desiredEventTypes
string[] opcjonalny
Rodzaje zdarzeń TTS, których chcesz posłuchać. Jeśli go brak, będą wysyłane wszystkie typy zdarzeń.
-
umieścić w kolejce
wartość logiczna opcjonalna
Jeśli ma wartość true (prawda), dodaje tę wypowiedź do kolejki, jeśli trwa już przekształcanie tekstu na mowę. Jeśli ma wartość fałsz (domyślna), przerywa bieżącą wypowiedź i opróżnia kolejkę mowy przed wypowiedzeniem nowej wypowiedzi.
-
extensionId
ciąg znaków opcjonalny
Identyfikator rozszerzenia mechanizmu rozpoznawania mowy (jeśli jest znany).
-
gender
VoiceGender opcjonalnie
Wycofane od Chrome 77Pł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 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. Wartości poniżej 0,1 lub powyżej 10,0 są surowo zabronione, ale wiele głosów jeszcze bardziej ogranicza minimalne i maksymalne szybkości. Na przykład określony głos może nie mówić szybciej niż 3 razy normalnie, nawet jeśli podasz wartość większą niż 3,0.
-
requiredEventTypes
string[] opcjonalny
Rodzaje zdarzeń TTS, które musi obsługiwać głos.
-
voiceName
ciąg znaków opcjonalny
Nazwa głosu, który ma zostać użyty do syntezy. Jeśli to pole jest puste, używany jest dowolny dostępny głos.
-
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.
-
onEvent
void opcjonalny
Funkcja jest wywoływana ze zdarzeniami, które wystąpią w procesie wypowiadania wypowiedzi.
Funkcja
onEvent
wygląda tak:(event: TtsEvent) => {...}
-
event
Zdarzenie aktualizacji z mechanizmu zamiany tekstu na mowę wskazujące stan tej wypowiedzi.
-
TtsVoice
Opis głosu dostępnego do syntezy mowy.
Właściwości
-
eventTypes
EventType[] opcjonalny
Wszystkie typy zdarzeń wywołania zwrotnego, które ten głos może wysyłać.
-
extensionId
ciąg znaków opcjonalny
Identyfikator rozszerzenia udostępniającego ten głos.
-
gender
VoiceGender opcjonalnie
Wycofane od Chrome 70Płeć została wycofana i będzie ignorowana.
Płeć osoby, która ma głos.
-
lang
ciąg znaków opcjonalny
Język obsługiwany przez ten głos w postaci język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
pilot
wartość logiczna opcjonalna
Jeśli ma wartość prawda, mechanizm syntezy jest zasobem sieci zdalnej. Opóźnienie może być większe i wiązać się z kosztami za przepustowość.
-
voiceName
ciąg znaków opcjonalny
Nazwa głosu.
VoiceGender
Płeć została wycofana i ignorowana.
Typ wyliczeniowy
Metody
getVoices()
chrome.tts.getVoices(
callback?: function,
)
Pobiera tablicę wszystkich dostępnych głosów.
Parametry
-
wywołanie zwrotne
funkcja opcjonalnie
Parametr
callback
wygląda tak:(voices: TtsVoice[]) => void
-
Głosy
TtsVoice[]
Tablica obiektów
tts.TtsVoice
reprezentujących głosy dostępne do syntezy mowy.
-
Zwroty
-
Promise<TtsVoice[]>
Chrome 101 i nowsze wersjeObietnice są obsługiwane w platformie Manifest V3 i nowszych, ale wywołania zwrotne są dostępne na potrzeby zgodności wstecznej. Nie można użyć obu w tym samym wywołaniu funkcji. Obietnica znika z tym samym typem, który jest przekazywany do wywołania zwrotnego.
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
Sprawdza, czy silnik aktualnie mówi. W systemie macOS X wynik jest prawdziwy zawsze wtedy, gdy mówi systemowy mechanizm syntezy mowy, nawet jeśli mowa nie została zainicjowana przez Chrome.
Parametry
-
wywołanie zwrotne
funkcja opcjonalnie
Parametr
callback
wygląda tak:(speaking: boolean) => void
-
mówienie
boolean
Ma wartość „prawda” w przypadku wypowiedzi, a fałsz w przeciwnym razie.
-
Zwroty
-
Promise<boolean>
Chrome 101 i nowsze wersjeObietnice są obsługiwane w platformie Manifest V3 i nowszych, ale wywołania zwrotne są dostępne na potrzeby zgodności wstecznej. Nie można użyć obu w tym samym wywołaniu funkcji. Obietnica znika z tym samym typem, który jest przekazywany do wywołania zwrotnego.
pause()
chrome.tts.pause()
Wstrzymywanie syntezy mowy, potencjalnie w trakcie wypowiedzi. Połączenie w celu wznowienia lub zatrzymania spowoduje wznowienie wypowiedzi.
resume()
chrome.tts.resume()
Jeśli mówienie zostało wstrzymane, wznawiane jest od miejsca, w którym zostało przerwane.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
Odczytuje tekst przy użyciu mechanizmu zamiany tekstu na mowę.
Parametry
-
wypowiedź
string,
Odczytany tekst, zwykły tekst lub pełny, poprawnie sformułowany dokument SSML. Mechanizmy syntezy mowy, które nie obsługują SSML, usuwają tagi i odczytują tekst. Maksymalna długość tekstu to 32 768 znaków.
-
Opcje
Opcjonalnie TtsOptions
Opcje mowy.
-
wywołanie zwrotne
funkcja opcjonalnie
Parametr
callback
wygląda tak:() => void
Zwroty
-
Promise<void>
Chrome 101 i nowsze wersjeObietnice są obsługiwane w platformie Manifest V3 i nowszych, ale wywołania zwrotne są dostępne na potrzeby zgodności wstecznej. Nie można użyć obu w tym samym wywołaniu funkcji. Obietnica znika z tym samym typem, który jest przekazywany do wywołania zwrotnego.
stop()
chrome.tts.stop()
Zatrzymuje bieżącą mowę i opróżnia kolejkę wszelkich oczekujących wypowiedzi. Ponadto, jeśli mowa była wstrzymana, zostanie ona wznowiona dla następnego połączenia.
Wydarzenia
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Wywoływane, gdy zmieni się lista elementów tts.TtsVoice
, które mają być zwracane przez getVoices.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:() => void