🦉

Macの通知音を全部鳴らす :Claude Codeの通知音を決めよう

に公開

Hooks(Stop)で通知音を鳴らす

"command": "afplay /System/Library/Sounds/Glass.aiff"

他の音も聴きいて決めたい

  1. copy code
  2. vim mac_sounds.py
  3. uv run mac_sounds.py list -a
mac_sounds.py
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "click>=8.0.0",
# ]
# ///

import click
import subprocess
import time
from pathlib import Path

SOUNDS = Path("/System/Library/Sounds")

def play_sound(name):
    """Play system sound"""
    sound_path = SOUNDS / f"{name}.aiff"
    if sound_path.exists():
        subprocess.run(["afplay", str(sound_path)])
        return True
    return False

@click.group()
def cli():
    """🔊 Mac System Sounds"""
    pass

@cli.command()
@click.option('--play-all', '-a', is_flag=True, help='Play all sounds')
def list(play_all):
    """List system sounds (use -a to play all)"""
    sounds = sorted([f.stem for f in SOUNDS.glob("*.aiff")])
    
    if play_all:
        click.echo("🔊 Playing all sounds (Ctrl+C to stop):")
        try:
            for sound in sounds:
                click.echo(f"  {sound}")
                play_sound(sound)
                time.sleep(0.3)
        except KeyboardInterrupt:
            click.echo("\nStopped")
    else:
        for i, sound in enumerate(sounds, 1):
            click.echo(f"{i:2d}. {sound}")

@cli.command()
@click.argument('name')
def play(name):
    """Play system sound"""
    if play_sound(name):
        click.echo(f"🔊 {name}")
    else:
        click.echo(f"❌ {name} not found")

if __name__ == "__main__":
    cli()

先頭にコメントを書けば、pythonのバージョンや依存関係を指定できる(PEP 723)

links

https://peps.python.org/pep-0723/
https://zenn.dev/tomonr1984/scraps/609e1900bfd87a

Discussion