MP3 mit kompilieren
Hallo liebe DP´ler
Ich habe folgende frage und zwar: Habe ich ein Programmgeschrieben, nun alles gut und möchte gerne auch hintergrund musik, gut funzt mit der standart komponente (Delphi 5 pro). Nur muss ich ja dann die mp3 immer mit dem programm geben, da ja sonst eine fehlermeldung kommt, wie kann ich die mp3 in das programm einkompileren, damit das eins zusammen ist (programm+die mp3 datei(hintergrund musik)) ? |
Re: MP3 mit kompilieren
http://delphi.about.com/od/objectpas.../aa021301a.htm
Gutes Tutorial! |
Re: MP3 mit kompilieren
gibts sowas nicht in deutsch ?, ich mein ich kann english aber ist etwas umständlich
|
Re: MP3 mit kompilieren
|
Re: MP3 mit kompilieren
Ich greife mal die den von slm angegebenen Thread auf: Man kann ja auch eine Wave-Datei erstellen, die nicht im PCM-Format sondern im MP3-Format codiert ist - im Grunde muss da nur ein RIFF-Header davor und dahinter steht dann der Inhalt der MP3-Datei. Ein halbwegs guter Audio-Editor sollte das über "Speichern unter" können (ich denke mal CoolEdit z.B.).
Ggf. spielt PlaySound die ja ab, wenn man sie als Resource einbindet, also mit einer RC Datei mit dem Inhalt:
Code:
MP3Resource WAVE "MeinMP3WolfImWavesPelz.wav"
|
Re: MP3 mit kompilieren
*schüttel* mp3 in Wave finde ich nicht sehr gelungen :). Warum? Das Wave-Format ist ein Format dass sich in sog. Chunks aufteilt. Wesentlich sind hier (abgesehen vom Header) das fmt-Chunk dass alle Randinfos zum Wave enthält, und das data-Chunk mit den Wavedaten. So sieht ein normales Wave für gewöhnlich aus, und mehr Definition ist im Standard nicht enthalten - bis auf, dass man beliebig benannte Chunks mit beliebigen Daten einfach mit reinpackan kann! Und das wäre so ein Kandidat für mp3-in-Wav. Es mag mit einer vielzahl von Playern gehen, doch es ist nicht mehr als ein Quasistandard auf den man sich nicht 100%ig verlassen kann.
\\edit: Ich wollte damit ausdrücken, dass die mp3-Daten nicht im data-Chunk landen, sondern in einem "Custom"-Chunk dessen Existenz in keinem Standard definiert ist. Player die von "sauberen" Files ausgehen könnten Probleme mit einem leeren data-Chunk haben. Wo ist eigentlich das Problem ein mp3 einfach als Ressource einzubinden? Wenn man zum Abspielen nachher im ungüstigsten Fall wieder ein File braucht, kann man sich das zur Laufzeit auch wieder extrahieren (gibts im Forum imho schon ein (paar) Thread(s) zu). Gruss, Fabian |
Re: MP3 mit kompilieren
Naja, für WAVE-Dateien ein CODEC zu benutzen ist durchaus standardgemäß, das ist im Format ja definitiv so vorgesehen - und MP3 als Codec wird sogar mit Windows ausgeliefert (eher coDEC als CODec). Zudem gibt's eine ganze API-Sammlung dazu (ACM - Audio Compression Manager).
Es gibt viele Programme, die von sich aus schon bei MP3-Dateien den kleinen Riff-Header davor schreiben, damit die MP3-Datei vom Format her eine WAVE-Datei ist (habe ich auf jeden Fall schon häufiger mal gesehen). Das sieht dann so aus:
Code:
Wobei man natürlich die Daten auf mehrere "data"-Chunks aufteilen könnte.
00000000 5249 4646 4AE8 0F00 RIFFJ... <- "RIFF" + Dateigröße
00000008 5741 5645 666D 7420 WAVE 0000000C 1E00 0000 fmt .... <- "fmt "-Chunk 00000014 5500 0200 2256 0000 581B 0000 0100 0000 U..."V..X....... <- Formatbeschreibung 00000024 0C00 0100 0200 0000 B600 0100 7105 ............q. 00000032 6661 6374 0400 0000 fact.... <- "fact"-Chunk 0000003A 31B8 6400 1.d. <- Codec-spezifisches 0000003E 6461 7461 0CE8 0F00 data.... <- "data"-Chunk 00000046 <hier kommt der originale Inhalt der MP3-Datei> Ich habe das gerade mal ausprobiert und das Abspielen einer solchen Ressource mit PlaySound funktioniert ganz problemlos (unter XP). //EDIT: blaues ergänzt. |
Re: MP3 mit kompilieren
Zitat:
Es bleibt aber dabei, dass ich mir keine andere Problemstellung vorstellen kann, bei der diese Uneindeutigkeit (auf den ersten Blick) wirklich Sinn macht. Ich hätte da eher den Player/die API erweitert und mp3s hinzugefügt, statt so ein Mischwurschtel zu betreiben :) Die "alten" Unterformate (CCITT a/µ-Law etc.) sind ja noch im ursprünglichen Standard definiert - das ist noch okay, aber da noch alle möglichen Codecs mit hinein zu legen, möh - ist halt Geschmacksache ^^ Zitat:
|
Re: MP3 mit kompilieren
Ergänzung zu oben, Auszug aus aktueller mmreg.h des PSDK. MPEGLAYER3WAVEFORMAT ist mindestens seit 1999 definiert (wahrscheinlich aber noch eher).
Code:
Damit sieht das Hex-Beispiel von oben so aus:
//
// MPEG Layer3 WAVEFORMATEX structure // for WAVE_FORMAT_MPEGLAYER3 (0x0055) // #define MPEGLAYER3_WFX_EXTRA_BYTES 12 // WAVE_FORMAT_MPEGLAYER3 format sructure // typedef struct mpeglayer3waveformat_tag { WAVEFORMATEX wfx; WORD wID; DWORD fdwFlags; WORD nBlockSize; WORD nFramesPerBlock; WORD nCodecDelay; } MPEGLAYER3WAVEFORMAT; typedef MPEGLAYER3WAVEFORMAT *PMPEGLAYER3WAVEFORMAT; typedef MPEGLAYER3WAVEFORMAT NEAR *NPMPEGLAYER3WAVEFORMAT; typedef MPEGLAYER3WAVEFORMAT FAR *LPMPEGLAYER3WAVEFORMAT; //==========================================================================; #define MPEGLAYER3_ID_UNKNOWN 0 #define MPEGLAYER3_ID_MPEG 1 #define MPEGLAYER3_ID_CONSTANTFRAMESIZE 2 #define MPEGLAYER3_FLAG_PADDING_ISO 0x00000000 #define MPEGLAYER3_FLAG_PADDING_ON 0x00000001 #define MPEGLAYER3_FLAG_PADDING_OFF 0x00000002
Code:
00000000 5249 4646 4AE8 0F00 RIFFJ... <- "RIFF" + Dateigröße
00000008 5741 5645 WAVE 0000000C 666D 7420 1E00 0000 fmt .... <- "fmt "-Chunk + Größe 00000014 ---- WAVEFORMATEX ---- 5500 $55 : wFormatTag : WAVE_FORMAT_MPEGLAYER3 0200 $02 : nChannels 2256 0000 22050 : nSamplesPerSec : Abspielfrequenz 581B 0000 7000 : nAvgBytesPerSec : Bitrate (56 kBit/s) 0100 1 : nBlockAlign 0000 0 : wBitsPerSample 0C00 12 : cbSize : MPEGLAYER3_WFX_EXTRA_BYTES 00000032 ---- MPEGLAYER3WAVEFORMAT ---- 0100 1 : wID : MPEGLAYER3_ID_MPEG 0200 0000 $00000002 : fdwFlags : MPEGLAYER3_FLAG_PADDING_OFF B600 182 : nBlockSize : Std. Framegröße für Frequenz/Bitrate/Layer/Version 0100 1 : nFramesPerBlock 7105 1393 : nCodecDelay : ? wird vom Codec eingesetzt 00000032 6661 6374 0400 0000 fact.... <- "fact"-Chunk + Größe 0000003A 31B8 6400 6600753 : Anzahl Samples (gesamt / je Kanal ??) 0000003E 6461 7461 0CE8 0F00 data.... <- "data"-Chunk + Größe |
Re: MP3 mit kompilieren
Owned :D
In der Spezifikation die ich von www.wotsit.org hatte war nichts dergleichen auch nur erwähnt, und auf deren Basis bewegte ich mich. Nun, da es PSDK-seitig scheinbar einwandfrei ist dies so einzusetzen, ist das wohl okay. Mögen tu ich's trotzdem nicht - in ein Wave gehören meiner Meinung nach unkomprimierte Daten, oder im schlimmsten Fall a/µ-Law :mrgreen: Nochwas was mir auffiel: Zitat:
Das führt für mein Verständnis zunächst lediglich zu einer Vermischung der Formate und damit einhergehender Uneindeutigkeit insbesondere der Dateiendung. MfG, Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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