mp3 in gcc-Programm einbauen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo wertes Forum,

    mein Raspi soll mit kleinem Display ein MP3-Player werden. (ja, kann man fertig billiger kriegen...)

    Programmieren möchte ich mit GEANY gcc.

    Welche Software/Bibliothek würdet Ihr mir zum Abspielen empfehlen?

    (ja, ich habe gesucht - und wenn ich was handliches gefunden hätte, würde ich nicht fragen. vmod macht´s nicht unter c++ und bei mpg123 sehe ich weder Anfang noch Ende).

    Gruss Tomas

    • Offizieller Beitrag

    Das Programm was du starten willst spielt keine Rolle. Ich hab von C/C++ nur rudimentäre Kenntnisse aber ich bin mir ziemlich sicher das auch C++ eine System()-Funktion hat, die es erlaubt externe programme aufzurufen

  • danke dreamshader,

    um so eine Lösung geht es mir! Allerdings macht mir die Installation von libmpg123 und libao etwas Sorgen.

    Geht es um das libmpg123, das im Paket mpg123-1.15.4.tar.bz2 auf sourceforge liegt?
    und das libao aus libao-1.1.0.tar.gz?

    Muss da wirklich was installiert werden? bzw. welche files braucht es da wohl für mein Projekt?

    Oder gibt es da etwa auch irgendein sudo apt get install ....?

    Gruss Tomas


  • libmpg123-0/ libmpg123-dev und libao4 gibt es in den paktet quellen.

    danke für den Hinweis. Mit apt-get install libmpg123-0... hab ich die Pakete auch laden und installieren können. Dh. der Raspi war beschäftig, lieferte Erfolgsmeldungen und auf der Kommandozeile kann ich auch mpg123 songname.mp3 aufrufen -> macht Musik!

    Aber wo in aller Welt finde ich jetzt die .h und .c Dateien, die ich includieren soll??

    zb
    #include <ao/ao.h>
    #include <mpg123.h>

    ?? Gruss Tomas

  • Was willst Du denn damit?
    Sie sind da ... Du kannst sie verwenden, sonst hätte das Beispiel nicht funktioniert.

    Erhoffst Du Dir da magische Erkenntnisse draus?
    Und wenn Du mal scharf nachdenkst und ein bisschen C kannst, weisst Du wo Du suchen musst ...

    cheers,
    -ds-

  • hi dreamshader,
    nö, ein Beispiel hat noch nicht funktioniert. Und ich möchte auch keine magischen Erkenntnisse.
    Vielleicht ein wenig mehr konkrete Hinweise. (Unter Delphi hab ich die auch immer gern gegeben)

    Mein Ziel ist das unten stehende Programm kompilieren zu können.
    Das ist der Schritt zum MP3-Player, der mir noch fehlt. Im Augenblick erkennt mein Raspi einen USB-Stick, liest Verzeichnisse ein (in Stringarrays oder wahlweise doppelt verkettete Zeigerlisten, stellt die Dateien auf einem Grafik-Display dar (über SPI), fragt Knöppe ab , und möchte dann losdudeln.
    (Also bitte nicht gleich die Tour : wenn du ein bisschen C könntest [oder dich mal mit Linux beschäftigen würdest] und mal in ein Buch schaust... usw und fort - ich bin halt nicht mit C auf die Welt gekommen)

    Gruss Tomas


    #include <ao/ao.h>
    #include <mpg123.h>

    #define BITS 8

    int main(int argc, char *argv[])
    {
    mpg123_handle *mh;
    unsigned char *buffer;
    size_t buffer_size;
    size_t done;
    int err;

    int driver;
    ao_device *dev;

    ao_sample_format format;
    int channels, encoding;
    long rate;

    if(argc < 2)
    exit(0);

    /* initializations */
    ao_initialize();
    driver = ao_default_driver_id();
    mpg123_init();
    mh = mpg123_new(NULL, &err);
    buffer_size = mpg123_outblock(mh);
    buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char));

    /* open the file and get the decoding format */
    mpg123_open(mh, argv[1]);
    mpg123_getformat(mh, &rate, &channels, &encoding);

    /* set the output format and open the output device */
    format.bits = mpg123_encsize(encoding) * BITS;
    format.rate = rate;
    format.channels = channels;
    format.byte_format = AO_FMT_NATIVE;
    format.matrix = 0;
    dev = ao_open_live(driver, &format, NULL);

    /* decode and play */
    while (mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
    ao_play(dev, buffer, done);

    /* clean up */
    free(buffer);
    ao_close(dev);
    mpg123_close(mh);
    mpg123_delete(mh);
    mpg123_exit();
    ao_shutdown();

    return 0;
    }

    /*
    Save the code as play.c and build it. Remember you must first install libmpg123 and libao.

    gcc -O2 -o play play.c -lmpg123 -lao

    Run the programm with a mp3 file path in command line.

    ./play /path/to/file.mp3
    */

  • "Und wenn Du mal scharf nachdenkst und ein bisschen C kannst, weisst Du wo Du suchen musst ..."

    weisst Du, das sind so echt hilfreiche Sätze...
    Mit Operatoren, Datentypen, Zeigern, Syntax und den eigentlichen Sprachmerkmalen kommt man echt mit Wikis, Beispielprogrammen und Büchern gut weiter - macht sogar echt Spass.
    Aber wo ein Unix-System am liebsten seine Dateien ablegt - und wo C gern nachschaut, das ist für mich als Einsteiger wirklich noch recht finster. Und da finde ich in der Tat viel weniger Hinweise - und Nachdenken hilft an dieser Stelle nicht wirklich.

    Denkfaulheit ist nicht mein Problem. Eher herablassende Antworten.
    Ich schreib das mal so ausführlich, weil´s doch wirklich hilfreicher und netter ginge.

    Ein Satz wie:
    "Die Dateien landen unter /usr/include/c++/4.6/libmpg123" würde doch auch nicht weh tun.
    (Leider ist er halt falsch...)

    Gruss Tomas


  • ...
    "Die Dateien landen unter /usr/include/c++/4.6/libmpg123" würde doch auch nicht weh tun.
    ...

    Gruss Tomas

    Hättest Du, statt Dich hier zu echauffieren, auf meine Frage geantwortet, wüsstest Du es jetzt schon.

    Sorry ... bei jemandem, der ernsthaft in C programmiert setze ich voraus, dass er sein Werkzeug (in diesem Fall cc bzw. gcc) kennt.
    Ich muss einem Waldarbeiter auch nicht sagen, wo der Anlasser seiner Motorsäge ist.

    Nachdem Du meine Frage nicht beantwortet hast, ziehe ich die Antwort trotzdem mal vor:

    Code
    sudo apt-get install libmpg123-dev libao-dev


    Code
    pi@raspberrypi ~ $ ls -l /usr/include/*123*
    -rw-r--r-- 1 root root 60514 Okt  3  2012 /usr/include/mpg123.h

    cu,
    -ds-

  • echt heissen Dank!
    ok, ich wollte auch gerade wieder sachlich werden. Und ich hatte auch schon eine Menge Text geschrieben, als mir mein firefox abstürzte.

    Also, ich habe inzwischen automake und libtool nachinstalliert, die install Anweisung aus mpg123-1.15.4.tar.bz2, Punkt 3 "3. Library-only build" befolgt, meine Dateien an der richtigen Stelle liegen,
    und kriege leider üble Fehler vom Compiler gemeldet. Da werde ich mich jetzt drüber hermachen.
    Gruss Tomas


    gcc -Wall -o "play" "play.c" (in directory: /home/pi/c/geany/mp3)
    play.c: In function 'main':
    play.c:47:9: warning: pointer targets in passing argument 2 of 'ao_play' differ in signedness [-Wpointer-sign]
    /home/pi/c/geany/mp3/ao/ao.h:119:23: note: expected 'char *' but argument is of type 'unsigned char *'
    Compilation failed.
    /tmp/ccjNwuec.o: In function `main':
    play.c.text+0x28): undefined reference to `ao_initialize'
    play.c.text+0x2c): undefined reference to `ao_default_driver_id'
    play.c.text+0x34): undefined reference to `mpg123_init'
    play.c.text+0x44): undefined reference to `mpg123_new'
    play.c.text+0x50): undefined reference to `mpg123_outblock'
    play.c.text+0x7c): undefined reference to `mpg123_open'
    play.c.text+0x90): undefined reference to `mpg123_getformat'
    play.c.text+0x9c): undefined reference to `mpg123_encsize'
    play.c.text+0xdc): undefined reference to `ao_open_live'
    play.c.text+0xf8): undefined reference to `ao_play'
    play.c.text+0x10c): undefined reference to `mpg123_read'
    play.c.text+0x128): undefined reference to `ao_close'
    play.c.text+0x130): undefined reference to `mpg123_close'
    play.c.text+0x138): undefined reference to `mpg123_delete'
    play.c.text+0x13c): undefined reference to `mpg123_exit'
    play.c.text+0x140): undefined reference to `ao_shutdown'
    collect2: ld returned 1 exit status

  • jepp, die libao war nicht korrekt installiert . (War noch mein alter Irrtum dran schuld, man könnte einfach ein paar Dateien vom PC draufkopieren)

    und jetzt geht´s auch mit dem Compilieren!

    Danke für alle Eure Mühe,

    Gruss Tomas.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!