In C++ Musik frequenz bekommen

DreamGamer

Lieutenant
Registriert
Feb. 2017
Beiträge
543
Hallo, ich wollte fragen, ob jemand eine Idee hat wie ich die Frequenz bekomme, wenn ich ein Lied in C++ abspielen oder wenn ich über C++ Spotify als Audioquelle abfange? Ich möchte einfach nur die Frequenz auslesen nichts darstellen nur die Frequenz bekommen. Und hat eine Idee wie ich die dB Lautstärke eines Lieder abfragen kann über C++?

MFG DreamGamer
 
Ich habe vor ewigkeiten mal mit fmod gearbeitet, das ist sehr mächtig und trotzdem einfach zu nutzen.
 
Hmm es denn so das dies etwas kostet? Denn ich suche eine Kostenlose variante. Ich versuche nämlich über C++ meinen Arduino anzusprechen und dann über den Arduino eine LED anzusteuern die die Musik darstellt
 
fmod ist kostenlos für dich. Musst halt mal lesen und einen Account erstellen.
 
Ok danke ich schaue mir das mal an ^^ Zur not weiß einer ob man dies auch mit SFML Audio umsetzten könnte?
 
Musik ist ein komplexes Gemisch aus verschiedenen Frequenzen, die sich überlagern. "Die" Frequenz gibt es also nicht. Man muss vorher Filter definieren. Die aktuelle Amplitudenhöhe errechnen ist hingegen technisch lösbar.
 
@ghecko Anders gesagt ich möchte wissen ob gerade viel bass vorhanden ist viele mitten oder viele höhen jeweils wie stark ^^
 
Vor allem wirst du vermutlich nicht einen Spotify-Client in C++ für einen Arduino schreiben wollen?
 
Ich wollte die Audio ausgabe von Spotify abfangen über C++ dies müsste doch gehen oder? Und wie soll FMod funktionieren finde keine tutorials bzw. keine möglichkeit dort Skripte zu schreiben
 
  • Gefällt mir
Reaktionen: BAGZZlash
Hallo nochmals ^^ Klingt vllt. Etwas komisch aber hat einer hier eine idee wie ich es ohne C++ umsetzten kann die tiefen mitten und Höhen abzufragen die lautstärke in db und dies an einen Arduino / an den SerialPort weiter schicken kann? Ich blicke irgendwie 0 durch C++ durch ^^ Ich war schon am überlegen es über Javascript umzusetzen nur kann ich wohl dann kein framework im Arduino selbst benutzen was ich aber machen muss um den LED Stripe anzusteuern. bzw. wie gesagt ich verzweifel an C++ habe vor 6 Jahren aufgehört, damit zu arbeiten weil ich C++ zu schwer fand. Ich habe jetzt doch nochmal wegen FMod geschaut weil ich mich dort etwas eingelesen habe und es einfacher wirkte als es komplett selbst zu schreiben. Jetzt habe ich aber die ganze Zeit einen Fehler mit dem Example script von FMod und ich weiß einfach nicht weshalb vllt. kann mir dort auch einer weiterhelfen

