なんだそのまんまやん。struct/records は限定されていたのか。アレ以外使ったこと無いから知らんかったw 0602名称未設定2015/10/03(土) 10:56:11.97ID:YP/PCEMt0 OS X 10.10 Release NotesのScripting Additions の解説にsayを使用した例: app = Application.currentApplication() app.includeStandardAdditions = true app.say('Hello world') app.displayDialog('Please enter your email address', { withTitle: 'Email', defaultAnswer: 'your_email@site.com' }) があります。emailの入力部分を音声認識Dictationを 使用するjavascriptも可能なのでしょうか? 実際に作成 したいスクリプトは、英語授業で、英語の質問をsayで 聞かせて、生徒にその解答を英語で発音させて、正しく 認識できれば正解、とする英会話練習ソフトウェアです。 0603名称未設定2015/10/03(土) 12:12:42.47ID:6N6av+ju0>>602 どこまで生徒にやらせないによるだろうな。キーボードによる不正(?)とか Cocoaにアクセスできればより先が開けるだろうね 0604名称未設定2015/10/03(土) 22:32:34.51ID:dkBh6mTx0>>602 JavaScript OSA から使える音声認識API はあるかってことだね。
まずはAppleScriptでSpeechRecognitionServerっていうのを通してOS Xの音声認識機能を使える。あらかじめ登録した単語や文章しか認識できない。 認識するなあ、ってところまでしか試してないので、想定してるようなアプリを作るような使い方ができるかどうかまではわからない。あとJavaScript OSA から使えるかどうかは調べてないのでわからない。
次にJavaScriptからはHTML 5のWeb Speech APIっていうのを使える。こちらは登録してない文章でもちゃんと認識する。"My name is Mike Smith." と発話したら「my name is mike スネーク」と認識したw こちらもJavaScript OSA から使えるかどうかは調べてないのでわからないけど、たぶん使えない。 でもテキスト読み上げもできるので、こちらを使ってWebアプリケーションとして実装しちゃうのが楽かも。あとこのAPIに対応しているブラウザのバージョンが限られているので、学校とかで使うんならそこは要確認かも。 0605名称未設定2015/10/03(土) 22:48:47.94ID:dkBh6mTx0 ところで目的は発問と解答のサイクルを対話型で行うことだろうか、それとも音声認識できるような正確な発音を対話形式で生徒に練習させることだろうか。 音声認識ってけっこう正確な発音をしないと認識しないと思うので、前者目的の場合、解答は正解でも発音のせいで正解と認識してくれないとか、あるいは間違った解答なのに音声認識させようとして一生懸命何回も発声するようなシチュエーションがありそうに思うが。 0606名称未設定2015/10/03(土) 23:40:16.83ID:aEqyyNFD0 SpeechRecognitionでの認識/目的はコマンドとしてみたい。なので事前に登録した単語=コマンドのよう 音声入力は DictationIM というインプットメソッドによる。音声認識の根幹は同じかもしれないが
tell application process と直接アプリ名をつかう場合(下記のクロームのような形式)の区別もよくわかりません tell application "Google Chrome"使い分けがおかしいのでしょうか?
-- ↓がうまくいかない。 -- 最前面のアプリにキーストロークを送る set topProcess to item 1 of (every process whose background only is false and frontmost is true) tell application process topProcess keystroke "c" using {command down} end tell 0616名称未設定2015/11/10(火) 00:49:23.10ID:8POt4B1s0>>615 スクリプト実行してる時点でスクリプトエディタか そのスクリプトのアプリケーションが最前面に来るから キーストローク使うにはactivateで目的のアプリケーションを最前面に持ってこないと。 UI elements(ボタンやメニューなど)にアクセスしないならprocessは不要。
tell application "Google Chrome" to activate tell application "System Events" keystroke "c" using {command down} end tell
こっちなら背面にあってもコピれる。 tell application "Google Chrome" copy selection of tab 1 of window 1 end tell 0617名称未設定2015/11/10(火) 03:12:25.57ID:FJLTXxkF0>>616 有益なレスありがとうございます。
(*
tell application "Google Chrome" to activate tell application "System Events" keystroke "c" using {command down} end tell *)
↑これを試すとうまくいき、クロームの選択範囲がコピーできました。
でも、スクリプトエディタの用語辞書を読むと、 System Events にキーストロークが送られて、クロームの選択範囲をコピーでいないような気がするのですが違うのでしょうか。
用語辞書 keystroke v : cause the target process to behave as if keystrokes were entered 0618名称未設定2015/11/10(火) 04:19:50.06ID:/h7Zu6C90 物理的にVキーを押すのが System Events にVを送ると言う事だろ 0619名称未設定2015/11/10(火) 07:57:36.97ID:8POt4B1s0 あと、Applescript対応アプリケーションで同じ機能があるなら そっちを使う事をオススメする。 System Events経由だと実行中に何か操作しちゃうと思いも寄らぬ挙動をするので。 コマンド+xとか入ってて、そのキーストローク実行前に 他のアプリケーションに切り替わっちゃったりしたら大変でしょ。 0620名称未設定2015/11/10(火) 11:53:02.16ID:LHRISVKD0>>617 基本的にユーザが手でキーを押すのとまったく同じ挙動 何が反応するかは状況次第 0621名称未設定2015/11/14(土) 22:05:07.19ID:2cEuQzhU0>>613 今更だけど
keystroke "1" はテンキーの"1"を指すんじゃなかったかな あと key up control は key down control の後で使うもんであって、 keystroke 文字 (key code コード) using control down は一行で完結してるので念 0622名称未設定2015/11/14(土) 22:08:22.89ID:0scHotXW0 仏の鉄 0623名称未設定2015/11/14(土) 22:11:41.36ID:3tNdYBQ/0 chill 0624名称未設定2015/11/16(月) 21:22:55.55ID:SAOPgBo80 OS9くらいからAppleScript触ってるけど素人です。 JavaScriptはさっぱりなんですが、乗り換えた方がいいんでしょうか? 0625名称未設定2015/11/16(月) 21:29:21.10ID:t0VrsL6R0 それだけ長年触ってて理解できないようじゃJSなんてもっと無理だろ…… 0626名称未設定2015/11/16(月) 21:45:29.24ID:EmiWRZhr0 他に馴染んでる言語があるとか文字列を操作することが多いとかなら JavaScriptの方がずっと楽だと思うよ 0627名称未設定2015/11/16(月) 21:54:09.48ID:EmiWRZhr0 ああでもアップルのことだからいつまで続けるかわかんないよねw 0628名称未設定2015/11/17(火) 06:26:10.94ID:1ouHt1MU0 JavaScriptはオブジェクト指向の考え方が ある程度わからないと理解しにくい部分はありそう
例えば、duplicate コマンドの引数に何を指定するかエイリアス? posixパス? それとも hfs 形式? 移動先はフルパスを指定するのか、移動先フォルダを指定するのかとかも書いてなくて、簡単そうなとこで詰まりまくりです 0647名称未設定2015/11/24(火) 22:55:00.77ID:vOhllC2P0>>646 >duplicate v : Duplicate one or more object(s) >duplicate specifier : the object(s) to duplicate >[to location specifier] : the new location for the object(s)
set srcFile to (POSIX file bkItemFullpathText) set destDir to (path to desktop folder)
tell application "Finder" log "----- 3 finder で 処理開始-----" -- これがだめ — 上書きしない設定に変更できずこまった -- duplicate srcFile to destDir with replacing false
-- 下記2つは動く -- duplicate srcFile to destDir without replacing duplicate srcFile to destDir with replacing end tell 0650名称未設定2015/11/25(水) 02:34:16.75ID:TCaMN6bP0 shellのほうが楽そうだな 0651名称未設定2015/11/25(水) 11:14:05.31ID:gljbLSkV0>>649 set srcFile to bkItemFullpathText as POSIX fileにすればtell〜内で動く。
それより、AでできるのにBの記述にできなくて何が問題? A : duplicate srcFile to destDir without replacing B : duplicate srcFile to destDir with replacing false 0652名称未設定2015/11/25(水) 12:08:05.39ID:DGBNKIrw0>>649>>651 ちゃんと用語辞書読めばそんな書き方はないとわかる > [replacing boolean] : Specifies whether or not to replace items (ry B はよけいな with がいかん > duplicate srcFile to destDir replacing false こう書けば普通に動く(コンパイル時に without の記法に直されるが)
どうでもいいが、without の記法が気に入らないならこうすればコンパイル通る > set isFalse to false > duplicate srcFile to destDir replacing isFalse 0653名称未設定2015/11/26(木) 22:25:10.93ID:EikmtUER0>>651 レスありがとうございます。
理由がよくわからないのですが、as を使わないと finder のfile オブジェクトととして解釈されて動かないということでしょうか?
set i to 2 repeat tell application 0669名称未設定2016/01/21(木) 00:32:22.07ID:4rMo+FcO0 構文エラー expression、property または key form など があるべきところですが end of script が見つかりました。 0670名称未設定2016/01/21(木) 01:45:11.58ID:DbKP7fYg0 set i to 2 repeat tell application "Finder" to set isItemExists to exists (my POSIX file fullpathText) if {isItemExists = false} then log "存在しない" exit repeat else -- 存在するときの処理 set k to (i as text) -- date_k_baseName -- /Users/Yuu/Desktop/2016_01_21_test.txt set fullpathText to destDir & baseDateStr & k & "_" & baseNameStr end if set i to i + 1 end repeat return fullpathText 0671名称未設定2016/01/21(木) 02:03:39.34ID:DbKP7fYg0>>668 です。文法が怪しいところをハンドラにして書き方変えたら自己解決しました。 >>670はif文がなぜか常に "存在しない" の方に行く。
下記なら理由はよくわからないがうまくいく。 on fileExists(fullpathText) tell application "System Events" if exists file fullpathText then return true else return false end if end tell end fileExists 0672名称未設定2016/01/21(木) 09:41:56.94ID:sgs/8VkY0 if {isItemExists = false} then <- なんで{}とか使ってんの? そもそも閉じる必要もないし。 0673名称未設定2016/01/21(木) 11:22:21.54ID:ID6h33Zz0 以前AppleScriptの仕様に文句言ってた人では 見切りつけて使うのをやめたんじゃなかったのか 0674名称未設定2016/01/25(月) 23:43:26.79ID:2FBTd4al0 作業完了時にチャリーンと音を鳴らすにはどうするのが良いでしょうか?
tell application "System Events" set app_name to name of first item of (every application process that (frontmost is true)) tell process app_name set a_win to (1st item of (every window that subrole is "AXStandardWindow")) set position of a_win to {20, 60} set size of a_win to {1600, 1200} end tell end tell 0684名称未設定2016/01/31(日) 00:50:08.78ID:H6u9ib8G0 tell application "System Events" tell process "アプリ名" tell front window set position to {x, y} set size to {w, h} end tell end tell end tell で行けんじゃないの 0685名称未設定2016/01/31(日) 19:25:53.91ID:T2G1Wg900 Mailソフトでフィルタリングされた迷惑メール複数をmeiwaku@dekyo.or.jpに添付ファイルとして、転送できるようなAppleScriptって書けないものでしょうか?