AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Mehrere WAV aus Resource gleichzeitig abspielen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere WAV aus Resource gleichzeitig abspielen

Ein Thema von Danny92 · begonnen am 6. Aug 2017 · letzter Beitrag vom 14. Aug 2017
Antwort Antwort
Seite 2 von 3     12 3      
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#11

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 8. Aug 2017, 01:46
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.
Na ja, wenn du die Meldung ausgibst und da 0 zurückkommt, dann bedeutet das, dass BASS_ChannelPlay False zurückgegeben hat, und das würde ich so interpretieren dass da etwas NICHT in Ordnung ist.
Ich weiß aber nicht, was das falsch ist.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 8. Aug 2017, 04:24
Welchen Wert hat denn strs?
Das ist ja erst einmal wichtig um zu schauen, ob das Laden erfolgreich war.
Denn ich sehe kein BASS_Init, so dass dort ggf. als Fehler auftritt, dass das nicht aufgerufen wurde.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 9. Aug 2017, 01:23
Ja die BASS_Init hat noch gefehlt. Jetzt spielt es.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs:=TResourceStream.Create(hInstance,'intro','WAV');
  Bass_Init(-1,44100,0,Application.Handle,nil);
  rs.Position:=0;
  strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Size,0);
  BASS_ChannelPlay(strs,false);
  rs.Free;
end;
Noch eine letzte Frage: Sieht das soweit in Ordnung aus? Programmiertechnisch betrachtet Die Rückgabewerte brauch ich für den Fall ja eigentlich nicht wirklich oder? Wie würde das sonst eleganterweise aussehen? Und wenn ich bei ChannelPlay den zweiten Parameter Restart auf true setze, spielt es trotzdem nur einmal. Bestimmt hab ich da was übersehen?

Auf jeden Fall ein großes Danke!

Geändert von Danny92 ( 9. Aug 2017 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 9. Aug 2017, 09:37
Rückgabewerte von Funktionen die einem einen Fehlercode liefern sollte man immer auswerten um im Programmablauf entsprechend darauf reagieren zu können.

Irgendwann versucht du bspw. mal eine Datei abzuspielen die defekt ist. Wenn du die Rückgabewerte jetzt nicht auswertest und entsprechende Fehlermeldungen anzeigst/protokollierst, dann wunderst du dich warum kein Sound kommt. Wenn du dann irgendwann darauf kommst das die Datei defekt ist, dann sagst du dir: "Wieso habe ich damals in mein Programm keine Fehlerbehandlung eingebaut?! Dann wäre mir die halbe Stunde Suche erspart geblieben!"


Und ein Hinweis: Fasse SourceCode doch bitte in Delphi-Tags ein (das Delphi Helm Symbol über dem Editor). Dein SourceCode sieht dann gleich viel besser aus und lässt sich auch viel leichter lesen.

Code:
[DELPHI]
  SourceCode hier
[/DELPHI]
Beispiel wie dein SourceCode dann aussehen würde:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs:=TResourceStream.Create(hInstance,'intro','WAV' );
  Bass_Init(-1,44100,0,Application.Handle,nil);
  rs.Position:=0;
  strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Si ze,0);
  BASS_ChannelPlay(strs,false);
  rs.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 10. Aug 2017, 14:11
Ok das hab ich soweit verstanden.

Nun noch das letzte Problem: Die bass.dll wird ja noch verwendet. Die muss ich in die Resource als RCDATA mit einbinden zum kompilieren, was ich schon mal getan habe.
Wie kann ich nun zur Laufzeit auf diese zugreifen?

Ich hab schon einiges mit PBTMemoryModule ausprobiert, wo mir Delphi aber nicht wirklich weiterhilft.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: byte;
  ms: TMemoryStream;
  rs: TResourceStream;
  m_DLLDataSize: int64;
  mp_DllData: Pointer;
  btMM: PBTMemoryModule;
begin
  if 0 <> FindResource(hInstance, 'DllDatei', RT_RCDATA) then
  begin
    rs := TResourceStream.Create(hInstance, 'DllDatei', RT_RCDATA);
    ms := TMemoryStream.Create;
    try
      ms.LoadFromStream(rs);

      ms.Position := 0;
      m_DllDataSize := ms.Size;
      mp_DllData := GetMemory(m_DllDataSize);

      ms.Read(mp_DllData^, m_DllDataSize);
    finally
      ms.Free;
      rs.Free;
    end;
  end;
**btMM := BTMemoryLoadLibary(mp_DllData, m_DllDataSize);
**try
****if btMM = nil then Abort;
****@m_TestCallstd := BTMemoryGetProcAddress(btMM, 'TestCallstd');
****if @m_TestCallstd = nil then Abort;
****m_TestCallstd('Das ist ein DLL-Speicher Aufruf!');
**except
****Showmessage(Ein Fehler ist enstanden bei Aufruf der DLL : ' + BTMemoryGetLastError);
end;
if Assigned(btMM) then BTMemoryFreeLibrary(btMM);
end;
Sowas hab ich schon gefunden, Delphi kann mit PBTMemoryModule nix anfangen.

Kann mir da noch jemand helfen bitte?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 10. Aug 2017, 14:34
Google hilft:
https://github.com/DSPlayer/memorymodule

Aber gerade bei einem Spiel sehe ich die Notwendigkeit nicht. Da ist es doch eher komisch, wenn nicht noch DLLs und andere Dateien neben der Exe liegen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 10. Aug 2017, 22:09
Wenn ich die BTMemoryModule einbinde, kommt ne Fehlermeldung "ungültige Compileranweisung" in Zeile 50 der Datei (siehe Anhang)

Hää? Was is das denn für ne Scheiße...
Miniaturansicht angehängter Grafiken
bild.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 10. Aug 2017, 22:37
Du benutzt noch eine sehr alte Delphiversion. Da wirst du Anpassungen machen müssen, in den letzten knapp 20 Jahren seit dem Erscheinen von Delphi 6 hat sich nun einmal einiges getan. Mit neueren Delphiversionen funktioniert es direkt.

Wie wäre es mit der kostenlosen Starter Edition der aktuellen Delphiversion?
https://www.embarcadero.com/de/products/delphi/starter
Damit sollte der Quelltext kompilieren.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 13. Aug 2017, 14:56
Ja danke das sieht schon viel besser aus! Jetzt kompiliert es auch.

Allerdings muss bei Ausführung der exe immer noch die Bass.dll im Verzeichnis vorhanden sein, und ich weiß nicht warum. Wo im Code (Anhang) benutze ich die denn? Ich wäre echt dankbar, wenn mir jemand sagen könnte, wie ich die Bass.dll, die ich in der Resource schon hab und brauche, jetzt verwenden kann.
Angehängte Dateien
Dateityp: zip Schiffeversenken.zip (3,24 MB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 14. Aug 2017, 06:29
Naja, du lädst zwar die DLL aus dem Stream, benutzt sie aber danach gar nicht. Stattdessen benutzt du die statische Bindung via external:
Delphi-Quellcode:
const
{$IFDEF MSWINDOWS}
  bassdll = 'bass.dll';
{$ENDIF}
{$IFDEF LINUX}
  bassdll = 'libbass.so';
{$ENDIF}
{$IFDEF MACOS}
  bassdll = 'libbass.dylib';
{$ENDIF}

function BASS_SetConfig(option, value: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll;
Wenn du das so benutzt, sucht Windows beim Start der Anwendung nach der DLL bevor dein Code überhaupt ausgeführt wird. Stattdessen musst du die Funktionen dynamisch laden:
https://de.wikibooks.org/wiki/Progra...ches_Einbinden
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
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