<?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[Wave-File auslesen]]></title><description><![CDATA[<p>Hallo ich versuche grade den Header eines Wave-Files auszulesen. Irgendwie kommen aber falsche Werte raus. Ich blicke aber nicht durch warum. Habe schon im Internet gesucht, aber finde irgendwie nichts.<br />
Code:</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
	//fstream f;
	//f.open(&quot;testNeu2.txt&quot;, ios::out);
	//f &lt;&lt; &quot;Dieser Text geht in die Datei&quot; &lt;&lt; endl;
	//f.close();
	fstream fileStream;
	fileStream.open(samplePath.text (), ios::in);  
	int byteCounter = 0;
	uint8 oneByte = 0;
	if (fileStream.is_open())
	{
		while (!fileStream.eof())
		{
			fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8)); 
			//mChunkID = oneByte &amp; 0xFFFF;

			if (byteCounter&gt;=0 &amp;&amp; byteCounter &lt;= 3)
			{
				mChunkID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mChunkID += oneByte;
				//char oneByteChar = oneByte;
				//stringstream allByte &lt;&lt; oneByteChar;
				//allByte &gt;&gt; CString a;
			}
			else if (byteCounter&gt;=4 &amp;&amp; byteCounter &lt;=7)
			{
				mChunkSize &lt;&lt;= sizeof(Steinberg::uint8);
				mChunkSize += oneByte;
			}
			else if (byteCounter&gt;=8 &amp;&amp; byteCounter &lt;=11)
			{
				//mFormat &lt;&lt;= sizeof(Steinberg::uint8);
				char oneByteChar = oneByte;
				mFormat = mFormat + oneByteChar;
			}
			else if (byteCounter&gt;=12 &amp;&amp; byteCounter &lt;=15)
			{
				mSubChunk1ID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubChunk1ID += oneByte;
			}				   
			else if (byteCounter&gt;=16 &amp;&amp; byteCounter &lt;=19)
			{
				mSubChunk1Size &lt;&lt;= sizeof(Steinberg::uint8);
				mSubChunk1Size += oneByte;
			}
			else if (byteCounter&gt;=20 &amp;&amp; byteCounter &lt;=21)
			{
				mAudioFormat &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mAudioFormat += oneByte;
			}
			else if (byteCounter&gt;=22 &amp;&amp; byteCounter &lt;=23)
			{
				mNumChannels &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mNumChannels += byteCounter;
			}
			else if (byteCounter&gt;=24 &amp;&amp; byteCounter &lt;=27)
			{
				mSampleRate &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSampleRate += oneByte;
			}
			else if (byteCounter&gt;=28 &amp;&amp; byteCounter &lt;=31)
			{
				mByteRate &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mByteRate += oneByte;
			}
			else if (byteCounter&gt;=32 &amp;&amp; byteCounter &lt;=33)
			{
				mBlockAlign &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mBlockAlign += oneByte;
			}
			else if (byteCounter&gt;=34 &amp;&amp; byteCounter &lt;=35)
			{
				mBitsPerSample &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mBitsPerSample += oneByte;
			}	
			else if (byteCounter&gt;=36 &amp;&amp; byteCounter &lt;=39)
			{
				mSubChunks2ID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubChunks2ID += oneByte;
			}
			else if (byteCounter&gt;=40 &amp;&amp; byteCounter &lt;=43)
			{
				mSubchunck2Size &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubchunck2Size += oneByte;
			}
			else if (byteCounter &gt;=44)
			{

			}
			byteCounter++;
		}
		fileStream.close();
	}
}
</code></pre>
<p>Dass das mit den ganzen If-Abfragen sicher nicht grade optimal ist ist mir klar, aber will erstmal erreichen, dass der Code funktioniert.<br />
Will das ganze in einem Insert-Effekt in Cubase benutzen, also benutze die SKD von Steinberg, aber ich glaube das müsste auch gehen ohne die zu kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305011/wave-file-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 24 Jun 2026 10:22:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305011.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jun 2012 06:29:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 06:29:53 GMT]]></title><description><![CDATA[<p>Hallo ich versuche grade den Header eines Wave-Files auszulesen. Irgendwie kommen aber falsche Werte raus. Ich blicke aber nicht durch warum. Habe schon im Internet gesucht, aber finde irgendwie nichts.<br />
Code:</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
	//fstream f;
	//f.open(&quot;testNeu2.txt&quot;, ios::out);
	//f &lt;&lt; &quot;Dieser Text geht in die Datei&quot; &lt;&lt; endl;
	//f.close();
	fstream fileStream;
	fileStream.open(samplePath.text (), ios::in);  
	int byteCounter = 0;
	uint8 oneByte = 0;
	if (fileStream.is_open())
	{
		while (!fileStream.eof())
		{
			fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8)); 
			//mChunkID = oneByte &amp; 0xFFFF;

			if (byteCounter&gt;=0 &amp;&amp; byteCounter &lt;= 3)
			{
				mChunkID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mChunkID += oneByte;
				//char oneByteChar = oneByte;
				//stringstream allByte &lt;&lt; oneByteChar;
				//allByte &gt;&gt; CString a;
			}
			else if (byteCounter&gt;=4 &amp;&amp; byteCounter &lt;=7)
			{
				mChunkSize &lt;&lt;= sizeof(Steinberg::uint8);
				mChunkSize += oneByte;
			}
			else if (byteCounter&gt;=8 &amp;&amp; byteCounter &lt;=11)
			{
				//mFormat &lt;&lt;= sizeof(Steinberg::uint8);
				char oneByteChar = oneByte;
				mFormat = mFormat + oneByteChar;
			}
			else if (byteCounter&gt;=12 &amp;&amp; byteCounter &lt;=15)
			{
				mSubChunk1ID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubChunk1ID += oneByte;
			}				   
			else if (byteCounter&gt;=16 &amp;&amp; byteCounter &lt;=19)
			{
				mSubChunk1Size &lt;&lt;= sizeof(Steinberg::uint8);
				mSubChunk1Size += oneByte;
			}
			else if (byteCounter&gt;=20 &amp;&amp; byteCounter &lt;=21)
			{
				mAudioFormat &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mAudioFormat += oneByte;
			}
			else if (byteCounter&gt;=22 &amp;&amp; byteCounter &lt;=23)
			{
				mNumChannels &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mNumChannels += byteCounter;
			}
			else if (byteCounter&gt;=24 &amp;&amp; byteCounter &lt;=27)
			{
				mSampleRate &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSampleRate += oneByte;
			}
			else if (byteCounter&gt;=28 &amp;&amp; byteCounter &lt;=31)
			{
				mByteRate &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mByteRate += oneByte;
			}
			else if (byteCounter&gt;=32 &amp;&amp; byteCounter &lt;=33)
			{
				mBlockAlign &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mBlockAlign += oneByte;
			}
			else if (byteCounter&gt;=34 &amp;&amp; byteCounter &lt;=35)
			{
				mBitsPerSample &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mBitsPerSample += oneByte;
			}	
			else if (byteCounter&gt;=36 &amp;&amp; byteCounter &lt;=39)
			{
				mSubChunks2ID &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubChunks2ID += oneByte;
			}
			else if (byteCounter&gt;=40 &amp;&amp; byteCounter &lt;=43)
			{
				mSubchunck2Size &lt;&lt;= sizeof(Steinberg::uint8);				                     
				mSubchunck2Size += oneByte;
			}
			else if (byteCounter &gt;=44)
			{

			}
			byteCounter++;
		}
		fileStream.close();
	}
}
</code></pre>
<p>Dass das mit den ganzen If-Abfragen sicher nicht grade optimal ist ist mir klar, aber will erstmal erreichen, dass der Code funktioniert.<br />
Will das ganze in einem Insert-Effekt in Cubase benutzen, also benutze die SKD von Steinberg, aber ich glaube das müsste auch gehen ohne die zu kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224851</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 06:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 07:14:19 GMT]]></title><description><![CDATA[<p>Dann geh doch mal mit dem Debugger durch und guck wann und warum du die falschen Werte bekommst.</p>
<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>Dass das mit den ganzen If-Abfragen sicher nicht grade optimal ist ist mir klar, aber will erstmal erreichen, dass der Code funktioniert.</p>
</blockquote>
<p>Keine gute Idee, denn wenn man nicht sauber arbeitet, erreicht man gerade eben das Gegenteil und es funktioniert nicht. Siehe dein eigener Code. Abgesehen von deinem verkappten <a href="http://en.wikipedia.org/wiki/Loop-switch_sequence" rel="nofollow">for-switch-Pattern</a> scheinst du das Dateieinlesen in C++ nicht zu beherrschen. Das sieht bei dir nämlich so aus wie wenn jemand C nach C++ übersetzt hätte, ohne die Unterschiede zu kennen. Da musst du mal die Grundlagen nochmal lernen, besonders wie das mit der Abbruchlogik funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224864</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Jun 2012 07:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 07:30:30 GMT]]></title><description><![CDATA[<p>Aber wie soll ich das denn ohne die If-Abfragen lösen? Case-Swich geht ja nicht in dem Fall. C habe ich noch nie gemacht, nur JAVA. Ich finde die Abbruchbedingung eigentlich ok, er macht das ganze solange bis die Datei zu ende ist:</p>
<pre><code class="language-cpp">while (!fileStream.eof())
</code></pre>
<p>oder was meinst du?<br />
Ich habe natürlich schon debuggt, der erste Wert ist richtig, der zweite ist aber komischerweise negativ also mChunkSize. Nur hilft mir das nicht weiter um zu erkennen warum die falsch sind ab dann..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224873</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 07:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 07:40:18 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Dann geh doch mal mit dem Debugger durch und guck wann und warum du die falschen Werte bekommst.</p>
<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>Dass das mit den ganzen If-Abfragen sicher nicht grade optimal ist ist mir klar, aber will erstmal erreichen, dass der Code funktioniert.</p>
</blockquote>
<p>Keine gute Idee, denn wenn man nicht sauber arbeitet, erreicht man gerade eben das Gegenteil und es funktioniert nicht. Siehe dein eigener Code. Abgesehen von deinem verkappten <a href="http://en.wikipedia.org/wiki/Loop-switch_sequence" rel="nofollow">for-switch-Pattern</a> scheinst du das Dateieinlesen in C++ nicht zu beherrschen. Das sieht bei dir nämlich so aus wie wenn jemand C nach C++ übersetzt hätte, ohne die Unterschiede zu kennen. Da musst du mal die Grundlagen nochmal lernen, besonders wie das mit der Abbruchlogik funktioniert.</p>
</blockquote>
<p>Ich lese doch lediglich einen Pfad ein, aber den bekomme ich auch ner anderen Klasse. Und mit dem fstream habe ich im Internet desöfteren gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224877</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 07:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 07:42:13 GMT]]></title><description><![CDATA[<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>Aber wie soll ich das denn ohne die If-Abfragen lösen?</p>
</blockquote>
<p>Einfach hintereinander lesen?</p>
<blockquote>
<p>Case-Swich geht ja nicht in dem Fall. C habe ich noch nie gemacht, nur JAVA. Ich finde die Abbruchbedingung eigentlich ok, er macht das ganze solange bis die Datei zu ende ist:</p>
<pre><code class="language-cpp">while (!fileStream.eof())
</code></pre>
<p>oder was meinst du?</p>
</blockquote>
<p>Das heißt es eben gerade <strong>nicht</strong>. Das was du gemacht hast heißt &quot;solange wie die letzte Leseaktion nicht am Dateiende gescheitert ist&quot;. Jetzt guck mal, wo die letzte Leseaktion vor dieser Überprüfung war und was zwischen dieser Leseaktion und der Prüfung noch so alles passiert ist.</p>
<blockquote>
<p>Ich habe natürlich schon debuggt, der erste Wert ist richtig, der zweite ist aber komischerweise negativ also mChunkSize. Nur hilft mir das nicht weiter um zu erkennen warum die falsch sind ab dann..</p>
</blockquote>
<p>Da brauchst du doch gar nicht weiter zu debuggen. Wenn der zweite Wert schon falsch ist, ist der Rest doch uninteressant. Guck, was du einliest, vergleiche was du erwarten würdest. Guck was bei deiner Berechnung in der if-Abfrage herauskommt, vergleiche wieder was du erwarten würdest.</p>
<blockquote>
<p>Und mit dem fstream habe ich im Internet desöfteren gefunden.</p>
</blockquote>
<p>Im Internet findet man so einiges...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224878</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Jun 2012 07:42:13 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 07:52:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Da brauchst du doch gar nicht weiter zu debuggen. Wenn der zweite Wert schon falsch ist, ist der Rest doch uninteressant. Guck, was du einliest, vergleiche was du erwarten würdest. Guck was bei deiner Berechnung in der if-Abfrage herauskommt, vergleiche wieder was du erwarten würdest.</p>
</blockquote>
<p>Was meinst du habe ich gemacht? Ich habe doch schon am Anfang geschrieben das meine Werte nicht stimmen, genau deshalb habe ich doch hier reingeschrieben weil vielleicht jemand ne Idee hat warum sie nicht stimmen. Nur weil ich sehe, dass sie falsch sind heißt das ja nicht unbedingt, dass ich weiß warum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224881</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 07:52:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 08:03:58 GMT]]></title><description><![CDATA[<p>Wenn in der ChunkID RIFF steht, sind die Zahlenwerte Little-Endian. Dann funktioniert deine &lt;&lt;=-Logik nicht, weil das niederwertigste Byte zuerst kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224887</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 19 Jun 2012 08:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 08:48:40 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Wenn in der ChunkID RIFF steht, sind die Zahlenwerte Little-Endian. Dann funktioniert deine &lt;&lt;=-Logik nicht, weil das niederwertigste Byte zuerst kommt.</p>
</blockquote>
<p>Da hast du Recht, das guck ich mir mal eben an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224899</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 08:48:40 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 08:51:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">mChunkID &lt;&lt;= sizeof(Steinberg::uint8);
</code></pre>
<p>ist doch sowieso falsch, denn sizeof(uint8) wird wohl auf den meisten Systemen 1 ergeben...</p>
<p>P.S. Außerdem macht es wenig Sinn, die Daten byteweise zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224900</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 19 Jun 2012 08:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 09:08:58 GMT]]></title><description><![CDATA[<p>Zu jedem Chunk gibt es doch auch die Info, wie lang der Chunk ist. Du könntest Dich also einfach von Chunk zu Chunk hangeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224904</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 19 Jun 2012 09:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 09:24:21 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Zu jedem Chunk gibt es doch auch die Info, wie lang der Chunk ist. Du könntest Dich also einfach von Chunk zu Chunk hangeln.</p>
</blockquote>
<p>ja ich weiß, das versuche ich ja auch. Mit den If-Abfragen schaue ich ja wo grade der byteCounter ist. Und jenachdem wie lang der jeweilige Chunk gerade ist, frage ich in dem If verschieden ab. Aber es haut einfach nicht hin. Habe auch schon &lt;&lt; mal umgedreht trotzdem falsche Werte. Habe jetzt gerade versucht</p>
<pre><code class="language-cpp">mChunkSize += oneByte;
</code></pre>
<p>mal durch</p>
<pre><code class="language-cpp">mChunkSize |= oneByte &amp; 0xFF;
</code></pre>
<p>zu ersetzen, weil ich dachte vielleicht klappt da irgendwie das shiften nicht. Aber bringt nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224913</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 09:24:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Tue, 19 Jun 2012 10:38:56 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">mChunkID &lt;&lt;= sizeof(Steinberg::uint8);
</code></pre>
<p>ist doch sowieso falsch, denn sizeof(uint8) wird wohl auf den meisten Systemen 1 ergeben...</p>
<p>P.S. Außerdem macht es wenig Sinn, die Daten byteweise zu lesen.</p>
</blockquote>
<p>Es soll doch auch 1 ergeben?<br />
Warum nicht bitweise, wie dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224941</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Tue, 19 Jun 2012 10:38:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 04:44:34 GMT]]></title><description><![CDATA[<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>Es soll doch auch 1 ergeben?</p>
</blockquote>
<p>Nein. Damit verschiebst du um 1 Bit.</p>
<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>Warum nicht bitweise, wie dann?</p>
</blockquote>
<p>Du liest nicht bitweise, du liest <strong>byte</strong>weise.</p>
<p>Daten mit fester Größe liest man üblicherweise am Stück in eine entsprechende Struktur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225237</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 20 Jun 2012 04:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 07:18:49 GMT]]></title><description><![CDATA[<p>Hier steht es beschrieben: <a href="http://www.cpp-home.com/tutorials/333_1.htm" rel="nofollow">How to Load a Wave File</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225255</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 20 Jun 2012 07:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 09:35:07 GMT]]></title><description><![CDATA[<p>Super werde ich mir gleich anschauen, ich habe aber gerade gemerkt, dass in einem wavefile nicht zwingend die ersten 44 bits ausgelesen werden müssen, sondern erst nachdem fmt kommt angefangen werden muss. Also kann vor dem FMT-Block noch etwas anderes stehen, wodurch dann bei mir alles durcheinander gekommen ist. Dadurch konnten meine werte auf jeden fall schonmal nicht stimmen.<br />
Ich dachte, dass zwingend in den ersten 44 Bits die Daten stehen, aber das ist definitiv nicht so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225300</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Wed, 20 Jun 2012 09:35:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 10:06:39 GMT]]></title><description><![CDATA[<p>Den Unterschied zwischen Bit und Byte solltest du dir nochmal ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225305</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 20 Jun 2012 10:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 10:12:52 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Hier steht es beschrieben: <a href="http://www.cpp-home.com/tutorials/333_1.htm" rel="nofollow">How to Load a Wave File</a></p>
</blockquote>
<p>Bäh - oben steht ganz groß C++ und unten ist reiner C-Code drin. Dann geht auch das: <a href="http://www.codeproject.com/Articles/1325/Wave-Class-for-Playing-and-Recording-Wave-Files" rel="nofollow">http://www.codeproject.com/Articles/1325/Wave-Class-for-Playing-and-Recording-Wave-Files</a> oder im <a href="http://www.codeproject.com/search.aspx?q=wave&amp;sbo=kw" rel="nofollow">Code-Project nach 'WAVE'</a> suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225309</guid><dc:creator><![CDATA[cpp_freak]]></dc:creator><pubDate>Wed, 20 Jun 2012 10:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 10:32:06 GMT]]></title><description><![CDATA[<p>Nebenbei hast du die Datei nicht mit ios::binary geöffnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225314</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 20 Jun 2012 10:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 13:54:20 GMT]]></title><description><![CDATA[<p>cpp_freak schrieb:</p>
<blockquote>
<p>Th69 schrieb:</p>
<blockquote>
<p>Hier steht es beschrieben: <a href="http://www.cpp-home.com/tutorials/333_1.htm" rel="nofollow">How to Load a Wave File</a></p>
</blockquote>
<p>Bäh - oben steht ganz groß C++ und unten ist reiner C-Code drin. Dann geht auch das: <a href="http://www.codeproject.com/Articles/1325/Wave-Class-for-Playing-and-Recording-Wave-Files" rel="nofollow">http://www.codeproject.com/Articles/1325/Wave-Class-for-Playing-and-Recording-Wave-Files</a> oder im <a href="http://www.codeproject.com/search.aspx?q=wave&amp;sbo=kw" rel="nofollow">Code-Project nach 'WAVE'</a> suchen.</p>
</blockquote>
<p>Ich hatte mir die Seite auch angesehen, aber diesen Link: <a href="http://www.codeproject.com/Articles/29676/CWave-A-Simple-C-Class-to-Manipulate-WAV-Files" rel="nofollow">http://www.codeproject.com/Articles/29676/CWave-A-Simple-C-Class-to-Manipulate-WAV-Files</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225409</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Wed, 20 Jun 2012 13:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 14:29:33 GMT]]></title><description><![CDATA[<p>Hier mal mein aktueller Code, leider geht es immernoch nicht, aber das Problem was ich vorhin geschrieben habe müsste damit eigentlich gelöst sein. Habe jetzt auch ne * 8 dahinter gemacht. Aber klappt trotzdem nicht..</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
	//fstream f;
	//f.open(&quot;testNeu2.txt&quot;, ios::out);
	//f &lt;&lt; &quot;Dieser Text geht in die Datei&quot; &lt;&lt; endl;
	//f.close();
	fstream fileStream;
	fileStream.open(samplePath.text (), ios::in);
	int byteCounter = 0;
	bool isSignalSounded = false;   // Gibt true an, wenn fmt erreicht wurde
	int8 oneByte = 0;
	char kp[5000] = &quot;&quot;;
	int oneByteIndex = 0;
	if (fileStream.is_open())
	{
		while (!fileStream.eof())
		{
			//int au = sizeof(Steinberg::uint8);
			fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8)); 

			if (byteCounter&gt;=0 &amp;&amp; byteCounter &lt;= 3)
			{
				mChunkID &lt;&lt;= sizeof(Steinberg::uint8) * 8;
				mChunkID |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=4 &amp;&amp; byteCounter &lt;=7)
			{
				mChunkSize &lt;&lt;= sizeof(Steinberg::uint8) * 8;
				mChunkSize |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=8 &amp;&amp; byteCounter &lt;=11)
			{
				mFormat &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mFormat |= oneByte &amp; 0xFF;
			}

			else if (byteCounter&gt;=12 &amp;&amp; isSignalSounded == false)	  // Wird ausgeführt, wenn fmt noch nicht erreicht wurde.
			{
				char oneByteChar = oneByte;
				if (oneByte != 0)
				{
					kp[oneByteIndex] = oneByteChar;
				}
				else if (oneByte == 0)
				{					   
					kp[oneByteIndex] = ' ';
				}
				for (int i = 0; i &lt; 4997; i++)
				{
					if (kp[i] == 'f' &amp;&amp; kp[i+1] == 'm' &amp;&amp; kp[i+2] == 't')	// Wenn fmt erreicht wurde..
					{
						fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8));			// Weiß nicht genau ob das nicht weg muss.
						isSignalSounded = true;
						byteCounter = 11;												// Setze den ByteCounter auf 15 zurück, damit die Schleifen unterhalb durchlaufen werden.
						ofstream ftest(&quot;C:\\Users\\Otto\\waveDaten.txt&quot;, ios::out);		// Schreibt zum Testen eine
						ftest &lt;&lt; kp;													// Textdatei mit den Daten.
					}	
				}
				oneByteIndex++;
			}

			else if (byteCounter&gt;=12 &amp;&amp; byteCounter &lt;=15 &amp;&amp; isSignalSounded == true)
			{
				mSubChunk1ID &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mSubChunk1ID |= oneByte &amp; 0xFF;
			}				   
			else if (byteCounter&gt;=16 &amp;&amp; byteCounter &lt;=19 &amp;&amp; isSignalSounded == true)
			{
				mSubChunk1Size &lt;&lt;= sizeof(Steinberg::uint8) * 8;
				mSubChunk1Size |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=20 &amp;&amp; byteCounter &lt;=21 &amp;&amp; isSignalSounded == true)
			{
				mAudioFormat &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mAudioFormat |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=22 &amp;&amp; byteCounter &lt;=23 &amp;&amp; isSignalSounded == true)
			{
				mNumChannels &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mNumChannels |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=24 &amp;&amp; byteCounter &lt;=27 &amp;&amp; isSignalSounded == true)
			{
				mSampleRate &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mSampleRate |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=28 &amp;&amp; byteCounter &lt;=31 &amp;&amp; isSignalSounded == true)
			{						   
				mByteRate &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mByteRate |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=32 &amp;&amp; byteCounter &lt;=33 &amp;&amp; isSignalSounded == true)
			{
				mBlockAlign &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mBlockAlign |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=34 &amp;&amp; byteCounter &lt;=35 &amp;&amp; isSignalSounded == true)
			{
				mBitsPerSample &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mBitsPerSample |= oneByte &amp; 0xFF;
			}	
			else if (byteCounter&gt;=36 &amp;&amp; byteCounter &lt;=39 &amp;&amp; isSignalSounded == true)
			{
				mSubChunks2ID &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mSubChunks2ID |= oneByte &amp; 0xFF;
			}
			else if (byteCounter&gt;=40 &amp;&amp; byteCounter &lt;=43 &amp;&amp; isSignalSounded == true)
			{
				mSubchunck2Size &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
				mSubchunck2Size |= oneByte &amp; 0xFF;
			}
			else if (byteCounter &gt;=44)
			{

			}
			byteCounter++;
		}
		fileStream.close();
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2225425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225425</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Wed, 20 Jun 2012 14:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 14:41:49 GMT]]></title><description><![CDATA[<p>schaue auf Zeile 8 und <a href="http://www.c-plusplus.net/forum/p2225314#2225314" rel="nofollow">diesen Beitrag von Michael</a></p>
<p>schaue auf Zeile 23, 28, 33, usw, und auf die <a href="http://www.c-plusplus.net/forum/p2224887#2224887" rel="nofollow">Bemerkung von MFK</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225432</guid><dc:creator><![CDATA[cpp_freak]]></dc:creator><pubDate>Wed, 20 Jun 2012 14:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 15:21:37 GMT]]></title><description><![CDATA[<p>cpp_freak schrieb:</p>
<blockquote>
<p>schaue auf Zeile 8 und <a href="http://www.c-plusplus.net/forum/p2225314#2225314" rel="nofollow">diesen Beitrag von Michael</a></p>
<p>schaue auf Zeile 23, 28, 33, usw, und auf die <a href="http://www.c-plusplus.net/forum/p2224887#2224887" rel="nofollow">Bemerkung von MFK</a></p>
</blockquote>
<p>Ok das mit 23, 28, 33 ist mir klar, aber trotzdem müssten ja die anderen Werte dann korrekt sein, die beeinflussen sich ja nicht. Wenn die stimmen wollte ich da weiter machen. Zeile 8 schaue ich mir jetzt mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225452</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Wed, 20 Jun 2012 15:21:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Wed, 20 Jun 2012 21:17:56 GMT]]></title><description><![CDATA[<p>Das kann man ja gar nicht mit ansehen!<br />
Du liest aus einer Datei mit binärem Inhalt doch nur Zeichenketten und uint23_t und uint16_t-Werte. Schreibe Dir doch zunächst mal dafür jeweils eine kleine Funktion, die das erledigt.</p>
<p>Es gibt sicher schöneres, als das was ich Dir hier vorschlage - siehe <a href="http://www.c-plusplus.net/forum/p2201290#2201290" rel="nofollow">ibinstream</a>, aber ich will das mal auf Deinem Programm aufbauen.</p>
<p>Also mit den drei Funktionen ...</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;cstdint&gt;

void readbin( std::istream&amp; in, std::string&amp; str, std::size_t n )
{
    const std::size_t N = 100;
    char buf[N]; // hier mal ganz anfängermäßig!
    if( n &gt; N )
        in.setstate( std::ios_base::failbit );
    if( in.read( buf, n ) )
        str.assign( buf, buf + n );
}
void readbin( std::istream&amp; in, std::uint32_t&amp; x )
{   // ACHTUNG: Dein OS muss Little Endian haben (z.B.: Windows), nur dann ist dies ok!
    in.read( (char*)&amp;x, sizeof(x) );
}
void readbin( std::istream&amp; in, std::uint16_t&amp; x )
{
    in.read( (char*)&amp;x, sizeof(x) );
}
</code></pre>
<p>.. geht alles viel einfacher.</p>
<p>Hier in Deine Methode eingebaut, unter Berücksichtigung dessen, was hier bereits erwähnt wurde.</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
    using namespace std;
    ifstream fileStream(samplePath.c_str(), ios_base::binary ); // ios_base::binary MUSS sein
    if (!fileStream.is_open())
        return;

    string tag;
    readbin( fileStream, tag, 4 );
    if( !fileStream || tag != &quot;RIFF&quot; ) // mChunkID
    {
        cerr &lt;&lt; &quot;keine RIFF-Datei&quot; &lt;&lt; endl;
        return;
    }
    readbin( fileStream, mChunkSize );
    readbin( fileStream, tag, 4 );
    if( !fileStream || tag != &quot;WAVE&quot; ) // mFormat
    {
        cerr &lt;&lt; &quot;keine WAVE-Datei&quot; &lt;&lt; endl;
        return;
    }

    for( uint32_t len; ; )
    {
        // --   Header des jeweiligen Chunks einlesen: tag + len
        readbin( fileStream, tag, 4 );
        readbin( fileStream, len );
        if( !fileStream )
            break; // EOF

        cout &lt;&lt; &quot;Chunk: &quot; &lt;&lt; tag &lt;&lt; &quot; Len:&quot; &lt;&lt; len &lt;&lt; endl;
        if( tag == &quot;fmt &quot; ) // abhängig vom Chunk-Typ die Details lesen
        {
            readbin( fileStream, mAudioFormat );
            readbin( fileStream, mNumChannels );
            readbin( fileStream, mSampleRate );
            readbin( fileStream, mByteRate );
            readbin( fileStream, mBlockAlign );
            readbin( fileStream, mBitsPerSample );
            if( fileStream )
                cout &lt;&lt; &quot;fmt ohne Fehler gelesen&quot; &lt;&lt; endl; 
        }
        // else if( tag == &quot;data&quot; ) // hier kommt der Ton
        // {}
        else
        {
            fileStream.ignore( len ); // unbekannten Chunk überspringen
        }
    }
}
</code></pre>
<p>und schon sind es nur noch 50 Zeilen statt 90 und die Methode tut auch noch mehr.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225578</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 20 Jun 2012 21:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Fri, 22 Jun 2012 06:39:15 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Das kann man ja gar nicht mit ansehen!<br />
Du liest aus einer Datei mit binärem Inhalt doch nur Zeichenketten und uint23_t und uint16_t-Werte. Schreibe Dir doch zunächst mal dafür jeweils eine kleine Funktion, die das erledigt.</p>
<p>Es gibt sicher schöneres, als das was ich Dir hier vorschlage - siehe <a href="http://www.c-plusplus.net/forum/p2201290#2201290" rel="nofollow">ibinstream</a>, aber ich will das mal auf Deinem Programm aufbauen.</p>
<p>Also mit den drei Funktionen ...</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;cstdint&gt;

void readbin( std::istream&amp; in, std::string&amp; str, std::size_t n )
{
    const std::size_t N = 100;
    char buf[N]; // hier mal ganz anfängermäßig!
    if( n &gt; N )
        in.setstate( std::ios_base::failbit );
    if( in.read( buf, n ) )
        str.assign( buf, buf + n );
}
void readbin( std::istream&amp; in, std::uint32_t&amp; x )
{   // ACHTUNG: Dein OS muss Little Endian haben (z.B.: Windows), nur dann ist dies ok!
    in.read( (char*)&amp;x, sizeof(x) );
}
void readbin( std::istream&amp; in, std::uint16_t&amp; x )
{
    in.read( (char*)&amp;x, sizeof(x) );
}
</code></pre>
<p>.. geht alles viel einfacher.</p>
<p>Hier in Deine Methode eingebaut, unter Berücksichtigung dessen, was hier bereits erwähnt wurde.</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
    using namespace std;
    ifstream fileStream(samplePath.c_str(), ios_base::binary ); // ios_base::binary MUSS sein
    if (!fileStream.is_open())
        return;

    string tag;
    readbin( fileStream, tag, 4 );
    if( !fileStream || tag != &quot;RIFF&quot; ) // mChunkID
    {
        cerr &lt;&lt; &quot;keine RIFF-Datei&quot; &lt;&lt; endl;
        return;
    }
    readbin( fileStream, mChunkSize );
    readbin( fileStream, tag, 4 );
    if( !fileStream || tag != &quot;WAVE&quot; ) // mFormat
    {
        cerr &lt;&lt; &quot;keine WAVE-Datei&quot; &lt;&lt; endl;
        return;
    }

    for( uint32_t len; ; )
    {
        // --   Header des jeweiligen Chunks einlesen: tag + len
        readbin( fileStream, tag, 4 );
        readbin( fileStream, len );
        if( !fileStream )
            break; // EOF

        cout &lt;&lt; &quot;Chunk: &quot; &lt;&lt; tag &lt;&lt; &quot; Len:&quot; &lt;&lt; len &lt;&lt; endl;
        if( tag == &quot;fmt &quot; ) // abhängig vom Chunk-Typ die Details lesen
        {
            readbin( fileStream, mAudioFormat );
            readbin( fileStream, mNumChannels );
            readbin( fileStream, mSampleRate );
            readbin( fileStream, mByteRate );
            readbin( fileStream, mBlockAlign );
            readbin( fileStream, mBitsPerSample );
            if( fileStream )
                cout &lt;&lt; &quot;fmt ohne Fehler gelesen&quot; &lt;&lt; endl; 
        }
        // else if( tag == &quot;data&quot; ) // hier kommt der Ton
        // {}
        else
        {
            fileStream.ignore( len ); // unbekannten Chunk überspringen
        }
    }
}
</code></pre>
<p>und schon sind es nur noch 50 Zeilen statt 90 und die Methode tut auch noch mehr.</p>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>vielen dank, aber habe trotzdem nochmal weiter versucht selber das hinzukiregen.<br />
Hat auch endlich halbwegs geklappt! Ich kriege jetzt die richtigen Werte heraus, allerdings nur in hexadezimal, und manche muss man davon noch umdrehen. Bei der Samplerate steht zum Beispiel: 0080bb00. Dreht man das um steht dort bb80 und das sind 48000! Und das ist ja bekanntlich nen passender Wert für ne Samplerate. Ich denkee das liegt dann wohl an little und Big Endian. Werde jetzt mal versuchen das komplett hinzukriegen.<br />
Code:</p>
<pre><code class="language-cpp">void WaveFormat::readFileVersuchen (Steinberg::String samplePath)
{
	bool dump = true;
	wofstream ftest(&quot;C:\\Users\\Otto\\waveDaten.txt&quot;, ios::out);
	std::string fmtMarker;
	std::string fmtString = &quot;fmt &quot;;
	int chunkState = kChunkDescriptor;
	fstream fileStream;
	fileStream.open(samplePath.text (), ios::in);
	int byteCounter = 0;
	bool isSignalSounded = false;			// Gibt true an, wenn fmt erreicht wurde
	int8 oneByte = 0;
	if (fileStream.is_open())
	{
		while (!fileStream.eof())
		{
			//int au = sizeof(Steinberg::uint8);
			fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8)); 
			if (dump)
			{
				ftest &lt;&lt; oneByte &lt;&lt; std::hex;
			}

			if (chunkState == kChunkDescriptor)
			{
				if (byteCounter&gt;=0 &amp;&amp; byteCounter &lt;= 3)
				{
					mChunkID &lt;&lt;= sizeof(Steinberg::uint8) * 8;
					mChunkID |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=4 &amp;&amp; byteCounter &lt;=7)
				{
					mChunkSize &lt;&lt;= sizeof(Steinberg::uint8) * 8;
					mChunkSize |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=8 &amp;&amp; byteCounter &lt;=11)				
				{
					mFormat &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mFormat |= oneByte &amp; 0xFF;
					if (byteCounter == 11)
					{
						chunkState = kFmtSubChunk;
					}
				}
			}
			else if (chunkState == kFmtSubChunk)
			{
				static const string kFmtMarker = &quot;&quot;;
				if (oneByte == 0)
				{
					fmtMarker.push_back (' ');
				}
				else
				{
					fmtMarker.push_back (oneByte);
 					int hmmmm = fmtMarker.find(fmtString);
					if (hmmmm &gt; 0 &amp;&amp; !isSignalSounded)		// &amp;&amp; !isSignalSounded entfernen um die Sachen nach fmt in die Datei mitzuschreiben
					{
						fileStream.read(&amp;oneByte, sizeof(Steinberg::uint8));			// ???
						isSignalSounded = true;											// Da fmt erreicht wurde, wird hier nicht mehr reingesprungen
						byteCounter = 17;												// Setze den ByteCounter auf 17 zurück, damit die Schleifen unterhalb durchlaufen werden.
						ofstream ftest(&quot;C:\\Users\\Otto\\waveDaten.txt&quot;, ios::out);		// Schreibt zum Testen eine
						ftest &lt;&lt; fmtMarker;												// Textdatei mit den Daten. (Noch keine umgewandelten)
						//turnHex(0xccbb3344);											// Test ob das umdrehen klappt
					}
				}
/*				if (byteCounter&gt;=12 &amp;&amp; byteCounter &lt;=15 &amp;&amp; isSignalSounded == true)
				{
					mSubChunk1ID &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mSubChunk1ID |= oneByte &amp; 0xFF;
				}				*/   
				if (byteCounter&gt;=16 &amp;&amp; byteCounter &lt;=19 &amp;&amp; isSignalSounded == true)
				{
					mSubChunk1Size &lt;&lt;= sizeof(Steinberg::uint8) * 8;
					mSubChunk1Size |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=20 &amp;&amp; byteCounter &lt;=21 &amp;&amp; isSignalSounded == true)
				{
					mAudioFormat &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mAudioFormat |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=22 &amp;&amp; byteCounter &lt;=23 &amp;&amp; isSignalSounded == true)
				{
					mNumChannels &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mNumChannels |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=24 &amp;&amp; byteCounter &lt;=27 &amp;&amp; isSignalSounded == true)
				{
					mSampleRate &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mSampleRate |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=28 &amp;&amp; byteCounter &lt;=31 &amp;&amp; isSignalSounded == true)
				{						   
					mByteRate &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mByteRate |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=32 &amp;&amp; byteCounter &lt;=33 &amp;&amp; isSignalSounded == true)
				{
					mBlockAlign &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mBlockAlign |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=34 &amp;&amp; byteCounter &lt;=35 &amp;&amp; isSignalSounded == true)
				{
					mBitsPerSample &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mBitsPerSample |= oneByte &amp; 0xFF;
				}	
				else if (byteCounter&gt;=36 &amp;&amp; byteCounter &lt;=39 &amp;&amp; isSignalSounded == true)
				{
					mSubChunks2ID &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mSubChunks2ID |= oneByte &amp; 0xFF;
				}
				else if (byteCounter&gt;=40 &amp;&amp; byteCounter &lt;=43 &amp;&amp; isSignalSounded == true)
				{
					mSubchunck2Size &lt;&lt;= sizeof(Steinberg::uint8) * 8;				                     
					mSubchunck2Size |= oneByte &amp; 0xFF;
				}
				else if (byteCounter &gt;=44)
				{

				}
			}			
			byteCounter++;
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2226056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226056</guid><dc:creator><![CDATA[AsterixderGallier]]></dc:creator><pubDate>Fri, 22 Jun 2012 06:39:15 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Fri, 22 Jun 2012 08:06:29 GMT]]></title><description><![CDATA[<p>AsterixderGallier schrieb:</p>
<blockquote>
<p>vielen dank, aber habe trotzdem nochmal weiter versucht selber das hinzukiregen.<br />
Hat auch endlich halbwegs geklappt! Ich kriege jetzt die richtigen Werte heraus, allerdings nur in hexadezimal, und manche muss man davon noch umdrehen. Bei der Samplerate steht zum Beispiel: 0080bb00. Dreht man das um steht dort bb80 und das sind 48000! Und das ist ja bekanntlich nen passender Wert für ne Samplerate. Ich denkee das liegt dann wohl an little und Big Endian.</p>
</blockquote>
<p>Nö - das liegt an Dir.</p>
<p>Ändere an Deinem Programm folgendes:<br />
- Zeile 9 Daten <strong>BINÄR</strong> lesen</p>
<pre><code class="language-cpp">fileStream.open(samplePath.text (), ios::in | ios::binary);
</code></pre>
<p>wenn Du das nicht tust, wird spätestens das Lesen der Audiodaten fehlschlagen!</p>
<p>- Zeile 57 <strong>&gt;= 0</strong></p>
<pre><code class="language-cpp">if (hmmmm &gt;= 0 &amp;&amp; !isSignalSounded)
</code></pre>
<p>wird der fmt_-String gefunden, so kann ' <code>hmmmm</code> ' auch den Wert 0 annehmen, falls der erste Chunk bereits der 'fmt_'-Chunk ist.</p>
<p>- Zeile 61</p>
<pre><code class="language-cpp">byteCounter = 16;
</code></pre>
<p>- Zeile 89 und 90<br />
ersetze diese beiden Zeilen bitte durch</p>
<pre><code class="language-cpp">if( byteCounter == 24 )
                        mSampleRate = 0;
                    mSampleRate |= (oneByte &amp; 0xFF) &lt;&lt; 8*(byteCounter - 24);
</code></pre>
<p>Du wirst sehen, dass hilft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> - auch wenn Du danach noch nicht am Ziel bist.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226090</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 22 Jun 2012 08:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Wave-File auslesen on Fri, 22 Jun 2012 08:29:19 GMT]]></title><description><![CDATA[<p>Hallo AsterixDerGallier,</p>
<p>kennst du schon das <a href="http://en.wikipedia.org/wiki/Loop-switch_sequence" rel="nofollow">for-case Antipattern</a>? Dein Code ist also ein Paradebeispiel dafür.<br />
Auch wenn der Code von Werner dir vllt. jetzt noch etwas zu hoch vorkommt, so solltest du doch unsere Ratschläge annehmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226099</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 22 Jun 2012 08:29:19 GMT</pubDate></item></channel></rss>