Powershell ile metni sese dönüştürebiliriz. Varsayılan olarak Tükrçe sesler seçilemiyor ama galiba bir çözümünü buldum.
Normalde şöyle yapılıyor. Önce bir SAPI.SPVoice nesnesi oluşturuluyor.
$SObj = New-Object -ComObject SAPI.SPVoice
Sonra "konuş" demek yeterli.
$SObj.Speak("Hello World")
Ama Türkçe yerelleştirmeli bir Windows 11 Professional'da bile Türkçe ses yok. Sesleri listelemek için
$SObj.GetVoices() | ForEach-Object { $_.GetDescription() }
komutu gerek. Ama benim bilgisayarımda burada sadece Zira (English) görünüyor. Buna rağmen
Ayarlar > Zaman ve dil > Dil ve bölge
altında "Dil" bölümünde Türkçe, metin okumak için listeleniyor. Ayrıca
Ayarlar > Erişilebilirlik > Ekran okuyucusu > Ekran okuyucusunun sesi > Ses seçin
bölümünde Tolga sesi de görünüyor ve seçili.
Biraz registry'yi inceleyince
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens
altında Tolga sesini buldum. Bunu kullanmak için
$ses_adi = "MSTTS_V110_trTR_Tolga"
$reg_yolu = "HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\$ses_adi"
reg copy $reg_yolu "HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens\$ses_adi" /s /f
reg copy $reg_yolu "HKLM\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\$ses_adi" /s /f
kullanarak kullanılabilir Tolga token bilgisini ilgili yerlere kopyaladım. Bunun sonucunda
$SObj.GetVoices() | ForEach-Object { $_.GetDescription() }
kullanarak Tolga (Türkçe) sesini listeleyebildim. Ses seçimi yaparak bir konuşma yapan fonksiyon oluşturdum.
function Out-Speak {
param(
[string]$text="Merhaba Dünyalı"
)
$SObj = New-Object -ComObject SAPI.SPVoice
$SObj.voice = $SObj.GetVoices() | where {$_.GetDescription() -match "Tolga"}
$SObj.Speak($text)
}
Hiç yorum yok:
Yorum Gönder