29. april 2002 - 13:48Der 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.
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??
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.
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.
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
Synes godt om
Ny brugerNybegynder
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.