
現在位置: Home > スマートフォン > Advanced W-ZERO3[es]でMortScriptを使った全通話録音
作成日時: 2007年 > 12月 > 17日 (最終更新日: 2008年03月24日 13時50分)
Advanced W-ZERO3[es]を購入したというのは以前の記事で書いたのですが、通話録音用に利用していたDenwaPlusが使えなくなってしまい手動でないと録音出来なくなってしまいました。そこで新たに自動的に録音する方法を考えてみました。
以前の記事:通話開始、終了を検知してくれる「DenwaPlus」で全通話録音
ちなみにW-ZERO3[es]では相手の声しか録音出来ませんでしたがAdvanced W-ZERO3[es]ではなんと自分の声も録音出来るようになっています。購入して本当に良かったです。
試してませんがHKEY_CURRENT_USER\Software\Sharp\PhoneApp\LockPhone が0でない時は通話中みたいなので、カラーで判定している部分をこのレジストリ値のチェックに変更した方が確実っぽいです。
MortScriptで一定秒数毎に電話アプリの特定の座標の色をチェックして、特定の色になったら通話中とみなしNoteMを起動させ、録音開始ボタンをタップする。それと同時に終了を監視する別のスクリプトも起動させる。
終了監視スクリプトは、一定秒数毎に電話アプリをアクティブにし、先程と同じ座標の色をチェックし特定の色になっていなければ通話終了とみなし、NoteMの録音停止ボタンをタップし、NoteMを終了して自分自身も終了する。
通話中は通話時間 00:00:01のような表示がされるので、この文字が表示される部分の座標の色を監視して色が特定の色になっている場合は通話中だと判断しています。よって特定の座標というのは通話中の時のみにある色になる座標であればどこでもOKなはずです。この座標は横画面でも同じ座標で問題なさそうです。
通話中以外にもその座標の色が通話中と判断するときの色と同じになってしまってはいけない点に注意してください。(検証不足で今回紹介する座標が本当に前述の条件を完全に満たしているかはわかりません。)
私の場合の座標が他の環境でも同じように使えるかわかりませんので、念の為座標の調べ方を書いておきます。色については使用しているテーマにより異なるかもしれません。
ここで出した特定の座標の色が特定の色になっている場合は、通話時間の表示がされているっぽいと判断しています。通話中でないのにこの座標の色が特定の色になると録音が始まってしまいます。
以下に示すコードは私の端末で動けばいいやというのを前提に決め打ちしているところが多いので、自分の環境に合わせ修正しなければいけない点があります。
実際に私が使用しているコードから今回は関係ない部分を取り除き、解説を付けて公開していますので、このコード自体での動作を確認していません。
よってMortScriptの使い方がある程度わかる方、マニュアルを和訳して下さっているのでそこで調べられる方、私の拙い説明で理解出来るエスパーさんが対象になっています。動かなくても動くように自分で修正して下さい。
通話終了監視スクリプトは、一定秒数毎に電話アプリをちょっとアクティブにします。電話しながら作業をする方(特に文字入力をすることが多い方)の場合は、無駄な録音が入りますが待機時間を長めに設定した方がよいかと思います。
本体コード
#通話フラグ(0の場合通話していない状態)
flagd = 0
#常駐させる
While ( 1 )
#非通話状態の時は以下の動作
If ( flagd = 0 )
#電話アプリがアクティブで
If ( WndActive ( "電話 " ) )
#特定の座標の色が3236186(※私の場合)になっている場合
If ( ColorAt ( 92 , 409 ) = 3236186 )
#通話開始と判断し、後の処理のためフラグを変更する
flagd = 1
#通話終了監視スクリプトを起動する
Run ( "\Program Files\MortScript\Script\notem.mscr" )
EndIf
#電話アプリがアクティブだが特定の座標の色が3236186(※私の場合)になっていない場合は何もしない(次回ループへ)
EndIf
#非通話状態でない(=通話状態)の時は以下の動作
Else
#NoteMが起動していないなら
If ( WndExists( "NoteM" ) = 0 )
#監視スクリプトによりNoteMが終了されたようなので通話終了と判断し非通話状態のフラグをつける
#この動作の為通話中に手動でNoteMを終了させてもすぐに録音開始されてしまいます。
flagd = 0
EndIf
#NoteMが起動していないことない(=起動している)ならまだ録音中なので何もしない(NoteMが終了するまで何もしない)
EndIf
#ここで指定するくらいのミリ秒数毎に電話アプリがアクティブか確認されることになります
#短くしすぎるとシステムに負荷が掛かりすぎることになりかねないし
#長くしすぎると通話開始から録音開始までに時間が掛かったり(その間にアクティブウィンドウを電話アプリから変更していると録音自体されない可能性もあり)
#となるので自分で適切な値に変更してください。ミリ秒なことに注意。
Sleep ( 500 )
#最初に戻る=無限ループ
EndWhilenotem.mscr
#NoteMを起動して録音を開始させ、その後1分間隔で通話の終了を監視し、検知すればNoteMの録音を止め終了させる。
#NoteMを起動
Run ( "\Program Files\NoteM\NoteM.exe" )
#1450ミリ秒待機して
Sleep ( 1450 )
If ( Screen ( "portrait" ) )
#画面の向きがポートレイト(縦画面)なら下記座標(NoteMの縦画面時の録音開始ボタンの位置)をタップ
MouseClick ( 21 , 680 )
Else
#そうでない=ランドスケープ(横画面)なら下記座標(NoteMの横画面時の録音開始ボタンの位置)をタップ
MouseClick ( 30 , 364 )
EndIf
#1000ミリ秒待機して(ここはなくてもOK)
Sleep ( 1000 )
#電話アプリをアクティブにする(ここはなくてもOK)
Show ( "電話 " )
#無限ループにつき注意
While ( 1 )
#ここで指定したミリ秒ごとに電話アプリがアクティブになりますし、先の本体と合わせ
#負荷も掛かりますので無音やガサゴソ音が末尾に入るを覚悟のうえ
#私の場合長めに待機させています
#30000ミリ秒待機して
Sleep ( 30000 )
#後で戻すため現在のアクティブウィンドウを取得しておく
nowwindow = ActiveWindow()
#電話アプリをアクティブにし
Show ( "電話 " )
#切り替わり待ちの為100ミリ秒待機して
Sleep ( 100 )
#特定の座標の色が6201(※背景色)になっている場合は
If ( ColorAt ( 92 , 409 ) = 6201 )
#NoteM(というウィンドウタイトルのもの)をアクティブにする
Show ( "NoteM" )
#切り替わり待ちの為100ミリ秒待機して
Sleep ( 100 )
If ( Screen ( "portrait" ) )
#画面の向きがポートレイト(縦画面)なら下記座標(NoteMの縦画面時の録音停止ボタンの位置)をタップ
MouseClick ( 74 , 697 )
Else
#そうでない=ランドスケープ(横画面)なら下記座標(NoteMの横画面時の録音停止ボタンの位置)をタップ
MouseClick ( 69 , 358 )
EndIf
#NoteMの録音停止処理の為1500ミリ秒待って
#もっと待った方がいいかも
Sleep ( 1500 )
#NoteMを終了する
#停止ボタンを押さずに終了しても大丈夫かも?
Close ( "NoteM" )
#元々表示していたウィンドウに戻す
If ( WndExists ( nowwindow ) )
Show ( nowwindow )
EndIf
#このスクリプトの実行を終了させる
Exit
EndIf
#元々表示していたウィンドウに戻す
If ( WndExists ( nowwindow ) )
Show ( nowwindow )
EndIf
#特定の座標の色が6201(※背景色)になっていない間は無限にループ
EndWhile本体コードに適当な名前をつけて保存し、スタートアップに入れれば完了です。再起動してどこかに電話を掛けて動くかどうか確認して下さい。
アクティブウィンドウのチェック後、次の動作までに手動でタスク切替などするとおかしなことになる場合ありますので、気になる方は工夫して下さい。
忙しくてサイトの更新も手付かずの状態になっております。ご報告頂いても対応出来ない可能性が高い為、大変恐縮ですがバグがあってもご自分で修正をお願い致します。
古い記事 :Advanced W-ZERO3[es]を買いました
新しい記事:あけましておめでとうございます
古い記事 :ゲームするのにスペックは重要
新しい記事:あけましておめでとうございます
http://www.ezinfo.jp/doc/2007/12/17/advanced-w-zero3es%e3%81%a7mortscript%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e5%85%a8%e9%80%9a%e8%a9%b1%e9%8c%b2%e9%9f%b3-996.html/trackbackコメントは管理者の承認後に表示、トラックバックは言及リンクのある場合表示されます。
ezinfo:
2007.12.18. at 5:38:22
ブログの制限でコード中の円マークが消えてしまっております。すいません。
ezinfo:
2007.12.20. at 5:25:27
サスペンド中に電話を受けた場合はうまく動かないかも・・・^^;
ezinfo:
2007.12.25. at 21:18:32
Run(“、、、notem.mscr”)の前後あたりにVibrate(300)とかいれるとガチャブル機能になって良い感じです。
ezinfo:
2007.12.28. at 8:38:21
気付かなかったのですがNoteMだとプツプツ音が切れますね。VitoAudioNotesなんかがいいかも。私もこれから乗換えを試してみます。
http://smartkobo.blog112.fc2.com/blog-entry-73.html
レジストリで通話中か判定できるみたい。
こんな方法があったなんて・・・ぱおーん
ezeze:
2008.1.26. at 6:50:14
通話終了時に時刻を取得して、ファイル名を変更するように改造。
ついでに、通話相手の電話番号を取得したいのだが、何とかならないだろうか?
ezinfo:
2008.1.28. at 13:52:33
後者は通話終了後に\Windows\Calledhistory.datと\Windows\Callinghistory.datの更新日時を比較して最近更新された方を開いて番号を取得させてみては如何でしょう。
前者は私もやりたかったのですがMortScript4.1でディレクトリ内のファイル一覧の取り方がわからず諦めました。
>ブログの制限でコード中の円マークが消えてしまっております。すいません。
こちら直っております。