Поскольку вы передаете вывод pbpaste
команды непосредственно в say
команду , то, например, [[volm 0.35]]
должно быть частью того, что находится в буфере обмена, например, [[volm 0.35]]
должно предшествовать содержанию того, что на самом деле должно было быть сказано.
Я бы попробовал использовать следующее вместо того, что вы используете:
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 $!"
Обновление: если вы хотите придерживаться использования pbpaste
, то этот пример команды должен работать:
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 $!")
Обратите внимание на основные различия между командой внутри do shell script "..."
команды в вашем вопросе и моим ответом.
echo \"[[volm 0.35]]
добавляется перед LANG=...
и обратите внимание на пробел после ]]
.
LANG=en_US.UTF-8 pbpaste -Prefer txt
Теперь заключена в $(...)
котором используется Подстановка команд в, по существу, конкатенации , что получает отражение в трубе впереди say
команды .
А также согласование закрытия Двойной кавычки \"
, перед трубой для того say
, чтобы пойти с одним в echo \"[[volm 0.35]]
. Он работал в ограниченном тестировании без использования открывающих и закрывающих двойных кавычек, однако, вероятно, лучше заключить его в двойные кавычки, чтобы учесть то, что оболочка может попытаться излишне расширить.
Тем не менее, в моей системе использование 0.35
значения in [[volm 0.35]]
не сработало, так как трудно было понять разницу в громкости по сравнению с моими обычными настройками. Однако использование 0.3
в [[volm 0.3]]
разнице было заметно. (Это одна из причин, почему я использовал «например [[volm 0.35]]
» в своем первом предложении.)
[[volm 0.35]]
находится строка кода, которую я предоставил.cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
, как есть, работает нормально вbash
оболочке , она не работает вsh
оболочке , которую использует AppleScript. Поэтому я не верю, что это связано с тем, чтобы избежать какой-либо части этой конкретной команды . Если открыть терминал, при условии , что по умолчанию оболочка ,bash
и напечаталsh
и нажмите войти , затем выполнить ту же самую команду , это ошибки сsh: syntax error near unexpected token `('
, так же , как и в AppleScript. Похоже,sh
оболочка не любит процесс подстановки.bash -c
, напримерset 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 $!\"")
, на самом деле запустить его вbash
оболочке , тоsay
команда будет работать должным образом, но вы не получитеpid
отsay
команды , которая, конечно , тогда побеждает цель. Надеюсь, сфера Рубика может использовать то, что я предложил в своем ответе, если нет другого способа сделать это в соответствии с вашим предложением.sh
оболочке при замещении процессов,<(...)
и предложить решениеpbpaste
, использующее вместо$(...)
этого использование подстановки команд , как показано в моем обновленном ответе, который по-прежнему включает в себя мой первоначальный ответ, поскольку он показывает другой способ выполнения То же самое, хотя две строки кода вместо одной. :)простой ответ:
Сдается мне, что от 0,01 до 0,04 меньше объем выпуска.
При попытке 0,25 или 0,35 громкость не изменилась.
источник