Macの音声の扱い

音声入力についてはまだキーボード入力?macOS Sonomaで強化された「音声入力」を活用しよう!が詳しい。

音声読み上げについては、普通にGUIでできるほか、コマンド派には say コマンドが便利である。say "Hello world" などとすれば読み上げてくれる。say -v '?' で声の一覧が出るので say -v Alex "Hello world" のように指定できる。GUIではシステム設定→アクセシビリティ→読み上げコンテンツと連動している。システムの声→声を管理…で追加できる。

音声ファイルはGUIのほか afplay コマンドでも再生できる。

Macのシステム音を別のアプリに入力したり録音したりするには、入力・出力の両方に指定できるオーディオループバックデバイス(仮想デバイス)が便利である。私はBlackHoleを使っている。brew install blackhole-2ch で入る。Soundflowerも人気らしい(Apple Silicon未対応?)。

BlackHole 2chをインストールすると、システム設定→サウンドにBlackHole 2ch(仮想)が入力・出力の両方に現れるので、両方でこれを選択すると、システム音がアプリの入力になる。例えばYouTubeを再生して、QuickTime Playerでファイル→新規オーディオ収録すると、録音できる。

出力を仮想デバイスにすると、音が聞こえない。これでは不便なので、Finder→アプリケーション→ユーティリティ→Audio MIDI設定を立ち上げ、左下の「+」をクリックし、「複数出力装置を作成」を選ぶ。作成できたら、右ペインで、通常の出力装置(例えば「外部ヘッドフォン」)とBlackHole 2chの両方の「使用」にチェックを付ける。こうすることによって、出力が二つに分岐される(いわゆるtee)。システム設定→サウンド→出力にも「複数出力装置」が現れるので、これを選んでおけば、聞きながら録音したりできる。

録音するためのアプリは、QuickTime Playerでもいいが、Audacityという昔からあるツールをインストールしておけば、システム設定をいじらなくてもBlackHoleを入力に設定でき、保存形式も選べる。

音声をテキストに文字起こしするには、私はwhisper.cppを使っている。上記のようにして保存した音声ファイルをWAV形式(16000Hz 1ch)にして入力すればテキスト化できる。変換にはFFmpegが便利である。

ffmpeg -i in.webm -ar 16000 -ac 1 -c:a pcm_s16le out.wav

のような感じでできる。AudacityならGUIで保存形式を選べる。

whisper.cppはソースコードでもらってきて(git clone https://github.com/ggerganov/whisper.cpp.git)コンパイル(make)し、モデル(ggml-large.bin とか)を別途ダウンロードしておく必要がある。起動例:

./main --language en --model models/ggml-large.bin --file in.wav --output-txt --output-vtt

リアルタイム文字起こしするには、brew install sdl2 しておいて、make stream する。起動例:

./stream --language ja --model models/ggml-large.bin --capture 3

これで標準出力にリアルタイム文字起こしできる。最後の番号は無指定で起動したときに例えば

init:    - Capture device #3: 'BlackHole 2ch'

のように表示されるのでその番号を指定する。