hat jemand von euch erfahrung mit fmod?



  • float *spectrum = new float[512];
    


  • warum kann ich jetzt nicht auf ein element von spectruem zugreifen indem ich z.B. Label1->Caption = spectrum[20]; verwende? ich bekomm immer ne Zugriffsverletzung.



  • Weil spectrum ein Zeiger ist.



  • nuclearspider schrieb:

    warum kann ich jetzt nicht auf ein element von spectruem zugreifen indem ich z.B. Label1->Caption = spectrum[20]; verwende? ich bekomm immer ne Zugriffsverletzung.

    Das sollte eigentlich funktionieren... Ist spectrum an der Stelle sichtbar, gültig und noch vorhanden?



  • void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      float *spectrum = new float[512];
      spectrum = FSOUND_DSP_GetSpectrum();
      Label1->Caption = spectrum[1];
    }
    


  • nuclearspider schrieb:

    spectrum = FSOUND_DSP_GetSpectrum();
    

    Da scheint der Fehler zu liegen, offensichtlich bekommst Du nichts zurück...

    Allerdings weiß ich auch nicht, was diese Zeile bewirken soll. Sollte böse Fehlermeldungen hageln, wenn Du den CodeGuard aktivierst (nicht in der Standard / Personal Version enthalten).

    So wie ich das sehe, muß die FSOUND...-Funktion den Speicher reservieren und Dir nur den Zeiger auf das Array zurückgeben. Aber anscheinend wird dir NULL, oder ein ungültiger Zeiger zurückgegeben. Davon abgesehen, hast Du bereits Speicher für dieses Array reserviert... Falls das die komplette Routine ist, fehlt auf jeden Fall auch noch die Freigabe des Arrays (delete[] spectrum;)

    Was steht denn in der Hilfe zu der Funktion? Hast Du schon ein Beispielprogramm zum Laufen bekommen?

    Grüße

    NACHTRAG:
    m.E. müßte das eher so aussehen:

    void __fastcall TForm1::Button3Click(TObject *Sender) 
    { 
      float *spectrum = NULL; 
      spectrum = FSOUND_DSP_GetSpectrum();
      if (spectrum)
        // irgendwas damit machen...
      if (spectrum)  // Speicher wieder freigeben
        delete[] spectrum;
    }
    


  • Ich hatte vergessen, dass das DSP-System explizit aktiviert werden muss.

    FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
    

    Allerdings steht dieser Hinweis eigentlich unübersehbar in der Hilfe zu FSOUND_DSP_GetSpectrum ...



  • Hi nochmal,

    dennoch bin ich der Meinung, dass man keinen Speicher zu reservieren braucht, sondern nur einen Zeiger zu deklarieren. Ansonsten müßte das Array in der Funktion doch übergeben werden?? Oder übersehe ich hier etwas??

    Grüße



  • Ich hatte vergessen, dass das DSP-System explizit aktiviert werden muss.

    Daran hats gelegen. jetzt gehts. Danke



  • ok, wenn Dich mein Beitrag nicht interessiert, dann mußt Du halt mit dem RessourceLeak und dne eventuell daraus entstehenden Problemen leben...



  • Mahlzeit!
    brauch man dazu unbedingt fmod??? oder kann man das irgend wo im directsound abgreifen??????
    danke für die hilfe


Anmelden zum Antworten