Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

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)

alfold 10. Jan 2011 14:28

AW: Sounds gleichzeitig abspielen
 
jo, geht mit der Bass.dll

Delphi-Quellcode:
private
     schus1, schus2, schus3: HSTREAM;
    song1: string;

....
....
procedure TForm1.FormCreate(Sender: TObject);
begin
    if not BASS_Init(1, 44100, 0, Handle, nil) then
     Application.Terminate;

   song1:= 'g:\Musik\PLAYER1\schuss.wav';
       
   schus1:= BASS_StreamCreateFile(False, pchar(song1),0, 0,BASS_SAMPLE_SOFTWARE
                         {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
   schus2:= BASS_StreamCreateFile(False, pchar(song1),0, 0, BASS_SAMPLE_SOFTWARE
                         {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
   schus3:= BASS_StreamCreateFile(False, pchar(song1),0, 0, BASS_SAMPLE_SOFTWARE
                         {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
end;

procedure TForm1.btnplay1Click(Sender: TObject);
begin
    if (BASS_ChannelIsActive(schus1) = 0) then
       BASS_ChannelPlay(schus1, False)
    else
    if (BASS_ChannelIsActive(schus2) = 0) then
       BASS_ChannelPlay(schus2, False)
    else
    if (BASS_ChannelIsActive(schus3) = 0) then
       BASS_ChannelPlay(schus3, False)
end;
....
....
So hab ich es mal umgesetzt und es funct. Wenn es sein muss must Du natürlich mehr HSTREAM (schus) erzeugen. Es kommt darauf an wie lang die wav ist und damit Du genügend hast wenn 3 nicht reichen!

Besser währe natürlich ein soundthread :wink:

gruss alold

w4rheart 10. Jan 2011 22:59

AW: Sounds gleichzeitig abspielen
 
Hallo alfold!
Danke für den Beispielcode.
Ich hab das ganze nun mal so verwendet wie du es gezeigt hast, allerdings höre ich nix!

Hier ein Auszug aus meinem Code:

Delphi-Quellcode:
unit mTSound;
..

  TSound = class
  constructor create;
  //destructor destroy; override;
  private
    schuss1, schuss2, schuss3 : HSTREAM;
    explosion1, explosion2, explosion3 : HSTREAM;
    schuss_path, explosion_path : string;

    procedure play_schuss;
    procedure play_explosion;
  public
    procedure playfile( pname : string);
  end;

..

constructor TSound.create;
begin
  if not BASS_Init(1, 44100, 0, 0, nil) then //HANDLE kannte derbei mir nicht, habs auf 0 gesetzt. Ist das der Fehler?
  begin
    showmessage('Bass.dll konnte nicht initialisiert werden!');
    exit;
  end;

   schuss_path := '/sounds/laserbeamz.wav';
   explosion_path := '/sounds/bomb.wav';

   schuss1 := BASS_StreamCreateFile(False, pchar(schuss_path),0, 0,BASS_SAMPLE_SOFTWARE
     {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
...

   explosion1 := BASS_StreamCreateFile(False, pchar(explosion_path),0, 0,BASS_SAMPLE_SOFTWARE
     {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
..
end;

procedure TSound.playfile ( pname : string );
begin
  if pname = 'explosion' then play_explosion
  else if pname = 'schuss' then play_schuss;
end;

procedure TSound.play_explosion;
begin
  if (BASS_ChannelIsActive(explosion1) = 0) then
     BASS_ChannelPlay(explosion1, False) //Wird afgerufen
  else
  if (BASS_ChannelIsActive(explosion2) = 0) then
     BASS_ChannelPlay(explosion2, False)
  else
...
end;

procedure TSound.play_schuss;
begin
...
end;
BASS_ChannelPlay wird auch aufgerufen, habe es Schritt für Schritt mit dem Compiler zur Laufzeit durchgespielt.
Warum hör ich nichts?

MfG

alfold 11. Jan 2011 08:55

AW: Sounds gleichzeitig abspielen
 
Is ja schön das Du ne eigen Classe dafür erstellst, ist aber nicht Nötig.
Handle ? Eigentlich must Du es angeben !? Da ich noch nie ne eigen classe mit der Bass.dll erstellt habe kann ich es nicht sagen:oops: Kann auch sein das in der uses was fehlt!?
Frage: stimmt den der Pfad?
schuss_path, explosion_path : string;
schuss_path := '????/sounds/laserbeamz.wav'; :?:
explosion_path := '????/sounds/bomb.wav'; :?:

Besser währe der Aufwand mit Thread.
Gruss alfold

P.S. als kleine Idee so am rande. Wenn Du jetzt noch mit Lautstärke und Panorama arbeitest, kannst Du sogar noch Entfernung und Ort bestimmen wo der sound herkommt.

w4rheart 11. Jan 2011 14:26

AW: Sounds gleichzeitig abspielen
 
:D ja das war der Fehler :oops: peinlich^^
Dachte der würde dann evtl eine Fehlermeldung auswerfen... :roll:

Es funktioniert nun alles, Danke nochmal für deine Hilfe alfold!

Bis demnächst ;)

Mit freundlichen Grüßen
w4rheart

alfold 11. Jan 2011 14:29

AW: Sounds gleichzeitig abspielen
 
Schau dir mal die Bass Hilfe an, da stehen die Fehlercode drin und wie Du sie abfangen kannst 8-)

Gruss alfold

rollstuhlfahrer 11. Jan 2011 15:41

AW: Sounds gleichzeitig abspielen
 
also ne Klasse mit der BassDLL gibts unter Hier im Forum suchenBassPlayerEx. Wie das da gemacht wird, müsste ich nachschauen.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 5 von 5   « Erste     345   

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