Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Man könnte eine weitere Variable am Anfang für das Eingabefeld in XSane einbauen, z.B. -m, im Skript $MBROLA, die de/de2 heißen müsste oder welche Mbrola-Sprache man auch immer verwenden möchte; die wird dann als Variable in den Mbrola-Aufruf eingebaut, wenn die -m Variable existent ist, Abfrage über etwas wie if [[ $MBROLA != ""]] oder so. Wenn sie nicht da ist, wird der "normale" eSpeak-Aufruf gestartet, da müsste man dann auch zwei von basteln, einer für Mbrola-Stimmen, der andere für die "normalen" eSpeak-Stimmen. Sollte machbar sein, ist natürlich etwas fehleranfälliger, da dann die Eingaben für -x"-vmb-de2" und -m "de/de2" zusammenpassen müssen, damit dann tatsächlich das richtige verwendet wird. Ansonsten müsste man die "-vmb-XXY" - Eingabe entsprechend aufbereiten, dass man dort XXY ausliest, und für den Mbrola-Aufruf dann entsprechend XX/XXY verwendet.... Wüsste jetzt aus dem Stegreif nicht, wie da geht, sollte theoretisch aber machbar sein. so long hank
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo meine Theorie war ja das man die $SYNSET auf die ersten 5 Zeichen auswertet.Ungefähr so Pseudocode
if [ $SYNSET(die ersten 5 Zeichen) == "-vmb-" ] ;then "mbrola voice"; else "espeak voice"; fi Mir fehlen allerdings die Fähigkeiten das umzusetzen. Gruß...busfahrer
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Aber dafür bräuchtest du doch auch noch eine dezidiertere Angabe zu "de4", also welche mbrola-Stimme es denn sein sollte, oder denke ich jetzt schief? Der mbrola-Aufruf braucht doch den Pfad, und der ließe sich zwar aus -vmb-de4 ableiten, nämlich usr/share/mbrols/de/de4, aber nicht aus dem ersten Teil... Ich forsch noch mal, irgendwann hab' ich schon mal mit sowas gebastelt, einen zu String zerlegen, ging über Separatoren, da könnte man ggf die Bindestriche für nehmen... Im Zweifelsfall kann sed auch das; da müssten wir dann frostschutz oder track fragen ☺ so long hank
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo mit ist da jetzt zum wiederholten male folgendes aufgefallen.Bei dir scheinen die deutschen mbrola-Stimmen unter /usr/share/mbrols/de/ zu liegen. Den Pfad gibt es bei mir so nicht.Meine Stimmen liegen alle unter /usr/share/mbrols/voices/.Ich habe gerade zum testen mal die Stimme mbrola-en1 installiert und auch die landet in /usr/share/mbrols/voices/. Also liegen alle Stimmen bei mir, egal ob de oder en, in diesem Verzeichnis.Vielleicht liegt bei mir ja auch da das Problem mit espeak und den mbrola-Stimmen. Gruß...busfahrer
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Denkfehler meinerseits - ich hatte die mbrola-Stimmen von der mbrola-Seite geladen und entpackt und da liegen sie dann zunächst unter einem de/de4 (oder was uach immer) Unterordner... Sie leigen bei mir tatsächlich auch unter /user/share/mbrola/voices 😳 Bitte das zu entschuldigen, leide gerade "etwas" unter den "Krankheiten" der Saison, (Husten, Schnupfen, Eiterkeit, mal sehen, was noch dazu kommt, rumort schon...) deswegen sitze ich überhaupt hier; aber meine Auffassungsgabe ist dadurch anscheinend etwas eingeschränkt... Das machts aber vielleicht einfacher: von dem "-vmb-de4" müssen wir so nur die ersten 5 Zeichen killen, dann hätten wir das de4 (es sei denn, da ist noch was hinter...) Heute zu hoch für mich, sorry ... so long hank
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Heinrich Schwietering schrieb: Das machts aber vielleicht einfacher: von dem "-vmb-de4" müssen wir so nur die ersten 5 Zeichen killen, dann hätten wir das de4 (es sei denn, da ist noch
was hinter...) Heute zu hoch für mich, sorry ...
Das Problem ist ja das in Lucid an mbrola weiter gepipet werden muß wenn eine mbrola-stimme genutzt wird.Wenn man also jetzt in der Variable $SYNSET am ersten Leerzeichen schneidet bekäme man -vmb-de6. Jetzt müßte man prüfen ist das eine mbrola-Stimme oder nicht. Wenn der erste Teil -vmb ist dann ja ansonsten nein. Wenn nein dann `"$ESPEAK" $SYNSET -f "$FILE_OUT" --stdout | lame --tt "$FILE_OUT" --ta Hörbuch -b 16 -h -V2 -S - "$FILE.mp3"` 1>&2 wenn ja muss man noch prüfen welche Stimme de6 und dann `"$ESPEAK" $SYNSET -f "$FILE_OUT" | mbrola -e /usr/share/mbrola/voices/de6 - "$TEMP_DIR""$TEMP_WAV" && lame --tt ${FILE##*/} --ta Hörbuch -b 16 -h -V2 -S "$TEMP_DIR""$TEMP_WAV" "$FILE.mp3"` 1>&2 Soweit die wirren gedanken von jemandem der eigentlich keine Ahnung hat ☺ Gruß und gute Besserung busfahrer
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Klingt plausibel... Muss ich doch noch mal nach dem Teil mit den Separatoren ("Delimiter" heißen die offiziell) forschen, da könnte man dann tatsächlich die Bindestriche für nehmen, und dann das ersten Feld checken, und danach das zweite. War im Teletext-Skript Skripte/Teletext mit DVB-T. Mal schnell zusammengezimmert:
| MBROLA=`$SYNSET | cut -d "-" -f 2`
VOICE=`$SYNSET | cut -d "-" -f 3`
if [["$MBROLA" == "vmb"]] ; then
`"$ESPEAK" $SYNSET -f "$FILE_OUT" | mbrola -e /usr/share/mbrola/voices/$VOICE - "$TEMP_DIR""$TEMP_WAV" && lame --tt ${FILE##*/} --ta Hörbuch -b 16 -h -V2 -S "$TEMP_DIR""$TEMP_WAV" "$FILE.mp3"` 1>&2
rm "$TEMP_DIR""$TEMP_WAV"
else
`"$ESPEAK" $SYNSET -f "$FILE_OUT" --stdout | lame --tt "$FILE_OUT" --ta Hörbuch -b 16 -h -V2 -S - "$FILE.mp3"` 1>&2
fi
|
cut zerlegt den String, hoffe ich zumindest, -d "-" legt den Delimiter fest, hier also der Bindestrich, -f 2 ist das "zweite" Feld der Zerlegung, also "vmb", wenn der String "-vmb-de2" hieß, -f 3 entsprechend das dritte, also de2 (das erste ist leer, es ist das "vor" dem ersten Bindestrich). Die nachfolgenden interessieren hier nicht, da kann drinstehen, was will. So bräuchte man keine Teile zu killen; allerdings müsste man sicherstellen, dass keine Leerstelle im -vmb-de2 -String steht (das geht nämlich auch, -v mb-de2 funktioniert halt auch. Aber da könnte man sicherhaltshalber eine sed-Abfrage vorsetzen (oder genau eingeben, also ohne Leerzeichen 😉) Im Terminal geht das: $ echo -vmb-de6 | cut -d "-" -f 2
vmb
$ echo -vmb-de6 | cut -d "-" -f 3
de6 sollte im Skript also auch gehen. so long hank
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo habe einige Tests dürchgeführt und alle mit erfolg 👍 Ich mußte allerdings 2 Dinge ändern.Bei dieser Variante blieben die Variablen leer
MBROLA=`$SYNSET | cut -d "-" -f 2`
VOICE=`$SYNSET | cut -d "-" -f 3` Ich mußte statt dessen MBROLA=`echo $SYNSET | cut -d "-" -f 2`
VOICE=`echo $SYNSET | cut -d "-" -f 3` schreiben.Das Zweite war sicherlich eine versteckte Denksportaufgabe von dir 😊 Ich mußte statt
if [["$MBROLA" == "vmb"]] ; then das ganze so machen if [[ "$MBROLA" == "vmb" ]] ; then Man beachte das Leerzeichen am Anfang und Ende der inneren Klammer.Hat eine Weile gedauert bis ich darauf gekommen bin 🙄 Gruß...busfahrer
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Na dann ist ja alles OK - Das ganze war nur schell hingeschrieben, und nur im Terminal kurz ausprobiert. Das mit den fehlenden Leerzeichen ist auch bei mir immer wieder ein beliebter Fehler 😉 Jetzt fehl eigentlich "nur" noch, wie man die Textausgabe per Knopdruck unterbricht; pausieren wäre ja auch nicht schlecht, das geht aber vermutlich nur, wenn man eine temporäre Wave-Dateien hat (also der Lucid Ansatz 😀 ), und nicht mit 'ner "gepipten" Ausgabe. Wie macht Gespeaker das? Du kannst doch ein wenig Python, kann man da was "abgucken"? Klappt das eigentlich? ${FILE##*/} Hatte schon überlegt, wie man die .txt-Endung wohl rausnimmt, wäre ja ganz praktisch, so long hank
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Hier noch der letzte Stand in Sachen Lucid; probier doch mal, ob das so geht. so long hank
- xsane2speechLucid.sh (9.6 KiB)
- Download xsane2speechLucid.sh
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo hank habe mal durchgetestet und hoffe ich bekomme alles zusammen. Heinrich Schwietering schrieb: Klappt das eigentlich? ${FILE##*/}
Das funktioniert. Hatte das ja in einem deiner ersten Skripte abgeguckt und bei mir eingebaut. Dann steht im Titel-Tag foo statt /home/bla/blub/foo.mp3. Es gibt folgende Probleme. In Zeile 195 erzeugt der Aufruf von `"$ESPEAK" $SYNSET -f "$FILE_OUT" | mbrola -e /usr/share/mbrola/voices/$VOICE - "$TEMP_DIR"/temp.wav && aplay "$TEMP_DIR"/temp.wav` 1>&2 im Log die Ausgabe /home/USER/tmp//temp.wav mit aplay "$TEMP_DIR"temp.wav wird der Pfad richtig ins Log geschrieben. Wenn ich beim verwenden der default espeak-Stimme direkt in mp3 speicher wird nach dem erstellen der mp3 das Error-Fenster aufgerufen und die
OCRResult.txt wird nicht gelöscht. Die mp3 wird aber korrekt erstellt. Wenn ich das mit der mbrola-Stimme mache, passiert das selbe. Zusätzlich wird auch die Ausgabe der espeak-Optionen nicht ins Log geschrieben. Hoffe habe nichts vergessen, ansonsten melde ich mich noch mal. Habe gesehen das du da eine Menge geschweifter Klammern {} rein geschmissen hast. Kannst du mir sagen wozu das gut ist bzw. welchen Vorteil das hat? Gruß...busfahrer €dit: Heinrich Schwietering schrieb: Wie macht Gespeaker das? Du kannst doch ein wenig Python, kann man da was "abgucken"?
Da hab ich schon mal rein geschaut, aber meine Kenntnisse sind zu gering um das was abschauen zu können 😳
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! JA, das mit dem Fehlerfenster war wohl ein Fehler, das hab' ich dann auch noch bemerkt, war wohl nicht mehr so frisch gestern abend .. In meiner Arbeitsversion hab' ich jetzt auch den "doppelten" Code für die mp3-Erstellung rausgenommen, die Reihenfolge geändert, sollte besser funktionieren..
Das funktioniert. Hatte das ja in einem deiner ersten Skripte abgeguckt und bei mir eingebaut. Dann steht im Titel-Tag foo statt /home/bla/blub/foo.mp3.
Eigentlich logisch, der Code war schon aus dem "Original"-xsane2tess-Skript....Könnte man ggf. auch für die Ausgabe-mp3-Dtei nehmen, dann fällt dort auch das .txt automatisch weg, wenns einen stören sollte.
`"$ESPEAK" $SYNSET -f "$FILE_OUT" | mbrola -e /usr/share/mbrola/voices/$VOICE - "$TEMP_DIR"/temp.wav && aplay "$TEMP_DIR"/temp.wav` 1>&2
Der überzählige / kommt daher, dass in der TEMP_DIR-Variable "~/tmp/" steht, kannst du da rausnehmen, sollte aber für die Funktion keine Bedeutung haben. Die geschweiften Klammern habe ich nur reingeschmissen, um besser den Überblick zu behalten, was wie verschachtelt ist; in gEdit (sicher auch in anderen Editoren möglich) kann man sich anzeigen lassen, welche Klammer zu welcher gehört, da ist das dann "etwas übersichtlicher". Bastele gerade an der Textausgabe-Pausieren-Wiederaufnehmen-Beenden-Aufgabe herum, für eSpeak geht es schon, bei Festival beiße ich mir die Zähne aus, (aber vielleicht sollte ich das als Synthesizer dafür auch ganz Knicken, gibt haufenweise Probleme damit... 😉) ▶ hier. Die Lucid Version bring ich auch noch auf den neusten Stand, ggf. später, vielleicht aber auch erst morgen oder so... so long hank
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! So, hier das Skript für Lucid, ohne Gewähr! (mir ist es passiert, dass die Abfrage sich selbständig gemacht hatte, und auch mit einem Abmelden nicht zu beenden war 😀 ). Aber die letzten Tests waren erfolgreich - zumindest für eSpeak, für Festival sitze ich noch fest, vielleicht wird das auch gar nichts mit der Unterbrechung... Die sleep-Variabel (Zeile 186) muss ggf. noch angepasst werden, für die Mbrola-Stimmen ging es ohne sleep zu schnell, und der Prozess war noch gar nicht da, um das Zenity-Fenster damit zu koppeln. Das Fenster muss am Schluss des Vorlesens/nach Beenden noch mal Abgebrochen werden, sonst läuft es nicht weiter, mal sehen, ob mir dazu noch was einfällt. Das OK-Geklicke finde ich auch nicht so schön, lieber wären mir "echte" Tastenfunktionen, die sofort das Ergebnis liefern, aber man kann nicht alles haben 😉 (oder weiß jemand, wie das ginge?) Viel Spaß!
so long hank
- xsane2speech8Lucid.sh (9.0 KiB)
- Download xsane2speech8Lucid.sh
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo hatte das Skript gestern Abend nur mal kurz angetestet, da funktionierte es offensichtlich. Jetzt will ich umfangreiche Tests machen und schon funktioniert es nicht.Es kommt die Abfrage nach weiteren Scans → nein → Abfrage direkt oder mp3 → 1(direkt) → dann erscheint als nächstes noch mal die Abfrage ob ich eine mp3 erstellen will. Vom Zenity-Fenster bezüglich Pause, Weiterführen, Beenden ist nichts zu sehen.Wenn ich die zweite Abfrage nach mp3 abbreche, wird auch die temp.wav nicht gelöscht.Im Log rm: Entfernen von „/home/USER/tmp//temp.wav“ nicht möglich: No such file or directory Gruß...busfahrer
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Ja, das ist leider etwas kniffeliger, arbeite auch gerade an dem Kram (soll noch eine Funktion zum Abbruch mit Text-Löschen dazu kommen, wenn man beim Abhören merkt, dass das gar nicht das ist, was man haben möchte, und bei Abbruch tatsächlich abbricht und auf die XSane-Ebene zurückgeht). Vielleicht reicht der sleep-Wert nicht aus? Wie lang ist der Text, den du vorlesen lassen willst? Wenn es dann klappt, hängt sich ggf. das Zenity-Fenster auf, und der Prozess lässt auch nur von außen stoppen, indem man erst das Skript killed (killall xsane2speech.sh o.ä, je nachdem unter welchem Namen du es abgespeichert hast) und dann killall zenity - das nur zur Warnung. Ist eben noch nicht ganz ausgereift ☺ so long hank
|