Açıklama
Bir uzantı kullanarak metin okuma(TTS) motoru uygulamak için chrome.ttsEngine API'yi kullanın. Uzantınız bu API'yi kullanarak kaydolursa herhangi bir uzantı veya Chrome uygulaması konuşma oluşturmak için tts API'sini kullandığında, konuşulacak bir ifade ve diğer parametreleri içeren etkinlikler alır. Uzantınız daha sonra konuşmayı sentezlemek ve çıkışını yapmak için mevcut web teknolojilerini kullanabilir ve durumu bildirmek için etkinlikleri çağıran işleve geri gönderebilir.
İzinler
ttsEngineKavramlar ve kullanım
Uzantılar kendilerini konuşma motoru olarak kaydedebilir. Bunu yaparak tts.speak() ve tts.stop() gibi işlevlere yapılan bazı veya tüm çağrıları yakalayabilir ve alternatif bir uygulama sağlayabilir.
Uzantılar, konuşma sağlamak için sunucudan ses akışı ve HTML5 ses gibi mevcut tüm web teknolojilerini ücretsiz olarak kullanabilir. Bir uzantı, ifadelerle farklı işlemler de yapabilir. Örneğin, pop-up pencerede altyazı görüntüleyebilir veya bunları uzak bir sunucuya günlük mesajları olarak gönderebilir.
Bir metin okuma motoru uygulamak için uzantının "ttsEngine" iznini bildirmesi ve ardından sağladığı tüm sesleri uzantı manifestinde şu şekilde bildirmesi gerekir:
{
"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
}
}
Bir uzantı, istediği sayıda ses belirtebilir.
voice_name parametresi gereklidir. Ad, sesin adını ve kullanılan motoru tanımlayacak kadar açıklayıcı olmalıdır. İki uzantının aynı adla ses kaydettiği nadir durumlarda, istemci sentezi yapacak uzantının kimliğini belirtebilir.
lang parametresi isteğe bağlıdır ancak kesinlikle önerilir. Sesler neredeyse her zaman konuşmayı yalnızca tek bir dilde sentezleyebilir. Bir motor birden fazla dili desteklediğinde her dil için ayrı bir ses kolayca kaydedilebilir. Tek bir sesin birden fazla dili destekleyebildiği nadir durumlarda, iki ayrı sesi listelemek ve bunları dahili olarak aynı mantıkla işlemek en kolay yöntemdir. Ancak, herhangi bir dildeki ifadeleri işleyecek bir ses oluşturmak istiyorsanız uzantınızın manifest dosyasından lang parametresini çıkarın.
Son olarak, motor, müşteriyi konuşma sentezinin ilerleme durumu hakkında bilgilendirmek için etkinlik gönderebiliyorsa event_types parametresi gereklidir. Konuşma bittiğinde bunu belirtmek için en azından 'end' etkinlik türünün desteklenmesi önemle tavsiye edilir. Aksi takdirde Chrome, sıraya alınmış ifadeleri planlayamaz.
Yüklendikten sonra bir uzantı, browser.ttsEngine.updateVoices işlevini çağırarak bildirilen seslerin listesini değiştirebilir. (updateVoices için yapılan programatik çağrıda kullanılan parametrelerin, voice_name kullanan manifest dosyasının aksine deve harfiyle yazıldığına dikkat edin: örneğin, voiceName.)
Gönderebileceğiniz olası etkinlik türleri, speak() yönteminin aldığı etkinlik türlerine karşılık gelir:
'start': Motor, ifadeyi okumaya başladı.'word': Kelime sınırına ulaşıldı. Mevcut konuşma konumunu belirlemek içinevent.charIndexöğesini kullanın.'sentence': Cümle sınırına ulaşıldı. Mevcut konuşma konumunu belirlemek içinevent.charIndexsimgesini kullanın.'marker': Bir SSML işaretçisine ulaşıldı. Mevcut konuşma konumunu belirlemek içinevent.charIndexöğesini kullanın.'end': Motor, ifadeyi okumayı tamamladı.'error': Motora özgü bir hata oluştu ve bu ifade okunamıyor.event.errorMessageiçinde daha fazla bilgi iletin.
'interrupted' ve 'cancelled' etkinlikleri konuşma motoru tarafından gönderilmez, Chrome tarafından otomatik olarak oluşturulur.
Metin okuma istemcileri, konuşma etkinliği dinleyicilerini aşağıda açıklandığı şekilde kaydettiyseniz tts.getVoices işlevini çağırarak uzantınızın manifest dosyasından ses bilgilerini alabilir.
Konuşma etkinliklerini işleme
Uzantınızın, müşterilerin isteği üzerine konuşma oluşturmak için hem onSpeak hem de onStop için dinleyicileri aşağıdaki gibi kaydetmesi gerekir:
const speakListener = (utterance, options, sendTtsEvent) => {
sendTtsEvent({type: 'start', charIndex: 0})
// (start speaking)
sendTtsEvent({type: 'end', charIndex: utterance.length})
};
const stopListener = () => {
// (stop all speech)
};
browser.ttsEngine.onSpeak.addListener(speakListener);
browser.ttsEngine.onStop.addListener(stopListener);
Belirli bir konuşma isteğinin bir uzantıya gönderilip gönderilmeyeceği kararı yalnızca uzantının, manifest dosyasında belirtilen ses parametrelerini destekleyip desteklemediğine ve onSpeak ile onStop için dinleyici kaydedip kaydetmediğine bağlıdır. Diğer bir deyişle, uzantıların konuşma isteği alıp bunu işleyip işlemeyeceğine dinamik olarak karar vermesi mümkün değildir.
Türler
AudioBuffer
Ses arabelleği ve ilişkili veriler içeren parametreler.
Özellikler
-
audioBuffer
ArrayBuffer
Metin okuma motorundan gelen ses arabelleği. Tam olarak audioStreamOptions.bufferSize uzunluğunda olmalı, audioStreamOptions.sampleRate hızında ve doğrusal PCM olarak (32 bit imzalı kayan nokta) yani JavaScript'teki Float32Array türünde mono olarak kodlanmalıdır.
-
charIndex
number isteğe bağlı
Bu ses arabelleğiyle ilişkili karakter dizini.
-
isLastBuffer
boolean isteğe bağlı
Bu ses arabelleği, konuşulan metnin son arabelleğiyse doğru değerini alır.
AudioStreamOptions
Bir motor tarafından üretilmesi beklenen ses akışı biçimini içerir.
Özellikler
-
bufferSize
sayı
Ses arabelleğindeki örnek sayısı.
-
sampleRate
sayı
Ses arabelleğinde beklenen örnekleme hızı.
LanguageInstallStatus
Sesin yükleme durumu.
Enum
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
Dilin yükleme durumu.
Özellikler
-
hata
dize isteğe bağlı
Yükleme hatalarıyla ilgili ayrıntılar. Dil yüklenemezse isteğe bağlı olarak doldurulur.
-
installStatus
Yükleme durumu.
-
lang
dize
Bölgenin atlanabileceği, dil kodu-bölge kodu biçiminde dil dizesi. Örnekler: en, en-AU, zh-CH.
LanguageUninstallOptions
Belirli bir dili kaldırma seçenekleri.
Özellikler
-
uninstallImmediately
boole
TTS istemcisi dilin hemen kaldırılmasını istiyorsa doğru değerini alır. Motor, bu parametreye ve istekte bulunanın bilgilerine göre dili kaldırıp kaldırmayacağına veya ne zaman kaldıracağına karar verebilir. Yanlışsa kaldırma zamanını belirlemek için son kullanım gibi başka ölçütler kullanabilir.
SpeakOptions
tts.speak() yönteminde belirtilen seçenekler.
Özellikler
-
gender
VoiceGender isteğe bağlı
Chrome 92'den beri kullanımdan kaldırıldıCinsiyet artık kullanılmıyor ve yoksayılacak.
Sentezlenmiş konuşma için sesin cinsiyeti.
-
lang
dize isteğe bağlı
Sentez için kullanılacak dil, dil-bölge biçiminde. Örnekler: "en", "en-US", "en-GB", "zh-CN".
-
şarkı önerisi
number isteğe bağlı
Konuşma perdesi 0 ile 2 arasında olmalıdır. 0 en düşük, 2 ise en yüksek perdedir. 1,0, bu sesin varsayılan perdesine karşılık gelir.
-
hız
number isteğe bağlı
Bu sesin varsayılan hızına göre konuşma hızı. Varsayılan hız 1.0'dır ve genellikle dakikada 180 ila 220 kelime arasındadır. 2,0 iki kat daha hızlı, 0,5 ise yarı yarıya daha yavaştır. Bu değerin 0,1 ile 10,0 arasında (bu değerler dahil) olduğu garanti edilir. Bir ses, bu hız aralığının tamamını desteklemiyorsa hata döndürmeyin. Bunun yerine, hızı sesin desteklediği aralığa kırpın.
-
voiceName
dize isteğe bağlı
Sentez için kullanılacak sesin adı.
-
ses düzeyi
number isteğe bağlı
Konuşma ses seviyesi 0 ile 1 arasında olmalıdır. 0 en düşük, 1 ise en yüksek seviyeyi ifade eder. Varsayılan değer 1, 0'dır.
TtsClient
Durum isteyen istemcinin tanımlayıcısı.
Özellikler
-
id
dize
İstemci, dil yönetimi isteğinde bulunuyor. Uzantılar için bu, benzersiz uzantı kimliğidir. Chrome özellikleri için bu, özelliğin kullanıcılar tarafından okunabilen adıdır.
-
kaynak
İstekte bulunanın türü.
TtsClientSource
İstekte bulunanın türü.
Enum
"chromefeature"
"extension"
VoiceGender
Cinsiyet artık kullanılmıyor ve yoksayılacak.
Enum
"male"
"female"
Yöntemler
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Bir dil yüklenmeye çalışıldığında ve bir dil kaldırıldığında motor tarafından çağrılır. Ayrıca bir istemciden gelen durum isteğine yanıt olarak da çağrılır. Bir ses yüklendiğinde veya kaldırıldığında motor, sesi kaydetmek için ttsEngine.updateVoices'ı da çağırmalıdır.
Parametreler
-
durum
Dilin yükleme durumu.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Motor tarafından ses listesini güncellemek için çağrılır. Bu liste, uzantının manifest dosyasında belirtilen tüm sesleri geçersiz kılar.
Parametreler
-
sesler
TtsVoice[]
Konuşma sentezi için kullanılabilen sesleri temsil eden
tts.TtsVoicenesneleri dizisi.
Etkinlikler
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Bir TTS istemcisi yeni bir dil yüklemek istediğinde tetiklenir. Motor, dili indirmeye ve yüklemeye çalışmalı ve sonuçla birlikte ttsEngine.updateLanguage'i çağırmalıdır. Başarılı olduğunda, motor yeni kullanılabilir sesleri kaydetmek için ttsEngine.updateVoices'i de çağırmalıdır.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:(requestor: TtsClient, lang: string) => void
-
istek sahibi
-
lang
dize
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Bir TTS istemcisi, dilin yükleme durumunu istediğinde tetiklenir.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:(requestor: TtsClient, lang: string) => void
-
istek sahibi
-
lang
dize
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
İsteğe bağlı: Bir motor, duraklatma etkinliğini destekliyorsa devam ettirme etkinliği veya durdurma etkinliği alana kadar konuşulan mevcut ifadeyi (varsa) duraklatmalıdır. Bir durdurma etkinliğinin, duraklatılmış durumu da temizlemesi gerektiğini unutmayın.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
İsteğe bağlı: Bir motor, duraklatma etkinliğini destekliyorsa mevcut ifadeyi (varsa) okumaya devam etmek için devam ettirme etkinliğini de desteklemelidir. Bir durdurma etkinliğinin, duraklatılmış durumu da temizlemesi gerektiğini unutmayın.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Kullanıcı tts.speak() işlevini aradığında ve bu uzantının manifest dosyasındaki seslerden biri seçenekler nesnesiyle ilk eşleşen olduğunda çağrılır.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
ifade
dize
-
seçenekler
-
sendTtsEvent
işlev
sendTtsEventparametresi şu şekilde görünür:(event: tts.TtsEvent) => void
-
etkinlik
Metin okuma motorundan gelen ve bu ifadenin durumunu belirten etkinlik.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Kullanıcı tts.speak() işlevini aradığında ve bu uzantının manifest dosyasındaki seslerden biri seçenekler nesnesiyle ilk eşleşen olduğunda çağrılır. Chrome, ses oynatma hizmetleri sağladığı ve tts etkinliklerinin gönderilmesini işlediği için ttsEngine.onSpeak'ten farklıdır.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
ifade
dize
-
seçenekler
-
audioStreamOptions
-
sendTtsAudio
işlev
sendTtsAudioparametresi şu şekilde görünür:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Ses arabelleği ve ilişkili verileri içeren parametreler.
-
-
sendError
işlev
Chrome 94 ve sonraki sürümlersendErrorparametresi şu şekilde görünür:(errorMessage?: string) => void
-
errorMessage
dize isteğe bağlı
Hatayı açıklayan bir dize.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
tts.stop çağrısı yapıldığında tetiklenir ve bu uzantı konuşuyor olabilir. Bir uzantı onStop çağrısı aldığında ve konuşma zaten durdurulmuşsa herhangi bir işlem yapmamalıdır (hata oluşturmamalıdır). Konuşma duraklatılmış durumdaysa bu işlem duraklatılmış durumu iptal etmelidir.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Bir TTS istemcisi, bir dilin artık gerekli olmadığını belirttiğinde tetiklenir.
Parametreler
-
callback
işlev
callbackparametresi şu şekilde görünür:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
istek sahibi
-
lang
dize
-
uninstallOptions
-