Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND.

Ähnliche Präsentationen


Präsentation zum Thema: "VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND."—  Präsentation transkript:

1 VO2 Laden und Initialisieren der Sounds

2 Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND Akzellerator hinzufügen –Akzelleratortabelle erweitern IDModifiziererTasteTyp ID_ULTRIS_SOUNDKeineVK_F5VIRTKEY IDM_TESTCtrlTVIRTKEY

3 Sounds sollen später in einem Array gespeichert werden Für den Zugriff auf diesen Array werden Konstanten angelegt const int sound_start = 0; const int sound_dreh = 1; const int sound_move = 2; const int sound_down = 3; const int sound_row1 = 4; const int sound_row2 = 5; const int sound_ende = 6; const int sound_win = 7; const int anzahl_sounds = 8;

4 Das Programm benötigt auch die Namen der Sounds char *soundfiles[anzahl_sounds] = { ul_start.wav, ul_dreh.wav, "ul_move.wav", "ul_down.wav", "ul_row1.wav", "ul_row2.wav", "ul_ende.wav", "ul_win.wav " };

5 Die Klasse CSoundManager Wird in den Microsoft-Datein Dsutil.h und Dsutil.cpp bereitgestellt Dient zur Organisation von Sounds class CSoundManager { public: HRESULT Initialize(…); HRESULT Create(…); };

6 Die Klasse CSound Wird in den Microsoft-Datein Dsutil.h und Dsutil.cpp bereitgestellt Repräsentiert einen konkreten Sound class CSound { public: HRESULT Play(…); HRESULT Stop(); HRESULT Reset(); BOOL IsSoundPlaying(); };

7 Eine Klasse sounds wird angelegt. class sounds { private: CSoundManager smgr; CSound *snd[anzahl_sounds]; //Array mit Zeigern //auf die //erforderlichen //Sounds public: int on; //Ein- Ausschalter sounds(); //Konstruktor int init(HWND wnd); void play (int snr); ~sounds(); //Destruktor };

8 Konstruktor Im Konstruktor werden alle Zeiger im Array snd mit 0 initialisiert, um einen konsistenten Initialzustand zu erhalten Jeder Sound wird eingeschalten sounds::sounds() { int i; for (i=0; i<anzahl_sounds; i++) snd[i] = 0; //Zeiger mit 0 initialisiert on = 1; //Sound eingeschaltet }

9 Die Init-Funktion int sounds::init(HWND wnd) { HRESULT ret; int i; ret=smgr.Initialize(wnd, DSSCL_PRIORITY, 2, 22050, 16); if (ret<0) return ret; for (i=0;i<anzahl_sounds;i++) { ret=smgr.Create(snd+i, soundfiles[i]); if (ret<0) return ret; } return S_OK; } Auch Sounds werden einem Fenster zugeordnet, desshalb wird für die Initialisierung ein Fenster als Parameter übergeben. Es handelt sich um das Hauptfenster (ultris_window)

10 smgr.Initialize(wnd, DSSCL_PRIORITY, 2, 22050, 16); wnd: Das Fenster mit dem der Sound verknüpft wird DSSCL_PRIORITY: Kooperation der Applikation bei konkurierenden Zugriff auf Soundkarte mit anderen Applikationen wird festgelegt 2: zwei Primärkanäle (Stereo-Sound) 22050: Abtastfrequenz von 22,05 kHz 16: Abtastung (16 Bits pro Sample)

11 Der Destruktor Die Funktion Create des Soundmanagers allokiert den benötigten Speicher für die Sounds. Der Destruktor gibt diesen Speicher der Klasse wieder frei sounds::~sounds() { for (int i=0;i<anzahl_sounds; i++) { if(snd[i]) delete snd[i]; //Speicher wird freigegeben }

12 Die Play-Funktion Void sounds::play(int i) { if(!on) //Prüfen ob Sound ausgeschaltet ist return; if(snd[i]->IsSoundPlaying()) //Prüfen ob Sound bereits //abgespielt wird { snd[i]->Stop(); snd[i]->Reset(); } snd[i]->Play(0,0); }

13 Es wird eine Instanz der Klasse sounds mit dem Namen ultris_sounds wird angelegt Um ultris_sounds in die Ablikation einzubetten muss –das Objekt bei Applikationsstart initialisiert werden –der Sound muss bei dem Menüpunkt Sound oder F5 ein- bzw ausgeschalten werden –Der Checkmark des Menüpunktes muss konsistent mit dem Ein-/Ausschalter gehalten werden

14 int APIENTRY WinMain(…) { … ultris_menu = GetMenu(ultris_window); if (ultris_sounds.init(ultris_window) < 0) { MessageBox(ultris_window, Fehler beim Initialisieren der sounds, Ultris Fehlermeldung, MB_OK | MB_ICONERROR | MB_SETFORGROUND); return 0; } CheckMenuItem(ultris_menu, ID_ULTRIS_SOUND, ultris_sounds.on ? MF_CHECKED:MF_UNCHECKED); … while (TRUE) { … }

15 LRESULT CALLBACK ultris_windowhandler(…) { switch (msg) { case WM_COMMAND: switch(LWORD (wParam)) {… case ID_ULTRIS_SOUND: ultris_sounds.on = !ultris_sounds.on; CheckMenuItem(ultris_menu, ID_ULTRIS_SOUND, ultris_sounds.on ? MF_CHECKED:MF_UNCHECKED); return 0; case IDM_TEST: static int testno=0; ultris_sounds.play(testno % anzahl_sounds); testno++; return 0; } break; … }


Herunterladen ppt "VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND."

Ähnliche Präsentationen


Google-Anzeigen