暦本先生のVoice2Memoを試してみる
導入
最近「2035年の人間の条件」という本を読んでいたら、こんな話が取り上げられてました。
暦本 (前略) 僕も少し前から、音声で文章を書いています。最初からキーボードを打つのは面倒くさいので、とりあえず「いま僕が考えているのはこんなこととかあんなこととかだ」と思いのたけを数分間ぐらいかけて吐き出すんですね。それぐらいの時間でも、喋ると原稿用紙何枚分にもなっちゃう。キーボードでそれだけ書こうと思ったら、何時間もかかるでしょ。
落合 とりあえず喋りきってからあとでまとめたほうが早いですよね。
暦本 そう。だけど、前は喋ったものを手で編集していたんだけど、いまは口述したデータを「はい、これを論文のアブストラクトにしてください」とチャットGPTに渡しちゃう。それで出てきたものを自分で直すんです。
暦本純一; 落合陽一. 2035年の人間の条件(マガジンハウス新書) (Japanese Edition) (pp. 23-24). 株式会社マガジンハウス. Kindle Edition.
へ〜と思っていたら、先日、暦本純一先生がこのようなツイートをされていました。ちょうどソースコードも公開されていたので、自分で試してみました。ちょっとだけ導入にハマったので備忘録的にメモ。これで高校の通学時間の独り言が文字起こしされそうなので、結構楽しくなりそうな気が。
whisper.cppをBuildする
本記事では、pip経由でwhisper-cliをインストールせず、whisper.cppのBuild経由で導入しました(後者しか試していませんが、問題なく動作しています)。
cmakeとffmpegをinstall済みであること
cmakeとffmpegのinstall
brew install cmake ffmpeg
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
bash ./models/download-ggml-model.sh large-v3-turbo
cmake -B build
cmake --build build --config Release
./build/bin/whisper-cli -m ./models/ggml-large-v3-turbo.bin -f samples/jfk.wav
(中略)
system_info: n_threads = 4 / 8 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | COREML = 0 | OPENVINO = 0 |
main: processing 'samples/jfk.wav' (176000 samples, 11.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = en, task = transcribe, timestamps = 1 ...
[00:00:00.300 --> 00:00:09.360] And so, my fellow Americans, ask not what your country can do for you, ask what you can
[00:00:09.360 --> 00:00:11.000] do for your country.
whisper_print_timings: load time = 2663.53 ms
whisper_print_timings: fallbacks = 0 p / 0 h
whisper_print_timings: mel time = 12.09 ms
whisper_print_timings: sample time = 72.01 ms / 148 runs ( 0.49 ms per run)
whisper_print_timings: encode time = 4922.42 ms / 1 runs ( 4922.42 ms per run)
whisper_print_timings: decode time = 0.00 ms / 1 runs ( 0.00 ms per run)
whisper_print_timings: batchd time = 461.18 ms / 146 runs ( 3.16 ms per run)
whisper_print_timings: prompt time = 0.00 ms / 1 runs ( 0.00 ms per run)
whisper_print_timings: total time = 8362.39 ms
ggml_metal_free: deallocating
ここで正しく以下のような出力がされていれば正しくインストールできています (文字起こしは完全一致とは限らない)。
[00:00:00.300 --> 00:00:09.360] And so, my fellow Americans, ask not what your country can do for you, ask what you can
[00:00:09.360 --> 00:00:11.000] do for your country.
voice2memoの導入
git clone https://github.com/rkmt/voice2memo.git
暦本先生のREADME.mdに従う
transcribe_and_post.shの編集 (47行目)
whisper.cppを自分でビルドしてインストールしているので、whisper-cliを絶対パスで呼び出します。必ず、whisper.cppをビルドしたあとに行います。
/Users/${ここにUSERのPATH}/${ここにwhisper.cppのpath}/whisper.cpp/build/bin/whisper-cli "$wav_file" -of "$output_file" --model $MODEL --language ja -otxt
実行
./transcribe_and_post.sh
(前略)
[00:00:00.000 --> 00:00:07.560] 「これはテストです。これはテストです。テスト、テスト、マイクテスト」
output_txt: saving output to '/Users/{ユーザー名}/iCloud Drive (Archive)/voice2memo/20250218 224051.txt'
(中略)
note id x-coredata://...
ote created: 「これはテストです。これはテストです。テスト、テスト、マイクテスト」
All processing completed
保存されています。
Tips
Notesの保存先フォルダを指定する
Notesの保存先を指定のフォルダ配下にしたいときは、transcribe_and_post.sh
を以下のように設定します。 (67行目-)
tell application "Notes"
tell account "iCloud"
set targetFolder to folder "{指定のフォルダ名}"
make new note at targetFolder with properties {name:"${title}", body:"${body}"}
end tell
end tell
アクションボタンがない場合の代替
アクションボタンはiPhone 15以降で導入された物理ボタンです。そのため、SE世代等ではアクションボタンは使えません。この場合、ショートカットアプリを使うことで改善できます。まずはショートカットを以下のように設定します (保存名はお好きに)。
その後、ショートカットウィジェットを以下のように設定することで、アクションボタンがなくても保存することができます。
ChatGPTに投げるところまでお任せする
APIとかをいい感じに叩いても良いのですが、ショートカットアプリがとても導入しやすいのでこちらで。
まとめ
whisper-cliをpip経由でなく、whisper.cppのBuild経由でインストールすることで導入ができました (もしpipでも導入できた方がいたらコメント等で教えてください)。
Discussion