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