Products
Orders
Services
Impressum
Freeware
Links

Usage of available commandline tools for Windows

GNMIDI screenshot GN MIDI Tools are Win32 tools for analysing, converting, modifying MIDI files.
The tools can be licensed for commercial or noncommercial uses. They are available as GUI batch application, non-GUI batch application and single file commandline tools.

gnbatchdialog

gnbatchdialog can batch convert (all MIDI files in a folder and sub folder) or single convert (a single MIDI file) using licensed tools. Tools that support options may offer a dialog where the options can be configured before the conversion starts.
gnbatchdialog tool is also available for using own tools (.exe commandline tools or .dll libraries). This requires a license with feature gnbatchdialog that price differs. A description about preparing tools for use with gnbatchdialog will be included with feature gnbatchdialog.
All compatible licensed tools are delivered with gnbatchdialog with a license that only accepts licensed tools.

gnbatchexec

gnbatchexec is a tool that reads parameters from an .ini text file and converts all matching files found in the input folder into an output folder (including subfolders) by calling a specified commandline tool for each matching file.
This tool can be used for the MIDI tools on this page and also for other commandline tools.
It can call a tool for each subfolder or call a tool for each file that matches a list of given file extensions.
gnbatchexec catches standard error output and writes it into a logfile. A progress percentage and current folder name is displayed during running.
Option -dialog pops up a Windows dialog where the user can enter input and output folder.

(c) 1998-2019 GN MIDI Solutions, Austria, https://www.gnmidi.com
gnbatchexec is no demo. Distributing tool or license is probibited.
Licensed permission for noncommercial use by Max Mustermann.
No permission for distribution.
usage: gnbatchexec [-dialog] filename.ini [sectionname]
-dialog starts a Windows dialog to choose .ini file and conversion folders
default .ini file is gnbatchtool.ini
default sectionname is first section found in .ini file if there is only one section existing in the file

gnbatchexec examples

usage and .ini file syntax
gnbatchexec batchtool.ini TRANSPOSENOTES_ALLCHANNELS
gnbatchexec -dialog batchtool.ini CONVERTFOLDERS

midi2txt

midi2txt converts a binary MIDI file into readable ASCII text.
The text can be modified and converted back to midi using txt2midi utiltity if the text syntax is still correct.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

usage: midi2txt [-error][-chunk][-short][-info][-lyric][-tact][-units][-ms][-dec][-channel] file.mid [file.txt]
options:
-error  checks file only. Produces only error report
-chunk  prints structure of midi file (header, tracks)
-short  prints short info about text, tracknames, programs
-info   prints info about text, tracknames, programs, controls
-lyric  prints lyrics only
-tact   marks end of tact bars with .
-units  prints position of all events in midi units.
-ms     prints position of all events in milliseconds (1st track only).
-dec    print decimal values instead of notes, channels, programs,pauses...
-channel        print channel before every event

midi2txt examples

midi2txt -units -ms coldice5.mid coldice5_midi2txt_readabletext.txt
result text: coldice5_midi2txt_readabletext.txt
midi2txt -dec coldice5.mid coldice5_midi2txt_using_option_values.txt
result text: coldice5_midi2txt_using_option_values.txt
midi2txt -dec -short coldice5.mid coldice5_midi2txt_using_option_values_short.txt
result text: coldice5_midi2txt_using_option_values_short.txt
midi2txt -chunk coldice5.mid coldice5_midi2txt_chunk.txt
result text: coldice5_midi2txt_chunk.txt

txt2midi

txt2midi converts text converted using midi2txt utility back to a MIDI file. The text syntax must be valid.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

usage: txt2midi [-version] [-programs] textfile.txt midifile.mid

midi2csv

midi2csv converts a binary MIDI file into a comma separated text table. The rows are commands and the columns are parameters and additional calculated time information.
The csv can be modified using a text editor or using a spreadsheet application and converted back to MIDI file using csv2midi

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

