ALLEGRO, seine "AllegroMP3 v2.0.4"-Bibliothek und mein Problem !

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ALLEGRO, seine "AllegroMP3 v2.0.4"-Bibliothek und mein Problem !

    /* Hallo. Ich habe Gegoogled wie ein verrückten aber keine Antwort darauf gefunden, wie man diese Mp3-bibliothek zum laufen bekommt.
    Die Readme habe ich auch gelesen und auch alles so umgesetzt wie beschrieben. Wahrscheinlich habe ich einen kleinen Fehler gemacht der mir jetzt grade nicht auffällt.
    Nun bitte ich doch recht herzlich um Hilfe wie ich diese Mp3 von mir (3.2 MB) mit ALLEGRO zum laufen kriege. */

    Quellcode

    1. /*Ich arbeite mit den Dev-C++ 4.9 Compiler für Windows.
    2. Allegro ist richtig installiert und nutzbar.
    3. Mit den Linker sind die Bibliotheksdateien
    4. libalmp3.a(für mp3) und liballeg.a(für Allegro)
    5. in dieser Reihenfolge verbunden.*/
    6. #include <almp3.h>
    7. #include <allegro.h>
    8. int main(void){
    9. allegro_init() ;
    10. char *puffer = "6.mp3" ;
    11. install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) ;
    12. ALMP3_MP3 *musik = almp3_create_mp3(puffer,4000) ;
    13. // Ich glaube hier müsste irgendwo der Fehler sein,
    14. // weil wenn ich diese Zeile lösche läuft das Programm
    15. // normal, zeigt aber nur die Nachricht an.
    16. almp3_play_mp3(musik,4000,255,255) ;
    17. allegro_message("MUSIK TEST") ;
    18. }END_OF_MAIN() ;
    Alles anzeigen


    Hier ein Auszug aus der readme Datei.

    Using AllegroMP3
    ----------------

    To be able to use AllegroMP3 with your program, you just need (once
    compiled the library) to link the generated lib with your program
    (remember that since this lib relies on allegro, you need to add
    almp3 *before* alleg) and include the header "almp3.h", available in
    the lib and include directories respectively.


    Reference
    ---------

    Note parameters are marked between ' ' markers.


    Differences between ALMP3_MP3 and ALMP3_MP3STREAM:
    With ALMP3_MP3 you will be able to know the mp3 length, seek in the
    file (directly), and multiple other things, BUT you'll need to load
    the whole file in memory and keep it there until you stop playing it.
    With ALMP3_MP3STREAMs you won't be able to do that (well, you will be
    able to do seeking but in a special way), BUT you'll be able to load
    just small chunks of data, very alike Allegro's AUDIOSTREAMs do, saving
    memory and loading time.


    ALMP3_MP3 *almp3_create_mp3(void *data, int data_len);
    Creates an ALMP3_MP3 which you'll have to pass to all the other
    functions, where 'data' will be a pointer to the buffer containing
    the mp3 data and 'data_len' the size of this buffer. Note you aren't
    supposed to free this buffer until you have destroyed the ALMP3_MP3.

    return values:
    NULL if there ocurred an error (mostly an invalid mp3 data was passed).
    Other value ( != NULL ) otherwise.


    void almp3_destroy_mp3(ALMP3_MP3 *mp3);
    Destroys the ALMP3_MP3 automatically stopping it. Note this function
    check if the 'mp3' pointer is pointing to NULL, so for example this:
    ALMP3_MP3 *mp3 = NULL;
    destroy_mp3(mp3);
    won't crash the program.


    int almp3_play_mp3(ALMP3_MP3 *mp3, int buffer_len, int vol, int pan);
    Plays the 'mp3' ALMP3_MP3 with the given volume 'vol' (from 0 to 255)
    and panning 'pan' (from 0 to 255, where 0 is full left and 255 is
    full right). 'buffer_len' is the desired size in bytes of the
    buffer where the decoded data will be stored. The bigger, the less
    you'll have to poll the MP3, but the more time you will have to wait
    in order to hear the song start playing. Note that due to some
    mp3 format limitations, the internal (and real) buffer will be
    an aproximation to the 'buffer_len' given. A 'buffer_len' size between
    16384 and 32768 bytes (16kb and 32kb) will do in most cases.

    return values:
    ALMP3_OK if no problems.
    ALMP3_PLAY_BUFFERTOOSMALL if the given 'buffer_len' was not big enough.

    special note:
    This function also works like a "resume" function, since it
    won't rewind the ALMP3_MP3 automatically. Note that once the ALMP3_MP3
    has reached the end when playing, it will rewind though, stoping the
    ALMP3_MP3 if the loop flag was set at FALSE (see almp3_play_ex_mp3())
    or continuing playing it if it was set at TRUE. Also note that this
    automatically stops decoding.

    Danke für Hilfe und frohes neues. :)
  • Überprüf' mal ob musik NULL ist.

    Das Problem ist, dass du almp3_create_mp3 mit falschen ersten Parameter aufrufst:

    ALMP3_MP3 *almp3_create_mp3(void *data, int data_len);
    Creates an ALMP3_MP3 which you'll have to pass to all the other
    functions, where 'data' will be a pointer to the buffer containing
    the mp3 data
    and 'data_len' the size of this buffer. Note you aren't
    supposed to free this buffer until you have destroyed the ALMP3_MP3.


    Ausserdem sollte data_len die wirkliche Länge von data enthalten. Sonst gibt's womöglich Laufzeitüberraschungen.

    Btw.: ein Fehlerbericht wäre toll, dann hätte sicherlich schon früher jemand geantwortet :)
  • Danke für die Antwort. Läuft trotzdem nicht.
    Wie soll ich einen Fehlerbericht zeigen wenn keiner da ist. ;)

    Ich habe ein paar änderungen vorgenommen.
    Tut sich aber immernoch nix. :(

    Quellcode

    1. /* Ich habe das jetzt soweit geändert wie beschrieben und da tut
    2. sich trotzdem nix.
    3. Das Programm startet kurz und schließt sich dann wieder.
    4. Keine Fehlermeldung oder sonstwas.
    5. */
    6. #include <almp3.h>
    7. #include <allegro.h>
    8. int main(void){
    9. allegro_init() ;
    10. const void *puffer = "musik.mp3" ;
    11. void *z_puffer = &puffer ;
    12. install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) ;
    13. // Ich glaube hier müsste irgendwo der Fehler sein,
    14. // weil wenn ich diese 3 Zeilen lösche läuft das Programm
    15. // normal, zeigt aber nur die Nachricht an. :)
    16. ALMP3_MP3 *musik = NULL ;
    17. musik = almp3_create_mp3(z_puffer,3450000) ;
    18. almp3_play_mp3(musik,3450000,200,200) ;
    19. //Testnachricht.
    20. allegro_message("MUSIK TEST") ;
    21. }END_OF_MAIN() ;
    Alles anzeigen
  • So langsam wird es langweilig.

    Also. So langsam kriege ich echt nen Hals, dass ich das nicht auf die Reihe kriege diese Mp3 zum laufen zu bekommen.
    Jetzt habe ich das mit nen PACKFILE probiert und das Programm stürzt nicht ab, zeigt auch den Text nur höre ich keinen Sound.
    Vielleicht mache ich ja beim einbinden der lib-files schon was falsch oder habe eine header Datei vergessen aber dann würde ja normalerweise
    eine Fehlermeldung kommen. Muss man vielleicht den Sound anders installieren als ich es gemacht habe? ... so langsam kommen da die ersten Tränen :(
    Ich frage mich mittlerweile ob sich daß überhaubt noch lohnt weiter zu probieren weil ich mich so in diese Sache vertiefe, dass ich anderwertig nicht weiter komme...Muss ich mich dann damit abfinden , dass ich nur wav. Dateien spielen kann. ? ! So ein mißt.

    Quellcode

    1. #include <almp3.h>
    2. #include <allegro.h>
    3. #include <stdio.h>
    4. int main(void) {
    5. allegro_init( ) ;
    6. install_keyboard( ) ;
    7. install_mouse( ) ;
    8. install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, NULL ) ;
    9. // -----------------------Sound----------------------------------
    10. char *Mp3Datei = "musik.mp3" ;
    11. ALMP3_MP3 *mp3 ;
    12. // Öffnet eine PACKDATEI mit der Mp3Datei "musik.mp3".
    13. PACKFILE *pack = pack_fopen( Mp3Datei, "r" ) ;
    14. if( ! Mp3Datei )
    15. printf( " :-( \n" );
    16. // Größe des Mp3Datei-files festlegen. Die Ausgabe von printf als Integer ist 3437714.
    17. int size = file_size( Mp3Datei ) ;
    18. printf("%d", file_size( Mp3Datei ) ) ;
    19. // ??? Die Ausgabe von printf als Integer ist 30867488.
    20. char *mp3data = new char[ size ] ;
    21. printf( "\n%d", new char [ size ] ) ;
    22. // Fügt die PACKDATEI in die Größe [size].
    23. size = pack_fread( mp3data, size, pack ) ;
    24. // Schließt den PACKDATEI Vorgang.
    25. pack_fclose( pack ) ;
    26. if ( ( mp3 = almp3_create_mp3 ( mp3data, size ) ) == NULL )
    27. printf("almp3_create_mp3 failed\n");
    28. if(mp3)
    29. {
    30. printf("Playing...\n");
    31. if(almp3_play_ex_mp3(mp3, 32768, 255, 127, 1000, 0) == ALMP3_PLAY_BUFFERTOOSMALL)
    32. printf("ALMP3_PLAY_BUFFERTOOSMALL\n");
    33. }
    34. allegro_message("MUSIKTEST") ;
    35. } END_OF_MAIN() ;
    Alles anzeigen
  • Ich hab nie mit Allegro zutun gehabt (und da die Seite mit der mp3-lib offline ist, kann ich den Quelltext gerade nicht selbst ausprobieren)

    Aber zum vorletzten Quelltext: "a pointer to the buffer containing the mp3 data" ist kein Pointer auf den Dateinamen.
    Du müsstest die Datei komplett einlesen und dann erst dann via almp3_create_mp3 ausgeben (fopen, fread, fclose).

    Zum letzten Quelli: Soweit ich das sehe sind "PACKFILEs" komprimiert ... In deinem Fall versucht die Bibliothek eine mp3 zu dekomprimieren ... das läuft natürlich schief. Da musst du entweder die mp3 in eine entsprechend komprimierte Datei schmeißen oder auf PACKFILEs verzichten.
  • Man muss sich auch nicht unbedingt mit dieser AllegroMp3 Bibliothek herumschlagen, weil die wirklich total schwer und kompliziert zu verstehen ist und selbst dann meist nicht klappt. Es gibt viel leichtere und gleichzeitig auch bessere Alternativen, die man dir schon hätte viel früher vorschlagen können. Auch wenn du nicht an Board bist Marcel, ich weiß du bist hier und guckst ab und zu vorbei :) ... OpenAL um eine zu nennen. Aber wahrscheinlich, so wie ich dich kenne, hast du das mittlerweile schon selbst gelöst. Biss dann.
    #include <stdio.h>
    int main(void) {
    printf("Hallo Welt!") ;
    return 0 ;
    }