<?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[Problem mit wav datei, FFT]]></title><description><![CDATA[<p>Erst mal zu meiner Person:<br />
Ich habe vor rund 2 Jahren C++ gelernt und für meine Bachelorarbeit ein einfaches Programm geschrieben.<br />
Im letzten Jahr habe ich mir selber Android (also Java) beigebracht, eine App geschrieben und veröffentlicht.Nun möchte ich diese App auf iOS portieren. Nur leider scheitert es schon am Einlesen der Wav Datei.</p>
<p>In Android habe ich das so umgesetzt:</p>
<p>Ich habe mir eine Klasse erstellt &quot;datastructures&quot;, welche ein double array &quot;frequencies&quot; enthält (und ein paar andere Sachen, hier nicht wichtig).<br />
Das array frequencies hat die Länge 4096 (Potenz von 2) um das später durch eine Fast Fourier Transformation zu jagen.</p>
<p>Ich lese nun also die wav Datei ein, bekomme pro Zeiteinheit ein Array der Frequenzen und speichere mir diese Info als Vector&lt;datastructures&gt;.</p>
<p>Ich probiere nun seit 3 Tagen rum und habe auch schon einige Code Snippets für C++ um eine wav Datei einzulesen, ich verstehe aber nicht warum mir diese jeweils nur ein eindimensionales array ausgeben.</p>
<p>Gibt es denn keine library die das kann was ich machen will ?</p>
<p>Am besten wäre sowas wie:<br />
double freqs[4048];<br />
freqs = wavFile.readSample(zeitPunktX);<br />
Wobei das Array nicht komplett gefüllt werden muss.</p>
<p>Die Wavdateien haben immer die gleiche SampleRate etc. da ich diese selber erstelle, ich müsste mich also nicht mal um unterschiedliche Header kümmern, könnte also direkt nach dem data chunk zu lesen anfangen.<br />
(44.100 Hz, 16bit, mono)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307409/problem-mit-wav-datei-fft</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 20:50:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307409.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Aug 2012 09:09:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit wav datei, FFT on Sun, 26 Aug 2012 09:15:24 GMT]]></title><description><![CDATA[<p>Erst mal zu meiner Person:<br />
Ich habe vor rund 2 Jahren C++ gelernt und für meine Bachelorarbeit ein einfaches Programm geschrieben.<br />
Im letzten Jahr habe ich mir selber Android (also Java) beigebracht, eine App geschrieben und veröffentlicht.Nun möchte ich diese App auf iOS portieren. Nur leider scheitert es schon am Einlesen der Wav Datei.</p>
<p>In Android habe ich das so umgesetzt:</p>
<p>Ich habe mir eine Klasse erstellt &quot;datastructures&quot;, welche ein double array &quot;frequencies&quot; enthält (und ein paar andere Sachen, hier nicht wichtig).<br />
Das array frequencies hat die Länge 4096 (Potenz von 2) um das später durch eine Fast Fourier Transformation zu jagen.</p>
<p>Ich lese nun also die wav Datei ein, bekomme pro Zeiteinheit ein Array der Frequenzen und speichere mir diese Info als Vector&lt;datastructures&gt;.</p>
<p>Ich probiere nun seit 3 Tagen rum und habe auch schon einige Code Snippets für C++ um eine wav Datei einzulesen, ich verstehe aber nicht warum mir diese jeweils nur ein eindimensionales array ausgeben.</p>
<p>Gibt es denn keine library die das kann was ich machen will ?</p>
<p>Am besten wäre sowas wie:<br />
double freqs[4048];<br />
freqs = wavFile.readSample(zeitPunktX);<br />
Wobei das Array nicht komplett gefüllt werden muss.</p>
<p>Die Wavdateien haben immer die gleiche SampleRate etc. da ich diese selber erstelle, ich müsste mich also nicht mal um unterschiedliche Header kümmern, könnte also direkt nach dem data chunk zu lesen anfangen.<br />
(44.100 Hz, 16bit, mono)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245555</guid><dc:creator><![CDATA[dak]]></dc:creator><pubDate>Sun, 26 Aug 2012 09:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit wav datei, FFT on Sun, 26 Aug 2012 09:38:53 GMT]]></title><description><![CDATA[<p>Du suchst std:: vector.<br />
IOS bietet aber sicher auch Objective-C Bibliotheken zum Bearbeiten von WAV-Dateien an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245564</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 26 Aug 2012 09:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit wav datei, FFT on Sun, 26 Aug 2012 09:45:22 GMT]]></title><description><![CDATA[<p>dak schrieb:</p>
<blockquote>
<p>Ich lese nun also die wav Datei ein, bekomme pro Zeiteinheit ein Array der Frequenzen</p>
</blockquote>
<p>Ein Array von Abtastwerten, Samples ... Das Wort &quot;Frequenzen&quot; ist hier falsch.</p>
<p>dak schrieb:</p>
<blockquote>
<p>Gibt es denn keine library die das kann was ich machen will?</p>
</blockquote>
<p>Wav-Datei lesen? Klar. Z.B. libsndfile. Gibt sicherlich auch anderes.</p>
<p>dak schrieb:</p>
<blockquote>
<p>Am besten wäre sowas wie:<br />
double freqs[4048];<br />
freqs = wavFile.readSample(zeitPunktX);<br />
Wobei das Array nicht komplett gefüllt werden muss.</p>
</blockquote>
<p>Eine solche Zuweisung gibt es nicht, egal was wavFile ist und was readSample macht. Man würde das wenn dann so machen:</p>
<pre><code class="language-cpp">const int frames = 4096;
std::vector&lt;float&gt; block (frames*wavFile.num_channels());
int got = wavFile.read(frames,block.begin());
</code></pre>
<p>oder sowas...</p>
<p>dak schrieb:</p>
<blockquote>
<p>Die Wavdateien haben immer die gleiche SampleRate etc. da ich diese selber erstelle, ich müsste mich also nicht mal um unterschiedliche Header kümmern, könnte also direkt nach dem data chunk zu lesen anfangen.<br />
(44.100 Hz, 16bit, mono)</p>
</blockquote>
<p>Wenn die Dateien nicht noch Extra-Header-Informationen besitzen, hast du wahrscheinlich einen Header, der 44 Bytes lang ist. Wenn das jetzt auch noch PCM ist, dann lädst du 4096*2 characters per read und setzt dir die 16bit samples selbst zusammen. Siehe std::ifstream, denke dran, die Datei im binär-Modus zu öffnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245567</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 26 Aug 2012 09:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit wav datei, FFT on Sun, 26 Aug 2012 11:21:08 GMT]]></title><description><![CDATA[<p>Hab damals mit libsndfile gearbeitet.<br />
Ist glaub ich sogar ein C++ Wrapper vorhanden.</p>
<p>Dort liest man eine WAV Datei ein, und bekommt ein 1d-Array mit den Daten. Weiters bekommt man die Info, wieviele Kanäle die Datei hat.<br />
Die Abtastwerte sind bei 2 Knälen wie folgt im 1d Array drinnen:<br />
CH0 CH1 CH0 CH1 ...</p>
<p>Hier die Funktion, mir welcher ich damals (mit der alten C Schnittstelle) WAV Dateien geladen habe:</p>
<pre><code class="language-cpp">void SoundFile::loadFile(const std::string&amp; filename) throw(const char*)
{
    SNDFILE*  sFile=0;
    SF_INFO sInfo;
    double *tempData=0;

    //dateiinhalt in ein 1-dim array speichern
    sFile=sf_open(filename.c_str(), SFM_READ, &amp;sInfo);
    if (!sFile) throw &quot;Exception at loadFile&quot;;
    tempData=new double[sInfo.frames*sInfo.channels];
    sf_read_double(sFile, tempData, sInfo.frames*sInfo.channels);
    sf_close(sFile);

    //nach channels geordnetes mehrdim. data vector erstellen
    initData(sInfo.channels, sInfo.frames);
    for (long i=0;i&lt;sInfo.channels;i++)
    {
        std::vector&lt;double&gt; dataPerChannel;
        for (long n=0;n&lt;sInfo.frames;n++)
        {
            dataPerChannel.push_back(tempData[i+n*sInfo.channels]);
        }
        m_data.push_back(dataPerChannel);
    }
    delete [] tempData;

    m_channels=sInfo.channels;
    m_frames=sInfo.frames;
    m_sampleRate=sInfo.samplerate;

}
</code></pre>
<p>m_data hat den Typ: std::vector&lt;std::vector&lt;double&gt; &gt;</p>
<p>Übrigens sind in der WAV Datei die Werte im Zeitbereich, erst durch die FFT bekommst du Werte im Frequenzbereich. Du lädst also Abtastwerte, keine Frequenzen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245591</guid><dc:creator><![CDATA[dsasdas]]></dc:creator><pubDate>Sun, 26 Aug 2012 11:21:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit wav datei, FFT on Sun, 26 Aug 2012 11:23:21 GMT]]></title><description><![CDATA[<p>link vergessen:<br />
<a href="http://www.mega-nerd.com/libsndfile/" rel="nofollow">http://www.mega-nerd.com/libsndfile/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245592</guid><dc:creator><![CDATA[dsasdas]]></dc:creator><pubDate>Sun, 26 Aug 2012 11:23:21 GMT</pubDate></item></channel></rss>