Refreshed READMEs which are now provided in the markdown format

This commit is contained in:
sergm
2021-01-09 21:59:59 +02:00
parent 5f12440234
commit 785fb8cc37
7 changed files with 199 additions and 141 deletions

View File

@@ -1,29 +0,0 @@
Patches for DOSBox to add mt32emu MIDI device
dosbox-0.74-3-mt32-patch.diff - diff file to be applied to official DOSBox release v.0.74-3 source distribution.
dosbox-SVN-r4319-mt32-patch.diff - diff file to be applied to official DOSBox sources SVN r4319 (and up, hopefully).
It uses a bit different and clear approach introduced since SVN r3836.
How to build a patched version of DOSBox
========================================
This describes the steps necessary to produce a DOSBox binary with built-in MT-32 emulation using the GNU toolchain.
Note, builds with Microsoft Visual Studio or Xcode are not covered here. On Windows, MSYS can be used.
1. Ensure that the mt32emu library is built and installed in the system. Typically, the library headers should appear
under the /usr/local/include directory and the library binary itself should be in /usr/local/lib. Usual steps
cd <munt source directory>
cmake .
make
[sudo] make install
should do the job.
2. Apply the patch file that corresponds to the DOSBox version being compiled, like this:
cd <DOSBox source directory>
patch -p1 < <munt source directory>/DOSBox-mt32-patch/dosbox-0.74-3-mt32-patch.diff
3. Proceed with autogen and configure, as is normally done to build DOSBox from sources.
4. Adjust DOSBox configuration to pick up the ROM files, etc.

View File

