Probleme mit play_sound() (Allegro)



  • Moinsen.

    Also ich habe einfach nur ein normales Programm geschrieben, in dem eine Bitmap
    hin und herfliegt (also so von den Ecken wieder abprallt)

    Jetzt wollte ich dem Beispiel noch Musik zufügen:

    #include <allegro.h>
    
    int main(int argc, char **argv)
    {
        allegro_init();
        install_keyboard();
    
        install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);
    
        SAMPLE *sound = load_sample("midi.mid");
    
        play_sample(sound,255, 129, 100, 0);
    
    ...
    ...
    ...
    
    } END_OF_MAIN()
    

    Kompilieren tut er das, nur wenn ich das Prog. ausführen will, kommt da immer so eine komische Fehlermeldung:

    Microsoft Visual C++

    Debug Error!

    dann der Pfad.....

    abnormal program termination

    (Press Retry to Debug the Application)

    ... MMh was bedeuet des denn genau? Und wo ist der Fehler?

    Danke schonmal im Voraus!



  • Also ein Fehler habe ich schonmal gefunden!

    Anstatt play_sound() habe ich jetzt play_midi() genommen.

    So jetzt geht zwar das Programm wieder, aber es spielt die Musik nicht ab!?

    Hier ist einfach mal der ganze Quellcode:

    #include <allegro.h>
    #include "GraphicMode.hpp"
    
    int main(int arc, char **argv)
    {
    	int x=0;
    	int y=0;
    	int dx=1;
    	int dy=1;
    
    	allegro_init();
    	install_keyboard();
    	install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);
    
    	if (!set_graphic_mode())
    	{
    		allegro_message("Unable to set graphic mode!");
    		exit (0);
    	}
    
    	BITMAP *logo = load_bitmap("NightWare.bmp", NULL);
    	BITMAP *doublebuffer = create_bitmap(SCREEN_W, SCREEN_H);
    	MIDI *sound = load_midi("midi.mid");
    	set_volume(128, 128);
    
    	play_midi(sound, 0);
    
    	acquire_screen();
    	clear(screen);
    	blit(logo, screen,
    		 0, 0,
    		 x,
    		 y,
    		 logo->w, logo->h);
    	release_screen();
    
    	while (!keypressed())
    	{
    		if (x + dx < 0)
    		{
    			dx *= -1;
    		}
    		else if (x + logo->w >= SCREEN_W)
    		{
    			dx *= -1;
    		}
    
    		if (y + dy < 0)
    		{
    			dy *= -1;
    		}
    		else if (y + logo->h >= SCREEN_H)
    		{
    			dy *= -1;
    		}
    
    		x += dx;
    		y += dy;
    
    		acquire_bitmap(doublebuffer);
    		clear(doublebuffer);
    		blit(logo, doublebuffer,
    			 0, 0,
    			 x,
    			 y,
    			 logo->w, logo->h);
    
    		release_bitmap(doublebuffer);
    
    		blit(doublebuffer, screen,
    			 0, 0,
    			 0, 0,
    			 SCREEN_W,
    			 SCREEN_H);
    
    	}
    
    	return 0;
    
    }END_OF_MAIN()
    

Anmelden zum Antworten