revsys
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention 7 juin 2007
-
1 juin 2007 à 11:53
revsys
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention 7 juin 2007
-
1 juin 2007 à 17:28
Bonjour,
Quand j'exécute mon programme à partir de Delphi, toutes mes commandes fonctionnent.
Mais si je lance seulement l'EXE, là une option me permettant de rentrer le nombre de fois où un son doit être lancé (grâce à un edit), ne fonctionne plus .
C'est sûrement dû à la variable que j'utilise qui n'est plus prise en compte.
J'ai trouvé la cause du problème mais je ne sais vraiment pas comment faire pour y remédier.
J'utilise donc la procedure NotifyProc qui "signale" la fin de lecture (mpStopped) et décrémente B. J'ai donc théoriquement une boucle qui fonctionne.
Comme je l'ai dit plus haut, en exécutant par Delphi (F9), tout fonctionne (je rentre 5, le son est joué 5 fois) donc je suppose que NotifyProc fonctionne tout autant.
Par contre, en exécutant à partir de l'EXE, le signal mpStopped ne marche plus : le son ne se joue qu'une seule fois.
En appuyant sur la touche Stop, le son reboucle (mpStopped devient alors actif).
Par exemple je rentre 5, le son se joue 1 fois puis 'arrête, je réappuie sur stop, il reboucle et ainsi de suite jusqu'à que 5 passe à 0.
Donc mpStopped de NotifyProc est actif avec delphi mais pas avec l'EXE
Code :
var
B : integer;
procedure TForm1.btJouerClick(Sender: TObject);
begin
Lecteur;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if(Key <> chr(8))and((Key < '0')or(Key > '9'))then
begin
Key := chr(0); // Permet d'annuler la frappe de la touche
end;
end;
procedure TForm1.Lecteur;
begin
if RadioBtmont.Checkedthen
begin
Arretautorise := true; // evite un bug si nous appuyons sur arreter
// alors q'aucun son WAV n'a été lancé
MediaPlayer1.FileName := 'C:\Sons expérience\MONTE.wav';
MediaPlayer1.Open;
B:= StrToInt(Edit1.Text);
MediaPlayer1.Notify := true;
MediaPlayer1.OnNotify := NotifyProc1;
MediaPlayer1.Play;
end;
procedure TForm1.NotifyProc1(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if Mode = mpStopped
thenbegin
Dec(B);
if B > 0then Play
end;
Notify := True;
end;
end;
procedure TForm1.NotifyProc2(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if Mode = mpStopped
thenbegin
Dec(C);
if C > 0then Play
end;
Notify := True;
end;
end;
procedure TForm1.btArreterClick(Sender: TObject);
begin
if Arretautorise then
begin
MediaPlayer1.Stop;
end;
end;
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 1 juin 2007 à 13:03
Salut,
Je n'ai pas Delphi ici, mais il semblerait que TMediaPlayer ai une propriété NotifyValue.
Essaie comme ça (En corrigeant les espaces...) :
procedure TForm1.NotifyProc1(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if NotifyValue = nvSuccessfull
thenbegin
Dec(B);
if B > 0then Play
end;
Notify := True;
end;
end;
revsys
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention 7 juin 2007 1 juin 2007 à 17:17
Oui merci rt15 ça marche !
Allez savoir pourquoi mpStopped ne fonctionnait pas avec l'EXE...
Mais bon evidemment j'ai encore un petit problème...
La première fois que j'ouvre l'application, le nombre entré est pris en compte, le son est joué x fois.
Mais si je rappuie sur Play, le son est joué (x - 1)fois.
Une idée ?<!-- / message -->
revsys
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention 7 juin 2007 1 juin 2007 à 17:21
Le code est le suivant :
procedure TForm1.btJouerClick(Sender: TObject);
begin
Lecteur;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if(Key <> chr(8))and((Key < '0')or(Key > '9'))then
begin
Key := chr(0);
end;
end;
procedure TForm1.Lecteur;
begin
if RadioBtmont.Checkedthen
begin
Arretautorise := true;
MediaPlayer1.FileName := 'C:\Sons expérience\MONTE.wav';
MediaPlayer1.Open;
B:= StrToInt(Edit1.Text);
MediaPlayer1.Play;
if B <> 1then
begin
MediaPlayer1.Notify := true;
MediaPlayer1.OnNotify := NotifyProc1
end;
end;
if RadioBtdesc.Checkedthen
begin
Arretautorise := true;
MediaPlayer1.FileName := 'C:\Sons expérience\DESC.WAV';
MediaPlayer1.Open;
C:= StrToInt(Edit2.Text);
MediaPlayer1.Play;
if C <> 1then
begin
MediaPlayer1.Notify := true;
MediaPlayer1.OnNotify := NotifyProc2;// Appel de la procédure NotifyProc
end;
end;
end;
procedure TForm1.NotifyProc1(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if NotifyValue = nvSuccessful then // Nouvelle ligne
begin
Dec(B);
if B > 0then
begin
Play;
end;
end;
Notify := True;
end;
end;
procedure TForm1.NotifyProc2(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if NotifyValue = nvSuccessful then // Nouvelle ligne
begin
Dec(C);
if C > 0then
begin
Play;
end;
end;
Notify := True;
end;
end;
procedure TForm1.btArreterClick(Sender: TObject);
begin
if Arretautorise then
begin
MediaPlayer1.Stop;
end;
end;