Sound abspielen



  • Hi,

    ich möchte ein Programm in C++ schreiben das einen Sound abspielt.

    Codeausschnitt :

    LPWSTR buffer = NULL;
    				const char *filename = "wecker.wav";
    
    				int length = MultiByteToWideChar(CP_ACP,0,filename ,strlen(filename)+1,NULL,0);
    				MultiByteToWideChar(CP_ACP,0,filename ,strlen(filename)+1,buffer,length);
    
    				sndPlaySound(buffer, SND_SYNC);
    

    Compielen lässt es sich aber einen Sound hört man nicht. Weiß Jemand wie es richtig gemacht wird?



  • Hm, probier's vielleicht mal mit einem absoluten Pfad.

    EDIT: Und du solltest natürlich immer die Rückgabe checken.



  • Funktioniert immer noch nicht 😞



  • Ist der Rückgabewert denn FALSE?

    Und warum konvertierst du da eigentlich so rum? Nimm doch direkt einen const wchar_t*. Vielleicht klappt da irgendwas nicht. Setz doch mal einen Breakpoint und sieh dir an, was du da wirklich übergibst.



  • Das hier

    LPWSTR buffer = NULL;
    

    geht schon mal gar nicht. Du hast damit lediglich einen Pointer deklariert, ihm wurde aber kein Speicher zugewiesen. Wenn du dieses Hin-und-her-Konvertieren unbedingt machen musst, dann verdeutlicht dir dieser umgemoddelte Code vielleicht, wie es eher geht:

    wchar_t buffer[MAX_PATH];
    	const char *filename = "C:\\test.wav";
    
    	int length = MultiByteToWideChar(CP_ACP,0,filename ,strlen(filename)+1,NULL,0);
    	MultiByteToWideChar(CP_ACP,0,filename ,strlen(filename)+1,buffer,length); 
    
    	if(!sndPlaySound(buffer,SND_SYNC)) {
    		_ASSERTE(0);
    	}
    

    Ich würde aber sagen, dass du direkt den richtigen Typen für filename nimmst, wenn möglich...



  • Erst ma danke für die Antworten. Habs hinbekommen dank eurer Hilfe 🙂
    Nun möchte ich aber die Datei auch als Resource abspielen können. Hab en bissel gegooglet und hab folgendes gefunden:

    hResInfo=FindResource(0, TEXT("wecker.wav"), RT_RCDATA);
    				hRes=LoadResource(0, hResInfo);
    				lpRes=LockResource(hRes);
    				bRtn=sndPlaySound(lpRes, SND_MEMORY | SND_SYNC);
    				FreeResource(hRes);
    

    und

    PlaySound(
        MAKEINTRESOURCE(IDR_WAVE1), 
        GetModuleHandle(NULL),  
        SND_RESOURCE);
    

    Bekomme es mit diesen Codes aber irgetnwie nicht richtig hin. Beim Ersten weiß ich nicht welchen Header ich includen muss und beim Zweiten nicht was ich beim ersten Parameter übergeben muss :P. Könnt ihr mir vielleicht noch einmal helfen?



  • Chrises schrieb:

    Beim Ersten weiß ich nicht welchen Header ich includen muss

    Wieso? Laut Doku musst du nur windows.h inkludieren. Die Doku sollte übrigens immer deine erste Anlaufstelle sein, wenn du wissen willst, wie eine Funktion anzuwenden ist, welche Header und Libs du eventuell brauchst usw.

    Chrises schrieb:

    und beim Zweiten nicht was ich beim ersten Parameter übergeben muss

    Auch hier verweise ich mal auf die Doku, da sollte alles drinstehen:

    PlaySound
    Using the PlaySound Function



  • winmm.lib muss gelinkt werden bzw libwinmm.a unter MinGW.


Anmelden zum Antworten