[AutoHotKey]音を鳴らそう!SoundPlayでタイマーをカスタマイズ

『サンプラー』ってご存知でしょうか。音を登録(サンプリング)しておいて、ボタンを押すとその音が鳴る道具。例えばこんな感じのものです。


Roland ローランド コンパクトサンプラー SP-404SX

もちろんPC用などのソフトウェアでも、探せば数多くあります。会社の忘年会などで「ドラムロールやファンファーレを流したことがある」という方もいるかもしれません。

このサンプラー、実は簡易的なものならAutoHotkeyで作ることができます。

今回はSoundPlayコマンドを使って、mp3などの音源を再生する方法を見ていきましょう。最終的には前回作成したシンプルタイマーにこの機能を応用し、時間が経過すると音で知らせてくれるタイマーに仕立ててみたいと思います。

音を鳴らしてみる

最初に単純なコードを試してみましょう。キーを押すと、指定された音源が流れるスクリプトです。

!F14::SoundPlay, *16

今回はAlt+F14をトリガーとして使用しています。いつものことですが、トリガーキーは好きなものを指定してください。

キーを押すとWindowsの一般的な警告音が流れるはず。今回の主役は、このSoundPlayです。

SoundPlay

SoundPlay, Filename [, wait]
;メディアファイルを再生する

SoundPlayはFilename、waitという引数を取り、Filenameで指定したメディアファイルを再生するコマンド。

引数

このコマンドは最低1つ、最大でも2つの引数しか取りません。

仮引数名
Filename (必須)メディアファイルのパスや、「*数値」*16 | some.mp3
waitSoundPlayコマンドの後のコードを実行するか(無し) | 1

このうちFilename引数は必須であり、ファイルへのパスや「*」(アスタリスク)+数値が入ります。アスタリスク+数値の場合は、Windowsのシステムサウンドが流れます。

数値サウンド
*-1警告
*16問い合わせ
*48警告 (Windows10の環境では、*-1と同じ)
*64情報 (Windows10の環境では、*-1と同じ)

上のサンプルコードではこのシステムサウンドを再生しました。

mp3ファイルを再生する

次にFilename引数にパスを指定して、音源ファイルを再生してみましょう。お手持ちのmp3ファイルや、またはwavファイルでかまいません。

僕は今回こちらのサイトから短時間のmp3ファイルをダウンロードして、タイマーのアラームとして使用しました。
様々な音源が視聴できるので、ジングルやファンファーレなどの音源を探している方にもおすすめ。

BGM・ジングル・効果音のフリー素材|OtoLogic
5000点を超える高品質なBGM・ジングル・効果音のフリー素材が無料でダウンロード可能です。

ダウンロードしたファイルの名前を「jingle01.mp3」として、現在起動しているahkファイル(ここではmain.ahk)と同じディレクトリに置きます。
ご自分のmp3ファイルを使う場合は、そのファイル名に合わせてください。

AutoHotkeyのフォルダ
├── main.ahk
└── jingle01.mp3

そして最初のコードをこんな風に書き換えます。

!F14::SoundPlay, jingle01.mp3

リロードして実行すると、指定した音源が再生されるはずです。

このようにFilenameにファイルのパスを指定することで、任意のメディアファイルを再生することができます。

パスの指定について:

パスは絶対パス、相対パスどちらでもかまいませんが、相対パスの場合は%A_WorkingDir%からの相対パスになります。
相対パスで正しく動作しない場合は絶対パスを指定するか、%A_WorkingDir%のパスを確認してください。

タイマーをカスタマイズ

ではこの機能を、前回作成したシンプルタイマーに応用したいと思います。このタイマーのコードもメインファイルとは別のファイル。詳細は以下を確認してください。

[AutoHotKey]InputBoxで作る超シンプルタイマー
「ご飯が炊けるまでの時間でパソコン作業したい」 そんなこと、ありますよね (紳士...

カスタマイズ後のコード全体はこうなります。

InputBox, Min, 簡易タイマー, 時間を設定してください, , , , , , , , 5
Timer := Min * 60000

If(ErrorLevel == 0){
    MsgBox, , タイマー開始, %Min%分カウントします..., 2
    Sleep, %Timer%
    SoundPlay, jingle01.mp3
    ExitApp
}else{
    ExitApp
}

7行目、Sleepの後にはToolTipの代わりにSoundPlayを置き、音で時間経過を知らせてくれるよう変更しました。これで思った通りの動作になるでしょうか? 一度試してみましょう。

音、鳴りましたか? 鳴りませんよね。

これでは音は鳴りません。鳴るはずがないんです。なぜならSoundPlayが実行された瞬間、ExitAppによってタイマー自体が終了してしまうからです。

waitを指定してスレッドを停止する

ここで登場するのがSoundPlayのwait引数です。7行目に「, 1」を追加しましょう。

SoundPlay, jingle01.mp3, 1

リロードして実行すると、今度はきちんと再生されます。
このwait引数は「1」や「Wait」と指定することで、ファイルの再生が終了するまで次の行に移らず、処理の流れを一旦停止するという働きがあります。


これがWikiにも書いてある「現在のスレッドは停止する」の意味です。

SoundPlay - AutoHotkey Wiki
タイトルとURLをコピーしました