Midi- und MP3-Dateien aus Ressource abspielen



  • Naja, ich packe meine Programme nicht so gern mit externen Sachen voll. Nur das, was die Entwicklungsumgebung mitbringt. Deshalb bräuchte ich also eher eine einfache Möglichkeit, die man schnell mal selbst im Quellcode umsetzen kann, statt eine komplette Librarysammlung, die da gleich alle möglichen Funktionen bietet.
    Ich weiß, daß die Funktion mciSendString wohl Musikdateien abspielen kann. Kann man der nicht beibringen, daß sie ihre Dateien aus der Ressource laden soll?



  • Hmm... evt. kannst de dir auch aus der res eine temp datei machen und die dann laden,...



  • Geht das auch, ohne die Datei tatsächlich auf die Festplatte zu spielen? Ich finde das nämlich generell etwas unsauber: Sobald mein Programm startet, liegen da fünf Midi-Dateien rum. Erstens mal kann sich der Benutzer die dann einfach nehmen, obwohl das nicht Sinn der Sache ist. (Ich finde es immer Mist, wenn man sich Videos oder Musikdateien, die zum Beispiel in Spielen erst im Abspann kommen sollen, vorher schon ansehen oder anhören kann.) Zweitens: Was ist, wenn das Programm auf einem schreibgeschützen Datenträger ausgeführt wird? Ja gut, dann kann man sie immernoch in den Temp-Ordner packen. Aber da kommen wir schon zu drittens: Wenn der Benutzer das Programm zum Absturz bringt, bleiben die Dateien liegen. Und sowas hasse ich, weshalb ich es logischerweise nicht selbst ermöglichen will.
    Es ist nett, daß Ihr mir diese Vorschläge bringt, aber was ich tatsächlich brauche ist eben eine Alternative zu sndPlaySound, mit der man auch Midi- und, wenn es geht, MP3-Dateien direkt aus einer Ressource abspielen kann. Ist es da wirklich erst nötig, eine riesige Library zu schreiben? Kennt keiner eine (vergleichsweise) einfache Idee?





  • Entschuldige bitte, daß ich nochmal rumkritisiere, aber leider benutzt diese Variante auch das Auslagern der Dateien in einen temporären Ordner, was ich ja gerade vermeiden will. Da ich dort aber unter anderem auch gelesen habe, daß es keine direkte Unterstützung des Abspielens von Midi-Dateien als Ressourcen gibt, habe ich noch eine andere Frage. Sie mag vielleicht blöd klingen, aber vielleicht gibt es sowas ja tatsächlich: Kann man nicht eine Datei im Arbeitsspeicher erstellen, die sich wie eine richtige Datei behandeln läßt? Also eine Datei, die nicht auf der Festplatte, sondern eben im Arbeitsspeicher liegt. Dann bekommt man noch einen virtuellen Dateinamen oder sowas und kann jede Funktion auf sie anwenden, die normalerweise mit richtigen Dateien arbeitet.



  • Hmm wenn dann kannst du die Resouce versuchen in einen Array zu laden... und diesen dann mit midiStreamOut auszugeben... ist aber alles umständlich 😉



  • Naja, scheiß was auf die Umständlichkeit. Da schreibt man sich einmal eine Klasse und dann hat man das. Hab ich ja mit der Grafikausgabe auch so gemacht.
    Also, kennst Du eine Seite, wo erklärt wird, wie man so eine Midi-Ressource (oder generell Ressourcen) aus der Ressourcendatei in ein Feld lädt?



  • http://www.un4seen.com/ (All in a tiny DLL, under 100KB in size) Vielleicht ist es das, was Du suchst, kenne ich aber nicht selbst. Sieht trotzdem alles irgendwie kompliziert aus. Ich empfehle nach wie vor FMOD.



  • Erhard Henkes schrieb:

    http://www.un4seen.com/

    Naja, ich packe meine Programme nicht so gern mit externen Sachen voll. Nur das, was die Entwicklungsumgebung mitbringt.



  • Du sagst es, quote. Vor allem DLL-Dateien sind nicht so mein Fall (noch weniger als externen Quellcode ins Programm einzubinden). Es geht mir ja darum, nur eine Exe-Datei zu haben. Wenn ich ohnehin mehrere Dateien benötigen würde, damit das Programm läuft, käme es auf die Midi-Dateien auch nicht mehr an.

    P.S.: Meine aktuelle Frage war noch, wie man so eine Ressource in ein Feld laden kann. Hat da jemand eine Idee bzw. einen Link zu einer Beschreibung?



  • Du willst eine Resource in den Speicher laden?
    Dann hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-152055-and-start-is-0.html



  • Danke erstmal. Gibt's auch ein paar MFC-Funktionen, um das zu machen oder muß man reine WinAPI-Funktionen benutzen?



  • (Ausgrab)
    Kann man das mit mciSendString realisieren, GOOGLE sagt GEHT NICHT
    ich kann das aber nicht glauben, gibts den wirklich keine Möglichkeit

    (MP3)


Anmelden zum Antworten