Textspieler

Du hast eine Idee für ein Projekt?
Antworten
Barkiarok
User
Beiträge: 2
Registriert: Mittwoch 31. August 2011, 23:02

Einen Textplayer, der Text wie einen Audioplayer abspielt. Aber keine Audiofunktion, sondern nur Textfluß.
Dabei soll Wert auf das Leseerlebnis gelegt werden. Statt über den Text mit den Augen zu wandern, sich den Text einfach vorspielen lassen, wie einen Film.

Funktionalität: vorwärts, rückwärts, Schnellvorlauf, Größe, Farbe
Lesarten: Schreibmaschine, Shuffle, Repeat, Banderole, Led-Laufband, Karaoke, 3 Chinesen, Poem, Memory, Teach
Später: Film, Hypertext, Präsentation
Ich weiß es gibt bereits: (Powerpoint, Segmentor, Textplayer, Karaoke, Sehhilfe, Voice, (http://www.j-hoppe.de/textplayer.html)
aber da ich gerne so lesen würde, auf dem Handy und Bookreader noch mehr, wundert mich, dass es nichts standardmäßiges, sophisticated gibt.
Wie gesagt, der Fokus liegt auf dem lebendigen Lesefluß.
Ein guter Name fehlt auch noch.

Hier schlechter Code, um zu zeigen wie bedürftig ich bin.

Code: Alles auswählen

from time import sleep
from tkinter import *
from tkinter import ttk

root = Tk()
log = Text(root, state='normal', width=80, height=24, wrap='none')
log.tag_configure('bastic', background = 'yellow', font = 'helvetica 20 bold', relief = 'raised')
log.grid()

def writeToLog(msg):
    numlines = log.index('end - 1 line').split('.')[0]
    log['state'] = 'normal'
    if numlines==24:
        log.delete(1.0, 2.0)
    if log.index('end-1c')!='1.0':
        log.insert('end', '   ')
    log.insert(15.3, msg)
    log.update()
    sleep(0.1)
    log['state'] = 'disabled'

def writeField():
	log.insert ('1.0','''................................................................................
................................................................................
1234567890123456789012345.......................................................
.........................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
012345678901234567890123456789012345678901234567890123456789012345678901234567890
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................''' )
def writeToPosition(tschar,line,chpos):
	l = len(tschar)
	add = chpos + l+1
	strpos = str(line)+ "." + str(chpos)
	strpos2= str(line)+"."+str(add)
	log.delete(strpos,strpos2)
	log.insert(strpos, tschar,('bastic'))
	log.update()
	sleep(0.1)
def stringinchar (stri):
	l = len(stri)
	teilstr = ""
	cpos = 35
	print ("Länge ist ",l)
	for cs in stri:
		teilstr = teilstr + cs
		writeToPosition (teilstr,11,cpos)
		#sleep(0.5)
		cpos = cpos -1
def schreibmaschine(stri):
    for char in stri:
        writeToLog(char)
					
def test():
    log.insert('end', 'first text', ('important'))
    log.tag_configure('important', foreground='red')
    log.insert('5.8', 'second text', ('important'))


if __name__ == "__main__":
	s= "Hallo hier ist Kurt"
	writeField()                     
	writeToPosition('f',4,5)
	test()
	stringinchar("While the insert method adds new text.")
	schreibmaschine("Auch geklaut aus dem Pythonforum")
BlackJack

@Barkiarok: Zum Code selbst: Schau Dir mal PEP 8 -- Style Guide for Python Code an.

Sternchen-Importe sollte man vermeiden. Bei Tk ist es üblich ein ``import tkinter as tk`` zu verwenden.

Code auf Modulebene sollte sich auf definieren von Konstanten, Funktionen, und Klassen beschränken.

`numlines` in `writeToLog` wird so nicht funktionieren: Der Vergleich mit 24 wird immer `False` ergeben. Schau Dir mal den Typ von `numlines` an (`type()`-Funktion). Wenn das mit dem Typ korrigiert wurde, würde ich nicht auf Gleichheit mit 24 testen, sondern ob beziehungsweise wie viel grösser es ist und dann die entsprechende Zahl an Zeilen entfernen. Für den Fall das aus irgendwelchen Gründen bereits mehr Zeilen in der Anzeige sind, zum Beispiel '\n'-Zeichen in `msg`, ist das robuster. Den `state` vom `Text`-Widget sollte man so kurz wie möglich auf 'normal' lassen, sonst ist das Zeitfenster in dem der Anwender dort etwas eingeben kann, unnötig gross.

Abkürzungen bei Namen sollte man vermeiden wenn sie nicht allgemeingültig sind. `message` statt `msg` ist zum Beispiel viel verständlicher. Was `tschar` genau bedeuten soll, ist zumindest mir nicht klar. Ebenso scheint `stringinchar()` keinen guten Hinweis darauf zu geben was die Funktion eigentlich macht. Funktionsnamen sollten Tätigkeiten beschreiben und keine Gegenstände, denn Tätigkeiten sind das was man mit Funktionen modelliert. Gegenstände sind eher etwas für Klassennamen, den mit Klassen modelliert man „Dinge” im weitesten Sinne des Wortes.

`s` wird definiert, aber nirgends benutzt.

Zur Idee und Umsetzung: Ich würde das Modell unabhängig von Tk als GUI implementieren. Also zum Beispiel eine Feldklasse, die intern den Zustand vom anzuzeigendem Bildschirm repräsentiert. Für das zurück spulen müsstest Du ausserdem die Aktionen aufzeichnen, beziehungsweise zu jeder Aktion eine Gegenaktion merken, welche die vorhergehende wieder Rückgängig machen kann. Das kann man alles nur mit Funktionen lösen, aber ich denke bei Python bieten sich eigene Klassen eher an.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Barkiarok hat geschrieben: [...]
aber da ich gerne so lesen würde, auf dem Handy und Bookreader noch mehr, wundert mich, dass es nichts standardmäßiges, sophisticated gibt.
Wie gesagt, der Fokus liegt auf dem lebendigen Lesefluß.
[...]
Ich glaube der Grund dafür, dass es das noch nicht gibt ist, dass das den natürlichen Abläufen beim Lesen zuwider läuft, soweit ich das beurteilen kann. Zumindest etwas routiniertere Leser erfassen den Text nicht Wort für Wort, oder gar Buchstabe für Buchstabe, sondern in größeren Einheiten anhand von Fixierungspunkten. Bewegt sich da permanent was, dürfte das recht nervig sein. Wenn man immer nur eine Stelle fokussiert und wartet, dass der Text vorbei kommt, wird man da nicht automatisch zum Buchstabieren, statt zum "richtigen" lesen genötigt?

Findest du denn Laufschriften oder das Star Wars Intro leicht zu lesen und möchtest du so längere Texte konsumieren? Die Frage meine ich übrigens ernst, vielleicht findest du das ja wirklich so. Wenn du das noch nicht getan hast, ist es vielleicht auch recht interessant, sich vorher mal mit dem Vorgang des Lesens eingehend zu befassen.

Insgesamt ist das aber ein interessantes Projekt, und wenn du gerne programmierst ist es ja auch nicht so dramatisch, falls das Programm doch nicht so sinnvoll ist ;).
Barkiarok
User
Beiträge: 2
Registriert: Mittwoch 31. August 2011, 23:02

Erst einmal danke Black Jack für die Tipps. Ich werde versuchen Sie genau so umzusetzen.
Wie du gemerkt hast bin ich Programmierstümper und möchte mit diesem Projekt vorwärtskommen.
Der Verlauf von vollmundigen Ankündigungen geht immer den gleichen Gang: Hinrotzen einer unausgereiften Idee,
technisches Unvermögen, der Versuch andere dazu zu bewegen alles zu programmieren, am besten auch noch die zündende Idee
nachzureichen usw. Desegen verstehe ich, dass die erfahrenen Programmierer ein bißchen gelangweilt sind und als
Hürde die PEP setzen. Wer die nimmt kann dann auch vielleicht ernstgenommen werden.
Deswegen bin noch dankbarer für den Einwand von nezzcarth: weil er auf die Idee eingeht.
In der Tat habe ich mich sehr ausführlich mit dem Vorgang des Lesens beschäftigt, und weiß was du meinst wenn du von
größeren Einheiten sprichst.
Es gibt mehrere Techniken des inneren Lesens: Zum einen die Buchstabierer: Die meisten Menschen haben laut lesen gelernt
und buchstabieren innerlich immer noch. Das kann man sich abtrainieren, indem man Wörter auseinanderzieht "Beis - piel"
und lernt die Wörter bildhaft zu sehen. Womit ich nicht sage, dass das unbedingt erstrebenswert ist. Ist aber ein Modus den ich
auch einbauen will.
Dann gibt es noch die grammatische Einschleifung: Z.B. sind die Verben gewöhnlich im Deutschen am Ende eines Satzes und
bestimmen alles was man gerade liest. Deswegen suchen manche (nicht alle) unbewußt einen Blick aufs Verb zu werfen und
einen Satzvermutung anzustellen.
Stell dir einen Modus vor, in dem das Verb farbig unterlegt ist, und nur für den Satz oder Absatz, den man gerade liest.
Dann gibt es die bekannte Erscheinung, dass wir Wörter wie eine Dtabenak nur anhand der Länge und des Anfangsbuchstabens
rekonstruieren können. Bei Schnellesern ist diese Fähigkeit weiterentwickelt. Das Absatzweise scannen machen die allerwenigsten
und muß eigentlich trainiert werden. Außerdem kennt jeder das Phänomen des Grübelns: Man hängt an einer Stelle, weil man alle
Implikationen oder eigene Assoziationen noch zu Ende denken will. Diese Nischen sind für mich die wertvollsten, und ein
Lesemodus der meine Konzentration fördert und diese Pausen fördert, ist erstrebenswert. Deswegen ein Juggle mit dem ich
zwischen zwei Sätzen vor und zurückschaukeln kann: lange vermisst.
Wenn ich im Schnelllesemodus verfalle, meistens sehr szenische Drehbuchartige Thriller, dann kann ich oft hinterher nicht mehr
sagen, ob ich einen Film gesehen habe, oder das Buch gelesen. Einen StarWars Intro Text: nein, weil der Text sich von mir irgendwie
weg bewegt. Doch ein Gedicht, das sich auf mich wie von Ferne zubewegt und kurz vor meinem Gesichtsfeld stehenbleibt: Gute Idee.

Unser jetziges Buchleseverhalten ist über Jahrhunderte eingübt und ist sehr stark durch wirtschaftliche constraints determiniert. Zum
Beispiel geht das synoptische oder quer Lesen am besten mit großen und weit auseinander liegenden Buchstabenlücken. Doch solche
Bücher hätten mehr Seiten. Bücher mit nur einem Absatz pro Seite verursacht das gleiche Problem. Farbige Bücher, mit Rändern und
verschiedenen Schriftarten sind sehr häufig Lehrbücher und teuer. Deswegen sind wir trainiert mit unseren Augen über den Text zu
wandern. Wir übernehmen eine Menge Arbeit selbst, weil ein Buchtext statisch ist. Der größte Vorteil dessen ist die Bildruhe und
damit die Auflösung. Wenn man viele Parameter des Lesens individuell einstellen kann, dann wage ich zu vermuten, dass unser
Leseverhalten professionalisiert wird. Vor allem beim Monitor, Laptop, IPAD, Handy wird das zeilenweise Wandern der Augen immer
absurder. Aber vielleicht zeigt deine Reaktion, warum ein solches Programm bisher vielleicht fälschlicherweise nicht für wichtig gehalten wurde.
Antworten