Wie ändere ich die Lautstärke von "Sag" in AppleScript?

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 sayim Terminal mit dem folgenden Code erfolgreich verringern:

say "[[volm 0.35]] This is a sentence"

Aber wenn ich [[volm 0.35]]meine do shell scriptSaite einfüge, ändert sich die Lautstärke nicht.

Antworten (3)

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 txtist 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.35des 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.3bei 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 sentencefunktionieren 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.

Entschuldigung, ich war nicht klar. Ich versuche, die Lautstärkeänderung mit AppleScript zu erreichen, nicht direkt im Terminal. Ich weiß nicht, wohin [[volm 0.35]]die von mir bereitgestellte Codezeile gehört.
Einige Gedanken und Beobachtungen... Während , so wie es ist, in einer Shellcat <(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 bashshsh: syntax error near unexpected token `('sh
Während man diesem Befehl z. B. voranstellen könnte 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 pidsay
Okay, ich habe einen Weg gefunden, um das Problem zu umgehen, das die sh Shell mit Process Substitution hatte, <(...)und eine Lösung anzubieten, pbpasteindem 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. :)