A Rust application that randomly selects a 30-second clip from your Apple Voice Memos library and plays it in VLC.
- 🎲 Random Selection - Picks a random voice memo from your entire library
- ✂️ Clipping - Extracts a random 30-second segment from the recording
- 📅 Metadata Preservation - Embeds the original recording date in clip metadata
- 🎬 Playback - Opens the audio clip in VLC for immediate listening
- 🔒 Read-Only - Never modifies your original Voice Memos
- macOS Sonoma (14) or later - Uses the new Voice Memos storage location
- Rust - Install from rustup.rs
- ffmpeg - Install via Homebrew:
brew install ffmpeg - VLC.app - Download from videolan.org
The app requires Full Disk Access to read Voice Memos:
- Open System Settings → Privacy & Security → Full Disk Access
- Click the lock icon and authenticate
- Click + and add your terminal app (Terminal.app, iTerm2, etc.)
- Restart your terminal completely
Simply run the application:
cargo run --release- The app scans your Voice Memos library
- Randomly selects a memo longer than 30 seconds
- Picks a random 30-second segment from that memo
- Extracts the clip with metadata
- Opens the audio clip in VLC
The app reads the Voice Memos SQLite database located at:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/CloudRecordings.db
It opens the database in read-only mode to prevent any modifications.
Uses ffmpeg to extract the 30-second clip with metadata:
ffmpeg -ss <start_time> -i <source> -t 30 -c copy -metadata comment="Original recording date: ..." audio_clip.m4aOpens the audio clip in VLC using macOS's open command.
- Database:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/CloudRecordings.db - Audio files:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/*.m4a
- Clip files:
/tmp/voice_memo_clip_<pid>.m4a - Files persist until manual deletion or system reboot
The app queries the ZCLOUDRECORDING table:
ZENCRYPTEDTITLE- Recording title (encrypted)ZCUSTOMLABEL- Custom label (fallback)ZDATE- Core Data timestamp (seconds since Jan 1, 2001)ZDURATION- Duration in secondsZPATH- Relative path to .m4a file
- Database opened with
SQLITE_OPEN_READ_ONLYflag - Audio files opened with
File::open(read-only by default) - No modifications to Voice Memos library
- All output files created in temporary directories
- All data stays on your computer - nothing is uploaded anywhere
- Voice memos are never modified - the app only reads them
- Temporary clip files remain local in
/tmp - Read-only database access - guaranteed by SQLite flags