|
| PlaySound Fra : Bjarke Walling Peter~ |
Dato : 10-03-02 13:02 |
|
Hej.
Jeg er lidt nybegynder i Delphi, men har i lang tid programmeret i andre
programmeringssprog - f.eks. Visual Basic. Når jeg i VB ønsker at afspille
en lyd (ret simpelt) kalder jeg blot PlaySound i winmm.dll (en del af
Windows API). Det virker udemærket.
Og det er så her at mit problem kommer. Jeg vil nemlig gerne lave det
tilsvarende i Delphi. Men når jeg så trykker på en knap (hvor jeg i OnClick
kalder PlaySound) går der lang tid før den spiller lyden første gang (hver
gang programmet lige er startet). Når jeg så efterfølgende trykker på
knappen er det helt normalt. Jeg ville gerne have at lyden blev spillet med
det samme når man trykker på knappen - også første gang!
Hvis det kan hjælpe med opklaringen af problemet er koden her:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MmSystem {gør så jeg kan kalde PlaySound};
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound('C:\WINNT\Media\chimes.wav',0,SND_ASYNC);
end;
end.
På forhånd tak!
- Bjarke Walling Petersen
| |
Olav M.J. Christians~ (10-03-2002)
| Kommentar Fra : Olav M.J. Christians~ |
Dato : 10-03-02 14:13 |
|
"Bjarke Walling Petersen" <bwp@bwp.dk> skrev i en meddelelse
news:3c8b4bd1$0$37668$edfadb0f@dspool01.news.tele.dk...
[snip]
> tilsvarende i Delphi. Men når jeg så trykker på en knap (hvor jeg i
OnClick
> kalder PlaySound) går der lang tid før den spiller lyden første gang (hver
> gang programmet lige er startet). Når jeg så efterfølgende trykker på
> knappen er det helt normalt. Jeg ville gerne have at lyden blev spillet
med
> det samme når man trykker på knappen - også første gang!
[snip]
Jeg har prøvet din kode på en Win98-baseret maskine, og kan ikke høre nogen
mærkbar forskel på starttidspunktet. Er det kun med den indbyggede
Chimes.wav lyd, du har problemet, eller er det monstro når du prøver at
afspile meget lange wav-filer???
Olav
| |
Bjarke Walling Peter~ (10-03-2002)
| Kommentar Fra : Bjarke Walling Peter~ |
Dato : 10-03-02 15:02 |
|
Olav M.J. Christiansen skrev:
> Jeg har prøvet din kode på en Win98-baseret maskine, og kan ikke høre
nogen
> mærkbar forskel på starttidspunktet. Er det kun med den indbyggede
> Chimes.wav lyd, du har problemet, eller er det monstro når du prøver at
> afspile meget lange wav-filer???
>
> Olav
Det er ved alle .wav-filer.
Men jeg kan ligeså godt sige: UPS! ...
Jeg havde kun testet mit program på min og 3 andre computere - alle med
Win2k - så jeg ville lige teste det på en computer med Win98. Så jeg
flyttede den compilerede .exe-fil over på den og kørte den. Ingen problemer.
Jeg prøvede så at køre den (.exe-filen) på min egen computer. Og så virkede
det også fint. Da jeg så prøvede at køre programmet i Delphi-miljøet var
problemet der igen.
Min konklusion på dette er at det kun er når man kører programmet i
Delphi-miljøet at der er en "førstegangsventetid". Det burde jeg selv have
fundet ud af!
Hvorfor at det så forholder sig sådan har jeg dog ingen forklaring på. Har
du det?
Ellers tak for dit svar.
- Bjarke Walling Petersen
| |
stephen frederiksen (10-03-2002)
| Kommentar Fra : stephen frederiksen |
Dato : 10-03-02 16:37 |
|
> Da jeg så prøvede at køre programmet i Delphi-miljøet var
> problemet der igen.
>
husk altid at teste programmet 'udenfor' delphi.
og gerne på en delphi-fri maskine.
delphi loader/har loadet en masse drivers etc. som kan give et andet
'billede' af programmet.
stephen
| |
Wiljan (10-03-2002)
| Kommentar Fra : Wiljan |
Dato : 10-03-02 23:35 |
|
Hej
Er det ikke "bare" fordi at wave filen skal loades fra harddisk til ram at
det tager længere tid første gang? jeg mener derefter har OS filen som
cache?
Hilsen Wiljan
"stephen frederiksen" <stephen@c.dk> skrev i en meddelelse
news:3c8b7db5$0$97417$edfadb0f@dspool01.news.tele.dk...
> > Da jeg så prøvede at køre programmet i Delphi-miljøet var
> > problemet der igen.
> >
> husk altid at teste programmet 'udenfor' delphi.
> og gerne på en delphi-fri maskine.
> delphi loader/har loadet en masse drivers etc. som kan give et andet
> 'billede' af programmet.
> stephen
>
>
>
| |
René Jensen (10-03-2002)
| Kommentar Fra : René Jensen |
Dato : 10-03-02 23:03 |
|
Bjarke Walling Petersen wrote:
> Jeg havde kun testet mit program på min og 3 andre computere - alle med
> Win2k - så jeg ville lige teste det på en computer med Win98. Så jeg
> flyttede den compilerede .exe-fil over på den og kørte den. Ingen problemer.
> Jeg prøvede så at køre den (.exe-filen) på min egen computer. Og så virkede
> det også fint. Da jeg så prøvede at køre programmet i Delphi-miljøet var
> problemet der igen.
>
> Min konklusion på dette er at det kun er når man kører programmet i
> Delphi-miljøet at der er en "førstegangsventetid". Det burde jeg selv have
> fundet ud af!
> Hvorfor at det så forholder sig sådan har jeg dog ingen forklaring på. Har
> du det?
Der skulle ikke være nogen forskel om du kører dit program indenfra
Delphi miljøet eller eksekvere den færdigkompilerede .exe-fil, da Delphi
først kompilere programmet til en .exe-fil og kører denne.
Men det kan evt. have noget at gøre med at PlaySound først skal buffe
den wave-fil, som du ønsker at køre, det tager måske et par
mikro-sekunder at få loadet op i hukommelsen, og så længe programmet
kører, så har programmet jo buffet wave-filen, og afspilningen af filen
vil foregå direkte fra hukommelsen uden at skulle loades fra disk, som
sker første gang afspilningen kaldes fra programmet. Det er den eneste
logiske forklaring jeg umiddelbart kan give, men det virker en anelse
underligt at det skulle give en hørtbar pause før første afspilning da
jeg selv ikke har oplevet dette problem ved at lave autorun programmer
til CD'ere.
--
Med venlig hilsen,
René Jensen
Once a upon a time a wise man said to me:
"I consider Windows like I consider bad weather ... I accept it and hope
for something better"
| |
Bjarke Walling Peter~ (10-03-2002)
| Kommentar Fra : Bjarke Walling Peter~ |
Dato : 10-03-02 23:59 |
|
René Jensen skrev:
[snip]
> Men det kan evt. have noget at gøre med at PlaySound først skal buffe
> den wave-fil, som du ønsker at køre, det tager måske et par
> mikro-sekunder at få loadet op i hukommelsen, og så længe programmet
> kører, så har programmet jo buffet wave-filen, og afspilningen af filen
> vil foregå direkte fra hukommelsen uden at skulle loades fra disk, som
> sker første gang afspilningen kaldes fra programmet. Det er den eneste
> logiske forklaring jeg umiddelbart kan give, men det virker en anelse
> underligt at det skulle give en hørtbar pause før første afspilning da
> jeg selv ikke har oplevet dette problem ved at lave autorun programmer
> til CD'ere.
Jeg tror ikke det er fordi wave-filen skal buffes først. Ellers kan jeg ikke
se nogen forklaring på at det altid virker i Visual Basic (både i VB-miljøet
og kompileret).
Angående tiden før den bliver spillet kan jeg sige at det er virkelig
meget - ca. 10 sekunder. Men altså stadigvæk kun første gang jeg kalder
PlaySound og kun i delphi-miljøet.
Jeg har førhen tænkt på den forklaring at winmm.dll skal loades af
programmet første gang man vil kalde PlaySound-funktionen i den, men igen:
Hvorfor forekommer det så kun i delphi-miljøet og ikke i VB-miljøet eller i
kompilerede .exe-filer.
Mvh. Bjarke
| |
Olav M.J. Christians~ (11-03-2002)
| Kommentar Fra : Olav M.J. Christians~ |
Dato : 11-03-02 00:13 |
|
"Bjarke Walling Petersen" <bwp@bwp.dk> skrev i en meddelelse
news:3c8be5ca$0$37666$edfadb0f@dspool01.news.tele.dk...
[snip]
> Hvorfor forekommer det så kun i delphi-miljøet og ikke i VB-miljøet eller
i
> kompilerede .exe-filer.
[snip]
Spørg Borland selv, f.eks. på borland.public.delphi....
M.v.h.
Olav
| |
Thomas Schulz (20-03-2002)
| Kommentar Fra : Thomas Schulz |
Dato : 20-03-02 00:52 |
|
> Der skulle ikke være nogen forskel om du kører dit program indenfra
> Delphi miljøet eller eksekvere den færdigkompilerede .exe-fil, da Delphi
Kommer an på
En gang jeg kørte med fuld debug etc. i en multithreadet app tog det hen ad
10 minutter at få slettet en tom fil i papirkurven :).
Det er så et ekstremt tilfælde som kun er sket 1-2 gange for mig, men
generelt sløver det programmet at køre det inde fra Delphi er min erfaring.
Thomas
| |
René Jensen (21-03-2002)
| Kommentar Fra : René Jensen |
Dato : 21-03-02 00:30 |
|
Thomas Schulz wrote:
> ... tog det hen ad 10 minutter at få slettet en tom fil i papirkurven
Øhh, hvem bruger lige papirkurven?
--
Med venlig hilsen,
René Jensen
Once a upon a time a wise man said to me:
"I consider Windows like I consider bad weather ... I accept it and hope
for something better"
| |
|
|