Autor Beitrag
AlA
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Sa 15.03.03 11:48 
Folgendes Problem:
Ich habe ein ziemlich geiles Spiel programmiert, will jetzt aber noch Sounds einbauen. Ich wollte das mit WINDOWS.BEEP(,) machen.

Das Problem ist, dass Delphi dann alle anderen Vorgänge (bei mir die Flugbewegung von Raumschiffen), während der Sound abgespielt wird, anhält. Ich habe mir überlegt ob man nicht den Sound auf einer anderen Form abspielt (diese bleibt dann aber im Hintergrund und wird nich anvisiert). Hat da jemand vielleicht eine gute Idee????

Moderiert von user profile iconTino: Absätze entfernt & Titel geändert.

_________________
ala
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Sa 15.03.03 11:55 
Wie hast du das Spiel denn programmiert?
Wenns nicht mit DelphiX ist dann versuchs doch mal mit dem TMediaPlayer ;)
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 15.03.03 15:04 
Ich würde dir doch zu PlaySound() raten. Du kannst sounds asynchron abspielen, loopen, und: du kannst sie aus dem RAM spielen, also im Vorraus laden und dann den HDD-zugriff einsparen.

[Nachtrag]
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  Mem: Pointer;
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('test.wav', fmRead);
  GetMem(Mem, Stream.Size);
  Stream.Read(Mem^, Stream.Size);
  Stream.Free;
  {...}
  PlaySound(Mem, 0, Snd_Memory Or Snd_Async Or Snd_Nodefault);
  {...}
  FreeMem(Mem);

_________________
Life is a bad adventure, but the graphic is really good!
AlA Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Sa 15.03.03 16:35 
Titel: Danke
Es ist ein Schulprojekt. Ich habe jetzt einen 2D-Spaceshooter, 2 Raumschiffe die man steurn kann fliegen halt durch die gegend, können sich abschießen(MG, Suchraketen..) u.s.w. Sind jetzt schon über 1000 Zeilen.

Ich wollte auf den PC-Speaker zurückgreifen, weil das Spiel bei den Schul-PCs (450 Mhz) nicht mehr wirklich flüssig läuft. Mediaplayer ist keine gute Idee, nimmt zuviel Speicher weg. Ich dachte ich könnte kleiene Programme schreiben, die einfach nur einen Sound abspielen und sich dann gleich schließen wenn sie ferig sind (WIE KANN ICH DAS OHNE BUTTONS MACHEN?). Wie kann ich eine Datei durch Delphi starten lassen?

Moderiert von user profile iconTino: Absätze entfernt.

_________________
ala
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Sa 15.03.03 16:45 
Hi.

Wenn ich das richtig in Erinnerung habe ist MessageBeep() asynchron.

Gruß,
Markus
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Sa 15.03.03 20:43 
Ich würde auch PlaySound nehmen!
Und ich würde meinen Beiträgen richtige Bezeichnungen geben! Z.b. Soundproblem mit Windows.beep, u.ä.

maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 15.03.03 21:10 
Keine ahnung, ob MessageBeep() asynchon arbeitet. Aber da ist doch öde! Und außerdem ist der Sound auf jedem System anders. Das taugt null-komma-nix. Nimm PlaySound(). Der einzige Haken: Wenn man Waves nicht selber machen kann (und das können nicht alle)... woher krigt man Free Waves? Da gab's schonmal 'ne Diskussion. Keine Ahnung, was rausgekommen ist.

_________________
Life is a bad adventure, but the graphic is really good!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 16.03.03 14:44 
hast du das mit DelphiX gemacht AlA wenn ja hätte ich eine Frage: hast du das mit Sprints gemacht? Wenn nicht könntes du mir mal denn Qullcode geben ?

und zu deinem problem: nehm Fmod(www.fmod.de) das ist die einfachste und beste lösung für Sound probleme.

und wenn es zu langsamm läuft auf einem 450 MHZ rechner: Kannst du denn qullcode nicht optimieren?

z.b. Sokubahn brauchte 600 MS zum laden(zimlich lange) und ich habe es geschaft es auf 280 zu brigen. Aber leider braucht die musik funktion CA 180 MS.

_________________
MFG
Michael Springwald, "kann kein englisch...."
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 16.03.03 16:40 
@AlA: Bitte gibt Deinen Topics in Zukunft einen vernüftigen Titel. Hier ein Auszug aus den Richtlinien:
Richtlinien hat folgendes geschrieben:
1.1 Beiträge

Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. [...]

Dank Dir!

Gruß
TINO
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 16.03.03 17:13 
Du könntest den Beeps auch in einem anderen Thread laufen lassen.

Z.B so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
type
  TBeepThread = class(TThread)
  public
    FBeepFreq: Integer; // sound frequency, in hertz
    FBeepDuration: Integer; // sound duration, in milliseconds
  protected
    procedure Execute; override;
  end;


implementation

{$R *.dfm}


procedure TBeepTHREAD.Execute;
begin
  Windows.Beep(FBeepFreq, FBeepDuration);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  BeepThread: TBeepThread;
begin
  BeepThread := TBeepThread.Create(False);
  BeepThread.FBeepFreq := 1000;
  BeepThread.FBeepDuration := 1000;
  BeepThread.Resume;
end;