「Claude Code の回答完了時に音を鳴らしたい」という記事は n 番煎じですが、「Windows で追加ソフトをインストールせずにしっかり音を鳴らす方法」は探しづらいと思ったので、主に Windows 向けの方法を 4 つ書きます。最後の方法については Python スクリプトだけで音を鳴らす方法なので、OS 非依存です。
- 方法1. (Windows 向け)
Media.SoundPlayerで標準搭載音声を鳴らす - 方法2. (Windows 向け) 読み上げ機能
SAPI.SpVoiceを利用する - 方法3. (実質 Windows 向け) VLC Media Player で音楽を再生する
- 方法4. Python で音の波形データを生成して再生する
背景
Mac には読み上げコマンドや音楽再生コマンドがあるらしいですが、Windows には手軽なものはないと思います。Windows で音を鳴らす方法を調べると情報はありますが、人によっては以下の課題を感じるかもしれません。
- Windows でも Media.SystemSounds のシステム音を鳴らすコマンド
powershell.exe -Command "[Media.SystemSounds]::Hand.Play()"はシンプルだが、音が短く小さめ。 - システムに新しくソフトウェアをインストールするのは避けたい。
- 外部 PowerShell スクリプトは書きたくない。スクリプトなら Python で書きたい。
これらの課題を感じる方には以下の 方法1.~4. が役立つかもしれないです。というか私はこの記事を書いていて 方法1. を知ったのですが、これでじゅうぶんな気はします。
方法1. (Windows 向け) Media.SoundPlayer で標準搭載音声を鳴らす
この記事を書いているとき知ったのですが、Media.SoundPlayer で C:\Windows\media\ 以下にある .wav ファイルを鳴らすことができました。これは音が大きく長めです。この方法は「Claude Codeの終了通知音が静かすぎると思う人のための通知音ガイド|ハカセ」でも紹介されていました。なお、SoundPlayer は .wav ファイルでも形式を選ぶようで (参考)、手元にあった適当な .wav ファイルは鳴らすことができませんでした。元々 C:\Windows\media\ 以下にある .wav ファイルは鳴らすことができます (それだけでも色々あると思います)。
powershell.exe -Command "(New-Object Media.SoundPlayer 'C:\Windows\media\Alarm01.wav').PlaySync()"
"command": "powershell.exe -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\media\\Alarm01.wav').PlaySync()\""
方法2. (Windows 向け) 読み上げ機能 SAPI.SpVoice を利用する
Mac には読み上げコマンド say があるようですが、Windows にも読み上げ機能 SAPI.SpVoice があり、下記コマンドで「できた」と言ってくれます。「PowerShell で音を出したい(ビープ音・WAV ファイル・TTS) #PowerShell - Qiita」を参考にさせていただきました。
powershell.exe -Command "(New-Object -ComObject SAPI.SpVoice).Speak(\"できた\")"
"command": "powershell.exe -Command \"(New-Object -ComObject SAPI.SpVoice).Speak(\\\"できた\\\")\""
方法3. (実質 Windows 向け) VLC Media Player で音楽を再生する
VLC Media Player があれば、Windows でもお好きな音楽ファイルを再生できます。方法1. で紹介した C:\Windows\media\*.wav も再生できます (が、それなら 方法1. で再生できます)。お好きな音楽ファイルを再生したい人はこの方法がよいかもしれないです。
「新しくソフトウェアをインストールしたくないと言っておいて VLC Media Player をインストールしているじゃないか」と思うかもしれませんが、最近の Windows マシンでは Windows Media Player がデフォルトで隠されていたり DVD が再生できなかったりで、元々 VLC を入れている人もいると思います。私は DVD を見るため入れていました (n=1)。
なお、この方法は一応 OS 非依存ですが、Mac には afplay という音楽再生コマンドがあるようなので、それで再生できるならこの方法を取る意味はないと思います。
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --intf dummy --play-and-exit "C:\Users\yamada\chime.mp3"
"command": "\"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe\" --intf dummy --play-and-exit \"C:\\Users\\yamada\\chime.mp3\""
方法4. Python で音の波形データを生成して再生する
この方法は OS 非依存です。この Python スクリプトだけでメヌエットのメロディーなどが鳴ります (以前にこの記事で書いたコードを流用しました)。拘りがあれば好きなメロディーにもできます。必要パッケージは波形生成用の numpy と再生用の sounddevice だけです1。とはいえ、長めのメロディーを鳴らすなら Windows でも 方法1. でじゅうぶんだったので、Python が大好きとかメヌエットが大好きな人向けだと思います。
python "C:\Users\yamada\wave_generator.py"
"command": "python \"C:\\Users\\yamada\\wave_generator.py\""
~/.claude/settings.json の全体像
~/.claude/settings.json の "hooks" に以下のように記入しておくと、確認時と回答完了時に音が鳴ります (パスは適宜修正してください)。"Notification" については "matcher": "permission_prompt" に絞らないと 60 秒何もしなかったときにも音が鳴ります (ドキュメント)。Claude の回答確認中に音が鳴りうるさいので絞った方がいいと思います。
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{
"type": "command",
"command": "\"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe\" --intf dummy --play-and-exit \"C:\\Users\\yamada\\chime.mp3\""
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "\"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe\" --intf dummy --play-and-exit \"C:\\Users\\yamada\\chime.mp3\""
}
]
}
]
}
}
-
システム環境にパッケージを入れたくない場合は、uv のシングルスクリプトの依存関係管理機能などが活用できます。 ↩