![]() |
.XM Datei als Resource laden
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:
und so geht's nicht:
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);
Delphi-Quellcode:
Den Resource-Stream lade ich über die Chiptunes.rc Datei die ich vorher mit BRCC32.exe Chiptunes.rc generiert habe:
{$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);
Delphi-Quellcode:
Gruss Alois ;)
100 RCDATA DISCARDABLE "music.xm"
|
Re: .XM Datei als Resource laden
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. |
Re: .XM Datei als Resource laden
Ich habe versuchsweise mal einen Pointer erstellt und mir den Memory-Dump dazu angesehen. Der Pointer verweist auf den Speicherinhalt der Musikdatei.
Delphi-Quellcode:
Fehlermeldungen von bass.dll gibt es keine.
var
TestPtr: Pointer; ... TestPtr := LoadFromResourceID(100, RT_RCDATA); XMStream := BASS_MusicLoad(False, TestPtr, 0, 0, BASS_MUSIC_STOPBACK or BASS_MUSIC_RAMP, 0); Gruss Alois ;) |
Re: .XM Datei als Resource laden
Ich habe einen
![]() Und so geht's: Chiptunes.RC
Delphi-Quellcode:
Ausschnitt aus dem Programm:
XMMUSIC RCDATA "music.xm"
Delphi-Quellcode:
Gruss Alois ;)
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); |
Re: .XM Datei als Resource laden
Liste der Anhänge anzeigen (Anzahl: 1)
Und im Anhang eine kleine Demo:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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