<?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[Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wir haben im dritten Semester nun einen Professor, der uns mit dem an sich spannenden Thema betraut hat aus einer FLAC Datei die Sample Rate auszulesen und das ganze dann noch in einem OpenOFfice Add-in einzubauen.</p>
<p>Leider ist unser Programmieren 2 nie soweit gegangen, so dass ich ziemlich auf dem Schlauch stehe und mit den gefundenen Tutorials im netz nicht wirklich weiterkomme.</p>
<p>Mein Problem ist auch, das die Spezifikation der FLAC Metadaten als Blöcke vorliegt und ich nicht wirklich heisst, was das für mich beim Lesen der Datei bedeutet.</p>
<p>Das ist was ich bisher habe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
using naespace std;

int main()
{
	int sampleRate = 0;

	FILE * flacFile;
	flacFile = fopen (&quot;test.flc&quot;,&quot;r&quot;);
	char sampleRate [4];

	if (flacFile!=NULL)
	{
		fseek (flacFile, , SEEK_SET );
		fgets (sampleRate, 4, flacFile);
		fclose (pFile);
	}
	else
	{
		cout &lt;&lt; &quot;File does not exist!!&quot; &lt;&lt; endl;
	}

  return 0;

}
</code></pre>
<p>Wie ihr set fehlt zb der Parameter, wohin das fseek springen soll.</p>
<p>Ausserdem bin ich mir nicht sicher, ob ich es richtig auslese. Werden denn so wie ich es vorhabe auch wirklich die bytes gespeichert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/228510/sample-rate-aus-flac-file-auslesen-bytes-gt-total-überfordert</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 14:27:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/228510.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 29 Nov 2008 09:58:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sat, 29 Nov 2008 09:58:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wir haben im dritten Semester nun einen Professor, der uns mit dem an sich spannenden Thema betraut hat aus einer FLAC Datei die Sample Rate auszulesen und das ganze dann noch in einem OpenOFfice Add-in einzubauen.</p>
<p>Leider ist unser Programmieren 2 nie soweit gegangen, so dass ich ziemlich auf dem Schlauch stehe und mit den gefundenen Tutorials im netz nicht wirklich weiterkomme.</p>
<p>Mein Problem ist auch, das die Spezifikation der FLAC Metadaten als Blöcke vorliegt und ich nicht wirklich heisst, was das für mich beim Lesen der Datei bedeutet.</p>
<p>Das ist was ich bisher habe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
using naespace std;

int main()
{
	int sampleRate = 0;

	FILE * flacFile;
	flacFile = fopen (&quot;test.flc&quot;,&quot;r&quot;);
	char sampleRate [4];

	if (flacFile!=NULL)
	{
		fseek (flacFile, , SEEK_SET );
		fgets (sampleRate, 4, flacFile);
		fclose (pFile);
	}
	else
	{
		cout &lt;&lt; &quot;File does not exist!!&quot; &lt;&lt; endl;
	}

  return 0;

}
</code></pre>
<p>Wie ihr set fehlt zb der Parameter, wohin das fseek springen soll.</p>
<p>Ausserdem bin ich mir nicht sicher, ob ich es richtig auslese. Werden denn so wie ich es vorhabe auch wirklich die bytes gespeichert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622779</guid><dc:creator><![CDATA[ThaRealMatix]]></dc:creator><pubDate>Sat, 29 Nov 2008 09:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sat, 29 Nov 2008 12:11:16 GMT]]></title><description><![CDATA[<p>also:<br />
<code>using naespace std;</code> ist falsch geschrieben ^^<br />
<code>FILE * flacFile;</code> und <code>flacFile = fopen (&quot;test.flc&quot;,&quot;r&quot;);</code> ist C - wir sind im C++ Forum - also schau mal nach std::istream - und nutz das dann auch ^^<br />
ansonsten müsstest du wahrscheinlich mal posten, was du über FLAC-Daten scho rausgefunden hast - ich muss ehrlich zugeben, dass ich gerad zu faul bin, danach zu suchen ^^ also poste einfach mal den aufbau so einer datei...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622840</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 29 Nov 2008 12:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sat, 29 Nov 2008 13:30:40 GMT]]></title><description><![CDATA[<p>hm tja okay dann wohl verscheieben weil die istream reference schnall ich absolut nicht -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622892</guid><dc:creator><![CDATA[ThaRealMatix]]></dc:creator><pubDate>Sat, 29 Nov 2008 13:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sat, 29 Nov 2008 14:04:11 GMT]]></title><description><![CDATA[<p>ThaRealMatix schrieb:</p>
<blockquote>
<p>hm tja okay dann wohl verscheieben weil die istream reference schnall ich absolut nicht -.-</p>
</blockquote>
<p>Voll einfach: <a href="http://www.cplusplus.com/doc/tutorial/files.html" rel="nofollow">http://www.cplusplus.com/doc/tutorial/files.html</a></p>
<p>PS: &quot;unskilled&quot; meinte wahrscheinlich &quot;ifstream&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622906</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 29 Nov 2008 14:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sat, 29 Nov 2008 14:06:42 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>PS: &quot;unskilled&quot; meinte wahrscheinlich &quot;ifstream&quot;.</p>
</blockquote>
<p>hmm... das f hat sich nur versteckt ^^<br />
hab ich selbst beim durchlesen vorm posten nicht gemerkt gehabt, dass da was fehlt &gt;&lt;</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622908</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 29 Nov 2008 14:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sun, 30 Nov 2008 12:29:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich habs jetzt (doch) nochmal in C++ versucht und habe folgendes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;													// Standardstream-Funktionaliät einbinden
#include &lt;fstream&gt;													// ofstream und ifstream einbinden

using namespace std;

int main(void)
{
	char sampleRate[4];

	ifstream flacFile;												// create new read-stream
	flacFile.open(&quot;test.flac&quot;, ios::in, ios::binary); 				// open flac File öffnen

	flacFile.seekg( , ios::beg);

 return 0;
}
</code></pre>
<p>Mein Problem ist, dass ich weder weiss wohin ich mit seekg springen muss, noch wie weit ich lesen muss, weil ich in Programmieren 2 nie gelernt habe mit Blöcken zu arbeiten.</p>
<p>Die Dokumentation findet man hier: <a href="http://flac.sourceforge.net/format.html" rel="nofollow">http://flac.sourceforge.net/format.html</a></p>
<p>Leider werde ich draus trotz inzwischen 5-maligem Lesen nicht schlau, weil ich ganz offensichtlich zu doof bin.</p>
<p>Falls ich mit seekg zu einem Block springen kann, wüsste ich nicht wie, weil diereferenz die ich im Internet gefunden habe ganz klar sagt das ich &quot;nur&quot; von anfang oder ende einer datei oder dem derzeitigen Punkt aus Zeichen/bitweise &quot;springen&quot; kann/muss um an die Position zu kommen die ich brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623268</guid><dc:creator><![CDATA[ThaRealMatix]]></dc:creator><pubDate>Sun, 30 Nov 2008 12:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to Sample Rate aus Flac File auslesen (Bytes) -&amp;gt; total überfordert on Sun, 30 Nov 2008 14:38:18 GMT]]></title><description><![CDATA[<p>Der 5. Wert der METADATA_BLOCK_DATA sollte die Sampling-Rate sein:</p>
<blockquote>
<p>&lt;20&gt; Sample rate in Hz. Though 20 bits are available, the maximum sample rate is limited by the structure of frame headers to 655350Hz. Also, a value of 0 is invalid.</p>
</blockquote>
<p>Der wiederrum ist der erste Wert der METADATA_BLOCK_DATA und der besteht aus dem Header und dem eigtl Inhalt...</p>
<p>Also würde ich mal auf folgendes tippen:</p>
<pre><code>&lt;32bit müll - iwas mit Flac&gt;
&lt;1Bit: 0&gt;
&lt;7Bit: metadata-block&gt;
&lt;24bit: länge des metadaten-blocks an sich (ohne header) - uns interessiert nur der block, der bei den 7Bit von oben ne 0 stehen hat - also vrmtl der erste&gt;
...
&lt;1Bit: 1&gt;
//METADATA_BLOCK_STREAMINFO
&lt;80Bit Müll&gt;
&lt;20Bit - genau die, die wir wollen&gt;
</code></pre>
<p>Also entweder, du nimmst den stream und liest immer nen stück in nen puffer (am besten) und guckst dir dann die Werte an (z.bsp. mit std::bitset) - oder du versuchst direkt immer nur genau so viel auszulesen, wie du gerade brauchst - wobei ich gerade gleich gar nicht weiß, ob man bitgenau auslesen kann ^^</p>
<p>Ich würd vll am ehesten ne Klasse bauen, die versucht den Stream zu parsen und den intern aufsplittet - die muss ja auch gar nicht alles können - reicht ja, wenn sie alles ignoriert, was sie nicht braucht...</p>
<p>also in etwa so:</p>
<pre><code class="language-cpp">enum TmetaData_What
{
 STREAMINFO,
 //...
} //irgendwo braucht man das bestimmt ^^

class TmetaData
{
 TmetaData_What what;
 virtual ~TmetaData;
 virtual bool /*again*/ Parse(std::ifstream &amp;stream, TmetaData *object);
 //virtual ...
};

class TmetaDataStreamInfo : public TmetaData
{
 TmetaDataStreamInfo () : what(STREAMINFO) {}
 unsigned int srate;
 unsigned int GetSamplingRate() const {return srate;}
 bool Parse(std::ifstream &amp;stream, TmetaDataStreamInfo *object)
 { //pseudo-code - wird so niemals funktionieren)
  stream.readBit(80);
  srate = reinterpret_cast &lt;unsigned int&gt; (stream.readBit(24));
  return stream.readBit(1);
 }
//...
};

class TflacData
{
// private/public:
 std::ifstream stream;
 std::vector &lt;TmetaData*&gt; metadata;
 TflacData(std::ifstream &amp;stream);

 Parse()
 {
  TmetaData* out (nullptr);
  while (! stream.eof())
  {
   while (Parse (stream, out))
   {
    if (!out)
     continue;
    metadata.push_back(out);
    out = nullptr;
   }; 
  };
 }
//hier könnte man noch ne fkt bauen, die anhand des enums TmetaData_What nur die richtigen einträge (also wieder nen vector) des vectors zurückgibt
};
</code></pre>
<p>Irgendwie so in etwa würde ich das wohl anstellen - wobei hier sicherlich noch paar (grobe) Fehler drin sind ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623326</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 30 Nov 2008 14:38:18 GMT</pubDate></item></channel></rss>