Automated Piano & Guitar Player for "OverField"
🇺🇸 English | 🇻🇳 Tiếng Việt | 🇨🇳 简体中文 | 🇯🇵 日本語 | 🇮🇩 Bahasa Indonesia
Note
OverField Music Player is a high-precision automation script designed to play complex musical arrangements in the game OverField. It fully supports Piano and Electric Guitar (which share the same key layout). Built with AutoHotkey v2, it bridges the gap between MIDI compositions and in-game performance, offering millisecond-accurate timing and a suite of real-time controls.
Tip
Enjoying the tool? Please consider giving this project a ⭐ Star on GitHub to support development!
| Feature | Description |
|---|---|
| 🎯 Precision Timing | Uses timeBeginPeriod(1) and hybrid wait loops for accurate note execution. |
| 📂 Music Library | Built-in playlist manager to organize .json song files. |
| 🎛️ Live Control | Adjust Speed (10-500%), Transpose, and Seek in real-time. |
| 🎹 MIDI Import | New! Convert .mid files to JSON directly via built-in API (Beta). |
| 🔁 Loop Mode | New! Repeat the current song automatically. |
| 🧠 Smart Logic | Auto-Pause on Alt-Tab, Optimization Mode for heavy songs. |
| 🎹 Advanced Play | Sustain support and Mono Mode for cleaner melodies. |
- Install AutoHotkey v2: Download from autohotkey.com.
- Download Script: Clone this repo or download the source.
- Setup Directory: Ensure a
Songsfolder exists next toscript.ahk(it creates one automatically). - Add Music: Drop your
.jsonsong files into theSongsfolder.
- Run
script.ahk(Right-click > Run Script). - Select a track from the Library list.
- Choose the Target Window (your game window) from the dropdown.
- Press Start or F4.
Tip
Use the (Unlocked - Any Window) option to test playback in a text editor like Notepad before playing in-game!
| Key | Action |
|---|---|
| F4 | Toggle Play / Pause |
| F8 | Stop Playback |
| Ctrl + → | Next Song |
| Ctrl + ← | Previous Song |
- Seeking: Drag the progress slider to jump to any point.
- Speed: Enter a percentage (e.g.,
120for 1.2x speed) or use Up/Down arrows. - Playlist: Use ▲ / ▼ buttons to reorder songs.
- Navigation: Use Next / Prev buttons to change songs.
Settings are auto-saved to config.ini:
- Sustain: Keeps keys pressed for the duration of the note.
- No Chords: Ignores lower-octave keys (z, x, c...) usually used for chords.
- Mono Mode: Plays only one note at a time (highest priority).
- Auto-Next: Automatically plays the next song in the library.
- Loop: Automatically replays the current song when it ends.
- Max Polyphony: Limits simultaneous scrypt key presses.
The script accepts specific JSON structure. Example:
Click to view JSON Example
{
"tracks": [
{
"instrument": { "family": "piano" },
"notes": [
{
"time": 0.0,
"duration": 0.5,
"midi": 60
}
]
}
]
}You have two ways to get your songs ready:
- Click the 🎹 Import MIDI (Beta) button in the script.
- Select your
.midor.midifile. - The script will automatically convert it via API and ask if you want to save it to your library.
If the built-in importer is down, you can still use the Tone.js MIDI tool:
- Go to https://tonejs.github.io/Midi/.
- Drag and drop your MIDI file onto the page.
- Copy the generated JSON output.
- Paste it into a new file in the
Songsfolder (e.g.,mysong.json).
Tip
Need MIDI files? You can find high-quality MIDI sequences at OnlineSequencer.net.
Important
🎹 MIDI Selection Guide The in-game instrument is limited to 21 diatonic keys (3 octaves of white keys only) and 7 chord keys.
- Melody Range: C3 - B5 (White keys only).
- Chord Range: C2 - B2.
- Tip: For best results, choose songs with simple melodies (few sharps/flats) or transpose your MIDI to C Major or A Minor before converting.
- Direct MIDI Support: Built-in MIDI to JSON converter API (Beta).
- Custom Keybinding: Allow users to map MIDI notes to custom keys via UI.
- Theme Support: Dark mode and custom color schemes for the definition.
- Visual Overlay: A visual piano overlay to see which keys are being pressed.
- Data Recorder: Record in-game performance and save to JSON.
- Mini Mode: Compact UI for better visibility.
Contributions are always welcome! This project is new and open to improvements. If you have any ideas, bug fixes, or new features (like better MIDI parsing!), please feel free to:
- Fork the repository.
- Create your feature branch.
- Commit your changes.
- Open a Pull Request.
If you have any questions or just want to hang out, reach out to me:
