Hier ist eine Zeile aus meinem AppleScript, die den ausgewählten Text spricht:
set this_say_Pid to do shell script "LANG=en_US.UTF-8 pbpaste -Prefer txt | say > /dev/null 2>&1 & echo $!"
Ich möchte die Sprechlautstärke viel niedriger sein. Ich würde es vorziehen, dies nicht zu erreichen, indem ich meine Gesamtsystemlautstärke verringere.
Ich kann die Lautstärke say
im Terminal mit dem folgenden Code erfolgreich verringern:
say "[[volm 0.35]] This is a sentence"
Aber wenn ich [[volm 0.35]]
meine do shell script
Saite einfüge, ändert sich die Lautstärke nicht.
Da Sie die Ausgabe des Befehls direkt an command weiterleiten , müsste zB ein Teil dessen sein, was sich in der Zwischenablage befindet, da zB dem Inhalt dessen vorausgehen muss, was tatsächlich gesagt werden sollte.pbpaste
say
[[volm 0.35]]
[[volm 0.35]]
Ich würde versuchen, Folgendes anstelle von dem zu verwenden, was Sie verwenden:
set howLoudAndWhatToSay to "[[volm 0.35]] \"" & (get the clipboard as string) & "\""
set this_say_Pid to do shell script "say " & howLoudAndWhatToSay & " > /dev/null 2>&1 & echo $!"
Update: Wenn Sie bei der Verwendung von bleiben möchten pbpaste
, sollte dieser Beispielbefehl funktionieren:
set this_say_Pid to (do shell script "echo \"[[volm 0.35]] $(LANG=en_US.UTF-8 pbpaste -Prefer txt)\" | say > /dev/null 2>&1 & echo $!")
Beachten Sie die Hauptunterschiede zwischen dem Befehl innerhalb des do shell script "..."
Befehls in Ihrer Frage und meiner Antwort.
echo \"[[volm 0.35]]
wird vor hinzugefügt LANG=...
und beachten Sie das Leerzeichen nach ]]
.Das LANG=en_US.UTF-8 pbpaste -Prefer txt
ist jetzt eingeschlossen, in $(...)
dem die Befehlssubstitution verwendet wird, um im Wesentlichen zu verketten, was vor dem Befehl an die Pipe zurückgegeben wird .say
Sowie ein passendes schließendes wörtliches doppeltes Anführungszeichen \"
, vor dem Rohr zu say
, um mit dem in zu gehen echo \"[[volm 0.35]]
. Es hat in begrenzten Tests ohne die Verwendung der öffnenden und schließenden doppelten Anführungszeichen funktioniert, aber es ist wahrscheinlich besser, es in die doppelten Anführungszeichen einzuschließen, um etwas zu berücksichtigen, das die Shell versuchen könnte, unnötig zu erweitern .
Das heißt, auf meinem System funktionierte die Verwendung 0.35
des Wertes in [[volm 0.35]]
nicht gut, da es schwierig war, den Unterschied in der Lautstärke von meiner normalen Einstellung wahrzunehmen. Allerdings war der Unterschied 0.3
bei der Verwendung [[volm 0.3]]
bemerkenswert. (Dies ist einer der Gründe, warum ich [[volm 0.35]]
in meinem Eröffnungssatz „eg “ verwendet habe.)
einfache Antwort:
say "[[volm 0.04]] This is a sentence"
Mir scheint, dass 0,01 bis 0,04 die kleinere Lautstärkeausgabe ist.
Als ich 0,25 oder 0,35 versuchte, änderte sich die Lautstärke nicht.
Verschieben Sie einfach das erste doppelte Anführungszeichen:... "say [[volm 0.35]] This is a sentence"
In Terminal.app werden die Anführungszeichen überhaupt nicht benötigt und say [[volm 0.35]] This is a sentence
funktionieren einfach.
In Ihrer Codezeile müssten Sie [[volm 0.35]]
den kopierten Text voranstellen.
Im Terminal würde die folgende Zeile funktionieren:
cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
aber ich bekomme das in Ihrer AppleScript-Zeile nicht richtig zum Laufen - wahrscheinlich muss ich ein oder mehrere Elemente maskieren.
Rubiks Sphäre
[[volm 0.35]]
die von mir bereitgestellte Codezeile gehört.Benutzer3439894
cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
gut funktioniert , funktioniert es nicht in einer Shell , die AppleScript verwendet. Ich glaube also nicht , dass es damit zu tun hat , irgendeinen Teil dieses speziellen Befehls zu umgehen . Wenn Sie Terminal öffnen, vorausgesetzt, es ist die Standard- Shell , , und eingeben und die Eingabetaste drücken , und dann denselben Befehl ausführen , wird der Fehler mit ausgegeben , genau wie in AppleScript. Es sieht so aus, als ob die Shell Process Substitution nicht mag.bash
sh
bash
sh
sh: syntax error near unexpected token `('
sh
Benutzer3439894
bash -c
, um ihn tatsächlich in einer Shellset this_say_Pid to (do shell script "bash -c \"cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say > /dev/null 2>&1 & echo $!\"")
auszuführen , funktioniert der Befehl dann ordnungsgemäß, aber Sie erhalten nicht die des Befehls , was dann natürlich den Zweck verfehlt. Hoffentlich kann Rubiks Sphäre das verwenden, was ich in meiner Antwort vorgeschlagen habe, wenn es keine andere Möglichkeit gibt, dies gemäß Ihrem Vorschlag zu tun.bash
say
pid
say
Benutzer3439894
sh
Shell mit Process Substitution hatte,<(...)
und eine Lösung anzubieten,pbpaste
indem ich stattdessen Command Substitution verwende$(...)
, wie in meiner aktualisierten Antwort gezeigt, die immer noch meine ursprüngliche Antwort enthält, da dies einen anderen Weg zeigt, dies zu erreichen dasselbe, allerdings zwei Codezeilen statt einer. :)