macOSでPythonから録音権限

マイクの権限とかどうするのかと思ったので、AIさんにテストコードを書いてもらう。

 % mkdir mic-test && cd mic-test

 % uv venv

 Using CPython 3.13.1

 Creating virtual environment at: .venv

 Activate with: source .venv/bin/activate

% uv pip install sounddevice numpy

 Resolved 4 packages in 319ms

 Prepared 4 packages in 262ms

 Installed 4 packages in 11ms

+ cffi==2.0.0
+ numpy==2.3.3
+ pycparser==2.23
+ sounddevice==0.5.2

 % vi mic_check.py

 % cat mic_check.py

 import sys, wave

 import numpy as np

 import sounddevice as sd

DURATION = 3.0
FS = 48000
OUT = "mic_test.wav"

 def main():

 print("録音開始({} 秒)…".format(DURATION))

 try:

data = sd.rec(int(DURATION * FS), samplerate=FS, channels=1, dtype='int16')

 sd.wait()

 except Exception as e:

 print("録音エラー:", e)

 print("対処: システム設定 > プライバシーとセキュリティ > マイク で Terminal を許可。")

 sys.exit(1)

peak = int(np.max(np.abs(data)))
rms = float(np.sqrt(np.mean((data.astype(np.float32))**2)))

 print(f"録音完了: peak={peak}, rms≈{rms:.1f}")

 with wave.open(OUT, "wb") as wf:

 wf.setnchannels(1)

 wf.setsampwidth(2)

 wf.setframerate(FS)

 wf.writeframes(data.tobytes())

 print(f"WAV 保存: {OUT}")

if __name__ == "__main__":

 main()

 実行してみる。

 % uv run mic_check.py

 録音開始(3.0 秒)…

 録音完了: peak=372, rms≈35.4

 WAV 保存: mic_test.wav

 許可ダイアログ出た。

 なるほど、実行しているTerminalアプリに権限が付くのね。

 録音したファイルはできている模様。

 % file mic_test.wav

 mic_test.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hz

 % ls -alh mic_test.wav

-rw-r--r--  1 y.date  staff   281K  9 26 13:45 mic_test.wav

 この環境では、cvlcって入ってなかったかな...

 % cvlc mic_test.wav

 zsh: command not found: cvlc

 というわけで、VLCで普通に再生できた。

 % vlc mic_test.wav

 VLC media player 3.0.20 Vetinari (revision 3.0.20-0-g6f0d0ab126)

 Pythonそのものに権限をつけるような運用ではないということは理解した。

 100円投げ銭  https://kinneko.booth.pm/items/1963720


オリジナル投稿:
macOSでPythonから録音権限|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/10630315