Fehler in FAQ-Beitrag?
-
Müsste es in diesem FAQ-Beitrag zum Thema "MP3 mit MCI" in der Funktion PlayPosition anstatt...
sek2=sek-(hours*60)-(min*60);...nicht eher
sek2=sek-(hours*60*60)-(min*60);...heissen?
Und die Variable min2 wird nie verwendet und sek2 ist überhaupt nicht notwendig, oder?
Ich denke, so ist es besser:
// PlayPosition holt die aktuelle Position // und schreibt sie in die Titelzeile eines Fensters int PlayPosition(HWND hWnd) { char cmd[500]; char retval[500]; DWORD retVal; int ms; int sek; int min; int hours; // Position in Milisekunden holen: wsprintf(cmd,"status mp3player position"); retVal=mciSendString(cmd, retval, 500, NULL); if (retVal!=0) { // Hat nicht geklappt! SetWindowText(hWnd,"Unable to get position"); return 0; } // Ein bisschen rumrechnen: ms=atoi(retval); // Position in Millisekunden sek=ms/1000; // Milisekunden umgerechnet in Sekunden min=sek/60; // Die Sekunden umgerechnet in Minuten hours=min/60; // Die Minuten umgerechnet in Stunden sek-=(hours*60*60)-(min*60); // Sekunden darf nicht größer als 60 sein.. // Das Ganze ins Stunden:Minuten:Sekunden Format bringen und in die Titelzeile schreiben: wsprintf(cmd,"%i:%i:%i",hours,min,sek); SetWindowText(hWnd,cmd); return 1; }Darauf gestossen bin ich ja eigentlich, weil ich's selbst mal ausprobieren wollte. Ich habe also ein einfaches Programm geschrieben, welches ein MP3-File abspielen kann, wobei der Dateiname als Kommandozeilen-Argument übergeben wird. Ich denke, dass das als Beispiel evtl. ganz nützlich ist.
#include <windows.h> #include <conio.h> #include <iostream> #include <cstdlib> #include <string> #pragma comment(lib,"winmm.lib") namespace n_mp3 { enum e_playerstatus { ps_play, ps_stop, ps_pause }; struct s_position { int h; int m; int s; }; class c_mp3 { private: std::string f; e_playerstatus s; public: c_mp3(std::string _f) : s(ps_stop) { this->f=_f; mciSendStringA(("open \""+this->f+"\" alias mp3player shareable").c_str(),NULL,0,NULL); mciSendStringA("set mp3player time format milliseconds",NULL,0,NULL); } ~c_mp3(void) { mciSendStringA("close mp3player",NULL,0,NULL); } void play(void) { if(this->s!=ps_play) { mciSendStringA("play mp3player",NULL,0,NULL); this->s=ps_play; } } void pause(void) { if(this->s==ps_play) { mciSendStringA("pause mp3player",NULL,0,NULL); this->s=ps_pause; } else if(this->s==ps_pause) { this->play(); } } void stop(void) { mciSendStringA("stop mp3player",NULL,0,NULL); mciSendStringA("seek mp3player to start",NULL,0,NULL); this->s=ps_stop; } s_position position(void) { char ms[1024]; mciSendStringA("status mp3player position",ms,sizeof(ms),NULL); s_position p; p.s=atoi(ms)/1000; p.m=p.s/60; p.h=p.m/60; p.s-=((p.h*60*60)+(p.m*60)); return p; } }; } int main(int argc,char **argv) { n_mp3::c_mp3 *mp3=new n_mp3::c_mp3(argv[1]); SetConsoleTitleA("MP3-PLAYER - VERSION 1.00"); std::cout <<"<p> - PLAY"<<std::endl <<"<s> - STOP"<<std::endl <<"<b> - PAUSE"<<std::endl <<"<q> - QUIT"<<std::endl <<std::endl; int i; do { while(!_kbhit()) { std::cout.fill('0'); std::cout<<"POSITION: "; std::cout.width(2); std::cout<<mp3->position().h<<":"; std::cout.width(2); std::cout<<mp3->position().m<<":"; std::cout.width(2); std::cout<<mp3->position().s<<"\r"; } i=_getch(); switch(i) { case 'p': mp3->play(); break; case 's': mp3->stop(); break; case 'b': mp3->pause(); break; } }while(i!='q'); delete mp3; }