LastFM Plugin für Enigma1

  • Moin zusammen ! Da sich ja noch niemand erbarmt hat ein LastFM Plugin für E1 zu bauen, bin ich die Sache nun angegangen. Da dies mein erstes Plugin ist, wollte ich mir die Sache nicht zu kompliziert machen und das Rad nicht neu erfinden. Mit der shell-fm von Jonas Kramer gibt es ja ein wunderbares freies CLI für LastFM :thumbs_up: . Die shell-fm habe ich für meine DM7000 angepaßt und übersetzt. Das Plugin greift über den eConsoleAppContainer auf das CLI zu und steuert es auch darüber. Das funktioniert bis auf einige Schönheitsfehler schon ganz gut. Ein grundsätzliches Problem habe ich mit der Audioausgabe. Die funktioniert zwar generell gut, wirft aber zwei Probleme auf.

    • shell-fm nutzt die libmad und die libao (ohne die libao tut sich leider auf der Tuxbox garnichts, sieht nach einem endian Problem aus ..) Die libmad ist zwar im Image, aber natürlich wie alle Libs nicht vollständig, sondern um die vom Image nicht genutzte Funktionen/Symbols reduziert. Shell-fm benötigt leider ein paar der fehlenden :face_with_open_mouth: Die libao gibts es garnicht im Image. Gut man kann die funktierenden Version zusätzlich installieren (so riesig sind die nicht), wäre aber unschön. Die libao läd zur Laufzeit ihr(e) OSS Plugin/Library nach. Aufgrund dieses Konstruktes unterstützt die libao so ohne weiteres keine statisches Linken :frowning_face:
    • die Wiedergabe läuft zwar wunderbar, leider läuft aber auch noch parallel die Audioausgabe des aktuell laufenden Transponders :loudly_crying_face:

    Daher habe ich zwei Fragen:

    • Gibt es eine Enigma Klasse/Funktion, mit der ich im Plugin die Audioausgabe des laufenden Transponders deaktiveren kann ?
    • Hat jemand ein kurzes Beispiel, wie ich für die Wiedergabe eines MP3 Streams die Enigma eigenen Klassen nutzen kann (z.B. die Klasse eAudioDecoderMP3) ? Z.b. ein Auszug aus Dreamcast, etc. ?

    Die Erste Frage brennt mir unter den Nägeln. Da ich im ersten Schritt neben dem Plugin eh auch die (fast) native shell-fm installieren muss, wäre die Lösung zu 2. sehr interessant, aber nicht ganz so dringend. :grinning_squinting_face: Es sei denn, die Lösung zu 1. ist die Realisierung von 2. ....


    Danke & Gruß, Marc

  • Hi, schade, dass mir keiner helfen konnte, aber ich habe es inzwischen selber rausbekommen :smiling_face:


    Im Constructor:

    // Save current decoder settings
    memcpy(&m_saved_decoder_parms, &Decoder::current, sizeof(struct decoderParameters));


    // Set apid to -1 to mute TV audio
    Decoder::parms.apid = -1;


    // Set vpid to -1 to disable TV video
    Decoder::parms.vpid = -1; Decoder::Set();


    Und im Destructor das ganze rückgängig machen:

    // Reset decoder settings
    memcpy(&Decoder::parms, &m_saved_decoder_parms, sizeof(struct decoderParameters)); Decoder::Set();


    Der Aufwand, die native libmad und libao in shell-fm durch den Enigma eigenen eMP3Decoder zu ersetzen ist mir derzeit zu groß; es funktioniert auch so wunderbar. Ich werde die erste Version des Plugins Shell.FM Wrapper in den nächsten Tagen freigeben. Im übrigen auch den Source unter GPL, da ich nicht ganz verstehen kann, wie man auf einem offenen System wie Enigma aus den Plugins immer ein Geheimnis macht. Ich weiss, es ist echte Arbeit sich für sein erstes Plugin Enigma per Reverse Engineering einzuarbeiten. Wenn aber mehr Leute Ihren Code offenlegen würden, wäre es für andere einfacher und es würde deutlich mehr sinnvolle Plugins geben. Vielen Dank an Dr. Best, der das inzwischen z.T. nachgeholt hat und dessen Code mir durchaus geholfen hat :winking_face: