AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi .XM Datei als Resource laden
Thema durchsuchen
Ansicht
Themen-Optionen

.XM Datei als Resource laden

Ein Thema von Alois · begonnen am 16. Mai 2010 · letzter Beitrag vom 16. Mai 2010
Antwort Antwort
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#1

.XM Datei als Resource laden

  Alt 16. Mai 2010, 08:54
Hallo,

wenn ich über die bass.dll ein .XM Musikstück direkt von einer Datei abspiele funktioniert es.
Meine versuche es als Resource einzubinden und abzuspielen schlagen fehl. Hat jemand eine eine Idee was ich falsch mache?

so geht's:
Delphi-Quellcode:
BASS_Init(-1, 44100, 0, 0, nil);
XMFileName := ExtractFilePath(ParamStr(0)) + 'music.xm';
XMStream := BASS_MusicLoad(False, PChar(XMFileName), 0, 0,
   bass.BASS_MUSIC_STOPBACK or bass.BASS_MUSIC_RAMP, 0);
und so geht's nicht:
Delphi-Quellcode:
{$R Chiptunes.RES}

...

function TformAbout.LoadFromResourceID(ResourceID: Integer;
  ResourceTyp: PChar): Pointer;
var
  HResInfo: HRSRC;
  HGlobal: THandle;
begin
  HResInfo := FindResource(HInstance, MAKEINTRESOURCE(ResourceID), ResourceTyp);
  HGlobal := LoadResource(HInstance, HResInfo);
  if HGlobal = 0 then
    raise EResNotFound.Create('Can''t load resource: ' + IntToStr(ResourceID));
  Result := LockResource(HGlobal);
end;

...

BASS_Init(-1, 44100, 0, 0, nil);
XMStream := BASS_MusicLoad(False, LoadFromResourceID(100, RT_RCDATA), 0, 0, BASS_MUSIC_STOPBACK or BASS_MUSIC_RAMP, 0);
Den Resource-Stream lade ich über die Chiptunes.rc Datei die ich vorher mit BRCC32.exe Chiptunes.rc generiert habe:
100 RCDATA DISCARDABLE "music.xm" Gruss Alois
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: .XM Datei als Resource laden

  Alt 16. Mai 2010, 09:06
Befindet sich die Datei auch wirklich in der Ressource? Hast du das mal mit einem Ressourceneditor überprüft? Wird sie aus der Ressource auch korrekt extrahiert? Befindet sie sich dann auch auf der Festplatte als Datei (vollständig und unbeschädigt)? Befindet sie sich an der gewünschten Stelle*?

Gibt es irgendwelche Fehlermeldungen von der bass.dll?

Das würde mir jetzt mal so als Fehlerquelle einfallen.

*) Wobei das Anwendungsverzeichnis, wie bei dir, nicht sehr günstig ist, da dort dem Anwender eventuell Schreibrechte fehlen, um die Datei dort erstellen zu können.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: .XM Datei als Resource laden

  Alt 16. Mai 2010, 09:13
Ich habe versuchsweise mal einen Pointer erstellt und mir den Memory-Dump dazu angesehen. Der Pointer verweist auf den Speicherinhalt der Musikdatei.

Delphi-Quellcode:
var
  TestPtr: Pointer;

...

TestPtr := LoadFromResourceID(100, RT_RCDATA);
XMStream := BASS_MusicLoad(False, TestPtr, 0, 0, BASS_MUSIC_STOPBACK or BASS_MUSIC_RAMP, 0);
Fehlermeldungen von bass.dll gibt es keine.

Gruss Alois
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: .XM Datei als Resource laden

  Alt 16. Mai 2010, 10:42
Ich habe einen Link gefunden der mich weiter gebracht hat.
Und so geht's:

Chiptunes.RC
XMMUSIC RCDATA "music.xm" Ausschnitt aus dem Programm:
Delphi-Quellcode:
Resource := TResourceStream.Create(HInstance, PChar('XMMUSIC'), RT_RCDATA);
GetMem(Data, Resource.Size);
Resource.Read(Data^, Resource.Size);
XMStream := BASS_MusicLoad(True, Data, 0, Resource.Size, BASS_MUSIC_STOPBACK or BASS_MUSIC_RAMP, 0);
BASS_ChannelPlay(XMStream, True);
FreeMem(Data);
FreeAndNil(Resource);
Gruss Alois
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: .XM Datei als Resource laden

  Alt 16. Mai 2010, 11:09
Und im Anhang eine kleine Demo:
Angehängte Dateien
Dateityp: zip demo_167.zip (762,3 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:45 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