Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sounds gleichzeitig abspielen (https://www.delphipraxis.net/156882-sounds-gleichzeitig-abspielen.html)

w4rheart 18. Dez 2010 19:11

Sounds gleichzeitig abspielen
 
Hallo,

Ich habe schon mehrfach nach einer einfach praktikablen Lösung gesucht, und bin nicht wirklich fündig geworden.

Ich habe 2 wav dateien "schuss.wav" und "explosion.wav".
DAs ganze ist ein netzwerkspiel, es kommt also vor, dass gleichzeitig mehrere Spieler schiessen, oder explosionen auftreten.

Beide wavs sollen also gleichzeitig abgespielt werden können, und es soll auch z.b. schuss.wav mehrmals gleichzeitig abgespielt werden (wenn 2 oder mehr spieler schiesse).

Wie mache ich das am besten? Bass.dll würde ich am liebsten vermeiden.
Könnte mir jemand eine einfachere Lösung präsentieren?

MfG

turboPASCAL 18. Dez 2010 19:27

AW: Sounds gleichzeitig abspielen
 
Zitat:

Wie mache ich das am besten? Bass.dll würde ich am liebsten vermeiden.
Dann nimm Bei Google suchenfmod. :stupid: ;)

An ansonsten mit waveoutopen, waveoutwrite etc. pp. das Rad neu erfinden.

hathor 18. Dez 2010 19:44

AW: Sounds gleichzeitig abspielen
 
Der Mediaplayer kann als Komponente mehrfach ins Programm eingebunden werden und funktioniert parallel und unabhängig.

w4rheart 18. Dez 2010 20:18

AW: Sounds gleichzeitig abspielen
 
^ aber kann ein Mediaplayer nicht immer nur ein Datei abspielen?
das Problem was ich habe ist, dass ich nicht weiss wie viele Wavs/wie of die Wave gleichzeitig abgespielt werden/wird!
Das hängt davon wie viele benutzer im spiel sind und gleichzeitig z.b. schiessen.

Muss/kann ich dann immer einen neuen mediaplayer erstellen?

MfG

lbccaleb 18. Dez 2010 21:06

AW: Sounds gleichzeitig abspielen
 
Zitat:

Zitat von w4rheart (Beitrag 1069294)
Muss/kann ich dann immer einen neuen mediaplayer erstellen?

MfG

Klar, aber irgendwann ist der Speicher voll... ...was allerdings seine Zeit brauchen wird :)

w4rheart 18. Dez 2010 21:55

AW: Sounds gleichzeitig abspielen
 
Wie funktioniert das ganz denn?
ich kenne mich mit Mediaplayern etc. nicht aus.

Kann da jemand evtl. ein Biespiel posten?

w4rheart 19. Dez 2010 14:44

AW: Sounds gleichzeitig abspielen
 
Wie erstelle ich denn einen Mediaplayer ohne den Mediaplayer auf die GUI (Form1) zu ziehen?
Der Owner muss ja von TComponent sein, was geb ich dem ganzen denn dann mit?

lbccaleb 19. Dez 2010 15:05

AW: Sounds gleichzeitig abspielen
 
Na genauso wie andere Komponenten auch:

Delphi-Quellcode:
var
MediaPlayer: TMediaPlayer;

MediaPlayer := TMediaPlayer.Create(Application);
MediaPlayer.Parent := Self;
...

w4rheart 23. Dez 2010 02:21

AW: Sounds gleichzeitig abspielen
 
Hallo,

Ich habe nun folgendes entdeckt:
OpenAL

inklusive Links zu Tutorials:
http://www.noeska.com/doal/tutorials.aspx

Allerdings kann ich keine Demo kompilieren.
Habe mir die ganzen Header files wie Alut und Altypes geladen, der Compiler hängt aber bei folgender Zeile:
Delphi-Quellcode:
AlutInit(nil,argv); //(FormCreate)


Wenn ich es ohne Parameter übergebe wird kompiliert, allerdings erhalte ich darauf direkt nach dem Start eine Fehlermeldung:
EAccessViolation read of 00000...

Kennt sich jemand mit OpenAL aus, und kann mir dabei helfen?

freundliche Grüße

w4rheart 24. Dez 2010 15:43

AW: Sounds gleichzeitig abspielen
 
Sooo, Freunde der Sonne ;)
Frohe Weihnachten euch Allen :)

Ich habe es immer noch nicht hingekriegt :D
Ich benutze jetzt OpenAL und kann damit auch Sounds übereinander abspielen!
Allerdings werden die Sounds nicht richtig abgespielt.

Der Explosion Sound wird zu leise und zu kurz(!!!) abgespielt.
Der Schuss Sound wird immer 2x abespielt (???)

Wie das sein kann verstehe ich nicht:
Hier ein Ausschnitt aus meinem Code:
Delphi-Quellcode:
..
const
  numbuffers = 2;
  numsources = 2;
  schuss = 0;
  explosion = 1;

var
  buffer : array [0..numbuffers] of TALuint;
  source : array [0..numsources] of TALuint;
  sourcepos: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0 );
  sourcevel: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0 );
  listenerpos: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0);
  listenervel: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0);
  listenerori: array [0..5] of TALfloat= ( 0.0, 0.0, -1.0, 0.0, 1.0, 0.0);

implementation

constructor TSound.Create;
var
  argv: array of PChar;
  format: TALEnum;
  size: TALSizei;
  freq: TALSizei;
  loop: TALInt;
  data: TALVoid;

begin
  AlutInit(nil,argv);

  AlGenBuffers(numbuffers, @buffer);
  AlutLoadWavFile('sounds/bomb.wav', format, data, size, freq, loop);
  AlBufferData(buffer[explosion], format, data, size, freq);
  AlutUnloadWav(format, data, size, freq);

  AlutLoadWavFile('sounds/laserbeamz.wav', format, data, size, freq, loop);
  AlBufferData(buffer[schuss], format, data, size, freq);
  AlutUnloadWav(format, data, size, freq);

  AlGenSources(numsources, @source);
  AlSourcei ( source[schuss], AL_BUFFER, buffer[schuss]);
  AlSourcef ( source[schuss], AL_PITCH, 1.0 );
  AlSourcef ( source[schuss], AL_GAIN, 1.0 );
  AlSourcefv ( source[schuss], AL_POSITION, @sourcepos);
  AlSourcefv ( source[schuss], AL_VELOCITY, @sourcevel);
  AlSourcei ( source[schuss], AL_LOOPING, loop);

  AlSourcei ( source[explosion], AL_BUFFER, buffer[explosion]);
  AlSourcef ( source[explosion], AL_PITCH, 1.0 );
  AlSourcef ( source[explosion], AL_GAIN, 1.0 );
  AlSourcefv ( source[explosion], AL_POSITION, @sourcepos);
  AlSourcefv ( source[explosion], AL_VELOCITY, @sourcevel);
  AlSourcei ( source[explosion], AL_LOOPING, loop );

  AlListenerfv ( AL_POSITION, @listenerpos);
  AlListenerfv ( AL_VELOCITY, @listenervel);
  AlListenerfv ( AL_ORIENTATION, @listenerori);
end;

procedure TSound.playsound ( pname : string );
begin
  if pname = 'schuss' then AlSourcePlay(source[schuss])
  else if pname = 'explosion' then AlSourcePlay(source[explosion]);
end;
MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz