![]() |
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 |
AW: Sounds gleichzeitig abspielen
Zitat:
![]() An ansonsten mit waveoutopen, waveoutwrite etc. pp. das Rad neu erfinden. |
AW: Sounds gleichzeitig abspielen
Der Mediaplayer kann als Komponente mehrfach ins Programm eingebunden werden und funktioniert parallel und unabhängig.
|
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 |
AW: Sounds gleichzeitig abspielen
Zitat:
|
AW: Sounds gleichzeitig abspielen
Wie funktioniert das ganz denn?
ich kenne mich mit Mediaplayern etc. nicht aus. Kann da jemand evtl. ein Biespiel posten? |
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? |
AW: Sounds gleichzeitig abspielen
Na genauso wie andere Komponenten auch:
Delphi-Quellcode:
var
MediaPlayer: TMediaPlayer; MediaPlayer := TMediaPlayer.Create(Application); MediaPlayer.Parent := Self; ... |
AW: Sounds gleichzeitig abspielen
Hallo,
Ich habe nun folgendes entdeckt: OpenAL inklusive Links zu Tutorials: ![]() 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 |
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:
MfG
..
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz