Google Text to Speech API

Bu yazımda Google Text to Speech kullanarak Delphi ile yazıları ses dosyalarına dönüştürmeyi ve bu ses dosyalarını delphi içersinden çalıştırmayı göstereceğim. Bunun için öncelikle geliştirmiş olduğum uGTTS.pas kütüphanesine ihtiyacımız olacak. Kütüphaneyi geliştirirken içersinde dökümantasyonu bolca kullanmaya çalıştım. Methodların üzerine gelerek ne işe yaradıklarını ve dikkat edilmesi gereken hususları görebilirsiniz.

Bu kütüphane kullanımı internet bağlantısı gerektirir. Ön bellekleme mekanizması ile daha önce çağrılmış olan yazıları tekrar google servislerine göndermez. İsterseniz bu özelliği devre dışı bırakabilirsiniz.

Şimdi kullanım ile ilgili küçük bir örnek yazalım projenize uGTTS.pas kütüphanesini ekleyin.Yeni bir form açın ve üzerine yeni bir button ekleyin. Örnekte ki gibi sınıfı create edip SpeechNow ile direk yazıyı okutabilir yada TextToSpeech methodu ile mp3 dosyası olarak dosya yolunu alıp dilediğiniz gibi kullanabilirsiniz.

20.06.2014 de Sınıfta yaptığım bir değişlikle SpeechNow methoduna overload versiyon ekledim. Artık MediaPlayer’ı parametre olarak vermeden de sesleri çalabilirsiniz.

Delphi Compress Stream

Bu yazım da ZLib kütüphanesini kullanarak TStream sınıfından türetilmiş olan çeşitli stream sınıflarında ki verileri sıkıştırmayı ve sıkıştırılmış olan verileri tekrar eski hallerine getirmeyi anlatacağım.

Sıkıştırma işlemi bize ne gibi bir fayda sağlayacak? Derseniz, bir kaç madde ile aklıma gelen ilk faydalarını belirteyim.

  • Veritabanına kayıt edilecek bir dosya sıkıştırıldıktan sonra veritabanın da daha az yer tutacaktır.
  • Veritabanına kayıt etme hızı artacak ,kayıt işlemi sırasında daha az bekleme olacaktır.
  • Veritabanından kayda erişim, kaydı okuma hızı artacaktır.
  • Disk üzerinde tutulacak ise gene alandan kazanım sağlanacaktır.
  • Veri uzak noktalara iletilecek ise transfer hızında artış olacaktır. Kısa sürede büyük verilerin iletimi sağlanacaktır.
Kısacası veri iletişimi ve depolama maliyetleri azalacaktır.
Aşağıda yazdığım methodlar ile stream içeriğinin nasıl sıkıştırılacağını, sıkıştırılan verinin nasıl tekrar eski haline getirileceğini görebilirsiniz.
Veri sıkıştırma (TCompressionStream);

Veri çözümleme (TDecompressionStream);

Sıkıştırma seviyeleri (TCompressionLevel)

  • clNone = sıkıştırma yapılmaz (en hızlı işlem süresi)
  • clFastest = minimum sıkıştırma (hızlı işlem süresi)
  • clDefault = normal sıkıştırma (yavaş işlem süresi)
  • clMax = en iyi sıkıştırma (çok yavaş işlem süresi)

Delphi Stream İşlemleri

Bu yazıda delphi ile TStream abstract sınıfından türetilen çeşitli Stream sınıfları ile fazla kod yazmadan yapabileceğimiz pratik işlemlerden bahsedeceğim.

Öncelikle stream nedir? Sorusunu cevaplayalım. Stream türkçe terim karşılığı akım demektir. Programcılıkta akım verilerin bit düzeyinde bir yerden başka bir yere hızlı bir şekilde aktarılması, iletilmesi anlamında kullanılır. Bu yerlerden kasıt genellikle Disk üzerinden Belleğe yada Bellek üzerinden Diske aktarım şeklinde olabilir. Örneğin bir text dosyası üzerinde arama işlemi yapılacaksa bu dosyayı stream yardımı ile ilk önce belleğe aktarır, daha sonra arama algoritmalarını bellek üzerinde ki veriye uygularız. Eğer dosya aşırı büyük bir boyuta sahip değilse, uyguladığımız yöntem bize ciddi anlamda performans kazanımı sağlayacaktır.

Eee yazmaya başlayalım artık…

Yukarıdaki fonksiyon 1.parametre ile verilen dosyayı LoadFromFile methodu ile Stream içersine aktarır. 2.parametre ile verilen metini stream içinde arar. Bulunan metinleri 3.parametrediki metin ile değiştirir. İşlem bittikten sonra yeni oluşan stringi WriteString methodu ile stream içersine yazar. SaveToFile methodu ile de yeni çıktıyı mevcut dosya üzerine kayıt eder. Test case i aşağıdaki gibidir.

SaveToFile methodu TCustomMemoryStream den, LoadFromFile methodu ise TMemoryStream den türetilmiş olan tüm Stream sınıfların da mevcuttur. FileStream sınıfı dosyalarla doğrudan ilgili olduğu için bu sınıf içersinde LoadFromFile ve SaveToFile methodlarını aramak mantıksızdır. Çünkü FileStream constructor ı yardımı ile doğrudan dosyalar üzerinde çalıştığı için bu metholara gerek görülmemiştir.

Şu noktayada dikkat edilmesini istiyorum, Yukarıda 16 satırda yaptığımız işlemi başka dillerde yapmaya kalkıştığımızda ciddi anlamda işkenceye dönüşüyor. Dosyadan okumak için buffer lar tanımlanır, looplar açılır byte byte yada satır satır okuma işlemleri yapılır. Tekrar kayıt etmek için gene aynı işlemler tekrarlanır. VCL’in bunları bize hazır olarak sunması bence mükemmel bir özellik 🙂

Delphide dosyalama işlemlerinden ziyade Stream kopyalama ve Stream dönüştürme işlemleride cok basit şekillerde yapılır.

Bir stream içeriğini başka bir stream e kopyalamak için sadece 2 satır yeterli 🙂

Bir çok sınıfta SaveToStream, LoadFromStream methodlarıda bulunmaktadır. Örneğin bir bitmap nesnesini Stream içersine aktarmak için sadece tek satır kod yazmak yeterli;

Yada bir Stream içeriğini TRichEdit yada TMemo içersine aktarmak için 2 satır kod yeterli;

Kısacası delphi diyorum ve aşağıdaki sınıflarıda incelemenizi öneriyorum.

VCL de bulunan Abstract Stream Sınıfları;

VCL de bulunan doğrudan kullanılabilir Stream Sınıfları;