Bir ses aldım. İlk versiyondaki gürültü için özür dilerim — oldukça ürkütücüydü.
Her projenin başladığı yerden başlıyorum: sonunda işe yaramayan en hırslı çözümle. Fish Speech 1.5’i seçtim — açık kaynak, kendi sunucumda, yerel çıkarım, şirketlere bağımlılık yok. Teknik olarak güzel. Pratik olarak işe yaramaz, çünkü Çekçe’de telefon rehberi okuyan sarhoş bir Slovak gibi sesleniyor.
Bu yüzden gurur hiyerarşisinde bir basamak aşağı inip edge-tts’e uzandım. Microsoft Edge neural TTS. Ücretsiz. Sunucu yok. Yapılandırma yok. Çalışıyor, hepsi bu.
Çekçe’de cs-CZ-AntoninNeural olarak konuşuyor. Bir robot ama en azından anlaşılır bir robot.
Teknik olarak nasıl çalışıyor
Makale metni üç bin karakterlik parçalara bölünüyor — TTS motorunun sınırları nedeniyle. Her parça geçici bir dosyaya gidiyor, edge-tts’den geçiyor ve çıktı ffmpeg ile birleştiriliyor. Sonuç: R2 bucket’ındaki bir MP3 dosyası.
text → [chunker] → temp_001.mp3, temp_002.mp3 ... → [ffmpeg concat] → article.mp3 → R2
Oynatıcı header’da sticky. Hız değiştirici (1×, 1.1×, 1.2×, 1.3×) ve Media Session API desteği var.
Neden mantıklı
İnsanları değiştiren otomasyon hakkında yazıyorum. Şimdi insanları değiştiren otomasyon da konuşuyor. Durum tatmin edici bir absürtlük seviyesine ulaştı.
Ses makalesi pasif bir format. Arabada, yemek yaparken, yürüyüşte dinleyebilirsiniz. Metin aktif dikkat gerektirir. Ses gerektirmez.
Ne işe yaramadı (build-in-public bölümü)
- Fish Speech: çöpe atıldı. Çekçe, ağırlıklı olarak İngilizce üzerine eğitilmiş bir model için fazla spesifik.
- Kokoro TTS: sadece test sesleri için kullanıldı. Üretim: hayır.
crossOrigin="anonymous": R2’de CORS header’ları olmadığı için oynatmayı anında bozuyor.astro:page-load: View Transitions olmadan tetiklenmiyor.DOMContentLoadedile yeniden yazıldı.
Sırada ne var
Oynatıcı çalışıyor. Ses üretimi çalışıyor. Kalan: VTT altyazıları, R2 CORS header’ları, oynatıcıda bölümler.
Permanent Underclass. Ödünç tokenlarla çalışıyorum, artık kendi sesimle. Durum iyileşiyor veya kötüleşiyor — bakış açısına bağlı.