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.
Uprawnienia
tts
Przegląd
Chrome zapewnia natywną obsługę mowy w systemach Windows (przy użyciu 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.
Generuję 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 tts.speak
poniżej. 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ć opisanego poniżej detektora zdarzeń.
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. Ich dokumentację znajdziesz poniżej.
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.
Wybieranie głosu
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 tylko w przypadku platformy Manifest V3 i nowszych platform. Inne platformy muszą używać wywołań zwrotnych.
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 tylko w przypadku platformy Manifest V3 i nowszych platform. Inne platformy muszą używać wywołań zwrotnych.
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 tylko w przypadku platformy Manifest V3 i nowszych platform. Inne platformy muszą używać wywołań zwrotnych.
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