Stimme für das Vorlesen von Texten (schnell) wechseln zwischen deutsch und englisch

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
Liebe MacUser,

folgende Situation:
Man kann mit einer Taste (bei mir F5) einstellen, dass der markierte Text vorgelesen wird. Siehe Bild http://d.pr/i/e2zt

Da ich parallel sowohl englische als auch deutsche Texte lese, muß ich zur Zeit immer in die Spracheinstellungen gehen und die Stimme von "Steffi" in "Samantha" wechseln.

Gibt es eine Möglichkeit dieses wechseln zwischen diesen beiden Stimmen schneller zu bewerkstelligen?
 

little_pixel

Aktives Mitglied
Mitglied seit
06.06.2006
Beiträge
4.608
Hallo,

Code:
say "I am Fred." using "Fred"

delay 1

say "I am Victoria." using "Victoria"
Viele Grüße
 

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
Danke für die schnelle Antwort...

aber leider ist das nicht die Lösung meines Problems.

Es geht ja darum, daß ein Text, den man in z.B. Pages markiert, vorgelesen bekommt.

Zum Vorlesen verwendet OS X aber die Stimme die in den Sprach-Einstellungen ausgewählt ist.

Ich hab nun ein zweisprachiges eBook in Pages, daß auf der linken Seite den englischen Text hat und auf der rechten Seite die deutsche Übersetzung.

Wenn ich nun den englischen Text vorlesen lassen möchte, muß ich eine englische Stimme in den Spracheinstellungen auswählen, will ich danach den deutschen Text vorlesen lassen, muß ich wieder die deutsche Stimme auswählen, usw.

Und diese Stimm-Auswahl dachte ich, könnte man vielleicht mit apple-script per Tastenkombination schnell erledigen.
 
Zuletzt bearbeitet:

Pill

Aktives Mitglied
Mitglied seit
21.02.2011
Beiträge
3.280
Das ist der schmutzige Weg:

