Action Script & Tutorials 22 Aug 2005 01:30 pm
Number To Text : Speech API (SAPI) in Flash?
(Visited 2347 times)Script ini saya tulis setelah seorang teman bertanya kepada saya tentang bagaimana cara membuat agar sebuah input berupa angka dapat dirubah menjadi teks. Dan kemungkinan membuat sebuah Speech API (SAPI) dalam Flash.
Konsep idenya adalah dengan memanfaatkan Array class dan String class. Jadi outputnya berupa array. Jadi jika kemudian hendak dimunculkan dalam teks tinggal menampilkan output dari array tadi.
Khusus untuk sound karena diperlukan time interval untuk selesainya pengucapkan satu kata maka disini saya gunakan SetInterval(). Namun bisa juga sebenarnya menggunakan Sound class misalnya Sound.OnSoundComplete untuk menentukan bahwa 1 kata telah diucapkan.
-
// list Array library
-
var satuan = [
-
"nol", "satu", "dua", "tiga", "empat",
-
"lima","enam","tujuh","delapan","sembilan"
-
];
-
var belasan = [
-
"sepuluh", "se", "dua", "tiga", "empat",
-
"lima", "enam", "tujuh", "delapan", "sembilan"
-
];
-
var kelompok = [
-
"se", "belas", "puluh", "ratus", "ribu", "juta", "miliar", "triliun"
-
];
-
var startN = 0;
-
var voiceList = new Array();
-
-
test_format = function(n){
-
-
// set menjadi string
-
var input = n.toString();
-
-
if(input == ""){
-
showAlert("WARNING","Anda belum memasukan data!");
-
return;
-
// check harus format angka
-
} else if(isNaN(input)) {
-
showAlert("WARNING",input + " bukan dalam format angka!");
-
return;
-
// lebih dari ratusan triliun ---> limit
-
} else if(input.length> 19){
-
showAlert("MAAF...","Input maksimum dalam triliunan");
-
return;
-
}
-
-
// check jika harus di eja per angka
-
if(dieja_check.selected){
-
var voiceArray = eja_angka(input);
-
} else {
-
// set input ke format number
-
input_angka.text = Number(input);
-
var voiceArray = check_angka(input);
-
}
-
-
return voiceArray;
-
-
}
-
check_angka = function(input){
-
-
var voiceArray = new Array();
-
var angka = input.substr(0,1);
-
-
// triliunan
-
if(input.length> 12){
-
var triliun = input.substr(0,input.length-12);
-
triliun = check_angka_ribuan(triliun);
-
voiceArray = voiceArray.concat(triliun);
-
if(triliun.length> 0){
-
voiceArray.push(kelompok[7]);//"triliun");
-
}
-
var miliar = input.substr(input.length-12,input.length);
-
miliar = check_angka(miliar);
-
voiceArray = voiceArray.concat(miliar);
-
-
// milliaran
-
} else if(input.length> 9){
-
var miliar = input.substr(0,input.length-9);
-
miliar = check_angka_ribuan(miliar);
-
voiceArray = voiceArray.concat(miliar);
-
if(miliar.length> 0){
-
voiceArray.push(kelompok[6]);//"miliar");
-
}
-
var jutaan = input.substr(input.length-9,input.length);
-
jutaan = check_angka(jutaan);
-
voiceArray = voiceArray.concat(jutaan);
-
-
// jutaan
-
} else if(input.length> 6){
-
var jutaan = input.substr(0,input.length-6);
-
jutaan = check_angka_ribuan(jutaan);
-
voiceArray = voiceArray.concat(jutaan);
-
if(jutaan.length> 0){
-
voiceArray.push(kelompok[5]);//"juta");
-
}
-
var ribuan = input.substr(input.length-6,input.length);
-
ribuan = check_angka(ribuan);
-
voiceArray = voiceArray.concat(ribuan);
-
-
// ribuan
-
} else if(input.length> 3){
-
-
if(input.length == 4){
-
var ribuan = check_angka_ribuan(input);
-
voiceArray = voiceArray.concat(ribuan);
-
} else {
-
var ribuan = input.substr(0,input.length-3);
-
-
if(Number(ribuan) == 1) {
-
voiceArray.push(kelompok[0]);//"se");
-
} else {
-
ribuan = check_angka_ribuan(ribuan);
-
voiceArray = voiceArray.concat(ribuan);
-
}
-
if(ribuan.length> 0){
-
voiceArray.push(kelompok[4]);//"ribu");
-
}
-
var ratusan = input.substr(input.length-3,input.length);
-
ratusan = check_angka_ribuan(ratusan);
-
voiceArray = voiceArray.concat(ratusan);
-
}
-
-
} else {
-
var ribuan = check_angka_ribuan(input);
-
voiceArray = voiceArray.concat(ribuan);
-
}
-
-
return voiceArray;
-
-
}
-
-
check_angka_ribuan = function(n){
-
-
// created array sususan voice
-
var voiceArray = new Array();
-
//lakukan looping
-
var angkaCount = ""; // ---> string
-
var nextLength = n.length;
-
-
for(var a=0 ; a
-
var angka = n.substr(a,1);
-
// di belasan
-
if((nextLength-a)> 2 and angka != 0){
-
if(angka != 1 or (nextLength-a) == 1){
-
voiceArray.push(satuan[angka]);
-
angkaCount = n.substr(a,n.length);
-
} else {
-
voiceArray.push(kelompok[0]);//"se");
-
voiceArray.push(kelompok[nextLength-a]);
-
}
-
// belasan
-
} else if((nextLength-a)> 1){
-
if(angka> 1){
-
voiceArray.push(satuan[angka]);
-
angkaCount = n.substr(a,n.length);
-
} else if(angka == 1){
-
var angka = n.substr(a+1,1);
-
voiceArray.push(belasan[angka]);
-
if(angka != 0){ voiceArray.push(kelompok[1])};//"belas"); }
-
break;
-
} else {
-
if(angka != 0) {
-
var angka = n.substr(a+1,1);
-
voiceArray.push(satuan[angka]);
-
}
-
}
-
} else {
-
if(angka != 0){ voiceArray.push(satuan[angka]); }
-
break;
-
}
-
// set satuan
-
if(angkaCount.length> 1){
-
if(angka != 1){
-
if(angka != 0)
-
voiceArray.push(kelompok[angkaCount.length]);
-
} else {
-
voiceArray.push(belasan[n.substr(a,1)]);
-
if(angka != 0){ voiceArray.push(kelompok[1])};//"belas"); }
-
break;
-
}
-
}
-
}
-
-
return voiceArray;
-
-
}
-
-
// mengeja angka
-
eja_angka = function(n){
-
var voiceArray = new Array();
-
for(var i=0 ; i
-
voiceArray.push(satuan[n.substr(i,1)]);
-
}
-
return voiceArray;
-
}
-
-
writeToText = function(){
-
if(voiceList == undefined) return;
-
var out = "";
-
for(var i=0 ; i
-
out += voiceList[i]+" ";
-
}
-
output_text.text = out;
-
}
-
-
loadNplaySound = function(){
-
-
if(voiceList == undefined) return;
-
-
clearInterval(myDelay);
-
-
suara = new Sound();
-
suara.loadSound(voiceList[startN]+".mp3", true);
-
suara.start();
-
-
output_text.text += voiceList[startN];
-
-
startN++;
-
if(startN <voiceList.length){
-
// loop with interval
-
myDelay = setInterval(loadNplaySound,2000);
-
} else {
-
startN = 0;
-
voiceList = new Array();
-
}
-
}
Untuk dapat mengerti script di atas anda harus paham Array dan String dalam flash.
Karena sifatnya berupa test labs aja jadi masih ada batasan-2 dari coding saya ini. Sementara masih terbatas sampai ratusan triliun. Codingnya juga masih kotor jadi masih bisa dibuat lebih simple dan manis. Jadi jika ada yang mau komen silahkan.
11 Responses to “Number To Text : Speech API (SAPI) in Flash?”
Leave a Reply
You must be logged in to post a comment.


