<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Fehler in FAQ-Beitrag?]]></title><description><![CDATA[<p>Müsste es in <a href="http://c-plusplus.net/forum/viewtopic-var-t-is-39378.html" rel="nofollow">diesem FAQ-Beitrag zum Thema &quot;MP3 mit MCI&quot;</a> in der Funktion PlayPosition anstatt...</p>
<pre><code class="language-cpp">sek2=sek-(hours*60)-(min*60);
</code></pre>
<p>...nicht eher</p>
<pre><code class="language-cpp">sek2=sek-(hours*60*60)-(min*60);
</code></pre>
<p>...heissen?</p>
<p>Und die Variable min2 wird nie verwendet und sek2 ist überhaupt nicht notwendig, oder?</p>
<p>Ich denke, so ist es besser:</p>
<pre><code class="language-cpp">// 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,&quot;status mp3player position&quot;); 
        retVal=mciSendString(cmd, retval, 500, NULL); 
        if (retVal!=0) 
        { 
            // Hat nicht geklappt! 
            SetWindowText(hWnd,&quot;Unable to get position&quot;); 
            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,&quot;%i:%i:%i&quot;,hours,min,sek); 
    SetWindowText(hWnd,cmd); 

    return 1; 
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

#pragma comment(lib,&quot;winmm.lib&quot;)

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-&gt;f=_f;
			mciSendStringA((&quot;open \&quot;&quot;+this-&gt;f+&quot;\&quot; alias mp3player shareable&quot;).c_str(),NULL,0,NULL);
			mciSendStringA(&quot;set mp3player time format milliseconds&quot;,NULL,0,NULL);
		}

		~c_mp3(void)
		{
			mciSendStringA(&quot;close mp3player&quot;,NULL,0,NULL);
		}

		void play(void)
		{
			if(this-&gt;s!=ps_play)
			{
				mciSendStringA(&quot;play mp3player&quot;,NULL,0,NULL);
				this-&gt;s=ps_play;
			}
		}

		void pause(void)
		{
			if(this-&gt;s==ps_play)
			{
				mciSendStringA(&quot;pause mp3player&quot;,NULL,0,NULL);
				this-&gt;s=ps_pause;
			}
			else if(this-&gt;s==ps_pause)
			{
				this-&gt;play();
			}
		}

		void stop(void)
		{
			mciSendStringA(&quot;stop mp3player&quot;,NULL,0,NULL);
			mciSendStringA(&quot;seek mp3player to start&quot;,NULL,0,NULL);
			this-&gt;s=ps_stop;
		}

		s_position position(void)
		{
			char ms[1024];
			mciSendStringA(&quot;status mp3player position&quot;,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(&quot;MP3-PLAYER  -  VERSION 1.00&quot;);
	std::cout
		&lt;&lt;&quot;&lt;p&gt; - PLAY&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;s&gt; - STOP&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;b&gt; - PAUSE&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;q&gt; - QUIT&quot;&lt;&lt;std::endl
		&lt;&lt;std::endl;

	int i;
	do
	{
		while(!_kbhit())
		{
			std::cout.fill('0');
			std::cout&lt;&lt;&quot;POSITION: &quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().h&lt;&lt;&quot;:&quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().m&lt;&lt;&quot;:&quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().s&lt;&lt;&quot;\r&quot;;
		}
		i=_getch();
		switch(i)
		{
			case 'p':
				mp3-&gt;play();
				break;
			case 's':
				mp3-&gt;stop();
				break;
			case 'b':
				mp3-&gt;pause();
				break;
		}
	}while(i!='q');

	delete mp3;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/213504/fehler-in-faq-beitrag</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 13:30:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/213504.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 May 2008 17:21:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler in FAQ-Beitrag? on Tue, 20 May 2008 20:17:53 GMT]]></title><description><![CDATA[<p>Müsste es in <a href="http://c-plusplus.net/forum/viewtopic-var-t-is-39378.html" rel="nofollow">diesem FAQ-Beitrag zum Thema &quot;MP3 mit MCI&quot;</a> in der Funktion PlayPosition anstatt...</p>
<pre><code class="language-cpp">sek2=sek-(hours*60)-(min*60);
</code></pre>
<p>...nicht eher</p>
<pre><code class="language-cpp">sek2=sek-(hours*60*60)-(min*60);
</code></pre>
<p>...heissen?</p>
<p>Und die Variable min2 wird nie verwendet und sek2 ist überhaupt nicht notwendig, oder?</p>
<p>Ich denke, so ist es besser:</p>
<pre><code class="language-cpp">// 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,&quot;status mp3player position&quot;); 
        retVal=mciSendString(cmd, retval, 500, NULL); 
        if (retVal!=0) 
        { 
            // Hat nicht geklappt! 
            SetWindowText(hWnd,&quot;Unable to get position&quot;); 
            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,&quot;%i:%i:%i&quot;,hours,min,sek); 
    SetWindowText(hWnd,cmd); 

    return 1; 
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

#pragma comment(lib,&quot;winmm.lib&quot;)

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-&gt;f=_f;
			mciSendStringA((&quot;open \&quot;&quot;+this-&gt;f+&quot;\&quot; alias mp3player shareable&quot;).c_str(),NULL,0,NULL);
			mciSendStringA(&quot;set mp3player time format milliseconds&quot;,NULL,0,NULL);
		}

		~c_mp3(void)
		{
			mciSendStringA(&quot;close mp3player&quot;,NULL,0,NULL);
		}

		void play(void)
		{
			if(this-&gt;s!=ps_play)
			{
				mciSendStringA(&quot;play mp3player&quot;,NULL,0,NULL);
				this-&gt;s=ps_play;
			}
		}

		void pause(void)
		{
			if(this-&gt;s==ps_play)
			{
				mciSendStringA(&quot;pause mp3player&quot;,NULL,0,NULL);
				this-&gt;s=ps_pause;
			}
			else if(this-&gt;s==ps_pause)
			{
				this-&gt;play();
			}
		}

		void stop(void)
		{
			mciSendStringA(&quot;stop mp3player&quot;,NULL,0,NULL);
			mciSendStringA(&quot;seek mp3player to start&quot;,NULL,0,NULL);
			this-&gt;s=ps_stop;
		}

		s_position position(void)
		{
			char ms[1024];
			mciSendStringA(&quot;status mp3player position&quot;,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(&quot;MP3-PLAYER  -  VERSION 1.00&quot;);
	std::cout
		&lt;&lt;&quot;&lt;p&gt; - PLAY&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;s&gt; - STOP&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;b&gt; - PAUSE&quot;&lt;&lt;std::endl
		&lt;&lt;&quot;&lt;q&gt; - QUIT&quot;&lt;&lt;std::endl
		&lt;&lt;std::endl;

	int i;
	do
	{
		while(!_kbhit())
		{
			std::cout.fill('0');
			std::cout&lt;&lt;&quot;POSITION: &quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().h&lt;&lt;&quot;:&quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().m&lt;&lt;&quot;:&quot;;
			std::cout.width(2);
			std::cout&lt;&lt;mp3-&gt;position().s&lt;&lt;&quot;\r&quot;;
		}
		i=_getch();
		switch(i)
		{
			case 'p':
				mp3-&gt;play();
				break;
			case 's':
				mp3-&gt;stop();
				break;
			case 'b':
				mp3-&gt;pause();
				break;
		}
	}while(i!='q');

	delete mp3;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1511724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1511724</guid><dc:creator><![CDATA[goto anywhere*]]></dc:creator><pubDate>Tue, 20 May 2008 20:17:53 GMT</pubDate></item></channel></rss>