Nun, ohne die SDL_Mixer Zusatzbibilothek wirst du in Sachen Musik/Sound nicht weit kommen.
Besuch mal die Seite www.libsdl.org, das ist die offizielle Seite zur SDL.
Dort suchst du bei Download->Libraries nach der SDL_Mixer erweiterung.
Hier der direkte Link:
http://www.libsdl.org/projects/SDL_mixer/
Hier ladest du dir SDL_mixer-devel-1.2.7-VC6.zip herrunter.
Wenn du das Paket entpackt hast, findest du dort 2 wichtige Ordner, include und lib.
Diese musst du deiner IDE, z.B. Visual Studio 6.0, klar machen, ähnlich wie du es auch schon mit der normalen SDL gemacht hast.
Anschließent bist du in der lage Musik und Sound abzuspielen.
Damit die Funktionen von SDL_Mixer zur verfügung stehen, musst du SDL_mixer.h einbinden und SDL_mixer.lib zu deinem Projekt linken.
Musik/Sound abspielen geht dann ganz einfach:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include <SDL.h>
#include <SDL_mixer.h>
int main(int argc, char* argv[])
{
// Zeiger für den Bildschirm.
SDL_Surface* display = NULL;
// Zeiger für die Musik.
Mix_Music* music = NULL;
// Zeiger für den Sound.
Mix_Chunk* sound = NULL;
// Variable die angibt, ob das Programm beendet werden soll.
bool quit = false;
// SDL Video und Audio System initialisieren
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
// Videomodus setzen
display = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
// Zuerst das Audio-Greät öffnen, bevor Musik/Sound geladen und abgespielt werden können.
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
// Musik laden
music = Mix_LoadMUS("Musik.mp3");
// Sound laden
sound = Mix_LoadWAV("Sound.wav");
// Musik abspielen, der 2. Parameter gibt hierbei die Anzahl
// der loops an, -1 steht für unendlich viele loops.
Mix_PlayMusic(music, -1);
// Sound abspielen, der 1. Parameter gibt den Channel an, in dem
// der Sound abgespielt werden soll.
Mix_PlayChannel(0, sound, -1);
// Hauptschleife
while(!quit)
{
// Event
SDL_Event evt;
// Event holen
SDL_PollEvent(&evt);
// War es ein SDL_QUIT Event?
if(evt.type == SDL_QUIT)
{
// Beenden
quit = true;
}
}
// Musik wieder freigeben
Mix_FreeMusic(music);
// Sound wieder freigeben
Mix_FreeChunk(sound);
// Audio-Gerät wieder schließen
Mix_CloseAudio();
// SDL herrunterfahren.
SDL_Quit();
// 0 zurückliefern
return 0;
}
|
Interessiert dich nur die Hintergrund Musik, dann kannst du die ganzen Sachen mit den Chunks auch weg lassen.
Noch etwas zu
Mix_PlayChannel.
In einem Spiel gibt es meist nur eine Hintergrundmusik, und das ist wie du siehst kein Problem, aber bei Sounds ist das natürlich anders.
In einem Spiel werden meistents mehrere Sounds gleichzeitig abgespielt.
Bei SDL_mixer wird dies mit sogenannten Channels gelöst.
Willst du also 2 Sounds gleichzeitig abspielen, dann darfst du beim Abspielen nicht den gleichen Channel angeben.
Folgendes würde also nicht richtig funktionieren:
|
C-/C++-Quelltext
|
1
2
|
Mix_PlayChannel(0, sound1, 0);
Mix_PlayChannel(0, sound2, 0);
|
Sondern so:
|
C-/C++-Quelltext
|
1
2
3
4
|
Mix_PlayChannel(0, sound1, 0);
Mix_PlayChannel(1, sound2, 0);
Mix_PlayChannel(2, sound3, 0);
// .....
|
Die 0 beim 3. Parameter steht für 0 loops, der Sound würde also nur einmal abgespielt werden.
Nunja, ich hoffe ich konnte dir etwas helfen.
Mit freundlichen Grüßen
Kasenoru