Makale Özeti

SSML, metin okuma işlemlerinde kullanıcıya farklı platformlarda telaffuz, ses seviyesi, hız, cinsiyet gibi parametreleri kontrol etme imkanını sağlar. SSML ile kullanılan teknikler arasında sesli yanıt sistemleri de bulunmaktadır. Bir SSML dökümanı içindeki bileşenler, XML yapısının gereği de olduğundan çoğu zaman kolay anlaşılabilir ve kullanılabilirdirler. Bir SSML dökümanı otomatik olarak değiştirilip, oluşturulabileceği gibi, elle de düzenlenebilir.

Makale

Merhabalar,

Bu makalemde sizlerle birlikte daha önceki makalemde bahsettiğim SSML yapısını inceleyeceğiz. SSML speech synthesis uygulamalarında kullanılan XML tabanlı bir dildir. Zaten açılımı Speech Synthesis Markup Language'dir. W3C tarafından standardize edilmiştir. Bu standart Sun Systems tarafından geliştirilen JSGF ve JSML standartları temel alınarak geliştirilmiştir. SSML, metin okuma işlemlerinde kullanıcıya farklı platformlarda telaffuz, ses seviyesi, hız, cinsiyet gibi parametreleri kontrol etme imkanını sağlar. SSML ile kullanılan teknikler arasında sesli yanıt sistemleri de bulunmaktadır. Bir SSML dökümanı içindeki bileşenler, XML yapısının gereği de olduğundan çoğu zaman kolay anlaşılabilir ve kullanılabilirdirler. Bir SSML dökümanı otomatik olarak değiştirilip, oluşturulabileceği gibi, elle de düzenlenebilir. Biraz önce de bahsettiğim gibi SSML, platform bağımsız metin okuma işlemlerinin yapılmasına olanak sağlar. Okuma işlemlerini çok çeşitli şekillerde gerçekleştirebilir, okunan metnin istenilen yerlerinde vurgu, duraklama gibi işlemleri rahatça yapabilirsiniz. Aynı zamanda, makalemin ilerleyen kısımlarında da belirteceğim gibi bir SSML dökümanı içerisinde birden fazla farklı dillerde okuma işlemi gerçekleştirebilirsiniz.

Şimdi standart bir SSML dökümanının yapısının nasıl olduğunu inceleyelim. SSML de temelde bir XML dökümanıdır ve her XML dökümanı gibi SSML dökümanları da bir kullanılan XML dökümanının versiyonunu belirten bir XML ifadesi ile başlamalıdır. Ardından da opsiyonel olarak DOCTYPE tag'ı gelebilir:

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
            "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">

Bir SSML dökümanının root element'i <speak> elementidir. Dökümanda okunacak olan metin <speak> ve </speak> tag'larının arasına yerleştirilmedir. <speak> elementinde bulunması gereken attribute'lar ise version, xmlns ve xml:lang attribute'larıdır. version attribute'ının değeri "1.0" olmalıdır. xmlns attribute'ı SSML namespace'ini işaret eder ve "http://www.w3.org/2001/10/synthesis" değerini alır. xml:lang attribute'ı ise root element için metnin okunacağı dili belirtir. xml:lang attribute'ı root dışında <voice>, speak>, <p> ve <s> elementleri için de tanımlanmıştır. Böylece bir metnin farklı yerlerinde farklı dillerde okunması sağlanabilir. Bu elementlerin anlamlarını ve kullanımlarını makalenin ilerleyen kısımlarında okuyabilirsiniz. Son olarak, root'ta bulunması zorunlu olmayan ancak tavsiye edilen attribute'lardan bir tanesi xsi:schemaLocation attribute'ıdır. Bu attribute SSML şemasının lokasyonunu belirtir. Bütün anlatılanlardan sonra bu noktaya kadar örnek bir SSML dökümanı aşağıdaki gibi olabilir:

<?xml version="1.0"?>
<speak version="1.0"
        xmlns="http://www.w3.org/2001/10/synthesis"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
        http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
        xml:lang="en-US">
</speak>

Bir SSML dökümanının yapısının nasıl olması gerektiğini gördükten sonra artık SSML dökümanında kullanılabilecek element ve attribute'ları incelemeye başlayabiliriz.
1- <speak>: Biraz önce de bahsettiğim gibi SSML dökümanındaki root element speak elementidir. Biraz önce bahsetmiş olduğum version, xmlns ve xml:lang gibi attribute'ları barındırır. Bunların dışında <audio>, <break>, <emphasis>, <lexicon>, <mark>, <meta>, <metadata>, <p>, <phoneme>, <prosody>, <say-as>, <sub>, <s> ve <voice> elementleri de <speak> elementi içinde kullanılabilir. Çok basit bir örnekte <speak> elementini kullarak ilk metnimizi okutalım:

<?xml version="1.0"?>
<speak version="1.0"
        xmlns="http://www.w3.org/2001/10/synthesis"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
        http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
        xml:lang="en-US">
        Hello World
</speak>

2- xml:lang: Biraz önce de bahsettiğim gibi xml:lang attribute'ı metnin hangi dilde okunmasını istiyorsak o dilde okunmasını sağlar. Bir metnin tamamına tek bir xml:lang attribute'ı tanımlanabileceği gibi, metnin farklı kısımlarına farklı xml:lang attribute'ları tanımlanarak farklı dilde yazılmış metinlerin ilgili dillerde okunmasını sağlayabilirsiniz. xml:lang'ın örnek bir kullanımı aşağıdaki gibidir:

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
xml:lang="fr">
<p xml:lang="fr">Je veux manger de la glace.</p>
<p xml:lang="en-US">means I want to eat ice cream in English</p>
</speak>

