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 seksen.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ı :
--------------------------------------------------------------------------------
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 seksen.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ı :
Kod:
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"
Kod:
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.
Kod:
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.
Kod:
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ş",
"seksen", "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
Kod:
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.
Kod:
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.
Bu şekilde girdiğimiz bir tamsayıyı parçalayıp okutabiliriz.
Hiç yorum yok:
Yorum Gönder