wmplayer mit C++ starten



  • Moin Allerseits
    ich hab eben versucht, den MediaPlayer von Windows mit C++ zu starten.
    Das sieht so aus:

    ShellExecute(NULL,"Open","C:/Program Files (x86)/Windows Media Player/wmplayer.exe", NULL,NULL,1);
    	};
    

    Das funktioniert auch soweit.
    Nur wenn man einen Song als Parameter mit übergeben will, tut sich nichts.
    Das sieht so aus:

    ShellExecute(NULL,"Open","C:/Program Files (x86)/Windows Media Player/wmplayer.exe C:/Users/User/Documents/C++/projectPlaySound/song1.mp3", NULL,NULL,1);
    	};
    

    Wenn man den wmplayer hingegen über die Eingabeaufforderung mit dem Parameter startet funktioniert es.

    Jemand eine Idee?



  • @Alphavirus Schau dir mal die Doku zu ShellExecute an. Laut dieser ist dritte Argument ist für die an das aufgerufene Programm zu übergebenden Parameter.

    "C:/Program Files (x86) ..." demonstriert auch ganz gut, warum das nicht so einfach funktionieren kann: Wie soll die Funktion denn wissen, welcher Teil des Strings zum Programm-Pfad und welcher zu den Parametern gehört, wenn die Leerzeichen nicht speziell markiert sind? Das ließe sich sonst schließlich auch als Programm "C:/Program" mit den Parametern "Files (x86)/Windows Media Player/wmplayer.exe C:/Users/User/Documents/C++/projectPlaySound/song1.mp3" interpretieren 😉

    Der lpFile-String wird hier anscheinend komplett als Programm-Pfad interpretiert. Inklusive Leerzeichen.



  • Ok danke erstmal.
    Gibt es vielleicht eine andere Möglichkeit, eine mp3 Datei mit C++ abzuspielen?


  • Mod

    @Alphavirus sagte in wmplayer mit C++ starten:

    Ok danke erstmal.
    Gibt es vielleicht eine andere Möglichkeit, eine mp3 Datei mit C++ abzuspielen?

    Grundsätzlich ja. Der wmplayer, die Codecs dahinter, der Windows-Soundstack, und Windows selbst sind alle in C, C++, oder C# geschrieben. Aber du willst das wohl kaum von vorne bis hinten selber komplett nachprogrammieren, sonst sitzt du da ein paar Jahrtausende dran. Ein paar Jahre, wenn du ein bisschen abkürzt, und nur das nötigste nachmachst. Aber das alles ist wohl kaum das, was du möchtest, oder?

    Daher ist immer wichtig, dass du bei Fragen dabei schreibst, was du warum erreichen möchtest. Das hast du hier nicht getan, daher konnte Finnegan dir nur genau darauf antworten, wie man den wmplayer aufrufen kann.

    Gehe ich recht in der Annahme, dass du in deinem Programm so etwas haben möchtest wie play_mp3("abc.mp3")? Aber auch wenn die Antwort darauf "Ja" ist, ist die eigentliche Frage, warum? Soll das irgendwie ein Spiel werden? Ein Medienplayer? Etwas wo es darum geht, dass du etwas bestimmtes lernst?



  • @Alphavirus sagte in wmplayer mit C++ starten:

    Gibt es vielleicht eine andere Möglichkeit, eine mp3 Datei mit C++ abzuspielen?

    Beliebig viele. Deine Lösung ließe sich auch mit einem Shell-Skript (Batch-Datei) bewerkstelligen. Im Prinzip bittest du ein anderes Programm, hier den Job zu erledigen. Alternativ kann man das Abspielen auch selbst implementieren. wmplayer.exe ist sehr wahrscheinlich auch in C++ geschrieben.

    Die komplizierte Variante (wenn man das wirklich ernsthaft implementieren will) wäre eine MP3-Decoder-Bibliothek zu verwenden, welche die MP3-Daten zu PCM-Daten decodiert, die dann mit der Audio-API des OS (WASAPI oder sowas) abgespielt werden können. Noch komplizierter wird's, wenn man den Decoder selbst implementiert 😉

    Aber besser langsam hocharbeiten: Wenn du mit Windows arbeitest, ist wahrscheinlich sowas wie die PlaySound-Funktion der Windows-API der die nächste Stufe nach dem ShellExecute-Ansatz. Auch wenn die Funktion als "veraltet" gilt, so ist sie relativ leicht zu verwenden. Laut diesem Post hier kann die auch MP3-codiertes Audio abspielen, sofern dieses in einem WAV-Container vorliegt.

    Es dürfte auch etliche Bibliotheken/Frameworks/Engines geben, die einem die Arbeit der "komplizierten" Variante abnehmen. Aber da habe ich gerade keinen guten Überblick was im Moment angesagt ist. SFML ist meines Wissens eine brauchbare Bibliothek für einfache Grafik- und Audio-Sachen. Da speziell die Music-Klasse, die deinen Anwendungsfall abdecken dürfte.


Anmelden zum Antworten