Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
![]() |
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 |
#ifndef FRAMEWORK_HPP #define FRAMEWORK_HPP //Neu #include <stdlib.h> #include <iostream> #include "Singleton.hpp" #include "Timer.hpp" using namespace std; #define g_pFramework CFramework::Get() class CFramework : public TSingleton<CFramework> { public: bool Init (int ScreenWidth, int ScreenHeight, int ColorDepth, bool bFullscreen); void Quit (); void Update (); void Clear (); void Flip (); bool KeyDown (int Key_ID); SDL_Surface *GetScreen () {return m_pScreen;} private: SDL_Surface *m_pScreen; // Surface für den Screen Uint8 *m_pKeystate; // Array für aktuellen Tastaturstatus ////ab hier ist neu für die Sounddaten aus Tutorial kopiert/// SDL_AudioSpec spec; Uint32 sound_len; Uint8 *sound_buffer; int sound_pos=0; }; #endif |
![]() |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include "Framework.hpp" //das ist neu!!! void Callback (void *userdata, Uint8 *stream, int len) { Uint8 *waveptr; waveptr = sound_buffer + sound_pos; SDL_MixAudio(stream, waveptr, len, SDL_MIX_MAXVOLUME); sound_pos += len; } // Init // // Aufgabe: Framework initialisieren // bool CFramework::Init (int ScreenWidth, int ScreenHeight, int ColorDepth, bool bFullscreen) { // Alle Systeme der SDL initialisieren if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO ) == -1 ) //hier ist noch der Audio Modus hinzugefügt worden { cout << "SDL konnte nicht initialisiert werden!" << endl; cout << "Fehlermeldung: " << SDL_GetError () << endl; Quit (); return (false); } // Vollbild oder Fenstermodus einstellen if (bFullscreen == true) { m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); } else { m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth, SDL_HWSURFACE | SDL_DOUBLEBUF); } // Prüfen, ob alles funktioniert hat if (m_pScreen == NULL) { cout << "Videomodus konnte nicht gesetzt werden!" << endl; cout << "Fehlermeldung: " << SDL_GetError () << endl; Quit (); return (false); } // Zeiger auf internes Array für Tastaturstatus ermitteln m_pKeystate = SDL_GetKeyState (NULL); if (SDL_LoadWAV ("Data/sound2.wav", &spec, &sound_buffer, &sound_len) == NULL) { cout << "SDL_LoadWAV fehlt geschlagen!" << endl; cout << "Fehlermeldung: " << SDL_GetError () << endl; Quit (); } spec.callback = Callback; if (SDL_OpenAudio (&spec, NULL) < 0) { cout << "Musik Datei konnte nicht geöffnet werden!" << endl; cout << "Fehlermeldung: " << SDL_GetError () << endl; Quit (); } SDL_PauseAudio (0); // Alles ging glatt, also true zurückliefern return (true); } // Init // Quit // // Aufgabe: Framework (SDL) beenden // void CFramework::Quit () { // SDL beenden SDL_Quit (); } // Quit // Update // // Aufgabe: Timer und Keyboardstatus updaten // void CFramework::Update () { // Timer updaten g_pTimer->Update (); // Tastaturstatus ermitteln SDL_PumpEvents (); } // Update // Keydown // // Aufgabe: Tastendruck abfragen // bool CFramework::KeyDown (int Key_ID) { // Prüfen, ob Taste gedrückt ist return (m_pKeystate[Key_ID] ? true : false); } // KeyDown // Clear // // Aufgabe: Buffer löschen // void CFramework::Clear () { // Buffer (Surface) mit Hintergrundfarbe füllen SDL_FillRect (m_pScreen, NULL, SDL_MapRGB (m_pScreen->format, 0, 0, 0)); } // Clear // Flip // // Aufgabe: Surface umschalten (flippen) // void CFramework::Flip () { // Surface umschalten SDL_Flip (m_pScreen); } // Flip |
![]() |
C-/C++-Quelltext |
1 |
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDI) ==-1) |
![]() |
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; } |
![]() |
C-/C++-Quelltext |
1 2 |
Mix_PlayChannel(0, sound1, 0); Mix_PlayChannel(0, sound2, 0); |
![]() |
C-/C++-Quelltext |
1 2 3 4 |
Mix_PlayChannel(0, sound1, 0); Mix_PlayChannel(1, sound2, 0); Mix_PlayChannel(2, sound3, 0); // ..... |
Zitat von »"Lares"«
Wie ich bereits vor einiger zeit sagte: SDL_Mixer ist wenn ich richtig informiert bin nur dazu da .wav dateien abzuspielen.
Falls dem nicht so ist lass ich mich gerne eines besseren belehren.![]()
Zitat
// Musik laden
music = Mix_LoadMUS("Musik.mp3");
Zitat
SDL_Mixer ist wenn ich richtig informiert bin nur dazu da .wav dateien abzuspielen.
Zitat
Mein Quellcode lässt sich damit auch fehlerfrei kompilieren und startet sofort, allerdings höre ich nichts
Werbeanzeige