JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5e05d461db4c9ba95e03083b14c8cf06Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

DirectXAudio

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 27.09.2003, 10:50    Titel: DirectXAudio Antworten mit Zitat

Ich hab mir jetzt noch eine kleine Klasse für DirectAudio gemacht:

Code:

class Audio
{
    IDirectMusicPerformance8*Perfomance;
    IDirectMusicLoader8 *Loader;

public:

    bool Init(const HWND &hwnd,const char*search_directory);
    bool Load(const char*filename,const Sound &seg);
    void Play(const Sound &seg);
    void Stop(const Sound &seg);
    void Clean();

};

class Sound
{
    IDirectMusicSegment8*m_segment;

public:
    friend class Audio;
    void Clean();

};

bool Audio::Init(const HWND &hwnd,const char*search_directory)
{
    Perfomance=NULL;
    Loader=NULL;

    unsigned short sd2[260];



    MultiByteToWideChar(CP_ACP,0,search_directory,-1,sd2,260);


    CoInitialize(NULL);

    CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,IID_IDirectMusicPerformance8,(LPVOID*)&Perfomance);
    CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,IID_IDirectMusicLoader8,(LPVOID*)Loader);

    if(FAILED(Perfomance->InitAudio(NULL,NULL,hwnd,DMUS_APATH_DYNAMIC_STEREO,64,DMUS_AUDIOF_ALL,NULL)))
        return 0;

    if(FAILED(Loader->SetSearchDirectory(GUID_DirectMusicAllTypes,sd2,0)))
        return 0;

}

bool Audio::Load(const char *filename,const Sound &seg)
{
    unsigned short filename2[260];

    MultiByteToWideChar(CP_ACP,0,filename,-1,filename2,260);

    if(FAILED(Loader->LoadObjectFromFile(CLSID_DirectMusicSegment,IID_IDirectMusicSegment8,filename2,(LPVOID*)seg.m_segment)))
        return 0;

    seg.m_segment->Download(Perfomance);

    return 1;

}

void Audio::Play(const Sound &seg)
{
    Perfomance->PlaySegmentEx(seg.m_segment,NULL,NULL,DMUS_SEGF_SECONDARY,0,NULL,NULL,NULL);
}

void Audio::Stop(const Sound &seg)
{
    Perfomance->Stop(seg.m_segment,NULL,0,0);
}

void Audio::Clean()
{
    if(Perfomance)
    {
        Perfomance->Stop(NULL,NULL,0,0);
        Perfomance->CloseDown();
        Perfomance->Release();
        Perfomance=NULL;

    }

    if(Loader)
    {
        Loader->Release();
        Loader=NULL;
    }

    CoUninitialize();

}

void Sound::Clean()
{
    if(m_segment)
    {
        m_segment->Release();
        m_segment=NULL;
    }
}



Aber bei SetSearchDirectory stürzt es immer ab...
Mach ich bei der Konvertierung irgendetwas falsch?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 28.09.2003, 14:58    Titel: Antworten mit Zitat

So, hab das Problem jetzt selber gefunden (& hat gefehlt):

Code:

class Audio
{
    IDirectMusicPerformance8*Perfomance;
    IDirectMusicLoader8 *Loader;

public:

    bool Init(const HWND &hwnd,const char*search_directory);
    bool Load(const char*filename,const Sound &seg);
    void Play(const Sound &seg);
    void Stop(const Sound &seg);
    bool IsPlaying(const Sound &seg);
    void Clean();

};

class Sound
{
    IDirectMusicSegment8*m_segment;

public:
    friend class Audio;
    void Clean();

};

bool Audio::Init(const HWND &hwnd,const char*search_directory)
{
    Perfomance=NULL;
    Loader=NULL;

    unsigned short sd2[260];

    CoInitialize(NULL);

    CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,IID_IDirectMusicPerformance8,(LPVOID*)&Perfomance);
    CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,IID_IDirectMusicLoader8,(LPVOID*)&Loader);



    MultiByteToWideChar(CP_ACP,0,search_directory,-1,sd2,260);




    if(FAILED(Perfomance->InitAudio(NULL,NULL,hwnd,DMUS_APATH_DYNAMIC_STEREO,64,DMUS_AUDIOF_ALL,NULL)))
        return 0;

    if(FAILED(Loader->SetSearchDirectory(GUID_DirectMusicAllTypes,sd2,0)))
        return 0;

    return 1;

}

bool Audio::Load(const char *filename,const Sound &seg)
{
    unsigned short filename2[260];

    MultiByteToWideChar(CP_ACP,0,filename,-1,filename2,260);

    if(FAILED(Loader->LoadObjectFromFile(CLSID_DirectMusicSegment,IID_IDirectMusicSegment8,filename2,(LPVOID*)&seg.m_segment))) return 0;




    seg.m_segment->Download(Perfomance);

    return 1;

}

void Audio::Play(const Sound &seg)
{
   HRESULT hr;
   hr=Perfomance->PlaySegmentEx(seg.m_segment,NULL,NULL,DMUS_SEGF_SECONDARY,0,NULL,NULL,NULL);
   const char*fehler=DXGetErrorDescription9(hr);

}

void Audio::Stop(const Sound &seg)
{
    Perfomance->Stop(seg.m_segment,NULL,0,0);
}

void Audio::Clean()
{
    if(Perfomance)
    {
        Perfomance->Stop(NULL,NULL,0,0);
        Perfomance->CloseDown();
        Perfomance->Release();
        Perfomance=NULL;

    }

    if(Loader)
    {
        Loader->Release();
        Loader=NULL;
    }

    CoUninitialize();

}

bool Audio::IsPlaying(const Sound &seg)
{

    if( seg.m_segment == NULL || Perfomance == NULL )
        return 0;

    return ( Perfomance->IsPlaying( seg.m_segment, NULL ) == S_OK );
}

void Sound::Clean()
{
    if(m_segment)
    {
        m_segment->Release();
        m_segment=NULL;
    }
}


Trotzdem wird es noch nicht abgespielt... Sad
Kann mir jemand helfen?

edit: Bei Performance hab ich das r vergessen, also nicht wundern.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 30.09.2003, 13:43    Titel: Antworten mit Zitat

Vielleicht beschreib ich mein Problem noch etwas genauer:

Immer wenn ich neu starte und dann abspiele gehts, will ich es aber dann ein 2. Mal versuchen, gehts nicht, erst wieder wenn ich neu starte.
Mach ich vielleicht beim "cleanen" irgendwas falsch?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 30.09.2003, 13:51    Titel: Antworten mit Zitat

hast du search_directory initialisiert???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 30.09.2003, 14:30    Titel: Antworten mit Zitat

Wie initialisiert, ist doch ein Parameter.

Aber ich denke auch nicht, dass es da ran liegt, wie gesagt, wenn man neu startet wird es einwandfrei abgespielt, doch sobald man es nochmal machen will...

Übrigens:

Wenn ich dann beim 2. oder x. mal wieder abspiele und ich ins Einzelschrittmodus gehe (F10), dann erscheint wenn ich F10 gedürckt halte immer ein ganz kleines Stückchen von der Musik.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 01.10.2003, 14:40    Titel: Antworten mit Zitat

Sad Sad Sad Sad Sad Sad Sad Sad Sad Sad Sad

Und immer wenn es das erste Mal geladen wurde, wird es fehlerhaft abgespielt. Und beim zweiten Mal dann überhaupt nicht mehr. Erst wenn ich den Computer neu gestartet habe, geht es dann wieder.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum