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;
    }
    

Anmelden zum Antworten