Aquí hay una línea de mi AppleScript que habla el texto seleccionado:
set this_say_Pid to do shell script "LANG=en_US.UTF-8 pbpaste -Prefer txt | say > /dev/null 2>&1 & echo $!"
Me gustaría que el volumen de habla fuera mucho más bajo. Preferiría no lograr esto disminuyendo el volumen general de mi sistema.
Puedo disminuir con éxito el volumen de say
la Terminal con el siguiente código:
say "[[volm 0.35]] This is a sentence"
Pero, cuando inserto [[volm 0.35]]
en mi do shell script
cuerda, el volumen no cambia.
Dado que está canalizando la salida del pbpaste
comando directamente a say
command , entonces, por ejemplo [[volm 0.35]]
, debería ser parte de lo que está en el portapapeles, por ejemplo, [[volm 0.35]]
debe preceder al contenido de lo que realmente se iba a decir.
Intentaría usar lo siguiente en lugar de lo que está usando:
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 $!"
Actualización: si desea seguir usando pbpaste
, entonces este comando de ejemplo debería funcionar:
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 $!")
Tenga en cuenta las principales diferencias entre el comando dentro del do shell script "..."
comando en su pregunta y mi respuesta.
echo \"[[volm 0.35]]
se agrega delante de LANG=...
y tenga en cuenta el espacio después de ]]
.El LANG=en_US.UTF-8 pbpaste -Prefer txt
ahora está incluido en $(...)
el cual está usando Command Substitution para, en esencia, concatenar lo que se repite en la canalización antes del say
comando .
Además de una comilla doble literal de cierre coincidente \"
, antes de la tubería a say
, para ir con el que está en echo \"[[volm 0.35]]
. Funcionó en pruebas limitadas sin el uso de comillas dobles de apertura y cierre; sin embargo, probablemente sea mejor encerrarlo entre comillas dobles para tener en cuenta algo que el shell podría intentar expandir innecesariamente .
Dicho esto, en mi sistema, el uso 0.35
del valor en [[volm 0.35]]
no funcionó bien porque era difícil percibir la diferencia de volumen con respecto a mi configuración normal. Sin embargo, el uso 0.3
de [[volm 0.3]]
la diferencia fue notable. (Esta es una de las razones por las que usé "eg [[volm 0.35]]
" en mi oración inicial).
respuesta sencilla:
say "[[volm 0.04]] This is a sentence"
Me parece que de 0,01 a 0,04 es la salida de menor volumen.
Cuando probé 0.25 o 0.35 el volumen no cambió.
Simplemente mueva la primera comilla doble:... "say [[volm 0.35]] This is a sentence"
En Terminal.app, las comillas no son necesarias en absoluto y say [[volm 0.35]] This is a sentence
simplemente funcionan.
En su línea de código, tendría que anteponer [[volm 0.35]]
el texto copiado.
En Terminal, la siguiente línea funcionaría:
cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
pero no consigo que esto funcione correctamente en su línea AppleScript; probablemente tenga que escapar de uno o varios elementos.
esfera de rubik
[[volm 0.35]]
pertenece en la línea de código que proporcioné.usuario3439894
cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say
, tal como está, funciona bien en unbash
shell , no funciona en unsh
shell , que es lo que usa AppleScript. Así que no creo que tenga que ver con escapar de ninguna parte de ese comando en particular . Si abre la Terminal, asumiendo que es el shell predeterminado ,bash
y escribesh
y presiona enter , luego ejecuta el mismo comando , se produce un errorsh: syntax error near unexpected token `('
, al igual que en AppleScript. Parece que alsh
shell no le gusta la sustitución de procesos.usuario3439894
bash -c
, por ejemploset 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 $!\"")
, para ejecutarlo realmente en unbash
shell , elsay
comando funcionará correctamente pero no obtendrá elpid
delsay
comando , lo que, por supuesto, anula el propósito. Con suerte, la esfera de Rubik puede usar lo que sugerí en mi respuesta si no hay otra forma de hacerlo en la línea de su sugerencia.usuario3439894
sh
shell<(...)
con la Sustitución de procesos y ofrecer una solución mediante elpbpaste
uso de Sustitución de comandos$(...)
en su lugar, como se muestra en mi respuesta actualizada, que aún incluye mi respuesta original, ya que muestra otra forma de lograr el lo mismo, aunque dos líneas de código en lugar de una. :)