MP3s intern abspielen



  • 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?



  • Damit ist gemeint wo dein rechter Lautsprecher gerade steht.


Anmelden zum Antworten