Voice Memos由来の音声ファイル(m4a/wav/aiff/caf)を監視フォルダで検知し、Speech frameworkで文字起こししてNotes(メモアプリ)に毎回新規ノートを作成する最小実用アプリです。iCloud同期を使っているのなら、iPhoneやApple Watchのボイスメモをスムーズに文字起こしできるため、アイデアメモなどに重宝します。
- App Storeから
VoiceMemoTranscriberをインストール - アプリを起動
- 初回権限(Speech Recognition / Automation)を許可
Select Watch Folder…で監視フォルダを選択Start Watchingを実行
- GitHub Releases から
.dmgをダウンロード .dmgを開き、VoiceMemoTranscriber.appをApplicationsにコピー- アプリを起動(初回にGatekeeper警告が出た場合は右クリック →
開く) - 初回権限(Speech Recognition / Automation)を許可
Select Watch Folder…で監視フォルダを選択し、Start Watching
- アプリ起動
Select Watch Folder…で監視先フォルダを選択- フォルダ未設定時は、Voice Memosの典型保存先(存在する場合)を初期表示します
- 推奨:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings
Start Watching- ボイスメモで録音する(または
.m4a/.wav/.aiff/.cafを追加) - 数秒後、Notes に新規ノート作成されることを確認
Open Logでログ確認
- Xcodeで
App(SwiftUI, macOS) を作成 - Product Name を
VoiceMemoTranscriberに設定 - このリポジトリ内
VoiceMemoTranscriberフォルダのSwiftファイルをターゲットへ追加 - ターゲットの
InfoでInfo.plist Fileを以下に設定VoiceMemoTranscriber/Support/Info.plist
- ターゲットの
Signing & Capabilitiesで Entitlements ファイルをVoiceMemoTranscriber/Support/VoiceMemoTranscriber.entitlementsに設定(SandboxはON, Debug用)
- Releaseビルドは Entitlements を
VoiceMemoTranscriber/Support/VoiceMemoTranscriber.Release.entitlementsに設定
メニューバー項目:
- Select Watch Folder…
- Start Watching / Stop Watching
- Request Speech Permission
- Edit Note Format...
- Reset Note Format to Default
- Open Log
- Recent Results(直近処理結果)
- Quit
状態表示:
- Status: Watching / Idle
- 現在の監視フォルダ
Select Watch Folder…の下に、Voice Memosの典型保存先ヒントを表示(小さめ・補助色)
- 監視:
DispatchSourceFileSystemObjectでディレクトリFDをイベント駆動監視 - 検知後: フォルダ全走査で対象拡張子ファイルを抽出
- 監視対象の代表例(環境依存):
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings
- 安定化待ち: 数秒間隔でサイズを複数回チェックし、書き込み完了後に処理
- 文字起こし:
SFSpeechRecognizer+SFSpeechURLRecognitionRequest(既定ロケールja-JP) - Notes保存:
NSAppleScript(必要時osascriptフォールバック)で、Notes内フォルダVoiceMemoTranscriberに毎回新規ノートを作成 - 本文改行は Notes 向けに
\\nを\\rへ正規化 - ノート本文テンプレートはユーザー編集可能(デフォルト:
{date} {time}\\n{transcribed_text}\\n{original_audio}) - ノートタイトルは「テンプレート展開後の1行目」
- ノート本文は「テンプレート展開後の2行目以降」
- 利用可能プレースホルダ:
{date},{time},{transcribed_text},{original_audio},{filename} - 重複防止/履歴:
path + size + mtimeのSHA256指紋を SQLite に保存 - キュー: 逐次1件ずつ処理(同時実行なし)
- ログ: Console +
~/Library/Logs/VoiceMemoTranscriber/app.log(Sandbox実行時はコンテナ配下のLibrary/Logs)
初回利用時に以下を許可:
- Speech Recognition
- Automation(Notes 操作)
必要に応じて:
- Full Disk Access
- Voice Memosの実ファイル保存先(Group Containers)を読む場合、実行主体(アプリまたはTerminal)に必要になる場合があります。
NSSpeechRecognitionUsageDescription と NSAppleEventsUsageDescription は Info.plist に設定済み。
このアプリはファイル文字起こし中心のためマイク権限は通常不要です。 ただし環境差で要求される場合があるため、その場合は許可してください。
- アプリ起動
Select Watch Folder…で監視先フォルダを選択- 推奨:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings
- 推奨:
Start Watching- 監視フォルダへ
.m4a/.wav/.aiff/.cafを追加 - 数秒後、Notesに新規ノート作成されることを確認
Open Logでログ確認
- System Settings > Privacy & Security > Speech Recognition で許可
- メニュー
Request Speech Permissionから再試行
- System Settings > Privacy & Security > Automation でアプリのNotes制御を許可
tccutil reset AppleEvents com.binword.VoiceMemoTranscriber実行後に再許可で改善する場合あり
- 監視フォルダをアプリ内の
Select Watch Folder…から再選択(security-scoped bookmark更新) - Voice MemosのGroup Containers配下を読む場合は必要に応じて Full Disk Access をアプリへ付与
- 重複防止仕様です(fingerprintベース)
~/Library/Application Support/VoiceMemoTranscriber/processed.sqlite3を削除すると再処理可能
- このリポジトリは個人開発プロジェクトです。Issue / Pull Request への返信・対応は保証できません。
- バグ報告や要望は Issue で受け付けます。
- Pull Request は歓迎しますが、レビューやマージを行わない場合があります。