Allegro sound - so gehts ;)



  • Hallo 😉

    Ich lese immerwieder, dass sich viele damit schwer tun sound in Allegro einzubingen - so wirds gemacht

    #include <allegro.h>
    
    bool main_is_running = false;
    
    int main() 
    {
     allegro_init();
     set_color_depth(32);
     set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    
     install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL);    // install sound
    
     install_timer();
     install_keyboard();
     install_mouse();
    
     SAMPLE *beep = load_wav("beep.wav");   // load wav
     play_sample(beep, 255, 0, 1000, 0);  //play sound // 1000 = speed normal
    
     while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
     }
    
    }
    END_OF_MAIN();
    

    ich hoffe ich konnte weiter helfen - ich benutze allegro 4.22



  • HEY !!!
    DANKE, Dass hab ich schon lange gesucht

    danke danke danke

    endlich mal nen einfacher , verständlicher Code zum ausführen 🙂



  • Wie lange darf ein WAV-File bei allegro sein? Bei mir stürzt es immer ab. 😕 😡



  • Erstmal nutzt du eine alte Allegro Version. 5.0.7 ist der aktuelle Release, und mit dem wird Sound AFAIK auch anders abgespielt (zumindest Präfixe wurden den Funktionen hinzugefügt) .

    Was mir noch zu deinem Code auffällt:

    • Das Semikolon hinter END_OF_MAIN() sollte weg. Das kann zu unnötigen Warnungen führen.
    • main_is_running ist völlig überflüssig. Bei der Schleife kannst du ganz einfach ein break in das substatement des if-Statements setzen, und statt main_is_running einfach ein true als Bedingung für die Schleife.

    Kurz, statt

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
     }
    

    Einfach

    while(true) //Bzw. for(;;), je nach Geschmack
        if (key[KEY_ESC])
           break;
    
    • Zeile 15 ist überflüssig.


  • Sone schrieb:

    • main_is_running ist völlig überflüssig. Bei der Schleife kannst du ganz einfach ein break in das substatement des if-Statements setzen, und statt main_is_running einfach ein true als Bedingung für die Schleife.

    Kurz, statt

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
     }
    

    Einfach

    while(true) //Bzw. for(;;), je nach Geschmack
        if (key[KEY_ESC])
           break;
    

    Und wenn anschließend noch etwas anders geschehen soll / muss?

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
    
      do_something_before_next_frame();
     }
    

    ( main_is_running ist in diesem Kontext m. M. n. ein schlecht gewählter Name)



  • Knecht Purpecht schrieb:

    Sone schrieb:

    • main_is_running ist völlig überflüssig. Bei der Schleife kannst du ganz einfach ein break in das substatement des if-Statements setzen, und statt main_is_running einfach ein true als Bedingung für die Schleife.

    Kurz, statt

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
     }
    

    Einfach

    while(true) //Bzw. for(;;), je nach Geschmack
        if (key[KEY_ESC])
           break;
    

    Und wenn anschließend noch etwas anders geschehen soll / muss?

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
    
      do_something_before_next_frame();
     }
    

    Dann fragst du eben nachdem do_something_before_next_frame() ausgeführt wird. Dann wird es nämlich noch ausgeführt, weißt du.



  • Sone, dir ist schon klar, dass der Thread über ein Jahr alt ist?



  • necromanzer schrieb:

    Sone, dir ist schon klar, dass der Thread über ein Jahr alt ist?

    Verdammt..... nicht schon wieder....
    Nicht meine Schuld. Der Kerl der darauf geantwortet hat hätte nen neuen Thread eröffnen müssen.

    Sowas bemerkt man nicht so schnell.



  • Sone schrieb:

    Knecht Purpecht schrieb:

    Sone schrieb:

    • main_is_running ist völlig überflüssig. Bei der Schleife kannst du ganz einfach ein break in das substatement des if-Statements setzen, und statt main_is_running einfach ein true als Bedingung für die Schleife.

    Kurz, statt

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
     }
    

    Einfach

    while(true) //Bzw. for(;;), je nach Geschmack
        if (key[KEY_ESC])
           break;
    

    Und wenn anschließend noch etwas anders geschehen soll / muss?

    while(!main_is_running)
     {
      if (key[KEY_ESC])
      {
       main_is_running = true;
      }
    
      do_something_before_next_frame();
     }
    

    Dann fragst du eben nachdem do_something_before_next_frame() ausgeführt wird. Dann wird es nämlich noch ausgeführt, weißt du.

    Ich hatte mir beim Schreiben schon gedacht, dass diese Antwort kommt...

    Und was ist, wenn ich vorher UND nacher noch etwas tun möchte?



  • Und was ist, wenn ich vorher UND nacher noch etwas tun möchte?

    Dann fragst du nachdem alles getan ist.

    Ich glaube aber ich habe die letzte Frage nicht ganz verstanden. Beispiel?



  • You made my day sag ich nur 👍


Anmelden zum Antworten