AppleScript를 사용하여 macOS의 내장 텍스트 음성 변환 키보드 단축키 기능을 정확하게 재현하고 싶습니다. 내가 "정확하게"라고 말할 때, "정확하게"를 의미합니다.
내장 옵션은 시스템 환경 설정 → 받아쓰기 및 말하기 → 텍스트 음성 변환에서 찾을 수 있습니다.
이 기능에 대한 설명은 다음과 같습니다.
선택한 텍스트를 말하도록 키 조합을 설정하십시오.
이 키 조합을 사용하여 컴퓨터가 선택된 텍스트를 말하는 것을들을 수 있습니다. 컴퓨터가 말하는 중이면 키를 눌러 중지합니다.
이 기능을 단순히 사용하는 대신 재생성하려는 이유는 버그가 있기 때문입니다. 때로는 작동하지만 다른 경우에는 키보드 단축키를 누르면 아무 일도 일어나지 않습니다. AppleScript에서 수동으로 코딩하면 프로세스가 더 안정적이기를 바랍니다.
여기 설명 된대로 AppleScript에서 Speech를 시작하고 중지하는 방법을 이해합니다 .
그러나 동일한 키보드 단축키와 동일한 .scpt 파일을 사용하여 내장 음성 키보드 단축키의 기능을 반영하여 음성을 시작하고 중지합니다.
키보드 단축키로 FastScripts를 사용하여 .scpt 파일을 실행하고 있습니다.
동일한 .scpt 파일이 Speech 시작과 중지를 담당하는 경우, 스크립트는 AppleScript 상단에 if 문 또는 이와 유사한 것이 필요합니다. 발하다. 이 검사를 구현하는 방법 또는 가능한지 모르겠습니다.
그러나 여기 내가 가진 것이 있습니다.
if <This is where I need your help, Ask Different> then
say "" with stopping current speech
error number -128 -- quits the AppleScript
end if
-- Back up original clipboard contents:
set savedClipboard to my fetchStorableClipboard()
-- Copy selected text to clipboard:
tell application "System Events" to keystroke "c" using {command down}
delay 1 -- Without this, the clipboard may have stale data.
set theSelectedText to the clipboard
-- Restore original clipboard:
my putOnClipboard:savedClipboard
-- Speak the selected text:
say theSelectedText waiting until completion no
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
on fetchStorableClipboard()
set aMutableArray to current application's NSMutableArray's array() -- used to store contents
-- get the pasteboard and then its pasteboard items
set thePasteboard to current application's NSPasteboard's generalPasteboard()
-- loop through pasteboard items
repeat with anItem in thePasteboard's pasteboardItems()
-- make a new pasteboard item to store existing item's stuff
set newPBItem to current application's NSPasteboardItem's alloc()'s init()
-- get the types of data stored on the pasteboard item
set theTypes to anItem's types()
-- for each type, get the corresponding data and store it all in the new pasteboard item
repeat with aType in theTypes
set theData to (anItem's dataForType:aType)'s mutableCopy()
if theData is not missing value then
(newPBItem's setData:theData forType:aType)
end if
end repeat
-- add new pasteboard item to array
(aMutableArray's addObject:newPBItem)
end repeat
return aMutableArray
end fetchStorableClipboard
on putOnClipboard:theArray
-- get pasteboard
set thePasteboard to current application's NSPasteboard's generalPasteboard()
-- clear it, then write new contents
thePasteboard's clearContents()
thePasteboard's writeObjects:theArray
end putOnClipboard:
(원래, AppleScript가 말하기를 원했지만 the clipboard
이것이 원래 클립 보드 내용을 덮어 쓰고 있음을 깨달았습니다. 따라서 실제로 theSelectedText
위 코드에서 설명한 것처럼 AppleScript가 변수 의 내용을 말하고 싶습니다 .)
say
명령을 실행하고 있는지 알 수있는 방법이 있습니다. 와 판독 촬영ps
및lsof
이전을, 중 및 후에, 나는 사용 패턴을 분리 할 수 있었다diff
호출 프로세스에 연결하고 테스트하기 위해 코딩 할 수있는 놀이에 와서 파일로. 그러나 제안한 방법을 쉽게 사용하거나을pgrep say
얻는 데 사용 하기 때문에 방법을 선택했을 것PID
입니다.