マイクの権限とかどうするのかと思ったので、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



