Skip to content

traditionalgithub/ConvFMMLR

Repository files navigation

ConvFMML

MIDI to MML Converter

Forked from rerrahkr/ConvFMML (Copyright © 2017–2019 Rerrah)
Maintained through vibe coding.
This fork continues under the original MIT License.

GitHub release Platform: Linux | Windows LICENSE

日本語 · 简体中文

Overview

ConvFMML is an application that converts standard MIDI file (SMF/MIDI) into Music Macro Language (MML).

  • Detect notes and rests from MIDI (polyphonic support)
  • Export to MML in the specified format from FMP7, FMP, PMD, MXDRV, NRTDRV, MUCOM88, mml2vgm, and custom
  • Line breaks and block division of notes and rests in each measure
  • Support MIDI volume, pan, program change and tempo settings
  • Exported MML part settings

You can select more detailed conversion settings can be specified in "conversion settings".

Load MIDI

Please drag and drop the MIDI file to ConvFMML, or click "Select” button in the "MIDI file” field to select it.

Convert and export to MML

When the "Convert" button in "Target MML" is pressed, the export dialog is opened.
In this dialog, you can specify MML file name and file extension.
Clicked "Save" button, it starts conversion and MML exportation.

Conversion settings

In "Conversion settings", you can edit optimization of MML command, print format of notes and rests, division into blocks by measure, and selection of output MML part.
Selecting an item in the tree view switches the settings to edit.

MML expression

You can set MML style, MML clock count, the block division for each measure, and line feeds by changing beat.

ConvFMML sets MML commands such as tie, volume, pan and tempo automatically by specified MML style.
You can specify each of these command notations in the custom format specification.
MML style limits conversion settings that can be specified.

Note/Rest

You can make settings for notes and rests.
There are settings for octave command, printing styles of note length.

Control commands

There are five settings parts: "General", "Volume", "Pan", "Program Change" and "Tempo".
"General" allows you to make common optimization and conversion settings for volume, pan, program change, and tempo.
In "Volume", you can edit volume command settings for MML output.
In "Pan", you can edit pan command settings for MML output.
In "Program change", you can edit program change command settings for MML output.
In "Tempo", you can edit volume command settings for MML output.

Part

Of the loaded MIDI tracks, You can set parts to be output, names of parts, and sound types.

In export part, part name, sound type settings table, you can check the part to output to MML.
Parts that are not output are grayed out, and that can not be output due to the number of parts are displayed in red.
Although the red parts be able to be exported, commands may not be output correctly.
When there is a polyphonic MIDI track, some parts are displayed that have the same MIDI track number and MIDI track name.
These parts are generated by splitting polyphony.

Tips

  • The number of MML parts increases by the number of polyphonic notes in MIDI.
  • It is possible to change MML note names according to the scale by MIDI key signature events.
  • If no beat, tempo and key signature events are set in the MIDI file, ConvFMML uses the default settings about them: 4/4 beat, bpm 120 and C major.
  • Notes and rests are removed automatically if they cannot be expressed its length in MML clock count.
  • The higher MML resolution, the better conversion accuracy but the shorter notes appear.
  • Optimization processing for control commands is performed in the following order. In some cases, some commands may not be processed properly.
    1. Remove commands not affected notes
    2. Optimize the same place and type commands
    3. Optimize the same type and value commands

Repository Structure

  • ConvFMML/ — Original ConvFMML codebase (unchanged, for reference)
  • ConvFMML.Avalonia/ — Cross-platform port with actual modifications (Avalonia UI, .NET 10)

Requirements

  • Windows (untested in this fork; original project targeted Windows 10) — .NET Framework 4.6 or later
  • Linux (tested on Ubuntu 24.04) — .NET 10 SDK

Building from source (Linux)

# Clone and build
git clone https://github.com/traditionalgithub/ConvFMMLR.git
cd ConvFMMLR

# Build and run (uses ./run.sh wrapper script)
chmod +x run.sh
./run.sh

# Or manually:
cd ConvFMML.Avalonia
dotnet build
dotnet run --project ConvFMML.Desktop

# Note: the published executable depends on DLLs in its output directory.
# Use dotnet run, run.sh, or one of the options below for portability.

Publish as single-file executable

cd ConvFMML.Avalonia
dotnet publish ConvFMML.Desktop -c Release -r linux-x64 --self-contained \
  -p:PublishSingleFile=true
# Output: ConvFMML.Desktop/bin/Release/net10.0/linux-x64/publish/ConvFMML

Note: native libraries (.so) are embedded and extracted at first run. The single file cannot be moved to another machine without republishing for that target.

Build AppImage

# Requires: curl, convert (ImageMagick)
./build-appimage.sh
# Output: ConvFMML-x86_64.AppImage

Clean build artifacts

dotnet clean
rm -rf ConvFMML.Avalonia/ConvFMML.Desktop/bin   ConvFMML.Avalonia/ConvFMML.Desktop/obj \
       ConvFMML.Avalonia/ConvFMML.Core/bin      ConvFMML.Avalonia/ConvFMML.Core/obj

License

ConvFMML is licensed under the MIT license.
This fork inherits and continues the original MIT License.
See LICENSE.

Acknowledgments

This fork was created using opencode zen free and other freely available large language model services.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors