Musik im C++ - Programm
-
Hallo.
Ich hab folgendes Problem:
Ich will Musik in meinem C++-Programm irgendwie abspielen können, ohne irgendeinen externen Player benutzen zu müssen, das soll also in meinem Programm passieren. Ich hab schon alle Möglichkeiten gegoogelt, zum Beispiel hab ich das hier probiert:
#include <windows.h> #include <mmsystem.h> //... #pragma comment( lib, "winmm.lib" ) int main() { mciSendString("open untitled.mp3", NULL, 0, NULL); mciSendString("play untitled.mp3 wait", NULL, 0, NULL); mciSendString("close untitled.mp3", NULL, 0, NULL); //...Aber ich bekomm da andauernd solche Fehlermeldungen:
Zahlenspiel.cpp||undefined reference to `mciSendStringA@16'| Zahlenspiel.cpp||undefined reference to `mciSendStringA@16'| Zahlenspiel.cpp||undefined reference to `mciSendStringA@16'| ||=== Erstellen beendet: 3 Fehler, 0 Warnungen===|Ich hab auch schon eine andere Möglichkeit probiert:
PlaySound("untitled.wav", NULL,SND_ASYNC && SND_LOOP);Aber da bekomm ich eine ähnliche Fehlermeldung:
Zahlenspiel.cpp||undefined reference to `PlaySoundA@12'|Was mach ich falsch? Bei den Leuten, denen bei google damit geholfen worden ist, funktioniert das anscheinend, bei mir nicht. Ich benutz die aktuellste Version von Code::Blocks (10.05) mit dem gnu g++ - Compiler. Und ich hab natürlich immer die richtigen Formate (.wav und .mp3) benutzt.
Danke schonmal!,
mfg
-
Du musst winmm dazulinken (bei Project/Build options/Linker settings/Link libraries eintragen).
-
Ich hab das da jetzt in das linke Fenster unter "Link Libraries" hinzugefügt: (ich hab einfach die datei gesucht und pfad kopiert)
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\WinMM.LibIch bekomm aber immer noch die gleichen Fehlermeldungen..
-
Das ist die falsche Datei und für g++ auch das falsche Dateiformat.
Einfach nur winmm eintragen, nichts mit Pfaden oder sonstigen Scherzen.
-
Hinzufügen der Lib als Abhängigkeit zu Deinem Projekt ist das eine, dem Linker bekanntgeben das er diese auch verwenden soll das andere.
Btw: Kein ISO-C++ Problem sondern fehlerhaftes Handling Deines Linkers, maximal gehört es in die Kategorie WinAPI, sonst ins Compiler-IDE-Forum

Gut Schuß
VuuRWerK
-
Ok danke, jetzt geht's.
Aber wie verpack ich das jetzt in nen parallelen Thread damit ich abspielen und gleichzeitig spielen kann? Kannst du mir da mal ne Codevorgabe geben?
-
An deiner Stelle würde ich mir einmal das DirectX - SDK herunterladen. Hier findest du sehr viele Beispiele, wie du per Direct Show Musikdateien laden und sie (automatisch) in einem seperaten Thread abspielen lassen kannst. Funktionen wie MCI... verblassen gegenüber der Funktionalität von Direct Show.
Und schwer ist die Initialisierung wirklich nicht.
-
Habs auch so geschafft^^
Nachdem ich die lib dazugelinkt hab, funktionierten beide Varianten. mciSendString(); erstellt aber keinen Thread für sich. PlaySound aber schon. Also kann ich prima PlaySound benutzen, und das verpackt sich ganz automatisch in einen eigenen Thread^^ALso danke für die Hilfe,
mfg
-
Möchte noch anmerken dass ich hier wirklich eine externe lib wie zB. Irrklang empfehlen würde.