@@ -0,0 +1,38 @@
# Patches for DOSBox to add mt32emu MIDI device
- [dosbox-0.74-3-mt32-patch.diff](https://github.com/munt/munt/blob/master/DOSBox-mt32-patch/dosbox-0.74-3-mt32-patch.diff) -
diff file to be applied to official DOSBox release v.0.74-3 source distribution.
- [dosbox-SVN-r4319-mt32-patch.diff](https://github.com/munt/munt/blob/master/DOSBox-mt32-patch/dosbox-SVN-r4319-mt32-patch.diff) -
diff file to be applied to official DOSBox sources SVN r4319 (and up, hopefully).
It uses a bit different and clear approach introduced since SVN r3836.
# How to build a patched version of DOSBox
This describes the steps necessary to produce a DOSBox binary with built-in MT-32 emulation using the GNU toolchain.
Note, builds with Microsoft Visual Studio or Xcode are not covered here. On Windows, MSYS can be used.
1. Ensure that the _mt32emu_ library is built and installed in the system. Typically, the library headers should appear
under the `/usr/local/include` directory and the library binary itself should be in `/usr/local/lib`. Usual steps
cd <munt source directory>/mt32emu
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
[sudo] make install
should do the job. Note, this sequence will produce a shared library that will be required further on for DOSBox to run.
In order to link the _mt32emu_ library statically, add option `-Dlibmt32emu_SHARED:BOOL=OFF` to the `cmake` command.
Additionally, option `CMAKE_INSTALL_PREFIX` or `DESTDIR` variable can be used to adjust the installation directory.
2. Apply the patch file that corresponds to the DOSBox version being compiled, like this:
cd <DOSBox source directory>
patch -p1 < <munt source directory>/DOSBox-mt32-patch/dosbox-0.74-3-mt32-patch.diff
3. Proceed with `autogen.sh` and `configure`, as is normally done to build DOSBox from sources.
4. Adjust DOSBox configuration to pick up the ROM files and fine-tune mt32emu settings.
To get the complete list of supported configuration options, generate a new DOSBox configuration file, e.g. with command
config -writeconf dosbox-mt32.conf
The new configuration file `dosbox-mt32.conf` also contains descriptions of the related options in the **midi** section and valid value ranges.

68
README.md Normal file
View File

@@ -0,0 +1,68 @@
This repository consists of several related subprojects collected in one place
for convenience.
# [mt32emu](https://github.com/munt/munt/tree/master/mt32emu)
mt32emu is a _C/C++ library_ which allows to emulate (approximately) [the Roland
MT-32, CM-32L and LAPC-I synthesiser
modules](https://en.wikipedia.org/wiki/Roland_MT-32).
# [mt32emu_alsadrv](https://github.com/munt/munt/tree/master/mt32emu_alsadrv)
Comprises of a GUI and a console applications that make use of _mt32emu library_
to provide emulation services via *ALSA MIDI sequencer* interface for Linux
applications. Applications that rely on *raw ALSA MIDI ports* may connect via
virtual raw MIDI ports, e.g. created with help of `snd_virmidi` kernel module.
The GUI application is mostly obsolete and can be replaced with _mt32emu_qt_.
Still, _mt32emu_alsadrv_ may be preferred for systems with limited resources.
# [mt32emu_smf2wav](https://github.com/munt/munt/tree/master/mt32emu_smf2wav)
A console application intended to facilitate conversion a pre-recorded [Standard
MIDI file](https://www.midi.org/specifications-old/item/standard-midi-files-smf)
(SMF) to a WAVE file using the mt32emu library for audio rendering. The output
file is equivalent to a direct recording from a Roland MT-32, CM-32L or LAPC-I
synthesiser module.
# [mt32emu_win32drv](https://github.com/munt/munt/tree/master/mt32emu_win32drv)
Windows MME driver that provides for creating a MIDI output port and
transferring MIDI messages received from an external MIDI program to mt32emu_qt,
the main synthesiser application. It also includes the mt32emu engine built-in
and is able to operate in stand-alone mode if the main application mt32emu_qt
is unavailable.
# [mt32emu_win32drv_setup](https://github.com/munt/munt/tree/master/mt32emu_win32drv_setup)
Helper tools intended to simplify installation / upgrade of the Windows MME
driver mt32emu_win32drv.
# [mt32emu_qt](https://github.com/munt/munt/tree/master/mt32emu_qt)
The main synthesiser application. It facilitates both realtime synthesis and
conversion of pre-recorded SMF files to WAVE making use of the mt32emu library
and [the Qt framework](https://www.qt.io/). Key features:
1. Support for multiple simultaneous synths with separate state & configuration.
2. GUI to configure synths, manage ROMs, connections to external MIDI ports and
MIDI programs and interfaces to the host audio systems.
3. Emulates the funny MT-32 LCD. Also displays the internal synth state in
realtime.
4. Being a cross-platform application, provides support for different operating
systems and multimedia systems such as Windows multimedia, PulseAudio, JACK
Audio Connection Kit, ALSA, OSS and CoreMIDI.
5. Contains built-in MIDI player of Standard MIDI files optimised for mt32emu.
6. Makes it easy to record either the MIDI input or the produced audio output.
7. Simplifies batch conversion of collections of SMF files to .wav / .raw audio
files.
# [DOSBox-mt32-patch](https://github.com/munt/munt/tree/master/DOSBox-mt32-patch)
Patch for the official [DOSBox](https://www.dosbox.com/) release v.0.74 to
demonstrate a possibility to add mt32 MIDI device. Intended for developers and
maintainers of customised DOSBox builds.
# [FreeBSD](https://github.com/munt/munt/tree/master/FreeBSD)
Files related to the port of munt components for [the FreeBSD
system](https://www.freebsd.org/).

View File

@@ -1,43 +0,0 @@
mt32emu
=======
mt32emu is a C/C++ library which allows to emulate (approximately) the Roland
MT-32, CM-32L and LAPC-I synthesiser modules.
mt32emu_alsadrv
===============
ALSA MIDI driver uses mt32emu to provide ALSA MIDI interface for Linux applications (now obsolete).
DOSBox-mt32-patch
=================
Patch for official DOSBox release v.0.74 to demonstrate a possibility to add mt32 MIDI device.
mt32emu_smf2wav
===============
mt32emu-smf2wav makes use of mt32emu to produce a WAVE file from an SMF file.
The output file corresponds a digital recording from a Roland MT-32, CM-32L and LAPC-I
synthesiser module.
mt32emu_win32drv
================
Windows driver that provides for creating MIDI output port and transferring MIDI messages
to mt32emu_qt, the main UI-enabled synthesiser application. It also contains mt32emu engine
and is able to operate in stand-alone mode if the main application mt32emu_qt is unavailable.
mt32emu_win32drv_setup
======================
Helper tools intended to facilitate installation / upgrade of the Windows driver mt32emu_win32drv.
mt32emu_qt
==========
Main synthesiser application. It makes use of mt32emu and Qt to provide for:
1) Multiple simultaneous synths, GUI to configure synths, manage ROMs and connections
2) Funny LCD
3) Easy usage in different operating system environments:
Windows multimedia, PulseAudio, JACK, ALSA, OSS and CoreMIDI supported
4) Play and record Standard MIDI files
5) Perform batch conversion of Standard MIDI files directly to .wav / .raw audio files
FreeBSD
=======
Files related to FreeBSD port of munt.

View File

@@ -1,25 +1,27 @@
Munt mt32emu
============
mt32emu is a module of the Munt project. It produces a C/C++ library
named libmt32emu which allows to emulate (approximately) the Roland
MT-32, CM-32L and LAPC-I synthesiser modules.
mt32emu is a part of the Munt project. It represents a _C/C++ library_
named **libmt32emu** which allows to emulate (approximately) [the Roland MT-32,
CM-32L and LAPC-I synthesiser modules](https://en.wikipedia.org/wiki/Roland_MT-32).
This library is intended for developers wishing to integrate an MT-32 emulator
into a driver or an application. "Official" driver for Windows and a cross-platform
UI-enabled application are available in the Munt project and use this library:
mt32emu_win32drv and mt32emu_qt respectively.
[mt32emu_win32drv](https://github.com/munt/munt/tree/master/mt32emu_win32drv)
and [mt32emu_qt](https://github.com/munt/munt/tree/master/mt32emu_qt) respectively.
Building
========
mt32emu requires CMake to build. See http://www.cmake.org/ for details. For a
simple in-tree build in a POSIX environment, you can probably just do:
mt32emu requires CMake to build. More info can be found at [the CMake homepage](http://www.cmake.org/).
For a simple in-tree build in a POSIX environment, you can probably just run the following commands
from the library directory:
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
sudo make install
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
sudo make install
The library can be built either statically or dynamically linked. In order to facilitate
usage of the library with programs written in other languages, a C-compatible API is provided
@@ -28,26 +30,26 @@ the library as a plugin loaded in run-time.
The build script recognises the following configuration options to control the build:
* libmt32emu_SHARED - specifies whether to build a statically or dynamically linked library
* libmt32emu_C_INTERFACE - specifies whether to include C-compatible API
* libmt32emu_CPP_INTERFACE - specifies whether to expose C++ classes in the shared library
* `libmt32emu_SHARED` - specifies whether to build a statically or dynamically linked library
* `libmt32emu_C_INTERFACE` - specifies whether to include C-compatible API
* `libmt32emu_CPP_INTERFACE` - specifies whether to expose C++ classes in the shared library
(old-fashioned C++ API, compiler-specific ABI).
The options can be set in various ways:
* specified directly as the command line arguments within the cmake command
* by editing CMakeCache.txt file that CMake creates in the target directory
* using the CMake GUI
* specified directly as the command line arguments within the `cmake` command
* by editing `CMakeCache.txt` file that CMake creates in the target directory
* using *the CMake GUI*
By default, a shared library is created that exposes all the supported API.
However, the compiler optimisations are typically disabled. In order to get
a well-performing binary, be sure to set the value of the CMAKE_BUILD_TYPE variable
a well-performing binary, be sure to set the value of the `CMAKE_BUILD_TYPE` variable
to Release or customise the compiler options otherwise.
Besides, an external sample rate conversion library may be used as an optional dependency
to facilitate converting the synthesiser output to any desired sample rate. By default,
an internal implementation provides this function. This can be overridden by disabling
the build option libmt32emu_WITH_INTERNAL_RESAMPLER. The following sample rate
the build option `libmt32emu_WITH_INTERNAL_RESAMPLER`. The following sample rate
conversion libraries are supported directly:
1) libsoxr - The SoX Resampler library - to perform fast and high quality sample rate conversion
@@ -60,14 +62,17 @@ conversion libraries are supported directly:
Hardware requirements
=====================
The emulation engine requires at least 800 MHz CPU to perform in real-time. 8MB of RAM is needed.
The emulation engine requires enough processing power from CPU to perform in real-time.
The exact minimum depends on many factors (e.g. CPU brand, amount of played MIDI messages,
type of audio card and so forth). Roughly, a 800 MHz Intel Pentium III CPU could suffice.
8MB of RAM is needed to run _mt32emu_qt_ with a single synth.
License
=======
Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher
Copyright (C) 2011-2020 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher<br>
Copyright (C) 2011-2021 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public

View File

@@ -1,72 +1,86 @@
Munt mt32emu-qt
===============
mt32emu-qt makes use of libmt32emu and Qt to provide for:
The main synthesiser application that is a part of the Munt project. It makes
use of [the mt32emu library](https://github.com/munt/munt/tree/master/mt32emu)
and [the Qt framework](https://www.qt.io/). It facilitates both realtime synthesis
and conversion of pre-recorded Standard MIDI files to WAVE files. Key features:
1) Multiple simultaneous synths, GUI to configure synths, manage ROMs and connections
2) Funny LCD
3) Easy usage in different operating system environments:
Windows multimedia, PulseAudio, JACK, ALSA, OSS and CoreMIDI supported
4) Play and record Standard MIDI files
5) Perform batch conversion of Standard MIDI files directly to .wav / .raw audio files
1. Support for multiple simultaneous synths with separate state & configuration.
2. GUI to configure synths, manage ROMs, connections to external MIDI ports and
MIDI programs and interfaces to the host audio systems.
3. Emulates the funny MT-32 LCD. Also displays the internal synth state in
realtime.
4. Being a cross-platform application, provides support for different operating
systems and multimedia systems such as Windows multimedia, PulseAudio, JACK
audio connection kit, ALSA, OSS and CoreMIDI.
5. Contains built-in MIDI player of Standard MIDI files optimised for mt32emu.
6. Makes it easy to record either the MIDI input or the produced audio output.
7. Simplifies batch conversion of collections of SMF files to .wav / .raw audio
files.
MIDI Support
============
mt32emu-qt can communicate with other MIDI applications using virtual MIDI ports which depends on the operating system.
_mt32emu-qt_ can communicate with other MIDI applications using virtual MIDI ports which depends on the operating system.
Currently, supported MIDI systems are: Windows Multimedia, CoreMIDI, ALSA MIDI sequencer, ALSA & OSS4 raw MIDI ports and JACK MIDI.
In order to use this feature, the client MIDI applications need to be set up correctly, as well as some more steps may be
necessary on particular systems.
Because CoreMIDI and ALSA MIDI sequencer support virtual MIDI ports natively, these systems seem simplest to use.
As mt32emu-qt starts, it creates a virtual MIDI port and listens for incoming connections. Contrary to that, Windows Multimedia
requires the dedicated MIDI driver to be setup in the system and mt32emu-qt instead communicates with the driver as a proxy.
As _mt32emu-qt_ starts, it creates a virtual MIDI port and listens for incoming connections. Contrary to that, Windows Multimedia
_requires the dedicated MIDI driver_ to be setup in the system and _mt32emu-qt_ instead communicates with the driver as a proxy.
With JACK MIDI, MIDI ports can also be created on the fly, albeit the user does this explicitly via the corresponding commands
in "Tools" menu. Moreover, a whole synth instance can be wrapped into a single JACK client with one MIDI input port and
a couple of output audio ports, so that MIDI and audio processing is performed without explicitly added latency.
Some brief notes follow below related to each MIDI system.
1) Windows Multimedia
1) *Windows Multimedia*
If a system happens to have a hardware MIDI-in port or an existing virtual loopback MIDI port driver, mt32emu-qt readily
supports this configuration and should be able to open any MIDI-in port in the system by using '+' button of "MIDI Input" panel
or "New MIDI port..." item in "Tools" menu.
When there is no MIDI-in port available, the dedicated MIDI driver can be used to forward MIDI messages to mt32emu-qt
for playback. This is done automatically by the driver when it detects a running instance of mt32emu-qt.
When there is no MIDI-in port available, the dedicated MIDI driver can be used to forward MIDI messages to _mt32emu-qt_
for playback. This is done automatically by the driver when it detects a running instance of _mt32emu-qt_.
2) CoreMIDI
Upon startup, mt32emu-qt creates destination "Mt32EmuPort" and listens for connections. The user can create
2) *CoreMIDI*
Upon startup, _mt32emu-qt_ creates destination "Mt32EmuPort" and listens for connections. The user can create
more destinations by using '+' button of "MIDI Input" panel or "New MIDI port..." item in "Tools" menu.
3) ALSA MIDI sequencer
Upon startup, mt32emu-qt allocates a virtual MIDI port with the first available address. This address is displayed
3) *ALSA MIDI sequencer*
Upon startup, _mt32emu-qt_ allocates a virtual MIDI port with the first available address. This address is displayed
in the title of the main window for convenience. Using this address, any MIDI client application can attach.
This MIDI system supports multiple client connections out of the box, so many applications can easily be handled.
4) ALSA & OSS4 raw MIDI ports
This MIDI system has very basic support in mt32emu-qt. The default MIDI port is automatically tried to open at the startup.
4) *ALSA & OSS4 raw MIDI ports*
This MIDI system has very basic support in _mt32emu-qt_. The default MIDI port is automatically tried to open at the startup.
The user can open and close other MIDI ports by using '+' and '-' buttons of the "MIDI Input" panel. There is also
limited support for OSS3 MIDI sequencer primarily intended to communicate with vanilla DOSBox.
limited support for OSS3 MIDI sequencer primarily intended to communicate with vanilla [DOSBox](https://www.dosbox.com/).
Special provisions are needed to create a "virtual MIDI port" in order to provide a way for communication with other
MIDI applications. The simplest approach looks to be making a FIFO and a corresponding link in the "/dev" directory.
For example:
mkfifo /var/tmp/sequencer
sudo ln -s /var/tmp/sequencer /dev/sequencer
mkfifo /var/tmp/sequencer
sudo ln -s /var/tmp/sequencer /dev/sequencer
Linux kernel also supplies a special kernel module that creates several virtual raw MIDI ports in the system. Command:
sudo modprobe snd_virmidi
sudo modprobe snd_virmidi
creates by default 4 virtual raw MIDI ports bound with 4 ALSA MIDI sequencer ports, so both subsystems can interact easily.
5) JACK MIDI ports and realtime synchronous MIDI-to-audio processing
5) *JACK MIDI ports and realtime synchronous MIDI-to-audio processing*
Being cross-platform, JACK MIDI stands out of other platform-specific MIDI systems, yet it may be available along with another.
Hence, mt3emu-qt does not create JACK MIDI ports (clients) automatically, the user has to create as many clients as necessary.
Hence, _mt3emu-qt_ does not create JACK MIDI ports (clients) automatically, the user has to create as many clients as necessary.
In addition, menu option "New exclusive JACK MIDI port" can be used to create a single JACK client that is able to work as
a complete synth with a MIDI input and a couple of audio outputs. However, this synth working in the exclusive mode cannot be
"pinned", thus no additional MIDI sessions can be routed in.
a complete synth with a MIDI input and a couple of audio outputs. However, this synth working in the exclusive mode *cannot be
"pinned"*, thus no additional MIDI sessions can be routed in.
Building
@@ -76,7 +90,7 @@ Cmake is required for building. The minimum set of dependencies is:
1) Cmake - cross platform make utility
@ http://www.cmake.org/
2) Qt library
2) Qt framework
@ http://www.qt.io/
Additional dependencies maybe needed (depending on the platform):
@@ -95,20 +109,20 @@ Additional dependencies maybe needed (depending on the platform):
The build script recognises the following configuration options to control the build:
* mt32emu-qt_WITH_QT5 - to prefer version 5 of Qt over version 4 if both are available"
* mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING - whether to load PulseAudio library dynamically (if available)
* mt32emu-qt_WITH_DEBUG_WINCONSOLE - enables a console for showing debug output on Windows systems
* mt32emu-qt_WITH_ALSA_MIDI_SEQUENCER - specifies whether to use the ALSA MIDI sequencer or raw ALSA MIDI ports
(for Linux targets only)
* `mt32emu-qt_WITH_QT5` - to prefer version 5 of Qt over version 4 if both are available
* `mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING` - whether to load PulseAudio library dynamically (if available)
* `mt32emu-qt_WITH_DEBUG_WINCONSOLE` - enables a console for showing debug output on Windows systems
* `mt32emu-qt_WITH_ALSA_MIDI_SEQUENCER` - specifies whether to use the ALSA MIDI sequencer or raw ALSA MIDI ports
(when targeting Linux platform only)
The options can be set in various ways:
* specified directly as the command line arguments within the cmake command
* by editing CMakeCache.txt file that CMake creates in the target directory
* specified directly as the command line arguments within the `cmake` command
* by editing `CMakeCache.txt` file that CMake creates in the target directory
* using the CMake GUI
Note, the compiler optimisations are typically disabled by default. In order to get
a well-performing binary, be sure to set the value of the CMAKE_BUILD_TYPE variable
a well-performing binary, be sure to set the value of the `CMAKE_BUILD_TYPE` variable
to Release or customise the compiler options otherwise.
To simplify the build configuration process in a non-POSIX environment, the CMake GUI tool
@@ -118,7 +132,7 @@ may come in handy.
License
=======
Copyright (C) 2011-2020 Jerome Fisher, Sergey V. Mikayev
Copyright (C) 2011-2021 Jerome Fisher, Sergey V. Mikayev
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -1,12 +1,14 @@
Munt mt32emu-smf2wav
====================
mt32emu-smf2wav makes use of libmt32emu to produce a WAVE file from an SMF file.
SMF stands for "Standard MIDI File", and files in this format commonly have the
extension ".smf" or ".mid".
_mt32emu-smf2wav_ is a part of the Munt project. It makes use of [the mt32emu
library](https://github.com/munt/munt/tree/master/mt32emu) to produce a WAVE
file from a [Standard MIDI
file](https://www.midi.org/specifications-old/item/standard-midi-files-smf)
(SMF). Files in this format commonly have the extension ".smf" or ".mid".
This program is experimental and mainly intended as an aid to Munt developers
and an example of embedding libmt32emu in a program.
and an example of embedding _mt32emu_ library in a program.
There is no documentation, program arguments are likely to change in future and
there are undoubtedly bugs.
@@ -18,20 +20,23 @@ are likely to produce pleasing output. The MT-32 is *not* a General MIDI device.
Building
========
mt32emu-smf2wav requires CMake to build. See http://www.cmake.org/ for details.
GLIB is a required dependency. Can be found at http://www.gtk.org/.
For a simple in-tree build in a POSIX environment, you can probably just do:
_mt32emu-smf2wav_ requires CMake to build. More info can be found at [the CMake
homepage](http://www.cmake.org/). GLIB is a required dependency. Can be found at
http://www.gtk.org/.
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
sudo make install
For a simple in-tree build in a POSIX environment, you can probably just run the
following commands from the source directory:
cmake -DCMAKE_BUILD_TYPE:STRING=Release .
make
sudo make install
License
=======
Copyright (C) 2009, 2011 Jerome Fisher <re_munt@kingguppy.com>
Copyright (C) 2012-2020 Jerome Fisher, Sergey V. Mikayev
Copyright (C) 2009, 2011 Jerome Fisher <re_munt@kingguppy.com><br>
Copyright (C) 2012-2021 Jerome Fisher, Sergey V. Mikayev
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by