Delphi, Ses Çalmayı Tetikleme, Yardım
-
programlamadan pek anlamıyorum ama Delphi ile bana yardımcı olacak bir uygulama geliştirmeye çalışıyorum.
TimerUpdateTimeTimer proseduru icinde soyle bir kod var:
// Alt okuma if FSUIPC_Read($0570, 8, @alt, dwResult) then begin // işlem kısmı if FSUIPC_Process(dwResult) then begin alt_1 := Round(alt * 3.28084 /4294967296); Label5.Caption := FloatToStr(alt_1); // Sabit Kısım end else begin LabelFSclock.Caption := 'Processing: ' + ResultText[dwResult]; end; end else begin LabelFSclock.Caption := 'Reading: ' + ResultText[dwResult]; end;
Bu kısımda FSPUIC adlı yardımcı bir arabirim (?) üzerinden "alt" değişkenim sürekli güncelleniyor. Delphi de ses çalmayı da biliyorum. Yapmak istediğim şu ki; misal, "alt_1" değişkeni 1000 den büyük bir değer aldığında bir ses dosyası çalsın.
Yani:
if alt_1>1000 then begin MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end;
örneğin, bu kodu nereye, nasıl yazmam gerekiyor ki, UYGULUMA ÇALIŞIRKEN sürekli tetikte olsun, koşullar sağlandığında ses dosyası çalınsın? TimeUpdateTimeTimer prosedürü içine yazdığımda çalmıyor, ya da daha şarkı başlamadan kendini yinelediği için duyamıyorum, ya da ben bi enayilik yapıyor da olabilirim..
-
// Alt okuma if FSUIPC_Read($0570, 8, @alt, dwResult) then begin // işlem kısmı if FSUIPC_Process(dwResult) then begin alt_1 := Round(alt * 3.28084 /4294967296); Label5.Caption := FloatToStr(alt_1); if alt_1>1000 then begin MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; // Sabit Kısım end else begin LabelFSclock.Caption := 'Processing: ' + ResultText[dwResult]; end; end else begin LabelFSclock.Caption := 'Reading: ' + ResultText[dwResult]; end;
saybirs tarafından 07/Eki/14 01:42 tarihinde düzenlenmiştir -
saybirs bunu yazdı
// Alt okuma if FSUIPC_Read($0570, 8, @alt, dwResult) then begin // işlem kısmı if FSUIPC_Process(dwResult) then begin alt_1 := Round(alt * 3.28084 /4294967296); Label5.Caption := FloatToStr(alt_1); if alt_1>1000 then begin MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; // Sabit Kısım end else begin LabelFSclock.Caption := 'Processing: ' + ResultText[dwResult]; end; end else begin LabelFSclock.Caption := 'Reading: ' + ResultText[dwResult]; end;
hocam çok teşekkür ederim, yazdığınız şekilde denedim fakat ses çalmıyor. uygulama çalışıyor fakat ses yok. sanırım sürekli kendini yinelediği için duyamıyorum ;(
-
teamwiever ver bakalım hocam delphiden anlamam ama breakpointle çözmeye calısalım.
-
saybirs bunu yazdı
teamwiever ver bakalım hocam delphiden anlamam ama breakpointle çözmeye calısalım.
teamwiever yok hocam, evde değilim, 1GB ram, celeron bi bilg. var burda.
aklıma birseyler geldi, simdi onları bir deneyeyim.
çok tesekkür ederim.
-
arkadaşlar sorun çözüldü.
procedure TFormMain.ses(); begin inc(deger); MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end;
gibi ayrı bir prosedür ile ses dosyası tetiklenmis oldu. lakin ses biraz gec caliyor, o da sanırım ses dosyasını baştan belleğe almamasından dolayı, ya da başka birşey, ama olsun.
tesekkurler.
-
procedure TForm1.sesver(deger: integer); begin if ((deger>1000) and (MediaPlayer1.Position>1)) then begin beep; MediaPlayer1.Position:=0; MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; end;
bu fonksiyonu kullan. bu şekilde bir kez çalışınca durmaz :D
2. olarak sesi durdurmak için
durdurma butonu yap, içine Mediaplayer1.stop; ve mediaplayer1.position:=0; yap
//şarkına dikkat et belki müziğin önce sessiz olarak başlıyordur :D ona dikkat başına beep; yaz :D ben ekledim hade inşallah tamamlanır.
-
DuPi bunu yazdı
procedure TForm1.sesver(deger: integer); begin if ((deger>1000) and (MediaPlayer1.Position>1)) then begin beep; MediaPlayer1.Position:=0; MediaPlayer1.Close; MediaPlayer1.FileName := ExtractFileDir(Application.ExeName) + '\sarki.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; end;
bu fonksiyonu kullan. bu şekilde bir kez çalışınca durmaz :D
2. olarak sesi durdurmak için
durdurma butonu yap, içine Mediaplayer1.stop; ve mediaplayer1.position:=0; yap
//şarkına dikkat et belki müziğin önce sessiz olarak başlıyordur :D ona dikkat başına beep; yaz :D ben ekledim hade inşallah tamamlanır.
hocam ses kısmında bir sorun yok, sizinkine benzer bir procedure oluşturdum yalnız tetikleme TimeUpdateTimeTimer icinde yapılıyor ve inc() kullunarak dosyanın sadece bir kez çalmasını sağladım.
çok teşekkür ederim. takıldığım bir yer olursa sorarım.
-
gerçekten çok ilginç,
inc(deger);
deger:=deger+1;
ile aynı bu nasıl engelliyebiliyor ki. iki kez çalmasını
-
DuPi bunu yazdı
gerçekten çok ilginç,
inc(deger);
deger:=deger+1;
ile aynı bu nasıl engelliyebiliyor ki. iki kez çalmasını
// FL100 if FSUIPC_Read($0570, 8, @alt, dwResult) then begin // işlem kısmı if FSUIPC_Process(dwResult) then begin alt_1 := Round(alt * 3.28084 /4294967296); Label5.Caption := FloatToStr(alt_1); if (deger=0) and (alt_1>10000) then ses(); // Sabit Kısım end else begin LabelFSclock.Caption := 'Processing: ' + ResultText[dwResult]; end; end else begin LabelFSclock.Caption := 'Reading: ' + ResultText[dwResult]; end;
if deger=0 ve alt_1>10000 ise ses() prosedürünü işlet diyorum. ses() işleyip şarkı çaldıktan sonra deger=1 oldugu icin (inc fonk. ile) bir daha ses() procedurunu cagirmiyor.