blob: 9a8ed7cb14b68f93bd3cc8dfa3c21afa7012b046 (
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
==================================================================================
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
1.0.1 2015-01-15
* Fixed freezing on invalid loop points (for cases when loopEnd going before loopStart or both points are at same position)
* Enabled volume updating while note is playing
|