Arsip: PlaySound untuk beberapa file *.wav sekaligus?

 
user image
more 16 years ago

gormet

Salam, saya pengen buat aplikasi PlaySound, dengan cara membaca file text yang di ketik di Component Edit (ed_terbilang). berikut ini file .wav nya: satu dua tiga empat lima enam tujuh delapan sembilan sepuluh sebelas belas puluh seratus ratus seribu ribu sejuta juta saya menggunakan code berikut:

procedure TForm1.btn_BacaClick(Sender: TObject);
begin
    PlaySound (PChar (ed_terbilang.Text),
    0, snd_Async);
end;
code di atas hanya berhasil mengeluarkan suara(file
.wav) jika hanya satu nama file .wav yang berada di edit(ed_terbilang). seperti: satu, dua, sepuluh, seribu, dst... namun jika nama file .wav yang berada di edit(ed_terbilang) terdiri dari dua atau lebih, seperti: dua belas, seratus tiga puluh, dst... maka program tidak mengeluarkan suara sama sekali. bagaimana cara nya agar nama file *.wav pada di edit(ed_terbilang) yang terdiri dari dua atau lebih, dapat di "playSound" sehingga suaranya terdengar? makasih sebelumnya :) wassalam..
user image
more 16 years ago

snip3r

Kebetulan saya sedang membuat aplikasi serupa. Berikut ini codingnya: procedure TfrmDisplay.PlayAngka(angka: string); var i : byte; begin for i := 1 to length(angka) do begin //baca panjang string SebutAngka(angka[i]); //mainkankan angka satu persatu end; end; procedure TfrmDisplay.SebutAngka(angka: Char); begin if angka = '0' then NamaFile := ExtractFilePath(Application.ExeName) + 'Kosong.WAV' else if angka = '1' then NamaFile := ExtractFilePath(Application.ExeName) + 'Satu.WAV' else if angka = '2' then NamaFile := ExtractFilePath(Application.ExeName) + 'Dua.WAV' else if angka = '3' then NamaFile := ExtractFilePath(Application.ExeName) + 'Tiga.WAV' else if angka = '4' then NamaFile := ExtractFilePath(Application.ExeName) + 'Empat.WAV' else if angka = '5' then NamaFile := ExtractFilePath(Application.ExeName) + 'Lima.WAV' else if angka = '6' then NamaFile := ExtractFilePath(Application.ExeName) + 'Enam.WAV' else if angka = '7' then NamaFile := ExtractFilePath(Application.ExeName) + 'Tujuh.WAV' else if angka = '8' then NamaFile := ExtractFilePath(Application.ExeName) + 'Delapan.WAV' else if angka = '9' then NamaFile := ExtractFilePath(Application.ExeName) + 'Sembilan.WAV'; PlaySound(pchar(NamaFile), 0, SND_FILENAME); end; Procedure TFrmDisplay.Button1Click(Sender: Object); begin PlayAngka(Edit1.text); //mainkan setiap angka pada Edit1 end; _____________________________________ Semoga bermanfaat. We Live To Share http://armansyah.web.id
user image
more 16 years ago

Bahrul_power

Pakai fungsi procedure ini aja : [list:29c9ba08d6] procedure Katakan(x:String); Socket: TCustomWinSocket); var i,s:Integer; filewav : pchar; fdum : string[12]; cari : boolean; st:string; begin tdum := edit1.text; filewav := nil; while (x<>'') do begin fdum := copy(tdum,0,pos(' ',x)-1); { ambil kata } delete(tdum,1,pos(' ',x)); { hapus kata yg sudah diambil } st:=fdum+'.wav'; sndPlaySound(pchar(st),SND_SYNC); if fdum='' then abort; end; strdispose(filewav); end; [/list:u:29c9ba08d6] cara panggilnya : [list:29c9ba08d6] procedure TForm1.Button1Click(Sender: TObject); begin katakan(edit1.text); end; [/list:u:29c9ba08d6]
user image
more 16 years ago

gormet

Terimakasih atas jawabannya... :)
Snip3r mengetik: Kebetulan saya sedang membuat aplikasi serupa
asyik ada temen tuk "sharing" masalah yang sama.
Snip3r menulis:

procedure TfrmDisplay.SebutAngka(angka: Char); 
begin 
if angka = '0' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Kosong.WAV' 
else if angka = '1' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Satu.WAV' 
else if angka = '2' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Dua.WAV' 
else if angka = '3' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Tiga.WAV' 
else if angka = '4' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Empat.WAV' 
else if angka = '5' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Lima.WAV' 
else if angka = '6' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Enam.WAV' 
else if angka = '7' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Tujuh.WAV' 
else if angka = '8' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Delapan.WAV' 
else if angka = '9' then 
NamaFile := ExtractFilePath(Application.ExeName) + 'Sembilan.WAV'; 
PlaySound(pchar(NamaFile), 0, SND_FILENAME); 
end; 
menambahkan dikit: mungkin mas Snip3r lupa mendeklarasikan variable NamaFile, atau juga mas Snip3r mendeklarasikannya secara global sehingga tidak tampil pada code di atas.