usage: midi2csv [-combinenoteonoff] [-separator sepcharacter] input.mid [output.csv]
-combine        finds corresponding note on/off commands and merges them in an output line
-separator      the separator used in spreadsheet (usually semicolon ; or comma ,

midi2csv examples

midi2csv coldice4.mid coldice4_midi2csv_semicolon.csv
result text: coldice4_midi2csv_semicolon.csv
midi2csv -sep , coldice4.mid coldice4_midi2csv_using_comma.csv
result text: coldice4_midi2csv_using_comma.csv
midi2csv -combine coldice4.mid coldice4_midi2csv_combinednoteonoff.csv
result text: coldice4_midi2csv_combinednoteonoff.csv

csv2midi

csv2midi converts a text file generated by midi2csv utility back to a MIDI file.

usage: csv2midi input.csv output.mid

mid2parson

mid2parson reads the notes from a specified channel of a binary midi file and makes it mono. The remaining notes are converted to Parsons code which is often used to find parts from the song by a given search term that has not to be very exact (e.g. humming).

midi2pars [-channel #][-track #] input.mid [output.txt]
(channel # is 1-16,  track # is 1-255)

midinote

midinote converts a binary MIDI file into a text file that can easily be read by human, machines or software. Each line contains a MIDI command with values as parameters. The parameters contain also calculated times.
The text file can be modified using a text editor and converted back to a MIDI file using utility note2mid.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

This tool is also available as standard user tool for use inside Windows GNMIDI 3 Professional application in menu convert and batch operations.

usage: midinote [-nohead] [-val] [-ev ...][-units][-time] input.mid [output.txt]

-noheader       don't print header that explains the columns
-values         print cryptical values for easier import into programs
-eventlist ...  print only events of kind listed in argument ...
-units  print column with units
-time   print column with milliseconds
input.mid       get notes sorted by start time from this midi file
output.txt      write output into a text file (default: standard output)
by default units and time columns are shown

midinote examples

midinote coldice3.mid coldice3_midinote_readable.txt
result text: coldice3_midinote_readabletext.txt
midinote -values coldice3.mid coldice3_midinote_values.txt
result text: coldice3_midinote_values.txt
midinote -eventlist t -time coldice3.mid coldice3_midinote_textevents.txt
result text: coldice3_midinote_textevents.txt

note2mid

note2mid converts a text file generated by midinote utility back to a MIDI file.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

This tool is also available as standard user tool for use inside Windows GNMIDI 3 Professional application in menu convert and batch operations.

usage: note2mid textfile midifile

mididmp

mididmp converts a binary MIDI file into a text file that can easily be read by human, machines or software. The commands are already sorted by measure (bar), beat, unit. Notes that play over more bars are tied. Each bar contains the note and a tie information at beginning instead of a position or at end instead of a duration.
The text file can be modified using a text editor and converted back to a MIDI file using utility dmp2midi. This view of a MIDI content helps to see which commands are inside certain bars.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

This tool is also available as standard user tool for use inside Windows GNMIDI 3 Professional application in menu convert and batch operations.

usage: mididmp [options] file.mid [output.txt]
options:
-help  or -?      show this usage
-tracks=#[-#]     only dump track with given numbers (1..., default all tracks)
-channels=#[-#]   only dump channels in given list or range (default: 0-16)
     specify number 0 for matching events that have no channel
     e.g. sysex, text, tempo, beat
-values           print values instead of program names etc.
dumps midi file events of all bars to file output.txt or standard output

mididmp examples

mididmp coldice3.mid coldice3_mididmp_readable.txt
result text: coldice3_mididmp_readable.txt
mididmp -values coldice3.mid coldice3_mididmp_values.txt
result text: coldice3_mididmp_values.txt

dmp2midi

dmp2midi converts a text file generated by mididmp utility back to a MIDI file.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required. Some -listxxx options are available to list the available valid program names, controller names, meta types, text types, note names.

This tool is also available as standard user tool for use inside Windows GNMIDI 3 Professional application in menu convert and batch operations.

usage: dmp2midi [-listprograms] [-listcontrols] [-listtexttypes] [-listmetatypes] [-listnotenames] input.dmp output.mid

removechords

removechords removes chords of given formats in a midi file

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

removechords input.mid output.mid -method methodname -format chordformats ...

methods:
REMOVEALLCHORDS
REMOVECHORDFORMATS removeformat1 removeformat2 ...
REMOVECHORDFORMATSEXCEPT exceptformat1 expceptformat2 ...
REMOVEDUPLICATECHORDS preferformat1 preferformat2 ...

chordformats: LYRIC TEXT MARKER PSR WORDBOX BIAB
default method is REMOVECHORDFORMATS

removechords examples

removechords -method REMOVEALLCHORDS coldice3.mid nochords.mid
removechords coldice3.mid chords_without_psr_and_biab.mid -method REMOVECHORDFORMATS -format PSR BIAB
removechords coldice3.mid chords_onlypsr.mid -method REMOVECHORDFORMATSEXCEPT -format PSR
removechords coldice3.mid chords_onlyoneformat.mid -method REMOVEDUPLICATECHORDS -format PSR WORDBOX LYRIC TEXT MARKER BIAB

midimove

midimove moves MIDI commands of a binary MIDI file by a millisecond amount forward or backward.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

Licensed permission for noncommercial use by Max Mustermann.
No permission for distribution.
(c) 1998-2017 GN MIDI Solutions, Austria, https://www.gnmidi.com
midimove is no demo. Distributing tool or license is probibited.
midimove [-millisec #] [-channels #] [-events list] [-ignoreinvalidmoving[=yes/no]] input.mid output.mid
-millisec #     negative ms moves events into direction of start of song
-ignoreinvalidmoving    set to time 0 if moving not possible
                (e.g. when using -ms -10000 and events are in first 10 seconds)                    
-channels #     a list of channels e.g. 1-9,11-16 (default: all channels)
-events list    a list of event type names separated by , 
          e.g. notes,controls (default: all event types except meter tempo and tact)
Following event names are currently supported:
all
channelevents   (all event types that have a channel number like 
          notes, pitchbends, programs, controls, aftertouch, polyaftertouch)
notes
pitchbends
programs
controls
aftertouch
polyaftertouch
metaevents   (all meta event types including metatext but not tempo and not meter (tact))
metatext     (all meta text types like lyrics, text, markers, trackname, instrument ...)
lyrics       (meta text of type lyrics)
text         (meta text of type text)
markers      (meta text of type markers
sysex        (system exclusive)

midimove examples

midimove -ms -130 -channels 1,4 input.mid output130.mid
midimove -ms +50 -channels 1-10 -events notes,pitchbend,controls,programs,sysex input.mid output50.mid

midireplacetext

midireplacetext replaces META text in a MIDI file.

This tool can be applied using gnbatchexec to many MIDI files (batch conversion).
Using gnbatchexec no DOS commandline knowledge is required.

usage: midireplacetext [-table=filename.rp] [-filter=typename][-match=text] [-replace=newtext] input.mid output.mid
special characters can be encoded in hex e.g. -match=\x3d
typenames are: all lyric text marker copyright trackname instrument devicename programname
matching copyright text is only replaced in commercial version when authorized in license

midireplacetext examples

midireplacetext -filter lyric -match errer -replace error input.mid output.mid
midireplacetext -table translation1.rp input.mid output.mid

midireplacetext .rp example file

Gitarre =>guitar // comment 
[trackname]Melodie=>melody
[lyric]\228=>ae
[lyric]\246=>oe
[lyric]\252=>ue
[lyric]\196=>Ae
[lyric]\214=>Oe
[lyric]\220=>Ue
[lyric]\xdf=>sz
[all][something else]=>[etwas anderes]
\=\>=>->
[text]\\=>\///comment directly after a / character
\[copyright\]=>(c)

explanation of these lines: Gitarre with following space character is replaced against guitar with following space character in all text Melody is replaced against melody in track names only German latin-1 characters ä,ö,ü,Ä,Ö,Ü,ß are replaced against ascii sequences ae,oe,ue,Ae,Oe,Ue,sz in meta lyrics only text [something else] is replaced against [etwas anderes] in all text (because [all] is specified here it was not necessary to escape the [...] parts. Alternative would have been \[something else\]=>\[etwas anderes\] => is replaced against -> in all text \ is replaced against / in meta text only (usually occurs as paragraphs in .kar files but could rarely also occur as normal text in middle of text) [copyright] is replaced against (c) in all text

midisummary

midisummary is a batch tool that generates HTML or text summaries of your MIDI files.
Musicians who need to optimize their MIDI files need an overview to see if all is done correctly.
Modifying MIDI files without enough content information could fail.
This tool does not require commandline usage. All settings are stored in a text file.

Running the same task again checks the existing summaries and generates summaries for new or modified MIDI files again.
It can convert a list of input folders at once (including all sub folders).
You can choose which position information should be added to MIDI commands information: time (mm:ss.millisec), milliseconds, midi units, measure.beat.unit
The tool can generate English or German (Deutsch) output text.
It adds comments to controllers, programs and sysex (from a list of *.sysexdef files).
The output shows tempo, controllers, programs, META text, sysex additionally to some basic information like (tracks, channels, duration, file modification date, file size, midi version, midi resolution)
It can generate a text or html file for each MIDI file or a merged text or html file for all MIDI files in a folder.

usage: midisummary [filename.ini]
midisummary.ini is used by default if no argument is specified.

The options and folders are used from a .ini text file.
A shortcut can be created to start the tool with a mouse click.
A documentation of the possible options can be found here.

midisummary.ini example content

[options]
language=english  ; english or deutsch
logfile=midisummary.log
outputformat=HTML ; HTML or text
timeformat=time  ; time or milliseconds or midiunits or bar
mergefiles=yes  ; yes or no
refresh=no  ; yes or no

[convert]
inputfolder1=C:\Users\User\AppData\Roaming\GN MIDI Solutions\GNMIDI
outputfolder1=english

[sysexdefinitions]
sysexdef1=default.sysexdef
sysexdef2=mine.sysexdef

The MIDI files for this example are included in GNMIDI 3 demo in file menu and were composed and produced by bonmidi music company

gnsummary.htm language=english outputformat=HTML timeformat=time mergefiles=yes
Melodie der Heimat - bonmidi music-DEMO-gm.mid.txt 
     language=english outputformat=text timeformat=bar mergefiles=no
Melodie der Heimat - bonmidi music-DEMO-xg.mid.txt 
     language=english outputformat=text timeformat=bar mergefiles=no


language=deutsch outputformat=HTML timeformat=time mergefiles=yes
Melodie der Heimat - bonmidi music-DEMO-gm.mid.txt 
     language=deutsch outputformat=text timeformat=bar mergefiles=no
Melodie der Heimat - bonmidi music-DEMO-xg.mid.txt 
     language=deutsch outputformat=text timeformat=bar mergefiles=no
screenshot of a HTML midi summary

midicat

midicat concatenates up to 50 binary MIDI files to play sequentially (e.g. medley).

MidiCat concatenates midi files to play sequentially
usage: MidiCat [-beats #[/#]] [-tact] [-noinit] [-nosep] file1.mid file2.mid ... result.mid
-beats #[/#]    pause between songs in quarternotes or rationals (default: 0/4)
-tact           filling pauses between songs must care about exact tact measure sizes
-noinit no initialization between the songs
-nosep  no marker info between the songs

midicat example

midicat "Better Run.mid" "Cold Ice.mid" "Better Run and Cold Ice.mid"

midimerge

midimerge merges all tracks of compatible binary MIDI files to play parallel.

midimerge merges tracks of more songs
usage: midimerge [options] file1.mid file2.mid ... result.mid
-list listfilename      load the input files from a text file (each line contains an input path)
-format0     generate format 0 midi file
-format1     generate format 1 midi file (default)

midimerge examples


midimerge "coldicebass.mid" "coldicedrums0.mid" "coldice_bassdrum1.mid"

midimerge "coldicebass.mid" "coldicedrums1.mid" "coldice_bassdrum0.mid"

midimerge -list "mymergelist.txt"  "coldice_bassdrummelody.mid"

midicut

midicut copies a part between two given positions to a new MIDI file.

midicut copies a part of a midi song into a new file
usage: MidiCut [-q][-ch #[-#]][-from #][-till #][-units][-beats] file.mid cutfile.mid
-version        get program version
-q              be quiet
-channel c[-d]  copy only selected channels c..d (1-16) to output
-from #         start cut at second # (default: 0.0)
-till #         end cut at second # (default: end of song)
-units #-#      cut range between units # - #
-beats #-#      cut range between beats # - # (start of beat)
-cuttext #-#    remove any text before and after cut range

midicut example

midicut -from 0.000 -till 10.000 "Cold Ice.mid"  "Cold Ice Intro.mid"

midicut -channel 10 "Cold Ice.mid"  "Cold Ice Drums.mid"

midimutt

midimutt mutes tracks or channels of midi binaries.

MidiMutt mutes by deleting or changing volume/velocity by 4 methods

(c) 1998-2018 GN MIDI Solutions, Austria, https://www.gnmidi.com
midimutt is no demo. Distributing tool or license is probibited.
Licensed permission for noncommercial use by Max Mustermann.
No permission for distribution.
MidiMutt mutes by deleting or changing volume/velocity by 4 methods
usage: MidiMutt [options] file.mid [newfile.mid]
-version                get program version
-track #[-#] ..         these tracks (1..255) are muted
-channel #[-#] ..       these channels (1-16) are muted
-method=deleteevents    deletes events in matching tracks/channels
-method=deletenotes     deletes notes in matching tracks/channels
-method=silent          set volume of matching channels to silent
-method=silentnotes     set velocity of notes in matching channels to silent
-silent=value           use silent value (0-127). Default is 0.

midimutt example

midimutt -channel 1 coldice_with_melody.mid coldice_without_melody.mid
reads coldice_with_melody.mid and removes the notes of channel 1 

midimutt -channel 1 -method=silent -silent=20 coldice_with_melody.mid coldice_with_silent_melody.mid
changes volume of the muted channels to value 20.

midimutt -track 4-6 coldice_with_melody.mid coldice_without_sometracks.mid
removes the notes contained in track 4,5,6 independent of channel

midistat

midistat collects statistic information from a MIDI file content.

midistat collects statistic information from a MIDI file content
usage: midistat filename.mid [> output]

Without the > redirection it displays the information on screen.
Using the > redirection the output can be written directly to a text file of given name.
EXAMPLES
c:\> midistat coldice8.mid

coldice8.mid: 6 Tracks
Track 1:
Track 2:
  Channels: 1
  Notes: d5 e5 f5 g5 a5 b5 c6 d6 e6 f6 g6-a6 b6 c7 d7 e7 f7 g7 a7
  Programs: RockOrgn
  Velocity: 26 34 42 52 54 56 58 60 62 64 66 70 74 78 82 88 92 96 102 108 114
  Volume: 122
Track 3:
  Channels: 10
  Notes: c3 d3 f3-c#4 e4 a4
  Velocity: 44 50 56 64 66 70 76 78 80 84 86 88 94 98 100 102 104 106 108 110 
            112 114 116 118 120 124
  Volume: 100
Track 4:
  Channels: 2
  Notes: b1 d2 e2 f2 g2 a2 b2 c3 d3 e3 c4
  Programs: FngrBass
  Velocity: 110 114 116 118 120 122 124
  Volume: 86
Track 5:
  Channels: 3
  Notes: f3 g3 a3 c4 d4 e4 f4 g4 a4 b4 c5 e5
  Programs: SteelGtr
  Velocity: 102 108 110 112 114 116 120 122 124 126
  Volume: 73
Track 6:
  Channels: 4
  Notes: g3 a3 c4 d4 e4 f4 g4 a4 b4 c5 d5 e5-g5 a5
  Programs: BrasSect
  Velocity: 94 98 102 104 108 110 112 114 116 118 120 122 124 126
  Volume: 58


C:\> midistat coldice8.mid > coldice8.txt
c:\> dir coldice8.*
08.05.2004  18:47            42.252 coldice8.mid
07.11.2018  10:20               900 coldice8.txt

miditran

miditran modifies notes,velocity,volume by a given factor.

miditran modifies notes,velocity,volume by a given factor
usage: miditran [-q][-channel #[-#]][-velocity #][-volume #][-note #] file.mid transpos.mid
-q              be quiet
-velocity #     apply operation # to all note velocities (-127..+127)
-volume #       apply operation # to all volume events (-127..+127)
-note #         apply operation # to all note values (-127..+127)
-channel #[-#]  changes are done only on these channels (1-16)
-minvalue #     values lower than given minvalue (0-127) are set to minvalue
-maxvalue #     values higher than given maxvalue (0-127) are set to maxvalue
At least one of the options -velocity, -volume, -note must be used.
Default are all channels.
Operations: [+-=]value[]   (+ add value  - subtract value  = assign value).
velocity values are 1-127
EXAMPLES
c:\> miditran -note +2 -channel 1-9 11-16 coldice_MajC.mid coldice_MajD.mid
transposes the notes by 2 half tones except drum channel 10.

C:\> miditran -volume =100 input.mid output.mid
sets volume on all existing channels (1-16) to 100.

C:\> miditran -volume 40 input.mid output.mid
increments volume on all existing channels by 40 (same as -volume +40).

miditran

miditempo modifies tempo by constant value or by percentage of original tempo.

midtempo sets tempo to constant beats/min
usage: midtempo [-perc #][-bpm #][-mspb #] file.mid [newfile.mid]
-version        get program version
-bpm #          # beats per minute (40.0-240.0)
-mspb #         # microseconds per beat (250000-1500000)
-perc #         change song speed by percentage 1-200%
EXAMPLES
c:\> midtempo -bpm 135 "my composition1.mid" "my composition1 (new tempo).mid"
sets the song tempo to 135 beats/minute

C:\> midtempo -perc 80 input.mid output.mid
reduces original tempo by 80% percentage   (e.g. original tempo 100 bpm becomes 80 bpm)

C:\> midtempo -mspb 600000 input.mid output.mid
sets the song tempo to 500000 microseconds per beat (= 120 beats per minute). This allows to specify very exact tempo.

midi1to0

midi1to0 converts a format 1 MIDI file to format 0. It merges all tracks to a single track that contains all channels. It is required for some keyboards or applications that require to use format 0 MIDI files.

usage: midi1to0 [-quiet] [-exact] srcfile.mid dstfile.mid
-quiet  be quiet, don't tell percentage
-exact  solve merging tracks with conflicting channel by
        refreshing all track parameters before playing notes
midi1to0 merges channels into one track
This program only converts format 1 midi files.
EXAMPLES
c:\> midi1to0 input1.mid input0.mid.

You can try the format 1 to format 0 conversion using product demos GNMIDI and GNMIDFMT.
GNMIDI Professional can also batch convert a directory including subdirectories.
GNMIDFMT can also convert many files in a single directory.
This tool can be used with gnbatchexecute for converting many files at once.

www.gnmidi.com © Günter Nagler Contact