JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Auf welche weise sollte man DAudio nutzen?

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


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 17:29    Titel: Auf welche weise sollte man DAudio nutzen? Antworten mit Zitat

Hai,

ich wollte mal fragen, welche Variante zur nutzung von DX-Sound die beste ist. Ich kenne 2 Arten, die eine ist "Christians Methode", die andere läuft direkt über Buffer, Christians Methode anscheinend über Segmente.
Christians Methode sieht ungefähr so aus:
CPP:
const BYTE MAX_PATH=255;
IDirectMusicLoader8*      lpLoader       = NULL;
IDirectMusicPerformance8* lpPerformance  = NULL;
IDirectMusicSegment8*     lpSegment     = NULL;

   CoInitialize(NULL);
   
    CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicPerformance8,
                     (void**)&lpPerformance );
   
    CoCreateInstance(CLSID_DirectMusicLoader, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicLoader8,
                     (void**)&lpLoader);


    lpPerformance->InitAudio(
        NULL,                 
        NULL,                 
        NULL,                 
        DMUS_APATH_DYNAMIC_STEREO,
        8,                   
        DMUS_AUDIOF_ALL,       
        NULL                   
    );
    WCHAR wstrSearchPath[MAX_PATH];
    MultiByteToWideChar( CP_ACP, 0, "../../media", -1, wstrSearchPath, MAX_PATH );
 
    lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, 
        wstrSearchPath,           
        FALSE                     
    );
 
    WCHAR wstrFileName1[MAX_PATH];

    MultiByteToWideChar( CP_ACP, 0, "open.mid", -1, wstrFileName1, MAX_PATH );

    if (FAILED(lpLoader->LoadObjectFromFile(
        CLSID_DirectMusicSegment, 
        IID_IDirectMusicSegment8, 
        wstrFileName1,             
        (LPVOID*) &lpSegment1)))
    {
        MessageBox( NULL, "Fehler beim Laden der Datei", "Fehler", MB_OK );
        return FALSE;
    }


    lpSegment1->Download( lpPerformance );

    lpPerformance->PlaySegmentEx(
        lpSegment1,
        NULL,       
        NULL,       
        DMUS_SEGF_SECONDARY,
        0,
        NULL,       
        NULL,       
        NULL         
    );

//[...]

@Chris: Sry für das kopieren deines Quelltextes... War zu faul, was eigenes zu schreiben Wink

Die andere Methode, die ich kenne, arbeitet direkt mit Buffern:
CPP:
LPDIRECTSOUND8         g_pDSound;
LPDIRECTSOUNDBUFFER      g_pPrimaryBuffer;
LPDIRECTSOUNDBUFFER8   g_pSound;
DSBUFFERDESC BufferDesc;

   DirectSoundCreate8(&DSDEVID_DefaultPlayback,&g_pDSound, NULL);
   g_pDSound->SetCooperativeLevel(hDlg, DSSCL_PRIORITY);

        //DSBUFFER für Primäeren Buffer
   BufferDesc.dwSize         = sizeof(DSBUFFERDESC);
   BufferDesc.dwFlags         = DSBCAPS_PRIMARYBUFFER;
   BufferDesc.dwBufferBytes   = 0;
   BufferDesc.dwReserved      = 0;
   BufferDesc.lpwfxFormat      = 0;
   BufferDesc.guid3DAlgorithm   = GUID_NULL;

   //und erstellen
   g_pDSound->CreateSoundBuffer(&BufferDesc, &g_pPrimaryBuffer,NULL);

   WAVEFORMATEX      WaveFormat;
   DSBUFFERDESC      BufferDesc;
   LPDIRECTSOUNDBUFFER   pTemp;



   //Fmt für sekundärer:
   WaveFormat.wFormatTag      = WAVE_FORMAT_PCM;
   WaveFormat.nChannels      = 2;
   WaveFormat.nSamplesPerSec   = 22050;
   WaveFormat.wBitsPerSample   = 8;
   WaveFormat.nBlockAlign      = WaveFormat.nChannels * (WaveFormat.wBitsPerSample >> 3);
   WaveFormat.nAvgBytesPerSec   = WaveFormat.nSamplesPerSec * WaveFormat.nBlockAlign;
   WaveFormat.cbSize         = 0;

   // DSBUFFERDESC-Struktur ausfüllen
   BufferDesc.dwSize         = sizeof(DSBUFFERDESC);
   BufferDesc.dwFlags         = DSBCAPS_LOCDEFER |
                                DSBCAPS_CTRLVOLUME |
                          DSBCAPS_CTRLFREQUENCY |
                          DSBCAPS_GLOBALFOCUS;
   BufferDesc.dwBufferBytes   = WaveFormat.nAvgBytesPerSec * 5; //=5 Sec
   BufferDesc.dwReserved      = 0;
   BufferDesc.lpwfxFormat      = &WaveFormat;
   BufferDesc.guid3DAlgorithm   = GUID_NULL; //Kein 3D-Sound

   //Sekundärer Buffer (Schnittstelle is das uralte Teil! Neue anfordern!)
   g_pDSound->CreateSoundBuffer(&BufferDesc,&pTemp,NULL);


        //Will 8-er Schnittstelle haben, net das Ding von Anno 1503
   pTemp->QueryInterface(IID_IDirectSoundBuffer8, (void**)(&g_pSound));

//Hier Sound laden...
//[...]

Dazu mehrere Fragen:
1.: Kann man mit der 1 Methode auch Effekte (Chorus,Echo,...) einbinden?
2.: Wie lädt man bei der 2. Methode eine Wave-Datei? Ich muss das aktuell über eine eigene Funktion machen... Aber ob die so schnell ist... Bezweifele ich bei meinem Stil...
3.: Welche Variante würdet ihr bevorzugen, und warum?
4.: Geht mir der 1. Methode auch 3D-Sound?

Anmerkung: Bitte keine Kommentare zum Codestil! Das eine ist zusammenkopiert, das andere z.T. gerade mal eben schnell geschrieben und mit bereits geschriebenen Teilen zusammenkopiert...

Falls jemand an der Funktion zum laden eines Wave-Files interessiert sein sollte, kann er das sagen. Aber wahrscheinlich eher net... ich glaub, der Speed is net so recht überzeugend... Aber vlt. als Vorlage...


Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free


Zuletzt bearbeitet von FH am 17.07.2005, 20:03, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 18:02    Titel: Antworten mit Zitat

Frage am Rande: Reden wir über DirectSound oder DirectMusic? Shocked
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 19:07    Titel: Antworten mit Zitat

Speed ist doch biem laden net soo wichtig, für die paar Sounds kann das ruhig ein paar Millisekundne mehr dauern. Es sei den dein Game benutzt 50.000 Sounds und soll keine spürbaren Ladezeiten haben.
Ich galube das die erste vielleihct bisschen simpler ist, man mit der zweiten aber etwas mehr machen kann.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 20:04    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Frage am Rande: Reden wir über DirectSound oder DirectMusic? Shocked

Wie du wissen solltest (und ich auch...), gibt es beides net mehr... Hab mich verschrieben...
Es gibt nur noch DX-Audio.
Es geht hier um das Laden von Sounds. Für Musik würde ich MP3, und damit DXShow empfehlen, oder???
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 20:54    Titel: Antworten mit Zitat

FH
Och doch die gibt es Wink Genau wie DirectDraw und Direct3D7 RM Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 22:23    Titel: Antworten mit Zitat

OK... Zurück zum Thema: Findet einer von euch die eine oder andere Methode aus irgendeinem (begründeten) Grund besser?
@Patrick: Hast ja recht! Aber in der letzten Version (8) gibt es nur noch DXAudio.
Gruß

FH
<edit>
@KI: Musste Smilies für diesen Beitrag deaktivieren... (8) wird zu einem cool-Smiley zerhackstückt... Kann man das ändern?
</edit>
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 18.07.2005, 04:22    Titel: Antworten mit Zitat

naja, ich glaube fast das zweite mit den Buffern, aber wenn man einfach nur ein kleines Game macht, wo halt ein paar Sounds drin sein solen, ist das glaube ich fast egal weil Sound da wohl net ganz so kompliziert wie Grafik ist.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.07.2005, 13:00    Titel: Antworten mit Zitat

Beim überfliegen des src würde ich mich spontan für Varianten #2 entscheoden, man scheint dort mehr Einstellungsmöglichkeiten zu haben (3DSound,...)
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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