Вот строка из моего AppleScript, которая произносит выделенный текст:
set this_say_Pid to do shell script "LANG=en_US.UTF-8 pbpaste -Prefer txt | say > /dev/null 2>&1 & echo $!"
Я бы хотел, чтобы громкость речи была намного ниже. Я бы предпочел не делать этого, уменьшая общий объем системы.
Я могу успешно уменьшить громкость say
в Терминале с помощью следующего кода:
say "[[volm 0.35]] This is a sentence"
Но когда я вставляю [[volm 0.35]]
свою do shell script
строку, громкость не меняется.
Поскольку вы передаете вывод команды 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
командой .
А также совпадающая закрывающая двойная кавычка \"
перед каналом to say
, чтобы перейти к тому, что находится в echo \"[[volm 0.35]]
. Он работал в ограниченном тестировании без использования открывающих и закрывающих двойных кавычек, однако, вероятно, лучше заключить его в двойные кавычки, чтобы учесть то, что оболочка может попытаться расширить без необходимости .
Тем не менее, в моей системе использование 0.35
значения in [[volm 0.35]]
не работало хорошо, так как было трудно воспринять разницу в громкости по сравнению с моей обычной настройкой. Однако 0.3
при использовании [[volm 0.3]]
разница была заметна. (Это одна из причин, почему я использовал «например [[volm 0.35]]
» в первом предложении.)
простой ответ:
say "[[volm 0.04]] This is a sentence"
Мне кажется, что от 0,01 до 0,04 - это меньший выходной объем.
Когда пробовал 0.25 или 0.35 громкость не менялась.
Просто переместите первую двойную кавычку:... "say [[volm 0.35]] This is a sentence"
В Terminal.app кавычки вообще не нужны и say [[volm 0.35]] This is a sentence
просто работают.
В вашей строке кода вам нужно будет добавить [[volm 0.35]]
скопированный текст.
В Терминале будет работать следующая строка:
cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
но я не заставляю это правильно работать в вашей строке AppleScript - возможно, мне нужно избежать одного или нескольких элементов.
сфера рубика
[[volm 0.35]]
находится строка кода, которую я предоставил.пользователь3439894
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
оболочке не нравится замена процесса.пользователь3439894
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
пользователь3439894
sh
оболочка столкнулась с заменой процесса,<(...)
и предложить решение, используяpbpaste
вместо этого замену команд$(...)
, как показано в моем обновленном ответе, который все еще включает мой первоначальный ответ, поскольку он показывает другой способ выполнить то же самое, только две строки кода вместо одной. :)