webmaster
 
Cevapla
21-07-2009 00:23:29
 

Girilen Sayıyı Sesli Olarak Okuyan Program

Ses Dosyaları :
--------------------------------------------------------------------------------
Bu program, girdiğimiz bir sayıyı bize sesli olarak okuyacak. Tabiki bunun için daha önceden gerekli ses dosyalarını hazırlamanız gerekir. Sayı okutma işlemi için 7 basamak sınırımız olsun. Bu durumda aşağıdaki ses dosyalarına ihtiyacımız olacak :

bir.wav on.wav yüz.wav
iki.wav yirmi.wav bin.wav
üç.wav otuz.wav milyon.wav
dört.wav kırk.wav
beş.wav elli.wav
altı.wav altmış.wav
yedi.wav yetmiş.wav
sekiz.wav ++++en.wav
dokuz.wav doksan.wav

Tabiki herbir wav dosyası, ismindeki sayıyı saklayacak. Program içerisinde istediğimiz yerde bu dosyaları arka arkaya çağırarak sayımızı seslendireceğiz. Bu şekilde 7 basamaklı bir sayıya kadar tüm sayıları okutabiliriz.
Sayıların Parçalanması :
--------------------------------------------------------------------------------
Önemli olan şey, rakamları düzgün ve kurallı olarak parçalayabilmektir. İlkokul 1. sınıfı hatırlayalım.
1. Basamaktaki Sayı : Sıfır rakamı haricinde sayı olduğu gibi okunur.
2. Basamaktaki Sayı : Sıfır rakamı haricinde sayı "Onluk" isimleriyle çağrılır. (10-20-30..vb)
3. Basamaktaki Sayı : Sıfır rakamı zaten okunmaz. 1 rakamında sadece "Yüz" denir. Diğer rakamlarda ise Rakam + "Yüz" denir.
Örnek :
302 : Üç + Yüz + İki
257 : İki + Yüz + Elli + Yedi
4. Basamaktaki Sayı : Eğer 4. basamak sıfır ise boş bırakılamaz. 5. ve 6. basamaklara da bakılır. Eğer 5. ve 6. basamaklarda sayı varsa o sayılar okunur ve sadece "Bin" denir. Eğer 4. basamakta sayı varsa 5. ve 6. basamaklara bakmaya gerek kalmaz. Onlar zaten okunacaktır. Sadece 4. basamağa bakılır. Sayı + "Bin" denir.
Ayrıca eğer sayı 4 basamaktan büyükse ve 4.basamakta "1" varsa "Bir" + "Bin" denir. Yani "Bir" okunur. Ama sayı 4 basamaklı ise ve 4. basamak "1" ise sadece "bin" denir. Bunun haricinde Sayı + "Bin" olarak okunur.
Örnek :
1302 : Bin + Üç + Yüz + İki
6257 : Altı + Bin + İki + Yüz + Elli + Yedi
5600051 : Beş + Milyon + Altı + Yüz + Bin + Elli + Bir (5. ve 6. basamaklar burada önemli)
5000051 : Beş + Milyon + Elli + Bir (4 boş olduğundan 5 ve 6 ya bakılır. Onlar da boş olduğunda "bin" denmez.)
5. Basamaktaki Sayı : Sıfır rakamı haricinde sayı "Onluk" isimleriyle çağrılır. (10-20-30..vb)
6. Basamaktaki Sayı : Sıfır rakamı zaten okunmaz. 1 rakamında sadece "Yüz" denir. Diğer rakamlarda ise Rakam + "Yüz" denir.
7. Basamaktaki Sayı : Direkt Sayı + "Milyon" denir.
Programın Hazırlanması :
--------------------------------------------------------------------------------
Yukarıda sayıların parçalanma kurallarını gördük. Bu kurallara uygun olarak sayı basamakları tek tek incelenip karar verilecek. Ben algoritmamda sayıyı STRING olarak okuyacağım. Hiçbir şekilde INTEGER veya LONG olarak kullanmayacağım. Bunun avantajı, sayı üzerinde String işlemlerini kullanmanın kolaylığıdır. Programda kullandığım 3 adet String fonksiyonunun açıklamaları :

Mid$ : Bir String değişken içerisinden istediğiniz kısmı koparıp almanızı sağlar. Parametreleri : ( MetinDeğişken ), ( BaşlangıçNoktası ), (İlerleme Sayısı)
Örnek:
Mid$ ( "Gökhan", 3 , 2 ) = "kh"
Mid$ ( "Gökhan" , 2 , 4 ) = "ökha"



Left$ - Right$ : Bir String değişkenin Sağdan veya Soldan istediğiniz sayıda karakterini verir. Parametreleri : ( MetinDeğişken ) , (İlerleme Sayısı)
Örnek:
Left$ ( "Gökhan", 3 ) = "Gök"
Right$ ( "Gökhan" , 3 ) = "han"
Bu fonksiyonlar içiçe kullanılabilir. Mesela metnin 3. harfini elde etmek için:
Right$ ( Left$ ( "Gökhan" , 3 ) , 1 ) = "k" döner.



Len : Bir String ifadenin karakter sayısını verir.
Len ( "Gökhan" ) = 6


Şimdi programımızda kullanacağımız iki adet dizi tanımlayalım. Dizilerin içerikleriyle ses dosyalarının isimlerinin aynı olmasına özen gösterin. Çünkü, dizilerdeki bilgileri hem ekrana yazmak için hem de ses dosyalarının ismini oluşturmak için kullanacağız.

