Contexto:
Tengo un archivo AppleScript .scpt que dice el texto seleccionado en la Voz del Sistema. El texto seleccionado se copia en el portapapeles, y luego el texto se habla a través de la say
mando. El script se activa pulsando una tecla a través de FastScripts.
Dado que el volumen del Text-to-Speech de MacOS es demasiado alto por defecto (y no hay control de volumen global para el Speech), utilizo AppleScript para establecer el volumen como una fracción del volumen actual. Aprendí cómo lograr esto de este post:
¿Cómo cambiar el volumen de "say" en AppleScript?
Aquí está la parte de mi código que es relevante para mi pregunta:
set the clipboard to ("[[volm 0.35]] " & (the clipboard))
set this_say_Pid to do shell script "LANG=en_US.UTF-8 pbpaste -Prefer txt | say > /dev/null 2>&1 & echo $!"
El código anterior dice el texto del portapapeles a un volumen que es el 35% del volumen actual del sistema, que es lo que deseo. (Sí, el Habla audible es realmente así de alto por defecto).
El código funciona bien, pero he descubierto un error.
Cómo reproducir el fallo:
Para observar este error, copie el siguiente texto en el portapapeles y, a continuación, ejecute el código anterior:
- This is a test.
El problema es que el texto es difícil de formatear en Markdown (que es lo que usa Stack Exchange) porque 1) las nuevas líneas en blanco se eliminan automáticamente, y 2) una combinación de guión-espacio se convierte en una viñeta de lista. Esta es la razón por la que el formato del texto de arriba se ve torcido; tuve que usar una cita de bloque para evitar el problema uno, y tuve que añadir un bloque de código para evitar el problema dos.
Aquí está el problema-texto, literalmente deletreado en palabras (si quieres abrir un archivo de texto y recrear el texto):
newline
hyphen space Text
Asegúrese de incluir la nueva línea en blanco cuando copie el texto en el portapapeles. Asegúrate de que hay un espacio entre el guión y la primera palabra del texto. De lo contrario, el error no aparecerá.
El texto-problema debe ser el principio del texto del portapapeles. Es decir, si el texto problemático se encuentra en medio o al final del texto del portapapeles, el error no aparecerá.
Formas adicionales de reproducir el fallo:
El guión (-) puede sustituirse por un guión (-) ( option + - ) o un guión (-) ( option + shift + - ), y el fallo seguirá apareciendo. Por lo que he encontrado en mis pruebas, no hay otros símbolos de puntuación que puedan ser sustituidos por el guión que desencadenen el error.
Hay otra forma de activar el error, que no implica ni guión ni raya. Si el texto va precedido de al menos 2 caracteres de nueva línea, el error aparecerá.
Por ejemplo:
-
Si hay 1 carácter de nueva línea, el error no aparecerá.
-
Si hay 47 caracteres de nueva línea sobre el texto, aparecerá el error.
No importa si hay espacios entre los más de 2 caracteres de nueva línea y el texto; el error aparece de cualquier forma.
El efecto del bicho:
-
Al ejecutar el código AppleScript con el texto problemático en el portapapeles, el volumen no se reduce ni un ápice; se hablará con el nivel de volumen del sistema.
-
Además, hay un retraso notable antes de que se pronuncie el texto.
Para ser claros, aunque el contexto de mi pregunta es un archivo .scpt, esto no es técnicamente un error de AppleScript. El error existe cuando se utiliza say
directamente en Terminal.app. Por ejemplo, escriba lo siguiente en Terminal para reproducir el error:
say "[[volm 0.35]]
- This is a test."
¿Es posible remediar este error para que, cuando el contenido del portapapeles comience con cualquier tipo de texto problemático, mi script siga siendo sensible al volumen personalizado y no se introduzca un retardo?
0 votos
Gracias por llamar mi atención sobre ello. Era una errata que acabo de corregir. Sí, soy capaz de reproducir el error desde dentro script Editor.app, mediante la sustitución de la primera línea con la siguiente línea de código:
set the clipboard to ("[[volm 0.35]] " & ("\n- This is a test."))
0 votos
Aunque mi edición más reciente se publicó después de que usted publicara su "Bien, después de algunas pruebas..." comentario, en realidad estaba trabajando en esta edición y descubrí la revelación de la nueva línea antes de leer tu comentario. Fue una coincidencia.
0 votos
Respecto a tu segundo comentario, mi script coge el texto seleccionado y lo pone en el portapapeles. No es tan frecuente que el texto seleccionado comience con más de una nueva línea o un
newline + hyphen/dash + space
. Pero es lo suficientemente frecuente como para que sea una molestia y merezca la pena dedicarle energía a crear un puesto para resolver el problema. El habla a todo volumen es muy sorprendente. No es me necesariamente que está empleando el texto-problema; es cualquier selección de texto que existe que contiene el texto-problema. Preferiría que mi script no tuviera este bug, porque el texto que selecciono es impredecible.