Opis
Użyj interfejsu chrome.tts
API, aby odtwarzać zsyntetyzowany tekst zamieniony na mowę (TTS). Zobacz też powiązany interfejs ttsEngine
API, który umożliwia rozszerzeniu wdrożenie silnika mowy.
Chrome udostępnia tę funkcję w systemach Windows (przy użyciu SAPI 5), macOS X i ChromeOS, korzystając z funkcji syntezy mowy zapewnianych przez system operacyjny. Na wszystkich platformach użytkownik może instalować rozszerzenia, które rejestrują się jako alternatywne silniki mowy.
Uprawnienia
tts
Pojęcia i zastosowanie
Generuj mowę
Zadzwoń pod numer speak()
z rozszerzenia, aby porozmawiać. Na przykład:
chrome.tts.speak('Hello, world.');
Aby natychmiast zatrzymać odczytywanie, zadzwoń pod numer stop()
:
chrome.tts.stop();
Możesz podać opcje, które kontrolują różne właściwości mowy, takie jak szybkość, wysokość głosu i inne. Na przykład:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Warto też określić język, aby wybrać syntezator obsługujący ten język (i dialekt regionalny, jeśli ma to zastosowanie).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Domyślnie każde wywołanie funkcji speak()
przerywa bieżące odczytywanie i natychmiast rozpoczyna odczytywanie. Aby sprawdzić, czy połączenie nie będzie przeszkadzać, możesz zadzwonić pod numer isSpeaking()
. Możesz też użyć opcji enqueue
, aby dodać tę wypowiedź do kolejki wypowiedzi, które zostaną odtworzone 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 silniki mowy obsługują wszystkie opcje.
Aby wykrywać błędy i mieć pewność, że wywołujesz funkcję speak()
prawidłowo, przekaż funkcję wywołania zwrotnego, która nie przyjmuje argumentów. W funkcji zwrotnej sprawdź, czy nie wystąpiły żadne błędy runtime.lastError
.
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
Wywołanie zwrotne jest zwracane od razu, zanim mechanizm zacznie generować mowę. Funkcja zwrotna ma na celu powiadamianie o błędach składni w użyciu interfejsu TTS API, a nie wykrywanie wszystkich możliwych błędów, które mogą wystąpić w procesie syntezy i generowania mowy. Aby wykrywać również te błędy, musisz użyć modułu nasłuchiwania zdarzeń opisanego w następnej sekcji.
Nasłuchiwanie zdarzeń
Aby uzyskać więcej informacji w czasie rzeczywistym o stanie syntezowanej mowy, przekaż detektor zdarzeń w opcjach do speak()
, tak jak w tym przykładzie:
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 zawiera typ zdarzenia, indeks znaku bieżącej mowy względem wypowiedzi oraz w przypadku zdarzeń związanych z błędami opcjonalny komunikat o błędzie. Typy zdarzeń:
'start'
: silnik zaczął wypowiadać zdanie.'word'
: osiągnięto granicę słowa. Użyjevent.charIndex
, aby określić bieżącą pozycję mowy.'sentence'
: osiągnięto koniec 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ł odczytywanie wypowiedzi.'interrupted'
: ta wypowiedź została przerwana przez inne wywołaniespeak()
lubstop()
i nie została dokończona.'cancelled'
: wypowiedź została umieszczona w kolejce, ale potem anulowana przez inne wywołaniespeak()
lubstop()
i nigdy nie została odtworzona.'error'
: wystąpił błąd specyficzny dla wyszukiwarki i nie można wypowiedzieć tego wyrażenia. Więcej informacji znajdziesz wevent.errorMessage
.
4 rodzaje zdarzeń – 'end'
, 'interrupted'
, 'cancelled'
i 'error'
– są ostateczne. Po otrzymaniu jednego z tych zdarzeń wypowiedź nie będzie już odtwarzana i nie będą odbierane żadne nowe zdarzenia z tej wypowiedzi.
Niektóre głosy mogą nie obsługiwać wszystkich typów zdarzeń, a niektóre mogą nie wysyłać żadnych zdarzeń. Jeśli nie chcesz używać głosu, chyba że wysyła on określone zdarzenia, przekaż wymagane zdarzenia w elemencie requiredEventTypes
obiektu opcji lub użyj funkcji getVoices()
, aby wybrać głos spełniający Twoje wymagania. Oba te przypadki opisujemy poniżej.
Znaczniki SSML
Wypowiedzi używane w tym interfejsie API mogą zawierać znaczniki w języku znaczników syntezy mowy (SSML). Jeśli używasz SSML, pierwszym argumentem funkcji speak()
powinien być kompletny dokument SSML z nagłówkiem XML i tagiem najwyższego poziomu <speak>
, a nie fragment 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 silniki mowy obsługują wszystkie tagi SSML, a niektóre mogą w ogóle nie obsługiwać SSML, ale wszystkie silniki muszą ignorować nieobsługiwane tagi SSML i nadal odczytywać tekst bazowy.
Wybierz głos
Domyślnie Chrome wybiera najbardziej odpowiedni głos dla każdego wypowiadanego tekstu na podstawie języka. W większości systemów Windows, Mac OS X i ChromeOS synteza mowy zapewniana przez system operacyjny powinna umożliwiać odczytywanie dowolnego tekstu w co najmniej jednym języku. Niektórzy użytkownicy mogą mieć dostęp do różnych głosów z systemu operacyjnego i silników mowy zaimplementowanych przez inne rozszerzenia Chrome. W takich przypadkach możesz wdrożyć kod niestandardowy, aby wybrać odpowiedni głos lub wyświetlić użytkownikowi listę opcji.
Aby uzyskać listę wszystkich głosów, wywołaj funkcję getVoices()
i przekaż jej funkcję, która jako argument otrzymuje 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”
„word”
„sentence”
„marker”
„interrupted”
„cancelled”
„error”
„pause”
„resume”
TtsEvent
Zdarzenie z silnika TTS, które informuje o stanie wypowiedzi.
Właściwości
-
charIndex
number opcjonalny
Indeks bieżącego znaku w wypowiedzi. W przypadku zdarzeń dotyczących słów zdarzenie jest wywoływane na końcu jednego słowa i przed rozpoczęciem następnego. Znak
charIndex
oznacza punkt w tekście na początku następnego słowa, które ma zostać wypowiedziane. -
errorMessage
string opcjonalny
Opis błędu, jeśli typ zdarzenia to
error
. -
długość
number opcjonalny
Chrome 74 lub nowszaDł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 nie zostanie ustawiony przez silnik mowy, będzie miał wartość -1. -
typ
Typ może być
start
, gdy tylko rozpocznie się mowa,word
, gdy zostanie osiągnięta granica słowa,sentence
, gdy zostanie osiągnięta granica zdania,marker
, gdy zostanie osiągnięty element znacznika SSML,end
, gdy zostanie osiągnięty koniec wypowiedzi,interrupted
, gdy wypowiedź zostanie zatrzymana lub przerwana przed osiągnięciem końca,cancelled
, gdy zostanie usunięta z kolejki przed syntezą, luberror
, gdy wystąpi jakikolwiek inny błąd. Podczas wstrzymywania mowy wywoływane jest zdarzeniepause
, jeśli dana wypowiedź zostanie wstrzymana w połowie, oraz zdarzenieresume
, jeśli wypowiedź zostanie wznowiona. Pamiętaj, że zdarzenia wstrzymania i wznowienia mogą nie być wywoływane, jeśli mowa zostanie wstrzymana między wypowiedziami.
TtsOptions
Opcje mowy dla mechanizmu zamiany tekstu na mowę.
Właściwości
-
desiredEventTypes
string[] opcjonalne
Typy zdarzeń TTS, których chcesz słuchać. Jeśli go brakuje, można wysyłać wszystkie typy zdarzeń.
-
dodawać do kolejki,
wartość logiczna opcjonalna
Jeśli wartość to prawda, wypowiedź zostanie dodana do kolejki, jeśli synteza mowy jest już w toku. Jeśli wartość to „false” (domyślnie), przerywa bieżącą mowę i czyści kolejkę mowy przed wypowiedzeniem nowego zdania.
-
extensionId
string opcjonalny
Identyfikator rozszerzenia silnika mowy, który ma być używany, jeśli jest znany.
-
płeć
VoiceGender opcjonalny
Wycofane w Chrome 77Pole „Płeć” zostało wycofane i będzie ignorowane.
Płeć głosu syntezatora mowy.
-
lang
string opcjonalny
Język, który ma być używany do syntezy, w formacie język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
rzut
number opcjonalny
Wysokość głosu w zakresie od 0 do 2 włącznie, gdzie 0 to najniższa, a 2 – najwyższa wysokość głosu. Wartość 1,0 odpowiada domyślnej wysokości głosu.
-
szybkość reakcji
number opcjonalny
Tempo mówienia w porównaniu z domyślnym tempem dla tego głosu. Domyślna szybkość to 1,0, co zwykle oznacza około 180–220 słów na minutę. 2,0 to dwukrotnie większa szybkość, a 0,5 to dwukrotnie mniejsza szybkość. Wartości poniżej 0,1 lub powyżej 10,0 są niedozwolone, ale wiele głosów będzie dodatkowo ograniczać minimalne i maksymalne tempo. Na przykład dany głos może nie mówić szybciej niż 3 razy szybciej niż normalnie, nawet jeśli podasz wartość większą niż 3,0.
-
requiredEventTypes
string[] opcjonalne
Typy zdarzeń TTS, które musi obsługiwać głos.
-
voiceName
string opcjonalny
Nazwa głosu używanego na potrzeby syntezy. Jeśli to pole jest puste, używany jest dowolny dostępny głos.
-
głośność
number opcjonalny
Głośność mowy w zakresie od 0 do 1 włącznie, gdzie 0 to najniższa głośność, a 1 to najwyższa głośność.Wartość domyślna to 1,0.
-
onEvent
void optional
Ta funkcja jest wywoływana w przypadku zdarzeń, które występują podczas wypowiadania komunikatu.
Funkcja
onEvent
wygląda tak:(event: TtsEvent) => {...}
-
event
Wydarzenie aktualizacji z silnika 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
string opcjonalny
Identyfikator rozszerzenia, które udostępnia ten głos.
-
płeć
VoiceGender opcjonalny
Wycofane w Chrome 70Pole „Płeć” zostało wycofane i będzie ignorowane.
Płeć tego głosu.
-
lang
string opcjonalny
Język obsługiwany przez ten głos w formacie język-region. Przykłady: „en”, „en-US”, „en-GB”, „zh-CN”.
-
pilot
wartość logiczna opcjonalna
Jeśli ma wartość Prawda, silnik syntezy jest zdalnym zasobem sieciowym. Może to powodować większe opóźnienia i generować koszty związane z przepustowością.
-
voiceName
string opcjonalny
Nazwa głosu.
VoiceGender
Atrybut płeć został wycofany i jest ignorowany.
Typ wyliczeniowy
„male”
„female”
Metody
getVoices()
chrome.tts.getVoices(): Promise<TtsVoice[]>
Pobiera tablicę wszystkich dostępnych głosów.
Zwroty
-
Promise<TtsVoice[]>
Chrome 101 lub nowsza
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
Sprawdza, czy silnik aktualnie mówi. W systemie Mac OS X wynik jest prawdziwy, gdy silnik mowy systemu odtwarza mowę, nawet jeśli nie została ona zainicjowana przez Chrome.
Zwroty
-
Promise<boolean>
Chrome 101 lub nowsza
pause()
chrome.tts.pause(): void
Wstrzymuje syntezę mowy, potencjalnie w trakcie wypowiedzi. Połączenie w celu wznowienia lub zatrzymania spowoduje wznowienie wypowiedzi.
resume()
chrome.tts.resume(): void
Jeśli mowa została wstrzymana, wznowi mówienie od miejsca, w którym została przerwana.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
odczytuje tekst za pomocą mechanizmu zamiany tekstu na mowę;
Parametry
-
wypowiedź
ciąg znaków
Tekst do odczytania, zwykły tekst lub kompletny, prawidłowo sformułowany dokument SSML. Mechanizmy mowy, które nie obsługują SSML, usuną tagi i odczytają tekst. Maksymalna długość tekstu to 32 768 znaków.
-
Opcje
TtsOptions opcjonalne
Opcje mowy.
Zwroty
-
Promise<void>
Chrome 101 lub nowsza
stop()
chrome.tts.stop(): void
Zatrzymuje odczytywanie i czyści kolejkę oczekujących wypowiedzi. Jeśli mowa została wstrzymana, zostanie wznowiona przy następnym wywołaniu funkcji mówienia.
Wydarzenia
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Wywoływana, gdy zmieni się lista obiektów tts.TtsVoice
, które zostaną zwrócone przez getVoices.
Parametry
-
callback
funkcja
Parametr
callback
wygląda tak:() => void