3- <lexicon>: Okunacak olan metnin telaffuz bilgilerinin tutulduğu dökümanın belirtildiği elementtir. Lexicon elementinin uri attribute'ı telaffuz bilgilerinin yolunu belirtir. type attribute'ı ise dökümanın medya tipini belirtir. lexicon elementi sadece speak elementi içinde kullanılabilir. Bir SSML dökümanında birden fazla lexicon elementi tanımlanabilir. Örnek kullanımı aşağıdaki gibidir:

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
xml:lang="fr">
<lexicon uri="http://www.lexiconexamples.com/words.file"
           type="media-type"/>
</speak>    

4- <p> ve <s> elementleri: <p> elementi paragraf, <s> elementi cümleyi belirtir. Kullanımları opsiyoneldir. <p> elementi <audio>, <break>, <emphasis>, <mark>, <phoneme>, <prosody>, <say-as>, <sub>, <s>, <voice> elementlerini ve metin içerebilir. <s> elementi de biraz önceki elementlerden kendisi hariç olanları ve metin içerebilir. Örnek kullanımı aşağıdaki gibidir:

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
        http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
        xml:lang="en-US">
    <p>
        <s>This is a sentence in a paragraph.</s>
        <s>This is the second sentence.</s>
    </p>
</speak>

5- <phoneme>: Bu element okunacak olan metnin fonetik teleffuz bilgisinin tutulduğu elementtir. <phoneme> elementinin ph attribute'ı bu fonetik okunuş şeklini taşır. Bir diğer attribute olan alphabet attribute'ı ise fonetik alfabenin adını belirtir. <phoneme> elementi sadece metin içerebilir, attribute'ı yoktur.
6-
<sub>
: Bu element içinde bulunan www, w3c gibi metinlerin açılışını alias attribute'ının içine yazdığımızda, metin okunurken alias attribute'ında yazan değer okunur. Örnek bir kullanımı aşağıdaki gibidir:

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
        http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
        xml:lang="en-US">
<sub alias="Hyper Text Transfer Protocol">http</sub>
</speak>

7- <voice>: Metni okuyacak olan sesin özelliklerinin belirtildiği elementtir. xml:lang, age, variant, name attribute'larına sahiptir. xml:lang, biraz önce de bahsettiğim gibi okunacak olan metnin hangi dilde okunacağının belirlendiği attribute'dır. age attribute'ı metni okuyacak olan sesin yaşının belirlendiği attribute'dır. variant attribute'ı ise bir metni okuyan karakter dışında diğer bir opsiyon olan karakterin değişkenini belirtir. Örneğin metnin bir kısmını kız çocuk sesi okuyorsa ve başka bir kısmını farklı ikinci bir kız çocuğun okumasını istiyorsak variant attribute'ını kullanabiliriz. Son olarak name attribute'ını kullanarak bilgisayarda kayıtlı olan sesin isminden metni okutma işlemini gerçekleştirebiliriz:

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
    http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
    xml:lang="en-US">
<voice gender="female" age="9">I went to school today.</voice>
<voice gender="female" variant="2">We had an exam today.</voice>
<voice name="Michael">We will have an exam tomorrow.</voice>
</speak>

8- <emphasis>: Bu element içinde yeralan metin vurgulu okunur. level attribute'ı vardır. Bu attribute strong, moderate, none, reduced değerlerini alır. level attribute'ının varsayılan değeri moderate'dır. Bu attribute'ın değeri normal veya moderate olduğunda metin vurgulanarak okunur. none değeri, metni okuyacak olan robotun metni vurgulama ihtimalini ortadan kaldırmak istenirse kullanılır. reduced değeri ile düşük seviyede vurgulama yapılır.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
    http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
    xml:lang="en-US">
I <emphasis level="strong"> don't </emphasis> want to go to school tomorrow!
</speak>

9- <break>: <break> elementini okunan metinde duraklama yapılmasını istediğimiz yerlerde kullanabiliriz. Bu elementin iki adet attribute'ı vardır. Bunlardan birincisi strength attribute'ıdır. strength ile yapılacak duraklamanın şiddetini belirleriz. none, x-weak, weak, medium, strong ve x-strong değerlerini alır. Default değeri medium'dur. <break> elementinin diğer bir attribute'ı da time'dır. Metnin ilgili kısmında yapılacak olan duraklamanın saniye veya milisaniye cinsinden değerini belirleyebiliriz.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
    http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
    xml:lang="en-US">
Internet Explorer <break strength="weak"/> makes it easier to get the most from the World Wide Web
<break time="5s"/> whether you are searching for new information or browsing your favorite Web sites.
</speak>

10- <audio>: Metin okunurken metnin belirli yerlerinde bir ses dosyasının çalınmasını sağlar. Bunun için tek attribute'ı olan src attribute'ının değerini ses dosyasının lokasyonu ve dosyanın adı şeklinde set etmek gerekir.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
    http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
    xml:lang="en-US">
    Here is some sound.
<audio src="C:\CHIMES.WAV">
</audio>
</speak>

Bir SSML metninde kullanabileceğiniz belli başlı elementler ve bu elementlerin attribute'larından bahsettim. SSML kullanımı ve SSML metinlerini okutabileceğiniz bir örneği daha önce yazmış olduğum makalemden bulabilirsiniz.

Işıl Orhanel
http://www.isilorhanel.net