2026-10-22

SAPI.SPVoice ile Türkçe konuşan Windows

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: