Come spostarsi "dire" bug di comando quando si imposta il volume?

2

Contesto:

Ho un file .scpt di AppleScript che parla il testo selezionato in System Voice. Il testo selezionato viene copiato negli Appunti, quindi il testo viene pronunciato tramite il comando say . Lo script viene attivato tramite la pressione di un tasto tramite FastScripts.

Poiché il volume di sintesi vocale di macOS è troppo alto per impostazione predefinita (e non esiste un controllo globale del volume per il parlato), utilizzo AppleScript per impostare il volume come frazione del volume corrente. Ho imparato come ottenere questo da questo post:

Come modificare il volume di "say" in AppleScript?

Ecco la parte del mio codice che è pertinente alla mia domanda:

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 $!"

Il codice sopra riportato parla del testo degli appunti in un volume che corrisponde al 35% del volume di sistema corrente, che è quello che desidero. (Sì, il discorso udibile è davvero così strong per impostazione predefinita.)

Il codice funziona bene, tranne che ho scoperto un bug.

Come riprodurre il bug:

Per osservare questo bug, copia il seguente testo negli appunti, quindi esegui il codice sopra:

 

- This is a test.

Il testo problematico è difficile da formattare in Markdown (che è quello che usa Stack Exchange) perché 1) newline vuote vengono rimosse automaticamente e 2) una combinazione spazio-trattino viene convertita in un punto elenco. Questo è il motivo per cui la precedente formattazione del testo sembra stucchevole; Ho dovuto usare un blockquote per aggirare il problema uno, e ho dovuto aggiungere un blocco di codice per risolvere il problema due.

Ecco il problema-testo, scritto letteralmente in parole (se vuoi aprire un file di testo e ricreare il testo):

newline
hyphen space Text

Assicurati di includere la nuova riga vuota quando copi il testo negli Appunti. Assicurati che ci sia uno spazio tra il trattino e la prima parola del testo. In caso contrario, il bug non verrà visualizzato.

Il testo del problema deve essere l'inizio del testo degli appunti. Cioè, se il testo del problema si trova nel mezzo o alla fine del testo degli appunti, il bug non apparirà .

Altri modi per riprodurre il bug:

Il trattino (-) può essere sostituito da un trattino (-) ( ⌥ opzione + - ) o un trattino (-) ( ⌥ opzione + ⇧ shift + - ), e il bug continuerà a emergere. Per quanto ho trovato nei miei test, non ci sono altri simboli di punteggiatura che possono essere sostituiti per il trattino che attiverà il bug.

C'è un altro modo per attivare il bug, che non coinvolge un trattino o un trattino. Se il testo è preceduto da almeno 2 caratteri di nuova riga, il bug verrà visualizzato.

Ad esempio:

  • Se c'è un carattere di nuova riga, il bug non verrà visualizzato.

  • Se ci sono 47 caratteri di nuova riga sopra il testo, il bug verrà visualizzato.

Se ci sono spazi tra i 2+ caratteri di nuova riga e il testo non ha importanza; l'errore emerge in ogni caso.

L'effetto del bug:

  • Quando si esegue il codice AppleScript con il testo problema negli appunti, il volume non viene diminuito di un bit; gli appunti saranno pronunciati a livello di volume del sistema.

  • Inoltre, c'è un ritardo notevole prima che il testo venga pronunciato.

Per essere chiari, mentre il contesto della mia domanda è un file .scpt, questo non è tecnicamente un bug di AppleScript. Il bug esiste quando si usa say direttamente in Terminal.app. Ad esempio, digita quanto segue in Terminale per riprodurre il bug:

say "[[volm 0.35]]
- This is a test."

È possibile rimediare a questo bug, in modo che, quando il contenuto degli appunti inizia con qualsiasi tipo di testo problematico, il mio script rimanga sensibile al volume personalizzato e non venga introdotto un ritardo?

    
posta rubik's sphere 05.04.2017 - 02:15
fonte

2 risposte

2

La cosa migliore è mettere '[[volm 0.35]]' nella shell (non negli appunti), in questo modo:

set this_say_Pid to do shell script "say '[[volm 0.35]]\ '$(LANG=en_US.UTF-8 pbpaste -Prefer txt) > /dev/null 2>&1 & echo $!"

Oppure, se vuoi mettere " [[volm 0.35]] " negli appunti, usa le virgolette singole, in questo modo:

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 $!"
    
risposta data 05.04.2017 - 17:31
fonte
1

Basta aggiungere una virgola dopo la parte [[volm 0.35]] dello script della shell. Probabilmente non è richiesto uno spazio dopo la virgola.

set the clipboard to ("[[volm 0.35]], " & ("\n- This is a test."))

Questo elimina anche il secondo errore (trattino e testo senza separare lo spazio).

    
risposta data 22.04.2017 - 07:36
fonte