procedure TfrmDisplay.SebutAngka(angka: Char); 
var
  NamaFile: string;
begin 
  if angka = '0' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Kosong.WAV' 
  else if angka = '1' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Satu.WAV' 
  else if angka = '2' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Dua.WAV' 
  else if angka = '3' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Tiga.WAV' 
  else if angka = '4' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Empat.WAV' 
  else if angka = '5' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Lima.WAV' 
  else if angka = '6' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Enam.WAV' 
  else if angka = '7' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Tujuh.WAV' 
  else if angka = '8' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Delapan.WAV' 
  else if angka = '9' then 
  NamaFile := ExtractFilePath(Application.ExeName) + 'Sembilan.WAV'; 
  PlaySound(pchar(NamaFile), 0, SND_FILENAME); 
end; 
Procedure dari mas Snip3r bisa menjadi pilihan untuk program antrian. namun program antrian yang pengen saya buat "penyebutan angka nya" berbeda dengan program antrian mas Snip3r. penyebutan angka dengan menggunakan prosedure mas Snip3r: dari edit1.text dibaca/output speaker 102 satu kosong dua 10 satu kosong penyebutan angka yang pengen saya buat: dari edit1.text dibaca/output speaker 102 seratus dua 10 sepuluh berikut ini langkah2 penyebutan angka yang sedang saya buat: 1. edit_angka.text terisi angka dari database 2. edit_terbilang.text diisi angka yang sudah diubah menjadi terbilang (function dari kang ImanD) 3. playSound dari edit_terbilang.text
Bahrul_power mengetik: procedure Katakan(x:String); Socket: TCustomWinSocket); var i,s:Integer; filewav : pchar; fdum : string[12]; cari : boolean; st:string; begin tdum := edit1.text; filewav := nil; while (x<>'') do begin fdum := copy(tdum,0,pos(' ',x)-1); { ambil kata } delete(tdum,1,pos(' ',x)); { hapus kata yg sudah diambil } st:=fdum+'.wav'; sndPlaySound(pchar(st),SND_SYNC); if fdum='' then abort; end; strdispose(filewav); end;
mas Bahrul_power, saya udah coba pake prosedure nya, namun muncul error:
[Error] U_Num2Sound.pas(85): Unknown directive: 'Socket' [Warning] U_Num2Sound.pas(93): String constant truncated to fit STRING[12] [Error] U_Num2Sound.pas(26): Unsatisfied forward or external declaration: 'TForm1.Katakan' [Fatal Error] P_Num2Sound.dpr(5): Could not compile used unit 'U_Num2Sound.pas'
saya tidak mengerti maksudnya kode:

Socket: TCustomWinSocket); 
Lalu saya coba disable

procedure Katakan(x: String); 
//Socket: TCustomWinSocket;
var
  i,s:Integer;
  filewav : pchar;
  fdum : string[12];
  cari : boolean;
  st:string;
begin
  fdum := 'ed_terbilang.text';
  filewav := nil;
  while (x<>'') do
  begin
    fdum := copy(fdum,0,pos(' ',x)-1); { ambil kata }
    delete(fdum,1,pos(' ',x)); { hapus kata yg sudah diambil }
    st:=fdum+'.wav';
    sndPlaySound(pchar(st),SND_SYNC);
    if fdum='' then abort;
  end;
  strdispose(filewav);
end;
program jalan tapi tidak berfungsi, malahan muncul peringatan:
[Warning] U_Num2Sound.pas(94): String constant truncated to fit STRING[12] [Hint] U_Num2Sound.pas(88 ): Variable 'i' is declared but never used in 'Katakan' [Hint] U_Num2Sound.pas(88 ): Variable 's' is declared but never used in 'Katakan' [Hint] U_Num2Sound.pas(91): Variable 'cari' is declared but never used in 'Katakan'
user image
more 16 years ago

snip3r

@gormet: - Program yg sy buat tinggal dimodifikasi agar bisa menyebutkan bilangan tertentu seperti 11 (sebelas), 12 (dua belas), dst. Kemarin sy dapat patternnya, ada yang pake fungsi pemilihan/kondisi, tapi sy lupa sy dapet dari mana. - Variablenya sy deklarasikan global, Soalnya langsung sy copy/paste dari program yg sy buat, kan bisa dibuat sendiri (ha...ha, kumat malesnya). - Aplikasi yg sy buat masih seadanya, biasa lagi kejar waktu (deadline), keburu diminta ama client, ya udah main kebut aja, lagian budgetnya sama aja dan gak ada neko-neko. Hehe... ____________________________ We Live To Share http://armansyah.web.id
user image
more 16 years ago

