Avatar billede roth Nybegynder
29. april 2002 - 13:48 Der er 5 kommentarer og
1 løsning

PlaySound underligheder

Jeg har en form med en timer, en editbox og en knap på. I editboksen kan man angive et antal minutter, trykker man på knappen overføres dette antal minutter til timerens interval-value. Når timerens interval nåes afspilles en lyd.
Pretty simple, skulle jeg mene, men den opfører sig ikke helt som planlagt. Her kommer lige lidt kode:
procedure TFormMain.TtimerTimer(Sender: TObject);
begin
  PlaySound('Fugleskrig.wav', 0, SND_SYNC);
end;

procedure TFormMain.BtnStartStopClick(Sender: TObject);
begin
  if FormMain.BtnStartStop.Caption = 'Start' then
  begin
    try
      FormMain.Ttimer.Interval := 60000*(StrToInt(FormMain.Einterval.Text));
      FormMain.Ttimer.Enabled := true;
      FormMain.BtnStartStop.Caption := 'Stop';
    except
      on E: EConvertError do
        showmessage('Du har indtastet et ikke gyldigt tal, prøv igen');
    end
  end
  else
  begin
    FormMain.Ttimer.Enabled := false;
    FormMain.BtnStartStop.Caption := 'Start';
  end;
end;

Ok, filen Fugleskrig.wav er 59 sekunder lang når jeg afspiller den i winamp. Når jeg sætter intervallet til at være 2 mins aktiveres lydfilen ganske rigtig efter 2 mins, men der bliver kun afspillet lyd i ca. 25 secs. hvorefter en ny periode på 2 mins stilhed følger.

Det er den korrekte fil der afspilles (jeg kan skifte den ud med andre).
30 points til den der kan hjælpe mig.

Btw, så skal jeg ikke have filen inkluderet i min .exe da den skal kunne skiftes ud uden rekompilering.

Mvh
Roth
Avatar billede stoney Nybegynder
29. april 2002 - 14:14 #1
procedure TFormMain.TtimerTimer(Sender: TObject);
begin
  PlaySound('Fugleskrig.wav', 0, SND_FILENAME + SND_ASYNC);
end;

Stoney
Avatar billede roth Nybegynder
29. april 2002 - 14:28 #2
ok det virker jo smukt, takker .. men hvorfor skal den snd_filename være der? Eller er det sårn en 'sårn er det bare' ting?

/Roth
Avatar billede roth Nybegynder
29. april 2002 - 14:35 #3
og en anden lille ting .. for at GUI skal virke logisk også hvis filen skiftes ud med en anden fil af anden længde, så er det smarteste så vidt jeg kan se at køre med SND_SYNC .. men gør jeg det sker det samme som før, den venter den korrekte tid som angivet i editboksen men spiller så kun lyden i ca. 25 secs. Hvofor??

Mvh
Roth
Avatar billede stoney Nybegynder
29. april 2002 - 14:58 #4
fra hjælpen:

Flags for playing the sound. The following values are defined:

SND_ASYNC

The sound is played asynchronously and the function returns immediately after beginning the sound. To terminate an asynchronously played sound, call sndPlaySound with lpszSoundName set to NULL.

SND_LOOP

The sound plays repeatedly until sndPlaySound is called again with the lpszSoundName parameter set to NULL. You must also specify the SND_ASYNC flag to loop sounds.

SND_MEMORY

The parameter specified by lpszSoundName points to an image of a waveform sound in memory.

SND_NODEFAULT

If the sound cannot be found, the function returns silently without playing the default sound.

SND_NOSTOP

If a sound is currently playing, the function immediately returns FALSE, without playing the requested sound.

SND_SYNC

The sound is played synchronously and the function does not return until the sound ends.

Stoney
Avatar billede roth Nybegynder
29. april 2002 - 15:09 #5
jow, jeg har også læst hjælpen, men det hjælper mig ikke meget.

Så vidt jeg kan forstå på hjælpen, så er SND_SYNC det jeg skal bruge. Hvis jeg i GUI'en angiver 2 minutters interval, vil jeg gerne have filen afspillet med 2 minutters stilhed mellem hver afspilning. Dvs hvis filen tager 1 minut at afspille så skal der være 2 mins stilhed, 1 mins lyd, 2 mins stilhed osv osv.
Hvis jeg bruger SND_ASYNC så opnår jeg ikke det, i stedet får jeg 2 mins stilhed (da jeg ikke afspiller filen ved aktivering), 1 mins lyd, og herefter kommer Resten af de 2 mins stilhed der skulle være (dvs kun 1 mins) og så kommer lyden igen. Det virker ulogisk når man jo har angivet at der skal være et 2 mins interval.

Som sagt, hvis jeg bruger SND_SYNC, så spiller den kun ca. 25 secs af lyden .. det kan jeg ikke bruge til noget. Er der måske en indbygget grænse ved SND_SYNC eller noget andet der forklarer hvad der sker? Er den måske begrænset af systemressourcer såsom ram?

Hvis du kan lave en version af proggy der virker som jeg gerne vil have smider jeg hellere end gerne yderligere 30 points i din retning.

/Roth
Avatar billede roth Nybegynder
29. april 2002 - 15:21 #6
Det skal måske tilføjes at jeg ikke vil hardcode et ekstra delay på f.eks. det 1 minut som den nuværende fil er. Det skal være muligt at skifte filen ud med en anden af anden længde, uden at man skal pille ved noget andet.
Måske hvis der er en funktion der kan finde længden af wave-filen og tage det med i udregningen af intervallet .. hvis det er muligt er det meget acceptabelt :)

/Roth
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