Как изменить громкость «сказать» в AppleScript?

5

Вот строка из моего 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строку, громкость не меняется.

сфера рубика
источник

Ответы:

5

Поскольку вы передаете вывод 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]]» в своем первом предложении.)

user3439894
источник
1

Просто переместите первую двойную кавычку: ... "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 - возможно, мне нужно экранировать один или несколько элементов.

klanomath
источник
Извините, мне было не ясно. Я пытаюсь выполнить изменение громкости с помощью AppleScript, а не в терминале напрямую. Я не знаю, где [[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 оболочка не любит процесс подстановки.
user3439894
В то время как можно было бы предварить эту команду с 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 команды , которая, конечно , тогда побеждает цель. Надеюсь, сфера Рубика может использовать то, что я предложил в своем ответе, если нет другого способа сделать это в соответствии с вашим предложением.
user3439894
Хорошо, я нашел способ обойти проблему, возникающую в sh оболочке при замещении процессов, <(...)и предложить решение pbpaste, использующее вместо $(...)этого использование подстановки команд , как показано в моем обновленном ответе, который по-прежнему включает в себя мой первоначальный ответ, поскольку он показывает другой способ выполнения То же самое, хотя две строки кода вместо одной. :)
user3439894
0

простой ответ:

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

Сдается мне, что от 0,01 до 0,04 меньше объем выпуска.

При попытке 0,25 или 0,35 громкость не изменилась.

S.Doe_Dude
источник