Musik in C++

Hallo an alle,

also ich verwende zum abspielen der MP3, WAV und WMA die Funktion mciSendString(). Dazu muss man auch die Libary 'winmm' dazu linken.
Nachteil bei der Funktion ist, dass man nur Dateien abspielen kann die kein LEERZEICHEN enthalten. Aber dazu hab ich auch eine Lösung gefunden.
Mann muss zuvor einfach die Funktion GetShortPathName() auf den Dateipfad anwenden.

Hier noch ein kleines Beispiel

Code:
#include <windows.h>

...

char cMusik_Dateipfad[256];
string stMusik_Musikbefehl;
long lMusik_length = 0;
TCHAR* tcMusik_buffer = NULL;

...

lMusik_length = GetShortPathName(cMusik_Dateipfad, NULL, 0);
tcMusik_buffer = new TCHAR[lMusik_length];
lMusik_length = GetShortPathName(cMusik_Dateipfad, tcMusik_buffer, lMusik_length);

stMusik_Musikbefehl =  "open ";
stMusik_Musikbefehl = stMusik_Musikbefehl + tcMusik_buffer;
mciSendString(stMusik_Musikbefehl.c_str(), NULL, 0, 0);

stMusik_Musikbefehl = "play ";
stMusik_Musikbefehl = stMusik_Musikbefehl + tcMusik_buffer;
mciSendString(stMusik_Musikbefehl.c_str(), NULL, 0, 0);

...

Bei Funktioniert dass immer hervorragend ohne Fehler.
 
Hey Crash Kid
nichts gegen dich
aber da fehlen:
Code:
#include<string>
using namespace std;
int main()
{
 
}
gut wäre auch ein "system("pause");", damit er nicht einfach aufhört!
das sieht dann so aus::

Code:
#include <windows.h>
#include <string>
using namespace std;
int main()
{
char cMusik_Dateipfad[256]=("musik.wav");
string stMusik_Musikbefehl;
long lMusik_length = 0;
TCHAR* tcMusik_buffer = NULL;
 
lMusik_length = GetShortPathName(cMusik_Dateipfad, NULL, 0);
tcMusik_buffer = new TCHAR[lMusik_length];
lMusik_length = GetShortPathName(cMusik_Dateipfad, tcMusik_buffer, lMusik_length);
stMusik_Musikbefehl =  "open ";
stMusik_Musikbefehl = stMusik_Musikbefehl + tcMusik_buffer;
mciSendString(stMusik_Musikbefehl.c_str(), NULL, 0, 0);
stMusik_Musikbefehl = "play ";
stMusik_Musikbefehl = stMusik_Musikbefehl + tcMusik_buffer;
mciSendString(stMusik_Musikbefehl.c_str(), NULL, 0, 0);
system("pause");
}
NATÜRLICH NOCH DIE LIBDATEI"libwinmm.a" EINBINDEN OHNE GEHTS NICHT
das hattest du auch aba ich wollte nochmal drauf hinweisen.
bei DevCpp ist die unter "C:/Program files/Dev-Cpp/lib/libwinmm.a" zu finden
das geht unter::
ALT+P drücken
in "Parameter" gehen
auf "bibliothek/Objekt hinzufügen" klicken
datei "C:/Program files/Dev-Cpp/lib/libwinmm.a" auswählen
dann gehts(aba nur mit Projekt)

Jetzt gibt es keine Probleme mehr?
 
Hallo baigox,

das ist richtig. ABER: Darum habe ich in meinem Quellcode auch ... eingefügt, was bedeuten soll, dass ich diese Sachen wie int main() überspringe. Die wichtigesen Sachen habe ich alle hingeschrieben.
Es kann auch sein dass er die WinAPI benutzt. Dann würde da nichts von int main() usw. stehen. Deswegen meine ... !
Ich gehe davon aus, dass jeder weiß das das so nicht geht. Es soll auch nur eine Denkanregung sein und keine komplette Lösung.
Dafür ist das Board nicht da, dass wir die arbeit von anderen machen. Jeder der ein Problem hat, helfen wir. Aber wir machen nicht seine "Hausaufgaben".

Schöne Grüße
 
Hallo Crash Kid

E N T S C H U L D I G U N G. Aber: ich war so froh nach wochenlanger suche mit über 100 fehlgeschlagenen Versuchen, da wollte ich mein Erfolg mit anderen teilen.
ja, andere hätten auch darauf kommen könen aber: E N T S C H U L D I G U N G:
Aber auch Danke für deinen Beitrag, ohne den hätte ich es nie geschafft!!(!)
 
Ja kein Ding,

dann ist ja gut wenn ich jemandem helfen konnte. Entschuldigung angenommen ;-).
Viel Spaß dann noch damit...

grüße
 
Hier ne Funktion (benötigt allerdings eine Ressource z.B. TEST WAVE "C:\\deine.wav")
Code:
#include <mmsystem.h>
#include <windows.h>
BOOL PlaySoundResource(LPSTR lpName)
{
    BOOL bRtn;
    LPSTR lpRes;
    HANDLE hRes;
    HRSRC hResInfo;
    HINSTANCE Nl;
	Nl=hInstance;

    /* Find the WAVE resource. */
    hResInfo= FindResource(Nl,lpName,"WAVE");
    if(hResInfo == NULL)
       return FALSE;
    /* Load the WAVE resource. */

    hRes = LoadResource(Nl,hResInfo);
    if (hRes == NULL)
      return FALSE;

    /* Lock the WAVE resource and play it. */
    lpRes=(LPSTR)LockResource(hRes);
    if(lpRes==NULL)
      return FALSE;
    bRtn = sndPlaySound(lpRes, SND_MEMORY | SND_ASYNC);
    if(bRtn == 0)
      return FALSE;

    /* Free the WAVE resource and return success or failure. */
    FreeResource(hRes);
    return TRUE;
}
Der Parameter ist dann in meiner Ressource TEST ;)
PS: Du musst noch libwinmm.a beim Linker einbinden, falls du sie nicht hast, ist sie im angehängten ZIP-Archiv gepackt :p

lorenz
 

Anhänge

  • libwinmm.zip
    8,3 KB · Aufrufe: 29
Wenn du die Bibliothek nicht hast, lädst sie dir von hier runter (hab sie gepostet), benennst
sie um und kopierst sie zu den anderen LIBs :)

Wenn's nicht geht, melde dich wieder
Hoffentlich klappt's dann ;)
 

Anhänge

  • libwinmm.zip
    8,3 KB · Aufrufe: 23
Zurück