Skip to content

Getting Started

Jed556 edited this page Apr 1, 2026 · 2 revisions

Well, technically, you could manually press the keys in-game, but that’s tricky. Let’s get you set up!

Get the App

Download the latest release from the project Releases page, then run the executable.

I recommend the package ending with _portable.zip to avoid issues on PCs that do not have .NET installed.

For advanced users, the package ending with _net_install.zip can be used if .NET is already installed on the device.

Note

If you get a SmartScreen popup, click on "More info" and then "Run anyway" The reason this appears is because the application is not signed. Signing costs money which can get very expensive.

Build From Source

Requirements

Publish a single binary for Windows

git clone https://github.com/Jed556/AutoMidiPlayer.git
cd AutoMidiPlayer

dotnet publish AutoMidiPlayer.WPF -r win-x64-c Release --self-contained false -p:PublishSingleFile=true

For other runtimes, visit the RID Catalog and change the runtime value.

Build the project (not necessary if you published)

git clone https://github.com/Jed556/AutoMidiPlayer.git
cd AutoMidiPlayer

dotnet build

Publish the project using defaults

git clone https://github.com/Jed556/AutoMidiPlayer.git
cd AutoMidiPlayer

dotnet publish

Add Notes/Keyboard Mappings

The process for adding or adjusting notes and keyboard mappings has a few discrete steps. Below is a friendly checklist along with example snippets to help you get started.

  1. Create or select a game folder

    • Go to AutoMidiPlayer.WPF/Core/Games/ and either open the existing game directory or create a new one with the game's name.
  2. Prepare layout & instruments subfolders

    • In the game folder make sure you have two items:
      • KeyboardLayout.cs – holds any custom key‑assignment maps.
      • Instruments directory – contains one .cs file for each instrument.
    • Look at Heartopia/ or Genshin/ for real examples; the structure is identical.
  3. Add or edit instrument config files

    • Inside Instruments, you can copy and paste an existing config (e.g. Piano.cs) and then adjust fields such as game, name, and the notes list.
    • Specify additional keyboardLayouts if the instrument uses a different mapping.
    public static readonly InstrumentConfig MyNewInstrument = new(
        game: "MyGame",
        name: "Special Harp",
        notes: [ 60, 62, 64, 65, 67 ], // C4,D4,E4,F4,G4
        keyboardLayouts: [ MyGameLayouts.QWERTY ]
    );
  4. Create a keyboard layout (if necessary)

    • Edit KeyboardLayout.cs and add a KeyboardLayoutConfig with the characters that correspond to each note.
    internal static readonly KeyboardLayoutConfig QWERTY = new(
        name: "QWERTY",
        keys: ['q','w','e','r','t','y','u']
    );
  5. Register the game in GameRegistry.cs

    • Add a new GameDefinition entry to the AllGames list so the app knows about your game. For example:
    new GameDefinition(
        id: "MyGame",
        displayName: "My Game Title",
        instrumentGameName: "MyGame",
        imageResourcePath: "pack://application:,,,/Resources/MyGame.png",
        processNames: ["MyGameExe"],
        defaultExeName: "MyGame.exe",
        defaultSearchPaths: [
            @"C:\Program Files\MyGame\MyGame.exe",
        ],
        getLocation: () => Settings.MyGameLocation,
        setLocation: v => Settings.Modify(s => s.MyGameLocation = v),
        getIsActive: () => Settings.ActiveMyGame,
        setIsActive: v => Settings.Modify(s => s.ActiveMyGame = v)
    ),

Play Your First Song

You might be wondering… “so where’s the part where I actually play a song?” 😅
Don’t worry, this is it.

  1. Add a song from a MIDI file.
  2. Enable only the tracks you want.
  3. Select target game, instrument, and keyboard layout.
  4. Adjust speed or transpose if needed.
  5. Press Play!

No Preview yet

But if your song doesn’t sound quite right or isn’t playing properly, don’t worry, that’s normal at first. Head over to How To Use to learn how to properly configure songs and get the best playback.

Clone this wiki locally