Giter Club home page Giter Club logo

dro2midi's Introduction

---------------------------------------------------------------
 DRO2MIDI - version 1.7 (2021-07-14)
 Written by [email protected]
 Heavily based upon IMF2MIDI written by Guenter Nagler in 1996
 http://www.shikadi.net/utils/
---------------------------------------------------------------

// What is it?
////////////////

DRO2MIDI converts Adlib music (in .dro, .imf or .raw format) into standard 
MIDI files, so that it can be played or edited in most audio applications, or 
so the notes can be extracted to be played on a real instrument.

// Features
/////////////

 * Converts DOSBox .dro captures, id Software .imf songs and Rdos .raw captures

 * Converts OPL frequency changes into MIDI pitchbends

 * Tries to map Adlib instruments to MIDI instruments as best it can, but 
   these mappings can be easily added to and changed

 * Instruments can also be mapped to MIDI percussion

 * OPL rhythm-mode percussion is converted (v1.4 adds support for user-defined 
   mapping via new syntax in the mapping file)

 * The OPL conversion constant can be changed (see -c option) to more 
   accurately convert notes without excessive pitchbend events

// Usage
//////////

  Linux:      $ dro2midi file.dro file.mid

  Windows:  C:\>dro2midi file.dro file.mid

For a list of the command line options run dro2midi with no parameters or 
see below for more details.  For best results, all the .txt data files should 
be in the current directory.

Instrument mappings between Adlib registers and MIDI instruments are stored in 
inst.txt.  This file contains a number of existing mappings, but additional 
mappings can easily be added.  During conversion, if an exact match cannot 
be found the mapping with the closest Adlib parameters will be used instead.  
A message will be printed when this happens, along with a line that can be 
copied into inst.txt to provide an exact match.  This approximation can have 
the unfortunate side effect of providing some odd conversions, such as 
converting a bass-line into a monotonic drum.

To get a perfect conversion you may wish to delete all but the first 
"all-zero" instrument in inst.txt, which will cause all instruments to be 
converted as a piano.  You can then copy the definitions printed during 
conversion one by one into inst.txt, to assign the best-sounding instrument 
without worring about any default mappings taking over.  Alternatively the -i 
option can be used which will disable the closest-match algorithm, and only 
exact matches will be used (again, anything that can't be exactly matched will 
be mapped as a piano.)

// Command-line options
/////////////////////////

-p disables generation of MIDI pitchbends.  This results in a single note-on 
when the instrument sounds, but no further pitch change results until the 
note is switched off again.  This can also be used to prevent the large number 
of small pitchbends generated when the conversion constant is slightly off (but 
see the -c option, which now provides a better way around this.) 

-a will, if pitchbends are disabled with -p, approximate any pitchbend by 
playing the nearest note to the new pitch at the time.  This results in a 
"hammering" of notes during a pitchbend, which while humourous, is probably 
of limited use.

-r disables the conversion of OPL rhythm mode instruments.  As OPL rhythm mode 
conversion is now quite flexible, this option should rarely be needed.

-i will disable the approximation algorithm which selects similar instruments 
when an exact match cannot be found in the mapping file (insts.txt).  This is 
useful when trying to create a perfect map for a single song, as it makes it 
easier to pick out which instruments are being mapped.  This option should not 
be used for the final conversion however, as any instruments that haven't been 
precisely mapped will come out (by default) as a grand piano.  (This default 
mapping is simply the first entry in insts.txt.)

-c changes the conversion constant used when converting OPL notes into their 
MIDI equivalents.  This is the heart of what DRO2MIDI does.  Unfortunately 
depending on which set of documents are available, those writing OPL *players* 
are told the conversion constant is either 49716, or 50000.  Thus half the 
games out there use one, and half use the other.  The result of using the wrong 
constant in the DRO2MIDI conversion is a tiny difference in pitch when the song 
is played (about 1/17th of a cent.)  Most people will be unable to hear the 
difference between these two values, however if the wrong constant is used by 
DRO2MIDI during the conversion into MIDI, the resulting file will contain 
thousands of small pitchbend events, as it tries to approximate the exact OPL  
note played.  Using -c to try a different constant should solve this problem.  
The default constant is 49716, and "-c alt" will change the constant to 50000. 
It is possible to specify an arbitrary constant like "-c 49999" however this 
should be unnecessary unless the same nonstandard constant was used wherever 
the song was originally played.  Note that no error checking is performed here, 
so out of range values could easily crash the program (not that that's a major 
problem though...)  After conversion the number of pitchbend events is 
displayed at the end of the output, so it will be obvious when the correct 
constant is in use as this number will be significantly smaller than with 
any other constant.

