Your keyboard still types. It just sounds different now.
TypeNote is a native macOS menu bar app that turns every keystroke into a musical note. Choose from 128 General MIDI timbres, load your own melody, and keep working — your keyboard just sounds better.
| Menu Bar | Instrument Library | Score Library |
|---|---|---|
![]() |
![]() |
![]() |
- 128 Timbres — Full General MIDI library organized by mood. Switch from acoustic piano to steel drums in two clicks
- Bring Your Own SoundFont — Drop in any
.sf2file (FluidR3, MuseScore General, Timbres of Heaven…) to expand beyond the bundled library. See Free SoundFont Resources - Bring Your Own Melody — Paste numbered notation (Jianpu), import MusicXML, or drop a MIDI file. Your keystrokes play the notes in sequence
- Menu Bar Resident — No windows to manage. Open it to change the sound, close it, keep working
- Low Latency — AVAudioEngine + 256-frame buffer, key-to-sound < 15 ms
- Play Modes — Sequential, single repeat, or shuffle through your melody library
- Auto Update — Sparkle-powered in-app updates
- macOS 14.0 (Sonoma) or later
- ~35 MB disk space
- Xcode 15.0+
- Swift 5.9+
git clone https://github.com/huihuisang/TypeNote.git
cd TypeNotecp LocalConfig.xcconfig.template LocalConfig.xcconfig
# Edit LocalConfig.xcconfig and set your DEVELOPMENT_TEAMThe bundled SoundFont (GeneralUser GS.sf2, ~31 MB) is included in the repo under TypeNote/Resources/. If it's missing, download it from GeneralUser GS and place it there.
open TypeNote.xcodeprojPress Cmd+R in Xcode.
1–7 do re mi fa sol la ti
0 rest
' octave up (suffix)
, octave down (suffix)
_ halve duration (suffix)
- extend one beat
# sharp (prefix)
b flat (prefix)
Example — Twinkle Twinkle:
1 1 5 5 6 6 5 - 4 4 3 3 2 2 1 -
TypeNote/
├── App/ # Entry point & app state (@Observable)
├── Audio/ # AVAudioEngine + SoundFont playback
├── Input/ # Global keystroke monitoring (CGEventTap)
├── Models/ # Score library and data models
├── Parser/ # Jianpu, MusicXML, and MIDI file parsers
├── Views/ # SwiftUI interface
└── Resources/ # SoundFont file
| Layer | Technology |
|---|---|
| UI | SwiftUI + @Observable |
| Audio | AVAudioEngine + AVAudioUnitSampler |
| Input | CGEventTap (global), NSEvent (local) |
| Parsers | XMLParser (MusicXML), AudioToolbox (MIDI) |
| Updates | Sparkle 2 |
| Dependencies | Zero third-party runtime deps |
Pull requests are welcome. For major changes, please open an issue first to discuss what you'd like to change.
- Audio powered by GeneralUser GS SoundFont by S. Christian Collins — free for all uses
- Auto-update powered by Sparkle
MIT License — see LICENSE for details.


