Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Mehrere WAV aus Resource gleichzeitig abspielen (https://www.delphipraxis.net/193492-mehrere-wav-aus-resource-gleichzeitig-abspielen.html)

Danny92 6. Aug 2017 11:57

Mehrere WAV aus Resource gleichzeitig abspielen
 
Hey,

ich plane ein Spiel zu programmieren. Dazu muss ich mehrere wav-Dateien, die in in einer Ressource geladen habe, abspielen können.

Mit SndPlaySound funktioniert das auch soweit. Nur wenn ich diese gleichzeitig abspiele, wird das eins von beiden unterbrochen.

Ich möchte keine Dateien auf der Platte schreiben müssen, sonst wär das mit der Resource ja völlig unnötig.

Wie kann ich das realisieren?

Lieben Dank!
Danny

jaenicke 6. Aug 2017 13:19

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Ich würde dafür die BASS Audio Bibliothek benutzen:
https://www.un4seen.com/

Danny92 6. Aug 2017 15:12

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Und wie genau nützt mir das was?
Was genau mach ich mit der Bass.dll?
:o

jaenicke 6. Aug 2017 17:38

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Hört sich so an als hättest du bisher nicht in die Beispiele oder Doku geschaut.

Ganz kurz: Du rufst BASS_StreamCreateFile auf um eine Datei oder einen Stream zu laden und spielst dann mit BASS_ChannelPlay ab. Das geht auch parallel mit mehreren Sounds.

Danny92 6. Aug 2017 19:30

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Okay aber da muss ich doch die Bass.dll benutzen? Wie geht das?
Sorry aber ich bin damit nicht so vertraut^^

Danny92 7. Aug 2017 12:43

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Hat da wirklich keiner ne Ahnung?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bass;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
strs: HStream;

implementation

{$R *.dfm}
{$R fx.res}

procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
strs:=BASS_StreamCreateFile(false,rs.Memory,0,0,0) ;
BASS_ChannelPlay(handle,false);
rs.Free;
end;

end.

jaenicke 7. Aug 2017 13:26

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Doch schon, aber ich habe darauf gewartet, dass du etwas zeigst wie du etwas versucht hast. ;-)

Schau dir mal die Doku zu BASS_StreamCreateFile an:
https://www.un4seen.com/doc/#bass/BA...reateFile.html
Speziell den ersten und vierten Parameter. Da sollte dir etwas auffallen.

Erklärung zum vierten Parameter:
Wenn du nur einen Pointer auf einen Speicherbereich übergibst, kann BASS anders als bei einer Datei nicht selbst feststellen wie lang dieser Speicherbereich ist.

Außerdem fehlt die Fehlerauswertung. Dazu steht da auch ein Hinweis drin:
Zitat:

Return value
If successful, the new stream's handle is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.

Danny92 7. Aug 2017 13:41

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
rs.Position:=0;
strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Si ze,0);
BASS_ChannelPlay(handle,false);
rs.Free;
end;

Sieht das so besser aus?

jaenicke 7. Aug 2017 13:58

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
Auf den ersten Blick ja, aber du solltest noch den Rückgabewert prüfen und ggf. den Fehlercode abrufen, wenn es nicht geklappt hat.

Dann kommen wir zum nächsten Befehl. Aktuell übergibst du das Handle des Formulars an BASS_ChannelPlay. Das macht keinen Sinn, meinst du nicht auch?
http://www.un4seen.com/doc/#bass/BASS_ChannelPlay.html

Danny92 7. Aug 2017 14:06

AW: Mehrere WAV aus Resource gleichzeitig abspielen
 
procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
code: bool;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
rs.Position:=0;
strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Si ze,0);
//BASS_ErrorGetCode;
code:=BASS_ChannelPlay(strs,false);
showmessage(inttostr(integer(code)));
rs.Free;
end;

Also würde das in etwa so aussehen? Wenn ich die Rückmeldung ausgebe, kommt 0 zurück. Scheint also alles in Ordnung zu sein? Höre aber trotzdem nichts...ich seh's nicht. :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.
Seite 1 von 3  1 23      

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