15
VO2 Laden und Initialisieren der Sounds

VO2 Laden und Initialisieren der Sounds

  • Upload
    tulia

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

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. Sounds sollen später in einem Array gespeichert werden - PowerPoint PPT Presentation

Citation preview

Page 1: VO2 Laden und Initialisieren der Sounds

VO2 Laden und Initialisieren der Sounds

Page 2: 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

ID Modifizierer Taste Typ

ID_ULTRIS_SOUND Keine VK_F5 VIRTKEY

IDM_TEST Ctrl T VIRTKEY

Page 3: VO2 Laden und Initialisieren der Sounds

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

Page 4: VO2 Laden und Initialisieren der Sounds

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

Page 5: VO2 Laden und Initialisieren der Sounds

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

};

Page 6: VO2 Laden und Initialisieren der Sounds

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

};

Page 7: VO2 Laden und Initialisieren der Sounds

• 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

};

Page 8: VO2 Laden und Initialisieren der Sounds

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

}

Page 9: VO2 Laden und Initialisieren der Sounds

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)

Page 10: VO2 Laden und Initialisieren der Sounds

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)

Page 11: VO2 Laden und Initialisieren der Sounds

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

}

}

Page 12: VO2 Laden und Initialisieren der Sounds

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

}

Page 13: VO2 Laden und Initialisieren der Sounds

• 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

Page 14: VO2 Laden und Initialisieren der Sounds

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)

{…}

}

Page 15: VO2 Laden und Initialisieren der Sounds

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

}}