Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi MCISendString: Datei aus Resource wiedergeben (https://www.delphipraxis.net/57820-mcisendstring-datei-aus-resource-wiedergeben.html)

Martin K 27. Nov 2005 10:44


MCISendString: Datei aus Resource wiedergeben
 
Hi Leute,

1.
weiß jemand, wie man mit MCISendString eine Datei unendlich oft abspielen kann (also eine Endlos-Schleife) ?

Bei PlaySound wäre das SND_Loop, aber ich will eine mp3 möglichst einfach absielen, und dazu verwende ich MCISendString.
(Bitte nicht antworten, dass ich den TMediaPlayer nehmen soll, ich will die Datei möglichst einfach abspielen, mit einem Befehl und ohne einen Player.)


2.
Wie kann man mit MCISendString Dateien aus Resourcen wiedergeben ?
(Und zwar ohne, dass man die Datei aus der Resource extrahiert und in ein Verzeichnis speichert.)


Danke, schon mal!

Martin K 27. Nov 2005 11:14

Re: MCISendString: Schleife/Resource
 
Hab jetzt selbst rausgefunden wie eine Schleife geht:
Delphi-Quellcode:
  MCISendstring('play test repeat',NIL,0,0);
Aber wie ist das mit einer Resource ???
Gibt es bei MCISendString so was ähnliches wie:
Delphi-Quellcode:
  PlaySound(PChar(1),HInstance,SND_ASync or SND_Resource);
Danke für jede Hilfe!

Flocke 27. Nov 2005 12:19

Re: MCISendString: Datei aus Resource wiedergeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaube nicht, dass man mit MCI Ressourcen wiedergeben kann.

Ich hatte hier ein Tool gepostet, mit dem man ohne wirkliche Konvertierung aus einer MP3-Datei eine WAVE-Datei machen kann. Wenn du die in deine EXE einbindest, dann kannst du sie über (Snd)PlaySound abspielen.

Als Anlage mal die neueste Version - die kann auch direkt eine RES-Datei machen.

Nach dem Start einfach aus dem Explorer eine MP3-Datei in das Fenster ziehen, das weitere Vorgehen sollte dann klar sein.

Martin K 27. Nov 2005 13:46

Re: MCISendString: Datei aus Resource wiedergeben
 
Danke, aber ich hab das schon mit dem TBassdllPlayer gelöst.
Da kann man mit der neuesten Version (Update 27.11.2005 !!!) auch MP3's aus einer Resource wiedergeben.
TBassdllPlayer.LoadFromResourceName

Flocke 27. Nov 2005 14:03

Re: MCISendString: Datei aus Resource wiedergeben
 
Zitat:

Zitat von Martin K
Danke, aber ich hab das schon mit dem TBassdllPlayer gelöst.
Da kann man mit der neuesten Version (Update 27.11.2005 !!!) auch MP3's aus einer Resource wiedergeben.
TBassdllPlayer.LoadFromResourceName

Sicher geht das. Bei der von mir gezeigten Lösung braucht man aber keine zusätzliche DLL, alles läuft komplett mit Windows-eigenen "Hausmitteln".

Martin K 28. Nov 2005 00:36

Re: MCISendString: Datei aus Resource wiedergeben
 
Nee, beim BassdllPlayer hast du doch keine zusätzliche dll.
Ich nehme einfach die drei *.pas Dateien und binde sie über "BassdllPlayer" in uses ein.
einfach hier die 3 .pas Dateien rausholen

Das klappt prima, ohne DLL.


Bei deiner Methode müsste ich ja noch eine exe einbinden, dadurch wird mein Programm größer.

Außerdem geht das nicht mit PlaySound:
Ich habe nämlich ein Spiel programmiert, bei dem zwei Sounds parallel laufen müssen.
Ein Hintergrundsound (der ist als MP3 und wird mit dem BassdllPlayer abgespielt),
und ein kurzer Wave-Sound, der bei einem Tastendruck (KeyDown) abgespielt wird, mit PlaySound.

Beide Dateien sind als Resource eingebunden.
Und man kann bestimmt nicht zwei Sounds gleichzeitig mit PlaySound abspielen!!!

Aber trotzdem danke, dass du dich bemüht hast und mir dein Programm gepostet hast.
Das konntest du ja schließlich nicht wissen...

Flocke 28. Nov 2005 07:33

Re: MCISendString: Datei aus Resource wiedergeben
 
Zitat:

Zitat von Martin K
Nee, beim BassdllPlayer hast du doch keine zusätzliche dll.
Ich nehme einfach die drei *.pas Dateien und binde sie über "BassdllPlayer" in uses ein.
einfach hier die 3 .pas Dateien rausholen

Das klappt prima, ohne DLL.

Du brauchst keine Extra-DLL, weil sie in der "Bass_Dynamic.pas" binär eingebettet ist und auf dem System zur Laufzeit extrahiert wird. Das sind die 95288 Bytes in der Konstanten "BASSData", die in dein Programm eingebunden werden.

Zitat:

Zitat von Martin K
Bei deiner Methode müsste ich ja noch eine exe einbinden, dadurch wird mein Programm größer.

Du hast es dir also nicht angesehen :roll:

Nein, du musst keine EXE einbinden, weil das Abspielen über PlaySound bzw. SndPlaySound läuft. Das Programm macht einfach durch Hinzufügen eines kleinenen RIFF-Headers (70 Bytes) aus deiner MP3-Datei eine WAVE-Datei, ohne die eigentlichen Sounddaten zu verändern. Nach diesem "Patch" kannst du die MP3-Datei mit PlaySound abspielen.

Zitat:

Zitat von Martin K
Außerdem geht das nicht mit PlaySound:
Ich habe nämlich ein Spiel programmiert, bei dem zwei Sounds parallel laufen müssen.
Ein Hintergrundsound (der ist als MP3 und wird mit dem BassdllPlayer abgespielt),
und ein kurzer Wave-Sound, der bei einem Tastendruck (KeyDown) abgespielt wird, mit PlaySound.

Beide Dateien sind als Resource eingebunden.
Und man kann bestimmt nicht zwei Sounds gleichzeitig mit PlaySound abspielen!!!

Da hast du Recht, das geht über PlaySound m.W. nicht. Müsste man aber mal mit SND_ASYNC ausprobieren.

Zitat:

Zitat von Martin K
Aber trotzdem danke, dass du dich bemüht hast und mir dein Programm gepostet hast.
Das konntest du ja schließlich nicht wissen...

War eh schon fertig :wink:

Martin K 28. Nov 2005 17:20

Re: MCISendString: Datei aus Resource wiedergeben
 
Na, schön... Hast recht! :oops:

Aber dafür hatte ich wenigstens in einem Punkt Recht :???: !
Mit SND_ASync kannst du auch immer nur einen Sound abspielen.
Der Unterschied ist ja nur, dass er bei SND_Sync wartet, bis der Sound abgespielt wurde und dann weitermacht;
und bei SND_ASync läuft der Sound im Hintergrund und das Programm läuft ganz normal weiter.

Wenn ich eine Hintergrund-Musik im Spiel laufen lasse, dann muss ich ja sowieso SND_ASync verwenden - alles andere ist da doch Schwachsinn.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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