diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 61f156b..837c2e8 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -1,4 +1,4 @@ -name: Build Drum Midi Remapper (Windows/macOS/Linux) +name: Build Drum Midi Remapper (Windows/macOS) on: push: @@ -7,6 +7,9 @@ on: pull_request: branches: [ main ] +permissions: + contents: write + jobs: version: name: 🏷️ Generate Version @@ -131,24 +134,45 @@ jobs: path: | DrumMidiRemapper-${{ needs.version.outputs.version }}.dmg ./cli-publish/** + release: + name: 🚀 Publish GitHub Release + runs-on: ubuntu-latest + needs: [build-windows, build-macos, version] + steps: + - uses: actions/checkout@v4 - # build-linux: - # name: Build Linux CLI only - # runs-on: ubuntu-latest - # needs: version - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-dotnet@v4 - # with: - # dotnet-version: 8.0.x - - # - name: Restore dependencies - # run: dotnet restore ./src/CLI/CLI.csproj - - # - name: Build CLI Linux - # run: dotnet publish ./src/CLI/CLI.csproj -c Release --framework net8.0 --self-contained true -p:Version=${{ needs.version.outputs.version }} -o ./cli-publish --no-restore - - # - uses: actions/upload-artifact@v4 - # with: - # name: DrumMidiRemapper-LinuxCLI-${{ needs.version.outputs.version }} - # path: ./cli-publish/** \ No newline at end of file + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: ./artifacts + + - name: Create GitHub Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ needs.version.outputs.version }} + release_name: "Drum Midi Remapper v${{ needs.version.outputs.version }}" + draft: false + prerelease: false + + - name: Upload Windows Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./artifacts/DrumMidiRemapper-Windows-${{ needs.version.outputs.version }}/DrumMidiRemapper-Windows-${{ needs.version.outputs.version }}.zip + asset_name: DrumMidiRemapper-Windows-${{ needs.version.outputs.version }}.zip + asset_content_type: application/zip + + - name: Upload macOS Artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./artifacts/DrumMidiRemapper-macOS-${{ needs.version.outputs.version }}/DrumMidiRemapper-${{ needs.version.outputs.version }}.dmg + asset_name: DrumMidiRemapper-macOS-${{ needs.version.outputs.version }}.dmg + asset_content_type: application/x-apple-diskimage \ No newline at end of file diff --git a/README.md b/README.md index 5174499..3759bbc 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,50 @@ # Drum MIDI Remapper -A **.NET 8** cross-platform tool for remapping MIDI drum notes between different standards and custom mappings. Designed to help musicians and producers adapt MIDI drum tracks for compatibility with various drum kits, DAWs, and hardware. +A cross-platform tool built with **.NET 8** for remapping MIDI drum notes between different standards and custom mappings. Designed for musicians and producers to adapt MIDI drum tracks for compatibility with various drum kits, DAWs, and hardware. -![Build Status](https://img.shields.io/github/actions/workflow/status/Abstractize/drum-midi-remapper/ci.yml?branch=main) +Includes both a CLI and a .NET MAUI GUI for easy drum MIDI remapping. + +![Build Status](https://img.shields.io/github/actions/workflow/status/Abstractize/drum-midi-remapper/build-and-release.yml?branch=main) ![License](https://img.shields.io/github/license/Abstractize/drum-midi-remapper) --- +## Features + +- Remap MIDI drum notes using customizable JSON mapping files +- Supports popular drum mapping standards (GuitarPro, StevenSlate, LogicPro, ProTools) +- Batch processing of MIDI files via CLI +- Modular architecture with Dependency Injection for extensibility +- .NET MAUI cross-platform GUI with drag-and-drop interface +- Export remapped MIDI files directly from the GUI +- Compatible with Windows and macOS via MAUI +- CLI supports Windows, macOS, and Linux +- Powered by .NET 8 + +--- + +## Requirements + +- [.NET 8.0 SDK](https://dotnet.microsoft.com/download) +- Windows, macOS, and Linux (CLI only) + +--- + +## Download + +Pre-built binaries are available for Windows and macOS from the [Releases](https://github.com/Abstractize/drum-midi-remapper/releases) page. + +- **Windows:** Download the `.zip` file containing the `.msix` installer, extract it, and double-click the `.msix` to install. +- **macOS:** Download the `.dmg` file, open it, and drag the app to your Applications folder. + +No installation required on Windows other than running the installer. See the release notes for details. + +--- + ## Quick Start +### CLI (Cross-platform) + ```bash git clone https://github.com/Abstractize/drum-midi-remapper.git cd drum-midi-remapper @@ -16,28 +52,25 @@ dotnet build dotnet run --project src/CLI -- GuitarPro StevenSlate midis/test.mid ``` -- Replace `GuitarPro`, `StevenSlate`, and `midis/test.mid` with your desired mappings and MIDI file. - ---- - -## Requirements +### Windows (.NET MAUI GUI) -- [.NET 8.0 SDK or newer](https://dotnet.microsoft.com/download) -- Compatible with Windows, macOS, and Linux +```powershell +dotnet build -f net8.0-windows10.0.19041.0 +dotnet run --project src/GUI -f net8.0-windows10.0.19041.0 +``` ---- +### macOS (.NET MAUI GUI) -## Features +```bash +dotnet build -f net8.0-maccatalyst +dotnet run --project src/GUI -f net8.0-maccatalyst +``` -- Remap MIDI drum notes using customizable JSON mapping files -- Support for popular drum mapping standards (e.g., GuitarPro, StevenSlate, LogicPro, ProTools) -- Batch processing of MIDI files via CLI -- Cross-platform support powered by .NET 8 -- Modular architecture with Dependency Injection for easy extensibility +Replace `GuitarPro`, `StevenSlate`, and `midis/test.mid` with your desired mappings and MIDI file. --- -## Usage +## CLI Usage Run the tool with: @@ -45,7 +78,7 @@ Run the tool with: dotnet run --project src/CLI -- ``` -- `` and ``: Mapping names (see **Available Mappings** below) +- `` and ``: Mapping names (see **Available Mappings** below) - ``: Path to the MIDI file to remap The `--project src/CLI` option specifies the CLI project. @@ -58,13 +91,15 @@ Mappings are stored as JSON files in the **Services/Resources/Maps/** directory. Included mappings: -- GuitarPro -- LogicPro -- ProTools +- GuitarPro +- LogicPro +- ProTools - StevenSlate You can also create custom mappings by adding JSON files to the directory. +Feel free to add a new mapping by creating a JSON resource file and submitting a pull request. + --- ## Configuration @@ -90,7 +125,7 @@ Mapping files are JSON documents located in **Services/Resources/Maps/**. Edit o } ``` -- `"name"`: Identifier for the map +- `"name"`: Identifier for the map - Values correspond to MIDI note numbers > **Note:** MIDI note numbers follow the [General MIDI Percussion Key Map](https://www.midi.org/specifications-old/item/gm-level-1-sound-set). This project uses [DryWetMIDI](https://melanchall.github.io/drywetmidi/) for MIDI handling. @@ -110,10 +145,18 @@ dotnet run --project src/CLI -- GuitarPro StevenSlate midis/test.mid --- +## Screenshot + +![Drum MIDI Remapper UI](docs/screenshots/app-ui.png) + +The screenshot shows the Drum MIDI Remapper application's main form. Users can upload a MIDI file and select both the source and target drum mapping standards from dropdown menus. The interface provides an intuitive workflow for remapping drum notes, with clear options for file selection and mapping configuration. + +--- + ## Troubleshooting & FAQ -- **Build errors:** Ensure .NET 8 SDK is installed and your environment is configured correctly. -- **Mapping not found:** Verify spelling and that JSON mapping files exist in **Services/Resources/Maps/**. +- **Build errors:** Ensure .NET 8 SDK is installed and your environment is configured correctly. +- **Mapping not found:** Verify spelling and that JSON mapping files exist in **Services/Resources/Maps/**. - **MIDI file issues:** Confirm your input file is a valid MIDI file and accessible. --- @@ -124,9 +167,9 @@ Contributions are welcome! Please open issues or submit pull requests. ### Adding a New Mapping -1. Add a JSON mapping file to **Services/Resources/Maps/** -2. Follow the existing file format for your mapping -3. Update the `DrumMapType` enum in `Models/DrumMapType.cs` to include your new map +1. Add a JSON mapping file to **Services/Resources/Maps/** +2. Follow the existing file format for your mapping +3. Update the `DrumMapType` enum in `Models/DrumMapType.cs` to include your new map 4. Submit a pull request --- @@ -140,3 +183,4 @@ Contributions are welcome! Please open issues or submit pull requests. ## License MIT License + diff --git a/docs/screenshots/app-ui.png b/docs/screenshots/app-ui.png new file mode 100644 index 0000000..d9df063 Binary files /dev/null and b/docs/screenshots/app-ui.png differ