Code:
[FONT=Verdana][size=2][b]tell[/b] [color=#0000FF][i]application[/i][/color] "System Preferences"
	[color=#4C4D4D]--Systemeinstellungen Sprachausgabe öffnen:[/color]
	[color=#0000FF][b]reveal[/b][/color] [color=#0000FF][i]anchor[/i][/color] "TTS" [b]of[/b] [color=#0000FF][i]pane[/i][/color] "Sprache"
	[b]tell[/b] [color=#0000FF][i]application[/i][/color] "System Events"
		[b]tell[/b] [color=#0000FF][i]process[/i][/color] "System Preferences"
			[color=#4C4D4D]--Warten:[/color]
			[b]repeat[/b] [b]until[/b] [color=#0000FF][b]exists[/b][/color] [color=#0000FF][i]pop up button[/i][/color] 1 [b]of[/b] [color=#0000FF][i]tab group[/i][/color] 1 [b]of[/b] [color=#0000FF][i]window[/i][/color] 1
				[color=#0016B0][b]delay[/b][/color] 0.1
			[b]end[/b] [b]repeat[/b]
			[color=#4C4D4D]--Systemstimme klicken:[/color]
			[color=#0000FF][b]click[/b][/color] [color=#0000FF][i]pop up button[/i][/color] 1 [b]of[/b] [color=#0000FF][i]tab group[/i][/color] 1 [b]of[/b] [color=#0000FF][i]window[/i][/color] 1
			[color=#4C4D4D]--Warten:[/color]
			[b]repeat[/b] [b]until[/b] [color=#0000FF][b]exists[/b][/color] [color=#0000FF][i]menu item[/i][/color] 1 [b]of[/b] [color=#0000FF][i]menu[/i][/color] 1 [b]of[/b] [color=#0000FF][i]pop up button[/i][/color] 1 [b]of[/b] [color=#0000FF][i]tab group[/i][/color] 1 [b]of[/b] [color=#0000FF][i]window[/i][/color] 1
				[color=#0016B0][b]delay[/b][/color] 0.1
			[b]end[/b] [b]repeat[/b]
			[color=#4C4D4D]--Auf entsprechende Stimme klicken:[/color]
			[color=#0000FF][b]click[/b][/color] [color=#0000FF][i]menu item[/i][/color] "Alex" [b]of[/b] [color=#0000FF][i]menu[/i][/color] 1 [b]of[/b] [color=#0000FF][i]pop up button[/i][/color] 1 [b]of[/b] [color=#0000FF][i]tab group[/i][/color] 1 [b]of[/b] [color=#0000FF][i]window[/i][/color] 1 [color=#4C4D4D]--hier muss der Name der entsprechenden Stimme eingetragen werden[/color]
		[b]end[/b] [b]tell[/b]
	[b]end[/b] [b]tell[/b]
	[color=#4C4D4D]--Systemeinstellungen beenden:[/color]
	[color=#0000FF][b]quit[/b][/color]
[b]end[/b] [b]tell[/b][/size][/FONT]
 

varuna

Mitglied
Mitglied seit
21.10.2009
Beiträge
471
Hallo

mir fallen auch zwei Lösungen ein.
Die "einfachere" würde mit einem Automator-Dienst funktionieren, welcher sich mit einem Tastaturkürzel starten lässt.

Automator öffnen -> Vorlage Dienst
Dienst empfängt Text in jedem Programm (oder nur Pages)
Aktion Text vorlesen

Speichern.
Systemeinstellungen öffnen -> Tastatur -> Tastatureinstellungen -> Dienste. Dort ein Tastaturkürzel eintragen (ein OS X Shortcut muss immer ein cmd enthalten)

- - - - - - - - - - -

Die zweite Möglichkeit

...hat sich erledigt

Gruß
 
Zuletzt bearbeitet:

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
Hallo Pill,
danke für deinen Script. Es funktioniert grundsätzlich.


Ich habe aus den Scripten zwei Programme erstellt (für "Steffi" Deutsch und "Samantha" Englisch), die ich abwechselnd gestartet habe.

Nur leider wird manchmal eines von beiden nicht sauber beendet, so dass ich mit "sofort beenden" das Programm schließen muß.

Cool wäre noch eine "If"-Anweisung, damit man das Ganze mit nur einem Script-Programm durchführen kann. Sozusagen "wenn Steffi" aktiv, dann wechsle zu "Samantha".

Ich werde morgen damit "rumprobieren".
 

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
Hallo Varuna,

Deine erste Lösung hatte ich auch schon probiert und die ist eiiiiigentlich super.
Aber einen Nachteil konnte ich nicht wegbekommen. Wenn der Dienst erstmal gestartet ist, läßt er sich nicht beenden.
Mit der Standardfunktion von OS X (also bei mir die Taste F5) läßt sich ja das Vorlesen stoppen, was bei langen Texten Sinn macht.
Falls man den Dienst mit der gleichen Taste oder z.B. der ESC-Taste beenden könnte, wäre das Problem perfekt gelöst.

--------------

Deine zweite Lösung klingt vielversprechend und interessiert mich sehr....aber an Shell-Befehle habe ich mich bisher nicht so wirklich ran getraut.
Damals unter MS-DOS hab ich solche Befehle in eine Batch-Datai eingebaut und ausgeführt.
Ist das hier auch so?
Kann ich dem auch so einfach wie bei Deiner ersten Lösung eine Tastatur-Kürzel vergeben?

Vielen Dank an Euch alle für die tollen Ideen, Hammer welches Know-how hier im Forum ist :)
 

little_pixel

Aktives Mitglied
Mitglied seit
06.06.2006
Beiträge
4.608
Hallo,

Code:
tell application "System Events"
	
	keystroke "c" using command down
	
end tell

set someText to the clipboard as text

say someText using "Fred"

delay 1

say "I am Victoria." using "Victoria"
Ich verstehe nicht, warum Du es nicht einfach so machst…

Viele Grüße
 

varuna

Mitglied
Mitglied seit
21.10.2009
Beiträge
471
Hallo,

KORREKTUR

PS: Automator Dienste sind "recht schnell" ... aber flotter funktioniert das ganze mit solchen 3rd Party Hotkey Managern a la Alfred oder Butler und viele weitere, welche direkt Skripte triggern (ausführen) können.
Diese Programme akzeptieren in der Regel auch fast jede Kombination als Tastaturkürzel.. u.U. auch die F-Tasten.

Gruß
 
Zuletzt bearbeitet:

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
@Little_pixel #8

Sorry, da ich ich noch Anfänger bin - was AppleScript betrifft ;-) - hab ich die Möglichkeit Deiner Lösung nicht sofort begriffen.
Aber mit der Erweiterung funktioniert es tatsächlich.

also einfach Text in die Zwischenablage kopieren und Dein Script starten.

Evtl. könnte man das "kopieren" auch gleich in das Script einbauen.
Sprich...ich markiere den Text, starte Dein Script, es kopiert den markierten Text in die Zwischenablage und liest ihn vor.
Wenn jetzt noch die Möglichkeit bestehen würde, das Vorlesen bei langen Texten mit einer Taste zu stoppen (so wie es die Systemeigene Vorlese-Funktion mittels der Taste F5 anbietet), wäre es perfekt.

Jetzt hab ich "Blut geleckt" und werde mich die Tage tiefer in die Materie (AppleScript, Automator und Shell-Befehle) einarbeiten und Eure drei Lösungen durcharbeiten.

Mir geht es auch darum, anhand konkreter Aufgabenstellungen zu lernen. Das fällt mir leichter.


Eine Andere Frage:
Eigentlich wäre es ja Sinnvoll das OS X automatisch erkennt, in welcher Sprache der Text geschrieben ist.
Wisst Ihr zufällig ob diese Funktion in "Mountain Lion" eingebaut ist?
Ich denke eine Präsentation (auf der Entwickler Site von Apple) gesehen zu haben, bei der genau diese Funktion präsentiert wurde.
Ich weiß nur nicht mehr, ob es speziell für iOS6 oder auch OS X gedacht war.
 

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
@varuna:

Datei: com.apple.speech.voice.prefs.plist
mit Xcode gestartet und folgende Änderung manuell vorgenommen:

"vorherige Stimme"

SelectedVoiceName "Steffi"
SelectedVoiceCreator "1919902066"
SelectedVoiceID "886"

"neue Stimme"

SelectedVoiceName "Samantha"
SelectedVoiceCreator "1919902066" (Anm.: scheint gleich zu sein, wie bei "Steffi")
SelectedVoiceID "745"

Nach dem Abspeichern und Schließen von Xcode starte ich Preferences/Speach/
und sehe, daß die neuen Werte korrekt übernommen wurden.

Wenn ich jetzt aber einen Text in Safari markiere und die Taste F5 klicke, wird trotzdem noch die vorherige Stimme verwendet.

OS X erkennt also die Änderung der Datei nicht.

----per Terminal--------
Hab das ganze auch per Terminal durchgeführt:
Sprich alle drei Zeilen mit den korrekten Werten nacheinander in "Terminal" kopiert und ausgeführt.

Dies führte dazu, daß die Systemstimme in Preferences/Speach/ nun ausgegraut war...sprich nicht mehr auswählbar :)

Aber da es ja TimeMachine gibt, war es kein Problem die original Datei wieder zurück zu holen.

Was mach ich falsch?

---gleiches Problem bei anderem User:
hab nun in nem anderen Forum ein ähnliches AppleScript entdeckt, aber auch da wird das gleiche Problem geschildert....sprich: in den Preferences wird alles korrekt angezeigt, aber Das OS X verwendet trotzdem die vorherige Stimme:

if application "System Preferences" exists then tell application "System Preferences" to quit

do shell script "defaults write ~/Library/Preferences/com.apple.speech.voice.prefs SelectedVoiceCreator -int 1734437985"

do shell script "defaults write ~/Library/Preferences/com.apple.speech.voice.prefs SelectedVoiceID -int 100"

do shell script "defaults write ~/Library/Preferences/com.apple.speech.voice.prefs SelectedVoiceName -string Bruce"

tell application "System Preferences" to launch
tell application "Finder" to set visible of process "System Preferences" to false
 
Zuletzt bearbeitet:

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
So, hab mich für die erste Lösung von @Varuna entschieden

Taste F5 liest englischen Text vor
Taste F6 liest deutschen Text vor

Wie geht das?
Deutschen Text vorlesen lassen:
1. ein Automator-Dienst anlegen (z.B.: Text DE vorlesen.workflow)
2. diesen per Tastaturkürzel mit F6 verbinden

Englischer Text mit F5 vorlesen lassen
3. in System Preferences/Sprache eine englische Stimme wählen und mit F5 belegen


ein Bild sagt tausend Worte Zweisprachiges Vorlesen.jpg

Nun kann man ganz einfach zweisprachige Bücher durcharbeiten.
 
Zuletzt bearbeitet:

varuna

Mitglied
Mitglied seit
21.10.2009
Beiträge
471
Hmm ja,... das funktioniert nicht mehr (hat es aber mal...)
Sorry, ich hätte das vorher überprüfen sollen....

Damit fällt diese Möglichkeit weg.
Eigentlich geht es dir ja nur noch darum, Steffi vorzeitig abwürgen zu können.

Zumindest für den Weg mit einem Automator Dienst wüsste ich eine Lösung:
Oben in das sich drehende Rädchen in der Statusleiste klicken und Workflow stoppen

Oder etwas abgedrehter mit einem weiteren Dienst:
Dienst empfängt keine Eingabe in jedem Programm
Aktion AppleScript ausführen

tell application "System Events"
try
set wSr to unix id of application process "WorkflowServiceRunner"
end try
try
set aUl to unix id of application process "Automator-Launcher"
end try
end tell
try
do shell script "kill -9 " & aUl
end try
try
do shell script "kill -9 " & wSr
end try



Gruß
 

paperflow

Neues Mitglied
Thread Starter
Mitglied seit
06.09.2011
Beiträge
45
Vielen Dank dass du daran noch gedacht hast. Genau dieses AppleScript hat noch gefehlt.

Ich hab nun das Vorlesen von "Steffi" mit F6 belegt und das "Stoppen" mit CMD+F6.

Jetzt ist es perfekt. Vielen Dank
 
Zuletzt bearbeitet: