Entwickler-Ecke
Multimedia / Grafik - Window.Beep im Hintergrund
AlA - Sa 15.03.03 11:48
Titel: Window.Beep im Hintergrund
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
Tino: Absätze entfernt & Titel geändert.
Da_Knuddelbaer - 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 - 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]
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); |
AlA - 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
Tino: Absätze entfernt.
DaFox - Sa 15.03.03 16:45
Hi.
Wenn ich das richtig in Erinnerung habe ist MessageBeep() asynchron.
Gruß,
Markus
maxk - 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
Andreas Pfau - 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.
mimi - 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(
http://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.
Tino - 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 - So 16.03.03 17:13
Du könntest den Beeps auch in einem anderen Thread laufen lassen.
Z.B so:
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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!