Musik in Console Application??
-
Hi,
wie kann ich Musik (.mp3 oder .wav) in eine Console Application miteinbinden, die bei einen besonderen Ereignis abgespielt wird?
Die .exe und die Musikdatei sind im gleichen OrdnerDanke
-
Das kommt ein bisschen drauf an, was du genau willst. Die Billiglösung ist
system("MeineMusik.mp3");und dann hoffen, dass das Betriebssystem etwas damit anzufangen weiß (z.B. ein Standardabspielprogramm startet).
Wenn du willst, dass dein Programm selbst die Musik abspielt, wirst du das selber Programmieren müssen, d.h. mp3 dekodieren und an die Soundkarte weitergeben. Wahrscheinlich gibt es schon Leute, die zumindest einen Teil davon gemacht haben, deshalb würde ich mal schauen, ob es externe Bibliotheken dafür gibt.
-
du könntest das auch einfach mit PlaySound lösen, so weit ich weiß war die syntax so:
PlaySound(TEXT("sound.wav"),NULL,SND_FILENAME);statt sound.wav musste halt den genauen pfad schreiben, es sei denn die datei is im selben verzeichnis wie die .exe!
übrigens: bei einigen kompilern muss unter projektoptionen/Parameter/Linker noch auf libwinmm.a verlinkt werden (unter anderem auch bei Dev C++).
mfg,
andi01.
-
Ansonsten benutze fmod.
Ist recht einfach zu benutzen.
-
SeppJ schrieb:
system("MeineMusik.mp3");@SeppJ:
das ist nicht unbedingt eine gute lösung, da das programm nichts anderes machen kann während der (evtl. längere!!!) sound abgespielt wird. abgesehen davon bezweifle ich doch sehr dass das system die wav-datei so finden wird(hatte ich nämlich auch schon erfolglos probiert).Abgesehen davon ist es mit einem einfachen "Ausführen" der datei ja nicht getan, da es z.B. mit WinExec (aus eigener erfahrung) auch nicht funktioniert, auch wenn der pfad stimmt,weil damit kein abspielprogramm geöffnet wird sondern nur versucht wird die datei im programm "auszuführen". dasselbe würde mit system wahrscheinlih auch passieren, wenn er die datei wenigstens finden würde(was höchstens klappen könnte wenn die datei wie bei playsound auch im selbern verzeichnis wie die exe liegt).Der Vorteil von play sound ist dass auch wenn die wav im angegebenen verzeichnis nicht verfügbar ist ein sound ausgegeben wird, allerings ein andere.mfg,
andi01.
-
#include <dshow.h> #pragma comment(lib,"dsound") #pragma comment(lib,"strmbasd") double main() { IGraphBuilder *pGraph; IMediaControl *pMediaControl; IMediaEvent *pEvent; CoInitialize(NULL); // Create the filter graph manager and query for interfaces. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); // Build the graph. IMPORTANT: Change string to a file on your system. pGraph->RenderFile(L"t:\\rip\\noah.mp3", NULL); // Run the graph. pMediaControl->Run(); // Wait for completion. long evCode; pEvent->WaitForCompletion(INFINITE, &evCode); // Clean up. pMediaControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); }
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
warum so kompliziert? ein einfaches PlaySound() würde es doch auch tun.
das hat dann zwar keinen graphen dabei, aber wenn der sound(wie die meisten bei programmen) nur ganz kurz ist, z.B. ein kurzer piepton usw., ist ein graph doch sowieso eher nutzlos weil der sound viel zu kurz ist, oder?Ausnahme ist natürlich wenn er wirklich einen langen Song abspielen will, aber in den meisten Fällen sollte es sich doch nur um kurze Signaltöne handeln, oder?.
mfg,
andi01.