Code:
>------ Erstellen gestartet: Projekt: FMod Test with Libary, Konfiguration: Debug Win32 ------

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FMOD_System_Create@4" in Funktion ""enum FMOD_RESULT __cdecl FMOD::System_Create(class FMOD::System * *)" (?System_Create@FMOD@@YA?AW4FMOD_RESULT@@PAPAVSystem@1@@Z)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::release(void)" (?release@System@FMOD@@QAG?AW4FMOD_RESULT@@XZ)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::init(int,unsigned int,void *)" (?init@System@FMOD@@QAG?AW4FMOD_RESULT@@HIPAX@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::close(void)" (?close@System@FMOD@@QAG?AW4FMOD_RESULT@@XZ)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::update(void)" (?update@System@FMOD@@QAG?AW4FMOD_RESULT@@XZ)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::getVersion(unsigned int *)" (?getVersion@System@FMOD@@QAG?AW4FMOD_RESULT@@PAI@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::createStream(char const *,unsigned int,struct FMOD_CREATESOUNDEXINFO *,class FMOD::Sound * *)" (?createStream@System@FMOD@@QAG?AW4FMOD_RESULT@@PBDIPAUFMOD_CREATESOUNDEXINFO@@PAPAVSound@2@@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::System::playSound(class FMOD::Sound *,class FMOD::ChannelGroup *,bool,class FMOD::Channel * *)" (?playSound@System@FMOD@@QAG?AW4FMOD_RESULT@@PAVSound@2@PAVChannelGroup@2@_NPAPAVChannel@2@@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::Sound::release(void)" (?release@Sound@FMOD@@QAG?AW4FMOD_RESULT@@XZ)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::Sound::getSubSound(int,class FMOD::Sound * *)" (?getSubSound@Sound@FMOD@@QAG?AW4FMOD_RESULT@@HPAPAV12@@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::Sound::getLength(unsigned int *,unsigned int)" (?getLength@Sound@FMOD@@QAG?AW4FMOD_RESULT@@PAII@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::Sound::getNumSubSounds(int *)" (?getNumSubSounds@Sound@FMOD@@QAG?AW4FMOD_RESULT@@PAH@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::ChannelControl::setPaused(bool)" (?setPaused@ChannelControl@FMOD@@QAG?AW4FMOD_RESULT@@_N@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::ChannelControl::getPaused(bool *)" (?getPaused@ChannelControl@FMOD@@QAG?AW4FMOD_RESULT@@PA_N@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::ChannelControl::isPlaying(bool *)" (?isPlaying@ChannelControl@FMOD@@QAG?AW4FMOD_RESULT@@PA_N@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: enum FMOD_RESULT __stdcall FMOD::Channel::getPosition(unsigned int *,unsigned int)" (?getPosition@Channel@FMOD@@QAG?AW4FMOD_RESULT@@PAII@Z)" in Funktion ""int __cdecl FMOD_Main(void)" (?FMOD_Main@@YAHXZ)".

1>e:\users\NAME\documents\visual studio 2015\Projects\FMod Test with Libary\Debug\FMod Test with Libary.exe : fatal error LNK1120: 16 nicht aufgelöste Externe

========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========

Mich macht es einfach in C++ fertig das ich nicht erfahre, in welcher Zeile der Fehler code ist was ich einfach aus allen anderen Sprachen gewohnt bin ^^ Vllt. kann mir ja einer helfen oder hat eine idee für eine Alternative. Danke schonmal im vorraus

MFG DreamGamer


PS: Das hier ist die main.cpp Datei die ich aus den FMod Examples habe:

C++:
/*==============================================================================
Play Stream Example
Copyright (c), Firelight Technologies Pty, Ltd 2004-2018.

This example shows how to simply play a stream such as an MP3 or WAV. The stream
behaviour is achieved by specifying FMOD_CREATESTREAM in the call to
System::createSound. This makes FMOD decode the file in realtime as it plays,
instead of loading it all at once which uses far less memory in exchange for a
small runtime CPU hit.
==============================================================================*/
#include "fmod.hpp"
#include "common.h"

int FMOD_Main()
{
    FMOD::System     *system;
    FMOD::Sound      *sound, *sound_to_play;
    FMOD::Channel    *channel = 0;
    FMOD_RESULT       result;
    unsigned int      version;
    void             *extradriverdata = 0;
    int               numsubsounds;

    Common_Init(&extradriverdata);

    /*
    Create a System object and initialize.
    */
    result = FMOD::System_Create(&system);
    ERRCHECK(result);

    result = system->getVersion(&version);
    ERRCHECK(result);

    if (version < FMOD_VERSION)
    {
        Common_Fatal("FMOD lib version %08x doesn't match header version %08x", version, FMOD_VERSION);
    }

    result = system->init(32, FMOD_INIT_NORMAL, extradriverdata);
    ERRCHECK(result);

    /*
    This example uses an FSB file, which is a preferred pack format for fmod containing multiple sounds.
    This could just as easily be exchanged with a wav/mp3/ogg file for example, but in this case you wouldnt need to call getSubSound.
    Because getNumSubSounds is called here the example would work with both types of sound file (packed vs single).
    */
    result = system->createStream(Common_MediaPath("wave_vorbis.fsb"), FMOD_LOOP_NORMAL | FMOD_2D, 0, &sound);
    ERRCHECK(result);

    result = sound->getNumSubSounds(&numsubsounds);
    ERRCHECK(result);

    if (numsubsounds)
    {
        sound->getSubSound(0, &sound_to_play);
        ERRCHECK(result);
    }
    else
    {
        sound_to_play = sound;
    }

    /*
    Play the sound.
    */
    result = system->playSound(sound_to_play, 0, false, &channel);
    ERRCHECK(result);

    /*
    Main loop.
    */
    do
    {
        Common_Update();

        if (Common_BtnPress(BTN_ACTION1))
        {
            bool paused;
            result = channel->getPaused(&paused);
            ERRCHECK(result);
            result = channel->setPaused(!paused);
            ERRCHECK(result);
        }

        result = system->update();
        ERRCHECK(result);

        {
            unsigned int ms = 0;
            unsigned int lenms = 0;
            bool         playing = false;
            bool         paused = false;

            if (channel)
            {
                result = channel->isPlaying(&playing);
                if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
                {
                    ERRCHECK(result);
                }

                result = channel->getPaused(&paused);
                if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
                {
                    ERRCHECK(result);
                }

                result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS);
                if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
                {
                    ERRCHECK(result);
                }

                result = sound_to_play->getLength(&lenms, FMOD_TIMEUNIT_MS);
                if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
                {
                    ERRCHECK(result);
                }
            }

            Common_Draw("==================================================");
            Common_Draw("Play Stream Example.");
            Common_Draw("Copyright (c) Firelight Technologies 2004-2018.");
            Common_Draw("==================================================");
            Common_Draw("");
            Common_Draw("Press %s to toggle pause", Common_BtnStr(BTN_ACTION1));
            Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT));
            Common_Draw("");
            Common_Draw("Time %02d:%02d:%02d/%02d:%02d:%02d : %s", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped");
        }

        Common_Sleep(50);
    } while (!Common_BtnPress(BTN_QUIT));

    /*
    Shut down
    */
    result = sound->release();  /* Release the parent, not the sound that was retrieved with getSubSound. */
    ERRCHECK(result);
    result = system->close();
    ERRCHECK(result);
    result = system->release();
    ERRCHECK(result);

    Common_Close();

    return 0;
}
 
Zuletzt bearbeitet:
Du hast keinen Fehler im Code sonst bekämst du einen Kompilierfehler. Bei dir fehlt dem Linker wohl ganz einfach die fmod Bibliothek, weswegen du von diesem die Fehlermeldungen zu den nicht vorhandenen Funktionen findest.

Hast du die Bibliothek denn in den Projekteigenschaften (korrekt) angegeben?
 
Ich habe bei C++ bei den include Verzeichnissen alle 3 inc ordner verlinkt bei linker allgemein alle 3 libarys verlinkt das müsste doch alles gewesen sein oder? und ich habe die DLL's im Debug Ordner
 
Oh hat sich geklärt :D Habe die falsche Libary importiert ^^ Aber jetzt funktioniert alles ich schaue mal ob ich das jetzt mit C++ umgesetzt bekomme ^^
 
Zurück
Oben