Avatar billede r.hegaard Nybegynder
27. juli 2003 - 00:02 Der er 9 kommentarer og
1 løsning

Afspille to lyde efter hinanden

Hvordan afspiller man to lyde lige efter hinanden i Delphi ??
Og hvordan udfører en handling, efter en lyd er færdig afspillet ??
Avatar billede stoney Nybegynder
27. juli 2003 - 01:37 #1
uses mmsystem

procedure sound_is_over;
begin
showmessage('Over and out');
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound('d:\takemehome.WAV', HInstance, SND_FILENAME or SND_SYNC );
PlaySound('d:\test2.WAV', HInstance, SND_FILENAME or SND_SYNC );
sound_is_over;
end;

Stoney
Avatar billede eht Nybegynder
27. juli 2003 - 12:52 #2
Du kan bruge Mediaplayer-komponenten:

procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.FileName :=  'C:\first.WAV';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.FileName =  'C:\second.WAV' then exit;  //eller bliver den ved med at afspille 2. lyd
if not (MediaPlayer1.NotifyValue = nvSuccessful) then exit;
MediaPlayer1.FileName :=  'C:\second.WAV';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

//Erik
Avatar billede cms Nybegynder
27. juli 2003 - 17:42 #3
(husk MediaPlayer1.Close før MediaPlayer1.FileName :=) .. eller?
Avatar billede eht Nybegynder
28. juli 2003 - 12:50 #4
Det er vist ikke nødvendigt med "MediaPlayer1.Close" her.
Det er f.eks. nødvendigt hvis man vil slette filen som afspilles, altså "MediaPlayer1.Filename".

//Erik
28. juli 2003 - 12:57 #5
Jeg sætter en timer på formen, med værdien 100, dvs at den trigger 10 gange i sekundet.

procedure Timer1(Sender: TObject);
begin
  if MediaPlayer1.Position = MediaPlayer1.Length then  // Lyd er færdig.
  begin

    ...
 
  end;
end;
// Jeg er ikke sikker på procedure hovedet, jeg har ikke Delphi på den maskine jeg sidder ved her.
// Men når du dobbelt klikker på timer iconet, danner Delphi selv procedure hovedet.
Avatar billede athlon-pascal Juniormester
28. juli 2003 - 13:34 #6
OnTimer...
Avatar billede athlon-pascal Juniormester
28. juli 2003 - 13:35 #7
Men jeg tvivler på at timerløsningen er den bedste løsning...
28. juli 2003 - 13:48 #8
Det ved jeg heller ikke, men det virker.
Jeg bruger det med held, i et musik afviklings program jeg har lavet til en lokalradio.
Jeg kunne nemlig hverken få Notify eller Wait til at virke ordentlig.
MediaPlayer1.Close er nødvendig for at frigive filen til andre apps. ved den sidst spillede fil, det gamle filnavn bliver frigivet når det nye bliver loadet ind.
Avatar billede r.hegaard Nybegynder
30. juli 2003 - 12:40 #9
Umiddelbart så synes jeg at der virker bedst med
PlaySound('d:\test.wav', HInstance, SND_FILENAME or SND_SYNC );
da den holder pause i koden, indtil den har afspillet filen.
Jeg synes bare at det er som om den holder en lille pause, mellem to filer, der skal afspilles efter hinanden. Kan man gøre noget ved det ??
Avatar billede r.hegaard Nybegynder
30. august 2003 - 12:54 #10
stoney > Jeg har prøvet at bruge dit forslag, det virker faktisk også rimeligt godt, problemet er bare, at der alligevel kommer et kort ophold mellem to lyde, der skal afspilles lige efter hinanden.....
Hvordan får jeg dem afspillet lige efter hinanden uden ophold ??
Kan man evt. sammensætte lydene til en lyd, og så afspille den ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester