mp3 abspielen mit einem C++ Programm



  • Hallo C++ Community,

    ist es denn möglich, durch ein C++ Programm ein bestimmtes Programm zu starten oder eine .mp3 abspielen zu lassen?

    Z.B. habe ich aufm Desktop ne .mp3 rumliegen, und will diese mit einem selbst geschriebenem C++ Programm mit dem VLC Media Player öffnen.
    Geht das?

    MfG



  • system("vlc song.mp3")
    oder liblame http://lame.sf.net

    mfg, Hans
    :schland: ➡ 🙂



  • Golem86 schrieb:

    system("vlc song.mp3")
    oder liblame http://lame.sf.net

    Unter Windows (ich gehe davon aus, dass du Windows benutzt), wäre ShellExecute oder die *Process- Funktionsfamilie die bessere Wahl.



  • Xantus schrieb:

    Golem86 schrieb:

    system("vlc song.mp3")
    oder liblame http://lame.sf.net

    Unter Windows (ich gehe davon aus, dass du Windows benutzt), wäre ShellExecute oder die *Process- Funktionsfamilie die bessere Wahl.

    Wie allgmein die System () Aufrufe zu vermeiden sind.

    http://www.gidnetwork.com/b-61.html



  • Xantus schrieb:

    Unter Windows (ich gehe davon aus, dass du Windows benutzt), wäre ShellExecute oder die *Process- Funktionsfamilie die bessere Wahl.

    system ist meines Wissens standardisiert und einfach zu benutzen und außerdem würde dann eine Portierung auf andere Systeme keine Probleme machen.

    mfg, Hans



  • Hallo,

    Golem86 schrieb:

    system ist meines Wissens standardisiert und einfach zu benutzen und außerdem würde dann eine Portierung auf andere Systeme keine Probleme machen.

    Ich habe aber keinen VLC-Player... 😉

    MfG,

    Probe-Nutzer



  • Hallo

    Golem86 schrieb:

    Xantus schrieb:

    Unter Windows (ich gehe davon aus, dass du Windows benutzt), wäre ShellExecute oder die *Process- Funktionsfamilie die bessere Wahl.

    system ist meines Wissens standardisiert und einfach zu benutzen und außerdem würde dann eine Portierung auf andere Systeme keine Probleme machen.

    system selber ist in der Tat Teil des C++ Standards. Aber diese Funktion reicht das übergebene Kommando auch nur ans Betriebssystem weiter. Jedes BS kann also eine ganz andere Kommandosyntax erfordern. Und das ist nicht so einfach portierbar.

    bis bald
    akari



  • Probe-Nutzer schrieb:

    Ich habe aber keinen VLC-Player... 😉
    Probe-Nutzer

    😕 Sry, das versteh ich jetz nicht ganz...
    Hold dir VLC von http://videolan.org,
    leg gmplayer bei oder mach ein stat auf verschiedene Player (PATH-Checking nicht vergessen). (G)MPlayer eignet sich relativ gut zu Integration. Bei GMPlayer musst du nur system(...) aufrufen. Bei MPlayer kannst du den Film bzw. das Audio auch in eigene Fenster integrieren usw., dafür musst du dich aber mit dem API auseinandersetzen.

    mfg, Hans



  • siehe akaris Beitrag, meine Anmerkung sollte nur, in etwas "versteckter" Form, auf die system-Problematik hinweisen (ich bin nicht $h4rk, der hat den Player offensichtlich). 🙂

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    siehe akaris Beitrag, meine Anmerkung sollte nur, in etwas "versteckter" Form, auf die system-Problematik hinweisen (ich bin nicht $h4rk, der hat den Player offensichtlich). 🙂

    MfG,

    Probe-Nutzer

    Ah, 💡 jetzt versteh ich.
    Mag sein, dass de Aufrufsyntax anders ist, aber immer noch besser, als eine Funktion, die auf nur einem OS existiert. BTW: exec() macht das gleiche, nur dass es das aufrufende Programm mit dem neuen Programm überschreibt.

    mfg, Hans



  • ShellExecute öffnet die Datei aber mit dem Standard-Programm das in Windows eingestellt ist, also nicht mit VLC. Gibt aber sicher andere Funktionen/Wege um die Datei mit einem bestimmten Programm zu öffnen. Wenns nur auf Windows funktionieren soll schau dir die WinApi an.



  • Gibt aber sicher andere Funktionen/Wege um die Datei mit einem bestimmten Programm zu öffnen

    Jo, mit system() geht das 😃
    Oder natürlich mit CreateProcess.



  • McLove schrieb:

    ShellExecute öffnet die Datei aber mit dem Standard-Programm das in Windows eingestellt ist, also nicht mit VLC. Gibt aber sicher andere Funktionen/Wege um die Datei mit einem bestimmten Programm zu öffnen. Wenns nur auf Windows funktionieren soll schau dir die WinApi an.

    Dann öffnet man eben mit ShellExecute die VLC binary und übergibt die *.mp3 Datei als Argument... -.-"



  • Golem86 schrieb:

    Mag sein, dass de Aufrufsyntax anders ist, aber immer noch besser, als eine Funktion, die auf nur einem OS existiert. BTW: exec() macht das gleiche, nur dass es das aufrufende Programm mit dem neuen Programm überschreibt.

    Das sehe ich anders, Portabilität um jeden Preis, nein, da muss man abwägen...dann doch besser die von dir vorgeschlagene liblame oder eine ähnliche. system hat ja noch andere (nicht unbedingt erwünschte) "Nebenwirkungen", z.B. das Öffnen eines Kommandozeilen-Interpreter-Prozesses mit dem entsprechenden Fenster auf Windows-Systemen. Prozesse sind systemeigene Geschichten, die man, notfalls mit einer plattformübergreifenden Bibliothek, behandeln sollte.

    MfG,

    Probe-Nutzer



  • drakon schrieb:

    Wie allgmein die System () Aufrufe zu vermeiden sind.

    http://www.gidnetwork.com/b-61.html

    sorry, aber dies ist imho eine schwache argumentation, die der kerl dafür anbringt, system() nicht zu benutzen. noch dazu, dass er sich eigentlich auch speziell auf system("pause") bezieht, von daher ist der link als argumentationsstütze hier nicht angebracht 🙂
    immer dieses system()-bashing am besten nebst omgwtf-global-variables 😃



  • Mahlzeit,

    vielen Dank für die ganzen Antworten, das bringt mich schon weiter 🙂 👍

    Allerdings stehe ich ein wenig auf dem Schlauch.

    Ich versuche das Ganze über ShellExecute zu realisieren.

    Ein Bild zu öffnen klappt wunderbar:

    ShellExecute(NULL,NULL,"C:\\Bilder\\bild.jpg",NULL, NULL, SW_MAXIMIZE);
    

    So, nun möchte ich eine mp3 abspielen lassen (gut, von mir aus muss es nicht der VLC sein, hauptsache die mp3 lässt sich auf jedem Rechner abspielen..)

    ShellExecute(NULL,"open","C:\\Mucke\\JOIN ME.mp3",NULL,SW_SHOWNORMAL);
    

    Hier erhalte ich aber die Fehlermeldung:

    17 C:\Dev-Cpp\Projekte\1\main.cpp invalid conversion from `int' to `const CHAR*'  
    287 C:\Dev-Cpp\include\shellapi.h too few arguments to function `HINSTANCE__* ShellExecuteA(HWND__*, const CHAR*, const CHAR*, const CHAR*, const CHAR*, INT)'
    

    Hmm, laut MSDN müsste das doch korrekt sein?



  • 17 C:\Dev-Cpp\Projekte\1\main.cpp invalid conversion from `int' to `const CHAR*'

    Zeig' mal Zeile 17...

    287 C:\Dev-Cpp\include\shellapi.h too few arguments to function `HINSTANCE__* ShellExecuteA(HWND__, const CHAR, const CHAR*, const CHAR*, const CHAR*, INT)'

    Da hast du nur eine NULL vergessen 😉

    MfG,

    Probe-Nutzer



  • Zeile 17:

    ShellExecute(NULL,"open","C:\\Mucke\\JOIN ME.mp3",NULL,SW_SHOWNORMAL);
    

    Probe-Nutzer schrieb:

    287 C:\Dev-Cpp\include\shellapi.h too few arguments to function `HINSTANCE__* ShellExecuteA(HWND__, const CHAR, const CHAR*, const CHAR*, const CHAR*, INT)'

    Da hast du nur eine NULL vergessen 😉

    Tatsächlich 😃

    Außerdem habe ich gesehen, dass ich eine Zeile nicht auskommentiert habe *aufmeinenkopfklatsch*

    Super, es funktioniert, vielen Dank, eine super Community muss ich sagen 🙂 👍

    Mein Ziel ist, nur ein kleines Prog zu schreiben, das wie folgt abläuft:
    User klickt auf die .exe
    Er bekommt ein DOS Fenster mit 3 mp3s zur Auswahl und wählt eine davon, worauf die mp3 abgespielt wird ^^

    Als nächstes wollte ich schauen, ob es machbar ist, dass der User dieses "Programm" erstmal installieren muss.

    Vielen Dank noch mal 🙂



  • sothis_ schrieb:

    nebst omgwtf-global-variables 😃

    Du hast ein F vergessen: omfgwtf.



  • hustbaer schrieb:

    sothis_ schrieb:

    nebst omgwtf-global-variables 😃

    Du hast ein F vergessen: omfgwtf.

    tschuldigung 🤡


Log in to reply