MP3s intern abspielen



  • Hi!

    Ich hab ne dll aus nem anderen Programm geklaut, womit es möglich ist, mp3s intern abzuspielen (also ohne das der codec installiert ist)

    Kann mit jemand sagen wie ich meinen Player dazu bringe auf die dll zuzugreifen? Oder kennt jemand nen Beispielcode?

    Danke im Voraus



  • Wie wärs mit nem Header, oder wenigstens ner Beschreibung der Funktionen samt Parametern in der DLL.



  • aber mal ganz am rande. guck mal in die faq, da steht wie man mp3s abspielt mit der mci-schnittstelle



  • Vergess MCI.
    Nimm FMOD, ist eine Libary spezialisiert auf Sound und es ist frei für
    nicht kommerzielle Software.

    Devil



  • Vergess MCI.

    Das heisst "Vergiss"



  • Original erstellt von <The Forgotten>:
    Das heisst "Vergiss"

    Oh, danke...



  • Original erstellt von devil81:
    **Vergess MCI.
    Nimm FMOD, ist eine Libary spezialisiert auf Sound und es ist frei für
    nicht kommerzielle Software.

    Devil**

    Ich hab mir FMOD schonmal angeschaut, aber fand es etwas verwirrend 😕
    Egal, ich probiers nochmal...



  • tut mir leid, aber bei FMOD steig ich 0 durch.
    Hab da Lauter Ordner vor mir und weiß damit nix anzufangen 😕



  • dann lass es!



  • Original erstellt von <tipp>:
    dann lass es!

    Hier wird man ja wirklich gut geholfen, geschweige denn Motiviert.
    Ok lass ichs halt, der kram is sowieso Schwul



  • würde dir code helfen, wie mans mit direct-x macht?



  • kann dir code geben, wie du es schaffst, mp3 abzuspielen mit fmod.
    es ist nicht so schwer...

    Devil



  • Original erstellt von devil81:
    **kann dir code geben, wie du es schaffst, mp3 abzuspielen mit fmod.
    es ist nicht so schwer...

    Devil**

    mir kannst du ihn auch geben;)
    Wäre schon mal interessant - habe sowas noch nie gemacht



  • Dann werd ich wohl meine FMOD klasse heute abend umschreiben 🙂

    Devil



  • Original erstellt von devil81:
    **kann dir code geben, wie du es schaffst, mp3 abzuspielen mit fmod.
    es ist nicht so schwer...

    Devil**

    Danke wäre nett 🙂
    Wenigstens einer der mir helfen will



  • Original erstellt von Perner:
    Danke wäre nett 🙂
    Wenigstens einer der mir helfen will

    zwei. aber meinen willste ja nicht.



  • Original erstellt von volkard:
    **
    zwei. aber meinen willste ja nicht.**

    lern du erst mal c++ 😃 😉 :p

    Devil

    [ Dieser Beitrag wurde am 14.11.2002 um 14:15 Uhr von devil81 editiert. ]



  • Original erstellt von devil81:
    **lern du erst mal c++ 😃 😉 :p
    **

    Kann es sein, daß Du mich mit jemandem verwechselst?



  • Original erstellt von volkard:
    **
    Kann es sein, daß Du mich mit jemandem verwechselst?**

    Das war ironisch gemeint...
    Besser als du kann es hier denk ich keiner...

    Devil

    [ Dieser Beitrag wurde am 14.11.2002 um 15:29 Uhr von devil81 editiert. ]



  • Original erstellt von devil81:
    **Besser als du kann es hier denk ich keiner...
    **

    jo, keiner in meinem wohnzimmer. *g*
    aber bevor wir uns ins vegleichen vertiefen, ein müßiges thema, lenk ich mal mit meiner mp3-klasse ab.
    dx ist nämlich in seltenen fällen gar nicht so schwer. das problem sind die dokus von ms, die offensichtlich absichtlich noch komplizierter geschrieben wurden als der c++-standard.

    //copyright by Volkard
    #include <windows.h>  
    #include <control.h>
    #include <strmif.h>
    #include <uuids.h>
    #include <evcode.h>
    #include <errors.h>
    #pragma comment(lib,"strmiids")
    #pragma comment(lib,"quartz")
    
    void check(HRESULT hResult)
    {
        if(FAILED(hResult))
            throw hResult;
    }
    
    class Mp3Player
    {
    private:
        IGraphBuilder* pigb;
        IMediaControl* pimc;
        IMediaEvent* pime;
        IMediaPosition* pimp;
        WCHAR* fileName;
    public:
        Mp3Player()
            :pigb(0)
            ,pimc(0)
            ,pime(0)
            ,pimp(0)
        {
            check(CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pigb));
            check(pigb->QueryInterface(IID_IMediaControl,(void **)&pimc));
            check(pigb->QueryInterface(IID_IMediaEvent,(void **)&pime));
            check(pigb->QueryInterface(IID_IMediaPosition,(void **)&pimp));
        }
        ~Mp3Player()
        {
            if(pime) pime->Release();
            if(pimc) pimc->Release();
            if(pigb) pigb->Release();
            if(pimp) pimp->Release();
        }
        void PlayFile (WCHAR* wFile)
        {
            check(pigb->RenderFile(wFile, NULL));
            check(pimc->Run());
        }
        double getCurrentPos()
        {
            REFTIME curTime;
            check(pimp->get_CurrentPosition(&curTime));
            return curTime;
        }
        double getDuration()
        {
            REFTIME maxTime;
            check(pimp->get_Duration(&maxTime));
            return maxTime;
        }
        bool isRunning()
        {
            LONG completion;
            pime->WaitForCompletion(0,&completion);
            return completion!=EC_COMPLETE;
        }
    };
    

    und ne kleine main, genau die, die mich seit wochen mit musik bedudelt:

    #pragma warning(disable:4786)
    
    #include "mp3.h"
    #include <conio.h>
    #include <iostream>
    #include <iomanip>
    #include <vector>
    #include <string>
    #include <fstream>
    #include <algorithm>
    #include <ctime>
    using namespace std;
    
    void test()
    {
        vector<string> files;
        ifstream in("dir.txt");
        string file;
        while(getline(in,file))
        {
            files.push_back(file);
        }
        random_shuffle(files.begin(),files.end());
        for(vector<string>::iterator i=files.begin();i!=files.end();++i)
        {
            cout<<*i<<endl;
            try
            {
                WCHAR *wFile=new WCHAR[i->size()+1];
                MultiByteToWideChar(CP_ACP,0,i->c_str(),-1,wFile,i->size()+1);
                Mp3Player m;
                m.PlayFile(wFile);
                while(m.isRunning())
                {
                    cout.setf(ios::fixed);
                    cout<<setprecision(1);
                    cout<<m.getCurrentPos();
                    cout<<'/';
                    cout<<m.getDuration();
                    cout<<'\r'<<flush;
                    Sleep(100);
                    if(kbhit())
                    {
                        switch(getch())
                        {
                        case 's':
                            goto raus;
                            break;
                        case 'q':
                            return;
                        }
                    }
                }
            }
            catch(HRESULT hResult)
            {
                TCHAR text[MAX_ERROR_TEXT_LEN];
                AMGetErrorText(hResult,text,MAX_ERROR_TEXT_LEN);
                cout<<"Error: "<<text<<endl;
            }
    raus:;
        }
    }
    
    int main(int, char** argv)
    {
        srand(time(0));
        CoInitialize(0);
        test();
        CoUninitialize();
        return 0;
    }
    

    hoffentlich sieht PeterTheMaster das goto dort und verbietet es mir.



  • thx für den Code, aber was ist mit getCurrentPos gemeint?
    Soll ich da jetzt selber nen Schieberegler einfügen oder ist das für die ActiveX Windows Media Komponente gedacht?


Anmelden zum Antworten