7 votos

¿Cómo cambiar el volumen de "say" en AppleScript?

Aquí hay una línea de mi AppleScript que dice 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 voz fuera mucho más bajo. Preferiría no conseguirlo disminuyendo el volumen general de mi sistema.

Puedo disminuir con éxito el volumen de say en el 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 el volumen no cambia.

6voto

user3439894 Puntos 5883

Dado que usted es tuberías la salida del pbpaste comando directamente a say comando entonces, por ejemplo [[volm 0.35]] tendría que ser una parte de lo que está en el portapapeles como, por ejemplo [[volm 0.35]] debe preceder al contenido de lo que realmente se va a decir.

Yo probaría a utilizar lo siguiente en lugar de lo que estás utilizando:

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 quiere seguir utilizando 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 $!")

Observe las principales diferencias entre el comando dentro del do shell script "..." comando en su pregunta y mi respuesta.

  • echo \"[[volm 0.35]] se añade delante de LANG=... y observe el espacio después de ]] .

  • El LANG=en_US.UTF-8 pbpaste -Prefer txt está ahora encerrado en $(...) que está utilizando la Sustitución de Comandos para, en esencia, concatenar lo que se hace eco a la tubo por delante de la say comando .

  • Así como una doble comilla literal de cierre coincidente \" Antes de la tubo a say para ir con el de echo \"[[volm 0.35]] . Funcionó en pruebas limitadas sin el uso de las comillas dobles de apertura y cierre, sin embargo, probablemente es mejor encerrarlo en las comillas dobles para tener en cuenta algo que el shell podría tratar de expandirse innecesariamente.

Dicho esto, en mi sistema usando 0.35 para el valor en [[volm 0.35]] no funcionaba bien en el sentido de que era difícil percibir la diferencia de volumen con respecto a mi configuración normal. Sin embargo, al utilizar 0.3 en [[volm 0.3]] la diferencia era notable. (Esta es una de las razones por las que utilicé "p. ej. [[volm 0.35]] " en mi frase inicial).

3voto

S.Doe_Dude Puntos 46

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é con 0,25 o 0,35 el volumen no cambió.

1voto

klanomath Puntos 19587

Basta con mover 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 funciona.


En su línea de código tendría que anteponer [[volm 0.35]] al texto copiado.

En Terminal funcionaría la siguiente línea:

cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say 

pero no consigo que esto funcione en su línea AppleScript correctamente - probablemente tengo que escapar uno o varios elementos.

0 votos

Lo siento, no he sido claro. Estoy tratando de lograr el cambio de volumen con AppleScript, no en la Terminal directamente. No sé dónde [[volm 0.35]] pertenece a la línea de código que he proporcionado.

0 votos

Algunas reflexiones y observaciones... Mientras que cat <(echo [[volm 0.35]] ) <(LANG=en_US.UTF-8 pbpaste -Prefer txt) | say tal cual, funciona bien en un bash shell No funciona en un sh shell que es lo que utiliza AppleScript. Así que no creo que tenga que ver con el escape de cualquier parte de ese particular comando . Si abre el Terminal, asumiendo que es el predeterminado shell , bash y escribió sh y pulse entrar en y luego ejecutar ese mismo comando , se produce un error con sh: syntax error near unexpected token `(' , lo mismo que en AppleScript. Parece que el sh shell no le gusta la Sustitución de Procesos.

0 votos

Aunque se podría adelantar que comando con bash -c Por ejemplo 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 $!\"") para ejecutarlo en un bash shell El say comando funcionará correctamente, pero no obtendrá el pid de la say comando lo que, por supuesto, anula el propósito. Espero que la esfera de rubik pueda utilizar lo que he sugerido en mi respuesta si no hay otra manera de hacerlo en la línea de su sugerencia.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X