Audio Sync Plugin V1.2 (aka AC3 Lip Sync)

  • Hallo todo  Swiss-MAD


    eigentlich hatte ich das richtige Paket installiert:
    root@dm7025:~# ipkg list enigma2-plugin-extensions-ac3lipsync
    enigma2-plugin-extensions-ac3lipsync - 0.4-20090223-r0 -


    egal, nach den neuesten update funktionieren die Dialoge jetzt mit meinem Skin - Danke todo


    todo
    1. ok geht jetzt


    2. die Min- und Maxwerte werden jetzt zwar gespeichert, aber die Bargraphanzeige stimmt immer noch nicht richtig. Es sieht so auf als ob der Bargraph bei 100% den Wert von Maxwert - Minwert hat, also bei Max=500 minus Min=100 gleich 100% Bargraph=400ms.


    Kleiner Verbesserungsvorschlag noch: wenn man Pfeiltaste nach rechts betaetigt wird jetzt der erste Wert mit Minwert+Schrittweite geschrieben, der erste Wert sollte aber nur der Minwert sein, entweder vorbelegt oder bei ersten Tastendruck Minwert+0


    3. ok hatte ich ueberlesen. Das erklaert jedoch noch nicht, weshalb die Grundeinstellung fuer alle Sender zur Laufzeit auf 0 gesetzt werden, wenn ich einen Sender mit blau in die LameDB sichere


    Gibt es einen Grund weshalb die Grundeinstellung jedesmal von neuem eingestellt werden muss? Mir hat es bisher gereicht das nach dem booten 200ms fuer AC3 und 100ms fuer PCM immer fuer alle Sender eingestellt sind. So muss ich alle Sender neu speichern oder jedes mal das Plugin von neuem aufrufen :loudly_crying_face: um die Werte zu setzen
    Vorschlag: Im Pluginbrowser zwei zus. Eintraege fuer Defaultverzoegerung AC3 und PCM. Wenn individueller Eintrag in LameDB dann wird default ueberschrieben.
    Frage in die Runde - Wie handhabt ihr das nach dem booten?


    Alle meine Anregungen solllen nur dem Ziel eines rundum Sorglospaket fuer moeglichst vielen Nutzern dienen und nerven hoffentlich nicht


    gruss schachi

    # DM7025+SS Gemini 4.70; LCD Samsung LE46A656A

  • zu 2: muss ich mir mal anschauen... kann schon sein, dass der configslider so arbeitet... dann muss ich das ändern.
    das mit der Pfeiltaste kann ich bei Gelegenheit ändern...


    zu 3: Ich habe ganz genau verstanden was Du willst, aber das wirst Du in meinem Plugin nicht finden. Ein "default delay" sieht Enigma2 einfach nicht vor.
    Es gibt nur die delays in der lamedb. Die werden beim Umschalten in die /proc/- Dateien geschrieben. Nur wenn der Wert in der lamedb -1 ist (bedeutet: nicht gesetzt), dann bleibt der von meinem Plugin gesetzte Wert in der /proc/- Datei unverändert.


    Wenn ich also umsetzen wollte, was Du willst, dann müsste ich mit meinem plugin das umschalten überwachen und nach jedem umschalten zu den gesetzten delay- werten die defaults addieren. Das wiederum bedeutet einen Eingriff ins System, und den werde ich mir sparen, weil ich keine Lust habe, jeden 2. Tag auf Änderungen im System zu reagieren und 200 verschiedene Versionen zu supporten.


    Wenn Du ein default- delay haben willst, dann wende Dich an die Entwickler von Dream, dass die das ins System einbauen.


    UND: Da ist auch die Erklärung dafür, warum beim speichern in die Lamedb der "default"- Wert auf 0 gesetzt wird... es gibt schlicht und ergreifend keinen "default"- wert... beim wegschalten von einem Kanal mit gesetztem delay setzt enigma2 das delay automatisch auf 0. Das kann ich mit meinem Plugin aus bereits genannten Gründen nicht verhindern.


    Wenn jemand mir sagt, in welcher py das zappen gehandelt wird, dann schaue ich mir die vielleicht an, und modifiziere die so, dass man in der Konfiguration default- delays einstellen kann... Das hat dann aber nichts mit dem Plugin zu tun, sondern das werde ich dann an die DMM- Entwickler als Verbesserungs- Vorschlag submitten...


    Gruss
    Tode

  • Zitat

    Original von schachi-md
    Mir hat es bisher gereicht das nach dem booten 200ms fuer AC3 und 100ms fuer PCM immer fuer alle Sender eingestellt sind.


    Dann kannst du doch einfach in der bootup die Werte nach proc schreiben lassen.
    Solange dann in der lamedb kein Delay steht bleibt das dann auch so.

  • Oder man (du ;)) baut in das Plugin eine Möglichkeit ein, einen globalen Wert in alle(!) lamedb-Einträge reinzuschreiben, etwa mit 2 Optionen: "überschreibe alles" oder "überschreibe unbelegte" (-1er).


    Allerdings habe ich keine Ahnung, wie lange das bei mehreren 1000 Einträgen dauert und ob das generell machbar/realistisch ist...

  • genau auf den Vorschlag habe ich gewartet....
    Da ich aber für das setzen der Delay einen sogenannten iPlayableService brauche, KANN ich das bei den momentanen Gegebenheiten nicht für alle Sender machen, sonst müsste ich durchzappen... und das würde Stunden dauern.


    Aber mal ehrlich: Wie viele Sender schaut Ihr regelmässig... 10 ? 20 ? Für diese Sender das Delay zu setzen ist doch wirklich kein Hexenwerk (wahrscheinlich schneller über PC- Software als über mein Plugin) und der Kittel ist geflickt...


    Ich habe die Anforderung eines globalen delays bei den DMM- Entwicklern eingekippt... Mehr kann ich dazu momentan nicht tun.


    Tode

  • *lach* Freut mich, dass ich dir eine Freude mit dem Vorschlag machen konnte :winking_face:


    Natürlich hast du recht. Es sind nur wenige Kanäle, die man schaut, und die sind sicher in Bouquets. D.h. eine Beschränkung auf Bouquets würde reichen. Wäre das nicht was? :grinning_squinting_face:

  • genau... eine Beschränkung auf Bouquets hebt natürlich das ursprüngliche Problem, dass so was nicht geht, direkt auf... :)


    Ich bin gerade dabei, das ganze fürs gForge Plugin- Repository vorzubereiten. Da ist dann der Quellcode offen, und dann kann "man" ja diese Funktion einbauen.


    Ich bin noch immer absoluter Python- Anfänger (erste Gehversuche Mitte Januar) und werde mich damit definitiv nicht rumschlagen...


    Trotzdem Gruss
    Tode

  • Zitat

    Original von Swiss-MAD
    Dann kannst du doch einfach in der bootup die Werte nach proc schreiben lassen.
    Solange dann in der lamedb kein Delay steht bleibt das dann auch so.


    hatte ich versucht, aber es hat irgendwie nie geklappt. Fuehre jetzt einfach eine lipSync.sh per cronjob jede 5min aus - nicht toll aber funktioniert.


    lipSync.sh:
    #!/bin/sh
    #lipSync 4620=200ms 2328=100ms
    echo 4650 > /proc/stb/audio/audio_delay_bitstream
    echo 2328 > /proc/stb/audio/audio_delay_pcm
    exit 0


    Hatte auch mal das plugin pauli von gutemine angepasst, aber da waren so viele Sachen noch drin, die ich nicht wollte und ich muss es jedesmal von neuem anpassen.
    pauli:plagin.ph:
    ...
    if os.path.exists("/proc/stb/audio/audio_delay_bitstream") == True:
    delayfile = open("/proc/stb/audio/audio_delay_bitstream","w")
    delayfile.write("4620")
    delayfile.close()
    if os.path.exists("/proc/stb/audio/audio_delay_pcm") == True:
    delayfile = open("/proc/stb/audio/audio_delay_pcm","w")
    delayfile.write("2328")
    delayfile.close()
    ...


    Swiss-MAD
    Weisst du wie es einfach geht beim booten?


    todo
    ok, hab ich jetzt verstanden. War mir nicht bekannt, dass wenn ich einen Wert in der lameDB habe alles andere dann automatisch beim zappen genullt wird.


    Zitat

    Original von Tokamak
    Oder man (du ;)) baut in das Plugin eine Möglichkeit ein, einen globalen Wert in alle(!) lamedb-Einträge reinzuschreiben, ..


    Dann habe ich wieder das Problem, das ich im Videomode immer per Hand nach regeln muss, da gibt es keine lameDB. Bei einem globalen LipSync erspare ich mir die gesamte Regelei, allerdings kann ich da nur einen gemittelten Wert benutzen, der dann fuer alle gilt.


    Die Topfield hat so einen Parameter fuer globalen LipSync, schade das DMM so was einfach (jedoch sehr wichtiges) nicht pauschal implementiert hat.


    todo
    Schoen das du bei DMM es eingekippt hast, vielleicht fruchtet es ja irgendwann :gutenmorgen:

    # DM7025+SS Gemini 4.70; LCD Samsung LE46A656A

  • Zitat

    Original von schachi-md
    Swiss-MAD
    Weisst du wie es einfach geht beim booten?


    Hmmm... ich kenne mich mit Linux leider nicht so gut aus.
    Ich weis nicht, ob enigma2 schon laufen muss, damit ich das Audio Delay über proc setzten kann. (Ich kann es jetzt nicht grad testen, sonst reklamiert meine Frau wenn ich ihr das Skirennen auf dem TV abwürge ;))


    Entweder am Ende von der /etc/init.d/bootup direkt "echo 4650 > /proc/stb/audio/audio_delay_bitstream"
    Geht das nicht, wäre es doch mal ein Versuch wert am Ende von /usr/bin/enigma2.sh dein Script unabhängig vom enigms2.sh mit "/DEIN_PFAD_WO_DAS_SCRIPT_LIEGT/lipSync.sh &" starten.
    Ob das Delay setzten funktioniert hat, kannst du anschliessen ja einfach mit "cat /proc/stb/audio/audio_delay_bitstream " testen.


    PS: Tode heist Tode und nicht Todo :grinning_squinting_face:

  • Tode Sorry tode fuer den kleinen Verschreiber in deinem Namen


    Swiss-MAD
    /etc/init.d/bootup direkt "echo 4650 > /proc/stb/audio/audio_delay_bitstream
    hatte ich schon frueher probiert, geht nicht


    /usr/bin/enigma2.sh
    habe ich gerade probiert, geht leider auch nicht


    irgendwie startet das enigma so spaet, das alle Aktionen vorher verpuffen. Hatte auch ein delay von 120s drin, ging aber auch nicht.
    Es muss ausgefuehrt werden, nach dem enigma gestartet ist. Es geht mit den plugin-modulen z.B. von gutemine's ich glaube fantastic hieß es.


    Trotzdem danke fuer deine Bemuehungen, irgendwann wird das auch geloest werden und solange lebe ich mit meinem cronscript.

    # DM7025+SS Gemini 4.70; LCD Samsung LE46A656A

  • ich habe zusammen mit ritzMo einen entsprechenden Patch ans Enigma2- Team submitted (also ritzMo hat die Arbeit gemacht, und ich habe ihm interessiert zugeschaut :winking_face: )... vielleicht bauen die es ja ein, dann ist Dein Problem bald behoben...


    Tode

  • Hallo Tode,


    ich habe noch eine kleine Verbesserung für die Neuberechnung der Tastenbelegung.


    Code
    def recalculateKeys(self):
            iLowerBound = int(config.plugins.AC3LipSync.lowerBound.getValue())
            iUpperBound = int(config.plugins.AC3LipSync.upperBound.getValue())
            iStepSize = (iUpperBound - iLowerBound)/8                                      #<-------------------------hier
            for i in range(1 , 10):
                config.plugins.AC3LipSync.keySteps[i].stepSize.setValue(((i - 1) * iStepSize) + iLowerBound)   #<-------------------------und hier
            self["config"].setList(self.list)


    Damit hat die Taste 1 den Wert der minimalen Verzögerung
    und die Taste 2 den Wert der maximalen Verzögerung (na ja fast, hängt wohl mit Rechengenaugkeit von Phyton ab :face_with_rolling_eyes:).


    Ah... stelle gerade fest das Phyton wohl nur ganzahlig rechnet.
    Vielleicht hat einer der Phyton kann ne Idee.



    Hänge aber Trotzdem mal das geänderte AC3setup.py unten an.





    gruß

  • und noch ne Idee,


    wie man das mit den Filmen hinkriegen könnte.


    Wir haben doch in der lamedb die Verzögerungen für einezelne/alle Sender hinterlegt, wenn wir nun einen Film von einem dieser Sender aufnehmen und wieder abspielen dann ist doch der Ton nicht LipSync.


    Wir habe aber doch eine Filmxyz.ts.meta datei dort ist wiederum der Sender in folgender Form fetsgehalten.


    Code
    1:0:1:2F1C:441:1:C00000:0:0:0:
    Wohnen nach Wunsch - Das Haus
    
    
    1197221962


    worauf es hier ankkommt ist doch das > 2F1C < in diesem Falle VOX.


    Wenn man nun in der lamedb danach sucht, stößt man darauf und findet die Werte für die Verzögerung für diesen Sender.


    Code
    2f1c:00c00000:0441:0001:1:0
    VOX
    p:RTL World,c:0000a7,c:010088,c:020047,c:0300a7,c:0700c8,c:0800c8


    unter c:0700c8 für AC3 und c:0800c8 für MPEG.


    Leider sind meine Phyton Gehversuche gerade erst angefangen siehe mein voheriges Post, als das ich damit schon was auf die Beine stellen könnte.
    Sonst hätte ich mich selbst herangetraut.


    gruß

  • trinanog: zu 1: Die Taste 0 belegt doch schon die minimale Verzögerung... weshalb das ganze auf 1 setzen !?


    Wegen der Ganzzahl- Berechnung: alle Variablen sind als int deklariert... da gibts halt keine Nachkommastellen.


    Zu Deiner zweiten Anmerkung: Hier sind wir wieder an einem Punkt, der eigentlich im System selbst abgefangen werden muss: Beim Aufnahme ansehen schauen, ob für den Sender ein delay hinterlegt ist und dann dieses setzen... Das bedeutet patchen von Systemdateien, und das werde ich mit meinem Plugin nicht machen.


    ich kann Dir hächstens insofern entgegenkommen, dass beim Plugin- Aufruf der entsprechende delay schon vorbelegt ist, so dass Du nur noch "OK" drücken musst...


    Tode

  • schön und gut


    zu 1
    wo sehe ich das denn?
    in der Config sind nur die Tasten 1 - 9 zu sehen.


    Und die 9 erreicht nicht den max Wert.




    zu 2
    wieso ins system eingreifen ist doch gar nicht notwendog.
    Wenn ich wüsste wie ich mit Phyton ein File öffne und darin suchen kann, würde ich denrest auch hinbekommen, aber ich bin noch nicht so weit. :O



    und lass dich nicht von mir verunsichern, ich möchte dich nur bei deinem tollen Plugin unterstützen :).


    gruß

  • Bei mir ist die 9 der maximale Wert... da muss bei Dir was schief laufen....


    Wenn ich max 405 eingebe, dann ist die 9 genau dieser Wert, nämlich 405...


    Wenn das bei Dir nicht klappt, dann sind Deine Einstellungen irgendwie "verstellt". Eventuell hilft es schon, einfach den Setup mal aufzumachen, einen Wert abzuändern und per speichern zu schliessen...


    zu 2: Es ist gar kein Problem, den Wert aus der lamedb auszulesen. Es ist ebenfalls kein Problem, diesen Wert mit meinem Plugin zu setzen... Diesen Code habe ich schon mal geschrieben (bevor ich von tmbinc auf getAC3Delay und setAC3Delay hingewiesen wurde).


    Das Problem ist, dass ich ja "mitbekommen" muss, wenn eine Aufnahme startet, und daraufhin dann reagieren muss... Das heisst: Ich muss den Mediaplayer patchen, damit der das Delay entsprechend setzt, wenn ein Film gestartet wird, oder ich muss mein Plugin permanent laufen lassen und dann reagieren, wenn ein Film gestartet wird.


    Die erste Lösung ist ein Eingriff ins System, den ich nicht machen will, die zweite Lösung würde ich vielleicht hinkriegen, aber jedes Plugin das permanent läuft kostet performance, und deshalb möchte ich das eigentlich nicht machen.


    Wie ich bereits geschrieben habe: Der Code für ein globales delay innerhalb enigma2 ist fertig (wenn auch noch nicht so schön) und an die Entwickler von DMM weitergeleitet.
    Ich hoffe, dass die das einbauen (es sei denn, irgendein triftiger Grund, den wir bisher noch nicht gesehen haben, spricht dagegen)


    Trotzdem Danke für Deine Anregungen, ich werde umsetzen, was ich kann, aber halt innerhalb meinen mir selbst aufrlegten Grenzen...


    Ich bin hauptberuflich Entwickler und verbringe ca. 55 Wochenstunden vor der Kiste...


    Die von Dir gewünschten Änderungen bergen eine hohe Gefahr von Inkompatibilitäten mit aktuellen / zukünftigen Images mit, und da ich nicht alle Images immer auf Kompatibilität prüfen kann, bleibe ich bei meinem "minimal- invasien" Ansatz
    Ich könnte das ansonsten nicht mehr supporten....


    Aber wie gesagt: Das Plugin ist ans gforge Repository submitted: Jeder ist eingeladen, es zu verbessern... Vielleicht findet sich ja jemand mit dem nötigen Know-How und dem Willen, das so umzubauen, wie Du das möchtest...


    Gruss
    Tode

  • Hallo tode,


    zu der Filmgeschichte
    da hast Du recht. Daran das man ja erkennen muss das ein Film läuft, habe ich nicht gedacht.



    zu der Tastenbelegung
    auch nach dem ich das Plugin neu installiert habe, kommt es nur hin wenn der min Wert 00000 ist.
    Schau doch mal die screenshots an.


    Äh... wo sind die denn geblieben. Ich sehe sie nicht in der Vorschau.


    Na ja, setze einfach mal die min Verzögerung auf zB. 00100 und siehe was passiert.
    Da Du ja die Taste 0 belegt hast, habe ich die Berechnung angepasst.



    gruß

  • Ok, jetzt sehe ich Dein Problem...


    Ich hatte befürchtet, dass ich das an irgend einer Stelle nicht beachtet habe.


    Der Python- Slider ist da ein wenig "seltsam"...


    Wenn ich den so setze, dass er bei 100 anfängt und bis 400 geht, dann bewirkt ein


    setValue( 200 ) nicht etwa, dass der Wert auf 200 gesetzt wird, sondern der intern gespeicherte Wert ist dann 300 (minimum + gesetzter Wert).


    Das hatte ich versucht überall zu berücksichtigen, habe es aber bei der Berechnung der manuellen Werten aber falsch gemacht.


    Was aber nicht ganz klar ist, ist folgendes: Wenn Du min auf 100 und max auf 400 setzt und dann einfach speicherst (ob Du danach die gelbe Taste drückst oder nicht ist ohne Belang), dann werden die berechneten Werte im Plugin korrekt gesetzt.


    Wenn Du im Plugin aber dann mit der blauen Taste auf die "user-delays" umschaltest, dann werden die gespeicherten Werte verwendet, die um den Wert des Minimum- Delays zu gering sind.


    Die Einführung der "Benutzerdefinierten" Werte hat hier zu mehr Verwirrung geführt als ich mir gedacht hatte...


    Kurzum: Ich muss tatsächlich die Berechnung der delays hinter der gelben Taste korrigieren, wie Du es vorgeschlagen hast....


    Danke für diesen Schubser in die richtige Richtung.


    Tode