 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 17.07.2005, 17:29 Titel: Auf welche weise sollte man DAudio nutzen? |
|
|
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
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 17.07.2005, 19:07 Titel: |
|
|
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 |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 17.07.2005, 20:04 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Frage am Rande: Reden wir über DirectSound oder DirectMusic?  |
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 17.07.2005, 22:23 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 18.07.2005, 04:22 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.07.2005, 13:00 Titel: |
|
|
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 |
|
 |
|
|
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
|