概要
シミュレーションや最適化など,時間のかかる重い計算が終わるのをPCの前に張り付いて待っていませんか? わたしの場合,終了したらすぐにつぎの作業に移りたいので,こちらのようなテクニックを使っています:
時間がかかる計算を裏で走らせながら作業するとき、mファイルの終わりに
— 非線形システム少女ところたん (@tokoro10g) 2017年5月23日
load handel.mat; sound(y,Fs)
と書いておくと、計算の終了と同時にハレルヤが流れて計算機近傍が神々しくなる
需要があるのか単にハレルヤがおもしろかったのかわかりませんが,微妙にウケたので記事にしておこうと思います. ハレルヤを流すほかにも,メールを送ったり,Twitterでつぶやいたりできるので,そちらも紹介したいと思います.
対象としているバージョンは R2015a 以降ですが,Twitterでつぶやくやつ以外はそれ以前のバージョンでもできます.
ハレルヤで知らせる
みんな大好き sound
コマンドを使います.
以下のコードを計算終了後の部分に記述しておけば,終了時にハレルヤがきわめてカジュアルに流れます.
副作用に注意
ただし,このままではプログラム本体にもし y
や Fs
が定義されていた場合,load
コマンドによって上書きされてしまいます.
ちょっとバッドノウハウな感じが出ますが,つぎのようにすることでこの問題を回避できます.
load('handel.mat','y')
は y
の入った構造体を返すので,structfun
で引っぺがしてから sound
コマンドに投げています.
この変更によって,音声再生の前後でプログラム本体の y
が変化することはなくなりました.
ハレルヤ関数をつくる
さらに,関数ハンドルを使うとこの処理をわかりやすくラップすることができます.
とファイル冒頭でしておけば,あとは
とするだけでハレルヤが流れる,ハレルヤ関数が完成します.
音を止めたい
音を止める際は clear sound
を実行しましょう.
参考: How to stop sound in MATLAB? - Stack Overflow
ハレルヤ以外の音で知らせる
audioread
関数を使えば,wavやmp3などの主要な形式の音声ファイルをMATLABに取り込むことができます.
Fs
の値が分かっている場合は副作用なしの方法として以下のコードが使えます.
これだけで,様々な音声ファイルを再生できます.
ちなみに handel.mat
のほかにも,chirp.mat
, gong.mat
, mtlb
などがサンプル音声として標準インストールされています.
特に mtlb
は,Signal Processing Toolbox 生みの親である Loren Shure の声っぽい音声で味があります.
メールを送る
sendmail
関数を使ってMATLABからメールを送信できます.
こちらは実際に送信できるかどうか試してから使用したほうが良いでしょう. SMTPサーバの情報がシステムから取得できない場合は送ってくれないので,手動でサーバの情報を設定する必要があります. 詳しくはドキュメンテーションを参照してください.
MATLABにつぶやかせる
MathWorksが提供しているThingSpeakというサービスを利用します.
ThingSpeakのThingTweet Appは,TwitterのAPIのうちつぶやくだけの処理をラップしてRESTful APIとして提供してくれるものです.
これを利用すると,MATLAB R2015a から導入された webwrite
関数を使うことで簡単にMATLABからTwitterに投稿することができます.
(セキュリティ的に若干どうなんだろうという面も無きにしもあらずなので,専用アカウントの作成をおすすめします.)
ThingSpeakアカウントの登録
MathWorksアカウントのメールアドレスとパスワードでログインして,規約に同意すれば完了です.
ThingTweet APIキーの取得
基本的にはここを参考にすればおっけーです.
参考: ThingTweet App - MATLAB & Simulink - MathWorks 日本
ThingSpeakにログインしたら,画面上のメニューから “Apps” を選択し,“Link Twitter Account” をクリックしてTwitterアカウントへのアクセス権限をわたします.
APIキーが発行されるので,これをコピーしておきます.
MATLABからツイートするコード
コピーしたキーを以下のコードに貼り付けてください.
今回は自分にシミュレーションが終わったことを通知したいので,data
に “@tokoro10g” を入れています.
各自のアカウントに書き換えましょう.
以上をMATLABで実行すると,こちらのようになります.
@tokoro10g MATLABからツイート
— 非線形システム少女ところたん (@tokoro10g) 2017年5月24日
投稿元情報を見ると “via ThingTweet” となっています.
応用例
音を鳴らす場合と違い,文字を使った通知の場合は補足情報の付加が簡単にできます.
先ほどのコードの data
変数に対して,たとえば tic
, toc
を使って
と書けば,シミュレーションの所要時間をつぶやかせることができます.
まとめ
- MATLABはいいぞ