on 23 Aug 2005 at 1:14 pm 1.Djanoux said …
Coding sebelumnya ada 2 bug. Yang pertama dimana saat input angka berisi 1000. Misal: 1001000. Seharusnya: "satu juta seribu" tapi yang muncul "satu juta satu ribu".
Untuk mengatasinya pada kira-kira baris ke-74:
ribuan = check_angka_ribuan(ribuan);
voiceArray = voiceArray.concat(ribuan);
Diganti menjadi:
if(Number(ribuan) == 1) {
voiceArray.push("se");
} else {
ribuan = check_angka_ribuan(ribuan);
voiceArray = voiceArray.concat(ribuan);
}
Kemudian yang kedua adalah pada angka ratusan yang tidak ada puluhannya misal: 201 seharusanya "dua ratus satu" tapi yg muncul "dua ratus ratus satu".
Masalah ini ada pada kira-kira baris ke-138
voiceArray.push(kelompok[angkaCount.length]);
Diganti dengan:
if(angka != 0){
voiceArray.push(kelompok[angkaCount.length]);
}
on 05 Sep 2005 at 4:14 pm 2.akew said …
hai januMedia, lo keren juga, thanx buat scriptnya, oke.
gw lagi mulai belajar flash, tapi gw mang dah tertarik ama desain dari dulu.
on 12 Oct 2005 at 3:08 am 3.Anonymous said …
ma Janu hebat oi... gmn biar bisa ky masjanu ya...!
mas janu... aku pury dari bandung mas aku ada kesulitan di flash..!
gini..
aku bikin guestbook trs
aku pengen nampilin data dari database ke flash movie scriptnya pk PHP database nya pk mysql dan ternyata berhasil... cuma knp halman yang aku buat di script php ga mau muncul di flash move alias data nya aja yang msk tanpa halaman... hehe jd garing masa guest book ga ada halaman nya msgdnya PAGE gt lho... hehe mas janu minta tolong dong gimana biar PAGE nya jg msk di movie flash..
Terimakasih Sebelumnya...
E-mail: pangeran_koddok@yahoo.com
on 24 Dec 2005 at 9:45 pm 4.Giri Prahasta Putra said …
wah! keren! mas belajar dimana? saya Arief, masih kelas 2 smp, tertarik banget dengan macromedia flash MX mas, mas bisa kirim source yang keren ke email saya? di giri_mymail@yahoo.com, saya tunggu ya mas!
NB:oh ya mas, bisa ajarin bikin flashgame?
salam
on 27 Feb 2006 at 3:25 pm 5.Anonymous said …
mas djanoux, kenapa cript diatas ada scrip looping dengan for tapi kenapa kondisi untuk looping tidak lengkap. kalau tidak salah baca script nya hanya for(var a=0 ; a
dan tidak ada lanjutannya.
on 28 Feb 2006 at 9:44 am 6.Djanoux said …
Oh iya. harusnya:
for( var a=0 ; a
on 11 Mar 2006 at 12:22 am 7.colay said …
keren banget dah mas!
O iya mas. apakah program flash bisa dipake buat aplikasi hitung2an akar-akaran dan pokoknya matematika tingkat tinggi dah.Bisa ga mas? Pokoknya hampir mirip aplikasi delphi gt? Bisa ga mas
on 13 Mar 2006 at 9:38 am 8.Djanoux said …
Tentu bisa. Selama kamu mengerti dan bisa menjabarkannya dengan baik.
on 01 Feb 2007 at 5:46 am 9.noviana said …
mas janu, ni novi pengen mbuat TA tuh apliaksi database praktikum dengan menggunakan flash,itu gimana caranya? saya pengen banget biar bisa digunakan ama adek kelas gitu mas janu, tolong yah dijawab
on 01 Feb 2007 at 7:52 am 10.janumedia said …
Sangat-2 bisa tuh.
Utk bisa membuatnya kamu harus ngerti:
- Fungsi-2 khusus di Flash on load & kirim data a.l:
Loadvariable(), LoadVars() ataupun load XML();
LoadVars() lbh disarankan selain krn lbh simple karena lbh ke object based bisa loadvars objnya sendiri atau xml kl yd diload dalam format xml. Sedangkan loadvariable targetnya adalah movieclip.
Load XML() berguna jika load data berupa xml data / format.
- Selain itu tentunya krn menggunakan databased mo ga mau km musti tahu tentang dbase yg digunakan. bisa mysql, mssql. etc.
- Udah gitu pengetahuan data processing dari scripting PHP / ASP / .NET, etc jg perlu
Nah kalo sudah gitu tinggal rajin-2 cari / baca referensi soal hal-2 di atas. Bahkan banyak tersebar di internet.
on 01 Aug 2007 at 2:58 pm 11.Romantis.net said …
apa itu oms, binung aku