-v disables the volume detection.  Normally DRO2MIDI will take the OPL 
carrier's "Level" amount and translate it to a MIDI note velocity.  This will 
result in the output MIDI file more accurately matching the loud and quiet 
parts of the OPL song.  Some songs (e.g. Stunts) somehow manage to work with 
these volume levels set to zero, which results in very quiet MIDI files (there 
is an internal limit as to how quiet a note can sound to prevent it being lost 
entirely.)  If your output MIDI file is much too quiet, this option will cause 
all notes to be played at maximum velocity.

-s instructs dro2midi to write all detected instruments to a .sbi file. This
is a 52 byte binary instrument format for OPL chips created by Creative Labs.
It is supported by applications written to work with the OPL, such as Ad Lib
Tracker 2.

// inst.txt
/////////////

The instrument mappings are stored in inst.txt, in a format like this:

  NO 07-12/4F-00/F2-F2/60-72/08/00-00: patch=15  # Tubular bells

These lines are printed automatically when an unknown instrument is encounted. 
All you will need to do is copy and paste the line into insts.txt and choose 
a MIDI instrument for it.  The file itself is read in from the current 
directory during conversion, so if you run DRO2MIDI in another folder remember 
to copy the file across too or your mappings won't be used.

The first two characters indicate what type of instrument it is.  The 
hexadecimal numbers that follow are the Adlib register values for that 
instrument.  "patch=15" assigns MIDI instrument #15 for this Adlib instrument. 
For percussion, "drum=35" could be used instead.  Anything after a # symbol is 
treated as a comment.  See the comments at the top of the file for more 
detailed information.

The instrument names (and values to supply to the patch= parameter) are stored 
in patch.txt, and the drum names (and numbers) in drum.txt.  You may find 
these files helpful to reference when selecting instruments for conversion.  
(These two files are read in from the current directory during conversion to 
allow the display of instrument names in status messages instead of just 
numbers.)

Note that the parser for insts.txt file is quick and dirty, so it's easy to 
get a syntax error - for example, an otherwise blank line with a single space 
on it will cause an error (so if you get an error about a blank line, make 
sure it really is blank!)

// License
////////////

DRO2MIDI was based on IMF2MIDI by Guenter Nagler.  DRO2MIDI is released under 
the GPL license, except where it is incompatible with IMF2MIDI's original 
license, in which case IMF2MIDI's license takes precedence.

---- Begin IMF2MIDI license ----

IMF2MIDI (c) 1996 was created by Guenter Nagler.

IMF2MIDI is free and may be used as you wish with this one exception:

    You may NOT charge any fee or derive any profit for distribution
    of IMF2MIDI.  Thus, you may NOT sell or bundle IMF2MIDI with any
    product in a retail environment (shareware disk distribution, CD-ROM,
    etc.) without permission of the author.

You may give IMF2MIDI to your friends, upload it to a BBS, or ftp it to
another internet site, as long as you don't charge anything for it.

---- End IMF2MIDI license ----

// Contact
////////////

Source code is available at http://www.shikadi.net/utils/

You can e-mail me at [email protected]

dro2midi's People

Contributors

bsutherland avatar malvineous avatar rofl0r avatar snoopin1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dro2midi's Issues

-i parameter not working

Hi,

It seems that the -i parameters isn't working anymore?
Also i did in the past a version which add Pitchbend selection, Input name for patch file as wall as instuments file and a parameter to insert the first program change as you did but we cannot disable it in this one.

I can give the source in order to imprve this version.
Everything need to be review of course.

Thanks in advance,
Have a good day,
Rgds,

Overzealous instrument detection

The method DRO2MIDI uses to detect OPL2 instruments seems to be different from other OPL tools.

As an example, XCITY.IMF from Bio Menace is shown to contain 6 distinct instruments when opened with tools like Wohlstand's OPL3BankEditor, as shown below:

xcity ins import

The instruments can be individually exported to SBI, although this is a slow process. Using DRO2MIDI's -s option to export instruments is much faster; however, this results in a huge number of SBIs being exported for just one song. For XCITY, DRO2MIDI creates 46 SBIs. The SBIs all have different hashes, meaning "duplicates" (in terms of sound) cannot be automatically removed. I am curious as to why other tools detect far fewer instruments in OPL2 songs, even songs that do use more than one instrument on the same OPL2 channel (like some of Bio Menace's other songs).

Support for KSM files?

Perhaps a rather redundant request, but I'd like to convert Ken's Labyrinth OST under this format into MID to listen to them with other MIDI soundfonts.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.