Gereksinimler ve Ön Hazırlık
Web Speech API, modern tarayıcıların (Chrome, Firefox, Edge, Safari) çoğunda yerleşik olarak bulunur. Herhangi bir kurulum yapmanıza gerek yoktur; sadece bir metin editörü ve tarayıcı yeterlidir. Ancak, tarayıcıların güvenlik politikaları gereği, seslendirme işlemlerinin kullanıcının bir etkileşimi (buton tıklaması gibi) sonucu tetiklenmesi gerektiğini unutmamalısınız.
- Modern bir web tarayıcısı (Chrome veya Edge önerilir).
- Temel HTML ve JavaScript bilgisi.
- Canlı önizleme için yerel bir sunucu (VS Code Live Server eklentisi gibi).
Web Speech API Temelleri ve SpeechSynthesis Arayüzü
JavaScript içerisindeki window.speechSynthesis nesnesi, metinden sese dönüştürme işlemlerini yöneten ana arayüzdür. Bu arayüz, tarayıcının ses motoruna erişim sağlar ve seslendirme kuyruğunu yönetir. İlk adım olarak, tarayıcının bu özelliği destekleyip desteklemediğini kontrol etmelisiniz.
// Tarayıcı desteğini kontrol etme
if ('speechSynthesis' in window) {
console.log("Tarayıcınız seslendirme özelliğini destekliyor.");
} else {
alert("Üzgünüm, tarayıcınız bu özelliği desteklemiyor.");
}
Bu kod bloğu, uygulamanızın çalışacağı ortamın uygunluğunu doğrular. Desteklenmeyen durumlarda kullanıcıya bildirim vermek, uygulamanızın hata payını düşürür.
Sayfa İçi Metinleri Yakalama ve Seslendirme
Web sayfasındaki belirli bir HTML elementinin içeriğini okumak için textContent özelliğini kullanırız. Kullanıcı bir butona tıkladığında, ilgili elementin metnini alıp SpeechSynthesisUtterance nesnesine aktaracağız.
const seslendirmeMotoru = window.speechSynthesis;
function metniSeslendir(metin) {
const ifade = new SpeechSynthesisUtterance(metin);
ifade.lang = 'tr-TR'; // Türkçe dil ayarı
seslendirmeMotoru.speak(ifade);
}
// Kullanım örneği
const icerik = document.querySelector('#icerik-alani').textContent;
metniSeslendir(icerik);
Burada SpeechSynthesisUtterance, seslendirilecek metni ve ayarları tutan bir objedir. lang parametresini 'tr-TR' olarak ayarlamak, doğru telaffuz için kritiktir.
Seslendirme Kontrolleri: Duraklatma, Devam Ettirme ve İptal
Kullanıcıya seslendirme üzerinde kontrol vermek, profesyonel bir aracın olmazsa olmazıdır. speechSynthesis nesnesi, seslendirmeyi yönetmek için pause(), resume() ve cancel() gibi metotlara sahiptir.
// Seslendirmeyi duraklatma
function seslendirmeyiDuraklat() {
if (seslendirmeMotoru.speaking) {
seslendirmeMotoru.pause();
}
}
// Seslendirmeyi durdurma
function seslendirmeyiDurdur() {
seslendirmeMotoru.cancel();
}
Bu fonksiyonlar, kullanıcı arayüzündeki "Durdur" veya "Devam Et" butonlarına bağlanarak etkileşimli bir deneyim sunar.
Ses Seçimi ve Parametre Ayarları
Her tarayıcı, işletim sisteminde yüklü olan farklı sesleri (ses tonu, cinsiyet) sunar. Kullanıcıya bu sesler arasından seçim yaptırmak, aracınızı daha kişiselleştirilebilir kılar.
let sesler = [];
function sesleriYukle() {
sesler = seslendirmeMotoru.getVoices();
// Sesleri bir seçici kutusuna (select) ekleyebilirsiniz
}
// Sesler yüklendiğinde tetiklenir
speechSynthesis.onvoiceschanged = sesleriYukle;
onvoiceschanged olayı, tarayıcının sesleri yüklemesi biraz zaman alabileceği için asenkron olarak çalışır. Ses listesini bu olay tetiklendikten sonra çekmek en sağlıklı yöntemdir.
Seslendirme Yöntemlerinin Karşılaştırılması
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Web Speech API | Ücretsiz, hızlı, tarayıcı yerleşik | Ses kalitesi işletim sistemine bağlı |
| Bulut API (Google/AWS) | Çok yüksek kalite, doğal ses | Maliyetli, ağ bağlantısı gerektirir |
Güvenlik Uyarısı: Tarayıcı tabanlı seslendirme araçlarında, kullanıcıdan gelen dinamik metinleri doğrudan
SpeechSynthesisUtteranceiçine alırken XSS (Cross-Site Scripting) saldırılarına karşı dikkatli olun. Metin içeriğini temizleyerek (sanitizing) işlemek, kötü niyetli kodların çalışmasını engeller.
Sıkça Sorulan Sorular
Web Speech API tüm tarayıcılarda çalışır mı?
Modern tarayıcıların %95'inden fazlasında desteklenmektedir. Ancak, eski Internet Explorer sürümlerinde çalışmaz.
Seslendirme hızı nasıl değiştirilir?
ifade.rate = 1.2; şeklinde SpeechSynthesisUtterance nesnesinin rate özelliğini değiştirerek hızı ayarlayabilirsiniz.
Neden seslendirme bazen başlamıyor?
Tarayıcılar, kullanıcı etkileşimi olmadan otomatik ses çalınmasına izin vermez. Seslendirmeyi mutlaka bir "click" olayı içerisinde tetikleyin.
Sesin tonunu (pitch) nasıl ayarlarım?
ifade.pitch = 1.5; özelliği ile sesin kalınlığını veya inceliğini değiştirebilirsiniz (0 ile 2 arası değerler).
Birden fazla dil desteği ekleyebilir miyim?
Evet, ifade.lang değerini 'en-US', 'de-DE' gibi değiştirerek metnin diline göre dinamik olarak ayarlayabilirsiniz.
Sorumluluk Reddi: Bu rehberdeki kodlar eğitim amaçlıdır. Üretim ortamında (production) kullanırken, seslendirme motorunun işletim sistemi kaynaklı kısıtlamalarını ve tarayıcı güncellemelerini test etmeniz önerilir. Kod güvenliği için her zaman kullanıcı girdilerini doğrulayın.
Performans Optimizasyonu ve Bellek Yönetimi
Web Speech API kullanırken, özellikle uzun metinlerin seslendirilmesi sırasında tarayıcı belleğini verimli kullanmak kritik öneme sahiptir. Seslendirme motoru, metni parçalara ayırarak işlediğinde veya çok sayıda SpeechSynthesisUtterance nesnesi oluşturulduğunda bellek sızıntıları (memory leaks) yaşanabilir. Bu durumu engellemek için nesne referanslarını yönetmeli ve gereksiz nesneleri temizlemelisiniz.
Aşağıdaki kod örneği, seslendirme bittiğinde veya iptal edildiğinde nesne referansını temizleyerek tarayıcıyı rahatlatmanızı sağlar:
let currentUtterance = null;
function speakText(text) {
// Önceki nesneyi temizle
if (currentUtterance) {
window.speechSynthesis.cancel();
}
currentUtterance = new SpeechSynthesisUtterance(text);
currentUtterance.onend = () => {
console.log("Seslendirme tamamlandı.");
currentUtterance = null; // Belleği serbest bırak
};
currentUtterance.onerror = (event) => {
console.error("Seslendirme hatası:", event.error);
currentUtterance = null;
};
window.speechSynthesis.speak(currentUtterance);
}
İleri Seviye Hata Ayıklama ve Tarayıcı Kısıtlamaları
Seslendirme aracınızın farklı tarayıcılarda tutarlı çalışmasını sağlamak için "hata yönetimi" stratejileri geliştirmelisiniz. Bazı tarayıcılar, kullanıcı sayfada herhangi bir etkileşimde bulunmadan (tıklama, kaydırma vb.) seslendirme başlatılmasına izin vermez. Bu durum, speechSynthesis.speak() çağrısının sessizce başarısız olmasına neden olur.
Yaygın Hata Senaryoları ve Çözümleri
| Hata Durumu | Olası Neden | Çözüm |
|---|---|---|
NotAllowedError |
Kullanıcı etkileşimi eksikliği | Seslendirmeyi bir butonun click olayına bağlayın. |
SpeechSynthesisErrorEvent |
Dil veya ses motoru desteği yok | getVoices() metodunu kontrol ederek desteklenen sesleri listeleyin. |
| Seslendirme kesiliyor | Metin çok uzun | Metni 200-300 karakterlik parçalara bölerek sırayla seslendirin. |
Metni parçalara bölmek için aşağıdaki yardımcı fonksiyonu kullanabilirsiniz:
function splitText(text, maxLength = 200) {
const chunks = [];
while (text.length > maxLength) {
let slice = text.substring(0, maxLength);
let lastSpace = slice.lastIndexOf(' ');
let end = lastSpace > 0 ? lastSpace : maxLength;
chunks.push(text.substring(0, end));
text = text.substring(end);
}
chunks.push(text);
return chunks;
}
Bu yöntemle, uzun makaleleri veya blog yazılarını daha kararlı bir şekilde seslendirebilir, tarayıcının ses motorunu zorlamadan akıcı bir kullanıcı deneyimi sunabilirsiniz.
Sonuç
JavaScript ile tarayıcı tabanlı bir yazı seslendirme aracı geliştirmek, hem teknik becerilerinizi geliştirir hem de kullanıcılarınıza erişilebilirlik odaklı bir çözüm sunar. Web Speech API, karmaşık sunucu taraflı işlemlerle uğraşmadan, doğrudan istemci tarafında güçlü sonuçlar almanızı sağlar. Bir sonraki adım olarak, bu aracı bir tarayıcı eklentisine dönüştürmeyi veya kullanıcıların seçtiği metni seslendiren bir "Chrome Extension" geliştirmeyi deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz