Tutorial: playing firing sound ============================== Playing a firing sound as long as left CTRL is pressed, using vg_sound_pate() and vg_sound_catb(). step 1 At first we have to initialize VgaGames and open a window or switch to graphical screen. ==>
int main(int argc, char ** argv) {
char * arg0; // for the name of the program
char buf[64]; // for explaining text
int fire_status;
/* initialize vgagames, always pass argv[0] */
if (vg_init_vgagames(argv[0],0,NULL) < 0) {exit(1);}
/* open window */
if ((arg0=strrchr(argv[0],'/'))==NULL) {arg0=argv[0];} else {arg0++;}
if (vg_window_open(arg0,0,0) < 0) {exit(1);}
|
/* start soundserver */ if (vg_sound_startserver(0,0,NULL) < 0) {vg_window_close(); exit(1);} /* load firing-sound-file attaching it to nickname "s-fire" */ vg_sound_attach("sound/shot.wav","s-fire",100); /* draw explaining text */ snprintf(buf,sizeof(buf),"Fire: left [CTRL], End: Space"); vg_bitmap_clear(NULL,RGB_BLACK); vg_draw_text(NULL,RGB_WHITE,(SC_WIDTH-strlen(buf)*vg_font_width(NULL))/2,(SC_HEIGHT-vg_font_height(NULL))/2,buf,NULL,RGB_FULL); vg_window_flush(); |
/* program loop */
fire_status=0; /* sound still not started */
for (;;) {
/* update key and mouse events */
vg_key_update();
/* end loop if SPACE pressed */
if (vg_key_pressed(KEY_SPACE, SHORTKEY)) {break;}
/* left CTRL pressed: play firing sound */
if (vg_key_pressed(KEY_LCTRL, LONGKEY)) {
if (fire_status==0) { // start sound in an endless loop
vg_sound_play("s-fire",0,0);
} else if (fire_status==2) { // sound is paused at end
vg_sound_catb("s-fire");
}
fire_status=1; // sound now playing
} else { // left CTRL not pressed
/* if sound is playing, don't stop it immediately but at its end */
if (fire_status==1) { // sound is playing
vg_sound_pate("s-fire");
fire_status=2; // sound now paused at end
}
}
}
/* stop sound if running */
if (fire_status > 0) {vg_sound_stop("s-fire",0);}
|
/* end soundserver and close window */ vg_sound_endserver(); vg_window_close(); exit(0); } |