Dim Onlar As Variant
Dim Sayilar As Variant
Sayilar = Array ( "", "bir", "iki", üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz" )
Onlar = Array ( "", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "++++en", "doksan" )


İşte programın tamamı. Programda sayı, kullanıcı tarafından textbox içine yazılacak. Sayının okunuşu da bir Listbox nesnesine yazılacak. Sayının okunuşu için iki buton bulunur. Bunlardan biri sayının okunuşunu listbox listesine yazar. Diğer buton ise listede yazılı sayıyı okutmak içindir.

Sayi = Trim(Text1.Text)

For i = 1 To Len(Sayi) ' Sayıdaki Rakamlar Tek Tek Okunur

Select Case Len(Sayi) - i + 1 ' Alınan Rakamın Matematikteki Basamağına Göre Seçim

Case 7:
If Mid$ ( Sayi , i , 1 ) <> "0" Then
List1.AddItem Sayilar ( Val( Mid$( Sayi , i , 1 )))
List1.AddItem "milyon"
End If
' ------------------------------------------------------------------------------------
Case 6:
If Mid$( Sayi, i , 1 ) <> "0" Then
If Mid$( Sayi, i , 1 ) <> "1" Then List1.AddItem Sayilar( Val( Mid$( Sayi, i , 1 )))
List1.AddItem "yüz"
End If
' ------------------------------------------------------------------------------------
Case 5: If Mid$( Sayi, i, 1 ) <> "0" Then List1.AddItem Onlar( Val( Mid$( Sayi, i, 1 )))
' ------------------------------------------------------------------------------------
Case 4:
If Mid$(Sayi, i, 1) <> "0" And Mid$(Sayi, i, 1) <> "1" Then
List1. AddItem Sayilar(Val(Mid$(Sayi, i, 1)))
End If

If Mid$(Sayi, i, 1) = "1" Then
If Len(Sayi) >= 6 Then
If Mid$(Sayi, i - 1, 1) <> "0" Or Mid$(Sayi, i - 2, 1) <> "0" Then
List1. AddItem "bir"
End If
ElseIf Len(Sayi) = 5 Then
If Mid$(Sayi, i - 1, 1) <> "0" Then
List1. AddItem "bir"
End If
End If
End If

List1. AddItem "bin"
' ------------------------------------------------------------------------------------
Case 3:
If Mid$(Sayi, i, 1) <> "0" Then
If Mid$( Sayi, i, 1 ) <> "1" Then List1.AddItem Sayilar( Val( Mid$( Sayi, i, 1 )))
List1.AddItem "yüz"
End If
' ------------------------------------------------------------------------------------
Case 2: If Mid$( Sayi, i, 1 ) <> "0" Then List1.AddItem Onlar( Val( Mid$( Sayi, i, 1 )))
' ------------------------------------------------------------------------------------
Case 1: If Mid$( Sayi, i, 1 ) <> "0" Then List1.AddItem Sayilar( Val( Mid$(Sayi, i, 1 )))
End Select
Next


Yukarıdaki kodlarda, sayının rakamları tek tek okunarak, en başta anlatılan okuma kuralları uygulanır. Oluşan metin parçaları List1 nesnesine eklenir. Aşağıda ise Okuma komut düğmesine basıldığında ses dosyalarının çağrılması anlatılmıştır. Ses dosyalarını çağırmak için SndPlaySound Api'sini kullandım.

For i = 0 To List1.ListCount - 1
sndPlaySound App.Path & "/sesler/" & Trim$(List1.List(i)) & ".wav", 2
Next


SndPlaySound Api'si iki parametre alır. ( Dosya Adresi ) , ( Mod ). Mod Ayarının 2 olması, bir ses dosyasının okunması bitmeden bir sonrakine geçmemesini ve beklemesini sağlar. Yukarıda bir For-Next döngüsü ile List1 listesinde yazılmış kelimelere ait wav dosyaları sırasıyla çağrılmaktadır.
Bu şekilde girdiğimiz bir tamsayıyı parçalayıp okutabiliriz.
lütfen sorularınızı buradan bildiriniz...

Bir önceki yazı Kayan Yazı hakkında bilgi vermektedir.

02-12-2011 18:53:23
 
hiç gerek yok hocam. Microsoft Speek Teach olayı ihtiyacınızı görür

08-12-2011 01:57:32
 
Alıntı:
hiç gerek yok hocam. Microsoft Speek Teach olayı ihtiyacınızı görür
Aynen katılıyorum ama emek emektir

Cevapla

"Girilen Sayıyı Sesli Olarak Okuyan Program" konusu hakkında etiketler
2500 50269 alfabe almak arka arkaya basamak basamakli basamaktan basic bes bin bir birucbinyuz buyuk cagirma deki denir dondu dosya dosyalari dosyasini girilen gosterilmesi haneli harf harfleri htm iki ismi istenen lardan makine metin metni nasil nasildir oku okuma okumak okunan okunu okunur okunuru okunuslari okunusu okutm okutma okuyan olarak one pascal prog progra program programi programlama rakam rakama rakami rakamla rakamlar rakamlari rakamli rapor sayan sayi sayilar sayilari sayilarin sayinin sayisal sayisi sayisinin sayiyi sayiyla ses seslendirilmis sesli sifir sifirli site sonraki studio turkce uyari vb6 vbasic veren visual wav yazdigini yazdirma yazilan yazilimi yazilir yazilisi yazimi yaziyi yazmak yirimi yuz

Kayan Yazı Önceki | Sonraki Visual Studio 6.0 Enterprise Edition 4 link 177 MB




Saat: 03:59 - Webmaster Forumu - Rss - Arşiv
İletişim Bilgileri, Contact Us, Kullanım Sözleşmesi, Gizlilik