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.

Slides:



Advertisements
Ähnliche Präsentationen
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Advertisements

V04: Definition und Implementierung der Formen. Spieler kann aus Gesamtzahl von 35 Steinen seine Spielsteine wählen Einheitliche Datenstruktur wird benötigt,
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Ultris V10 Bewegen, Drehen und Kollisionserkennung.
V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void.
Konstruktoren.
V03 Laden und Initialisieren der Grafiken - Grafiken des Spiels laden und testweise auf dem Bildschirm anzeigen - eine Klasse anlegen, die alle erforderlichen.
V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
Spieleprogrammierung mit DirectX und C++
V03 Laden und Speichern von Spielfeldern und der Spielfeldeditor.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Letzte Übung.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
A Workshop About this chapter General description Units Time Schedule
Sammlungsklassen Array.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Der Foliensatz ist unter einer Creative Commons-Lizenz lizenziert:
Problemlösen am Beispiel des Rückwärtsarbeitens
Stichwortverzeichnis
Heute Mathe, morgen DLR! Dr. Margrit Klitz
Einführung in Web- und Data-Science Grundlagen der Stochastik
gemeinsam.innovativ.nachhaltig.
Wissenschaftliche Methodik
3. Schafft das Internet neue Transaktionsdesign?
Michael Artin: Geometric Algebra
Stichwortverzeichnis
8 Zündung/Motormanagement
Lieber Leser, liebe Leserin,
Algorithmen und Datenstrukturen
Studien zu Baryonen-Resonanzen in Charmonia-Zerfällen
Algorithmen und Datenstrukturen
Komplexe Wechselstromrechnung
Forschung trifft Schule CERN Summer School Auffrischung: Das Standardmodell im Schulunterricht Philipp Lindenau u. Michael Kobel CERN |
Algorithmen und Datenstrukturen
„DCF-Baukasten“ Lösungsvorschläge für die Praxis Forschungsinitiative Business Valuation WU Wien WP/StB MMag. Alexander Enzinger, CVA
Kapitel 4 Entwicklungsunterschiede und internationaler Handel
Literatur im Dritten Reich
Jazz- und Bluesharmonielehre für «Praktiker» «Nicht-Notenleser», «Nicht-Tonartsichere» «Keyboarder» aber auch andere Instrumentalisten Weitere Unterlagen:
Serienlogo Deutsch.
Die Klasse Vielfrass in Java
Ökonometrie und Statistik Zeitreihenanalyse
Vorlesung Eigenspannungen in Bauteilen und Werkstoffen
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Einführung in Web- und Data-Science
Umsetzung Pauschalreiserichtlinie in der EU 23
Prof. Dr. Alexander Trunk Vorlesung / Course Osteuropäisches Recht II – Wirtschaftsrecht Sommersemester
Berufliche Orientierung - Wege nach der 9. oder 10. Klasse
Présentation des résultats préliminaires du diagnostic territorial de la Grande Région (Action 3 – Projet SDT GR) Präsentation der vorläufigen Ergebnisse.
Einführungsphase und gymnasiale Oberstufe am Gymnasium
Politische Aufgaben der Armutsprävention Erfurt 25. Juni 2019
Suchtentwicklung - eine Beziehungsgeschichte
Begründung der Kristallphysik (Strena Seu de Nive Sexangula, 1611)
Präsidenten- und TK-Konferenz Herzlich Willkommen!
Siedlungs- und bevölkerungsgeographischer Überblick
Endenergieeffizienz-Richtlinie und die Wechselwirkung und Synergien mit dem Österreichischen Aktionsplan für nachhaltige öffentliche Beschaffung Mag.
Herzlich willkommen! Jahresversammlung
Fallvorstellung Georgia Hadjimichael
 Präsentation transkript:

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 Akzellerator hinzufügen –Akzelleratortabelle erweitern IDModifiziererTasteTyp ID_ULTRIS_SOUNDKeineVK_F5VIRTKEY IDM_TESTCtrlTVIRTKEY

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;

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 " };

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(…); };

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(); };

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 };

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 }

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)

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)

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 }

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); }

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

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) { … }

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; … }