gormet

Snip3r mengetik: - Program yg sy buat tinggal dimodifikasi agar bisa menyebutkan bilangan tertentu seperti 11 (sebelas), 12 (dua belas), dst. Kemarin sy dapat patternnya, ada yang pake fungsi pemilihan/kondisi, tapi sy lupa sy dapet dari mana.
mas snip3r, kan prosedur SebutAngka membaca text yg berupa angka(0,1,2,3,4,5,6,7,8,9). misal: 1134 dibaca--> satu satu tiga empat jadi menurut saya sulit klo masih berupa angka, tetapi outputnya pengen sebelas, DuaPuluhSatu, dll makanya saya menggunakan fungsi dari kang imanD, yang mengubah angka ke terbilang. sehingga mudah utk memanggil angka sepuluh, Seratus, dll. tetapi saya kesulitan ketika ingin memanggil angka(misal) Dua Puluh Empat, karena terdiri dari lebih dua kata. sebenarnya saya punya ide tapi ga tau code delphi nya, misal di ed_terbilang.text diketik: !=================! ! Dua Puluh Empat ! !=================! jadi yang pertama dibaca (di PlaySound) Dua.wav, lalu kata "Dua" dihapus dari ed_terbilang.text. sehingga ed_terbilang.text menjadi: !=================! ! Puluh Empat ! !=================! yang kedua dibaca (di PlaySound) Puluh.wav, lalu kata "Puluh" dihapus dari ed_terbilang.text. sehingga ed_terbilang.text menjadi: !=================! ! Empat ! !=================! yang ketiga/terakhir dibaca (di PlaySound) Puluh.wav beres deh... just in my mind.... code nya blum tau hiks.. hiks.. ada yang bisa bantu...
user image
more 16 years ago

LuriDarmawan

@rekanz rekanz, mmm... ada baiknya melirik sedikit ke aplikasi TukangOmong. Text2Speech ala Indonesia. ref: http://kioss.com/kioss/aTukangOmong.txt Dengan demikian tidak perlu lagi berkutik kutik di cara penyampaian suara. merekam per kata, dsb. cukup menjalankan prosedur Terbilang apa adanya, kemudian sendmessage untuk mengucapkan teks yang dimaksudkan. sebagai wacana saja. silahkan dicoba. fyi, TukangOmong ini project iseng masa lalu, sekitar tahun 2003-an. jadi maaf saja kalo banyak yang sudah kadaluarsa. SemangaT!
user image
more 16 years ago

gormet

Makasih masukannya bos Luri... :) tapi blum saya coba, karena masih mencoba yang pake function Num2Word. dengan menggunakan code berikut:

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  edit2.text:=copy(edit1.Text,1,4);
  s:=edit1.Text;
  delete(s,1,4);
  edit1.Text:=s;
end;
program di running, lalu input dimasukan pada edit1.text ===> 123456789 setelah button1 di klik, maka: edit1.text ===> 56789 edit2.text ===> 1234 button1 di klik lagi menjadi: edit1.text ===> 9 edit2.text ===> 5678 button1 di klik lagi menjadi: edit1.text ===> edit2.text ===> 9 yang sedang saya cari adalah bagaimana jika input dimasukan pada edit1.text ===> seratus ribu empat puluh lalu ketika button1 di klik, maka: edit1.text ===> ribu empat puluh edit2.text ===> seratus button1 di klik menjadi: edit1.text ===> empat puluh edit2.text ===> ribu button1 di klik menjadi: edit1.text ===> edit2.text ===> puluh mohon pencerahannya ...
user image
more 16 years ago

pebbie

pake TStrings aja.. delimiternya pake spasi, tiap di klik salin item[0] ke edit 2 dan delete indeks ke 0
user image
more 16 years ago

imunk

iya betul kata mas pebbie, pake tstrings kayaknya lebih mudah mas qormet,

procedure button1click;
var liststr : tstrings;
      I : integer;
begin
   liststr:=tstrings.create;
   liststr.delimiter:=' ';
   liststr.delimitedtext:=edit1.text;
   
   for I:=0 to liststr.Count - 1 do
      BacaData(liststr[I]);    //---> mohon koreksi jika salah   
  liststr.free;
end;
//procedure ini ngedit yg punya mas qormet, maaf kalo gak jalan
procedure BacaData(teks:string);
begin
    PlaySound (PChar (teks),
    0, snd_Async);
end;
gitu deh mas qormet semoga membantu, mohon maaf jika salah. belum dicoba (gak punya file wav nya... :mrgreen: )
more ...
  • Pages:
  • 1
  • 2
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com