aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 5550f00ee207cceb0a0f261cd5f15823bcebc7bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

   

libADLMIDI

libADLMIDI is a free MIDI to WAV conversion library with OPL3 emulation

Original ADLMIDI code: Copyright (c) 2010-2014 Joel Yliluoma bisqwit@iki.fi

ADLMIDI Library API: Copyright (c) 2015 Vitaly Novichkov admin@wohlnet.ru

Library is based on the ADLMIDI, a MIDI player for Linux and Windows with OPL3 emulation:

http://iki.fi/bisqwit/source/adlmidi.html

Differences with original tool

  • Reverb code has been removed.
  • Doesn't contains platform specific code. Library can be used with various purposes include making of a custom music decoders for a media players and usage with a games

Key features

  • OPL3 emulation with four-operator mode support
  • FM patches from a number of known PC games, copied from files typical to AIL = Miles Sound System / DMX / HMI = Human Machine Interfaces / Creative IBK.
  • Stereo sound
  • Number of simulated soundcards can be specified as 1-100 (maximum channels 1800!)
  • Pan (binary panning, i.e. left/right side on/off)
  • Pitch-bender with adjustable range
  • Vibrato that responds to RPN/NRPN parameters
  • Sustain enable/disable
  • MIDI and RMI file support
  • loopStart / loopEnd tag support (Final Fantasy VII)
  • Use automatic arpeggio with chords to relieve channel pressure
  • Support for multiple concurrent MIDI synthesizers (per-track device/port select FF 09 message), can be used to overcome 16 channel limit

How to build

You can build shared version and additional tools on the Linux when you will run a "make" command and you will have libadlmidi.so and additional tools in the "bin" directory.

You also can build library manually: You need to make in the any IDE a library project and put into it next files (or include those files into subfolder of your exist project instead if you want to use it statically):

  • adlmidi.h - Library API, use it to communicate with library

  • dbopl.h - DOSBOX OPL Emulation header

  • fraction.h - Fraction number handling
  • adldata.hh - bank structures definition

  • dbopl.cpp - DOSBOX OPL Emulation code

  • adlmidi.cpp - code of library *adldata.cpp - Automatically generated dump of FM banks from "fm_banks" directory via "gen_adldata" tool

Example

In the src/midiplay you will found alone CPP file which an example of library usage. That example is a simple audio player based on SDL Audio usage.

To build that example you will need to have installed SDL2 library.

Todo

  • Time based Seek/Tell support
  • Support of title and other meta-tags retrieving
  • Support of real-time listening of incoming MIDI-commands. That will allow to use library as software MIDI Output device to play any MIDI via this library.

Changelog

1.0.0 2015-10-10

  • First release of library