The pkgconfig directory is no longer marked for creation assuming that
the system directory is specified in libmt32emu_PKGCONFIG_INSTALL_PREFIX
property so to avoid conflicts
- More of the package metadata fields are now filled from the CMake script
thus reducing duplications
- When the library is build with external sample rate conversion,
field Requires.private is now filled with the related dependency
(either soxr or samplerate) thus fixing build of user applications
that link against statically built libmt32emu in such cases
- Along the way, variable MT32EMU_EXT_LIBS is now unset when building
a shared library to avoid pollution of variable MT32EMU_LIBRARIES
with unnecessary dependencies
- In TVP::process, UB was possible due to right shifts with counter values
exceeding the maximum permitted limit of 31 (similarly to the original
hardware); we now attempt to emulate that in the same way as in
calcVeloMult implemented in 41980704d2
- In TVP::setupPitchChange spotted by clang static analyzer, a negative
value could be shifted left
- mt32emu_get_machine_ids enables to retrieve a list of all supported
hardware configurations as opposed to individual ROM images
- mt32emu_get_rom_ids to retrieve a list of identifiers of all supported
ROMs, optionally for a specific machine
- A couple of convenience functions to identify a given ROM image
without applying any changes to the emulation context
- New function mt32emu_add_machine_rom_file facilitates implementation
of a ROM scanner that traverses files in a given directory and adds
to the emulation context those compatible with a specific machine
That is currently concerns of a set of relevant ROMs only, thus making it
possible to find all ROMs for a desired machine configuration that are
mutually compatible and can be used in the emulation engine.
that now merely wraps <mt32emu/mt32emu.h> for convenience.
This file is autogenerated by the build system.
Although, a reorganisation of public headers is rather imminent,
but it will only happen on next major release.
When users of the library compile code with -Weffc++, this class
triggers warning:
‘class MT32Emu::Service’ has pointer data members
but does not declare ‘MT32Emu::Service(const MT32Emu::Service&)’
or ‘operator=(const MT32Emu::Service&)’
Class Service aggregates an owning raw pointer (mt32emu_context), which
is being taken over via constructor and freed in destructor - this might
lead user to accidentally double free the pointed object if a Service
object was accidentally copied through default copy c-tor or default
assignment operator.
Declare copy c-tor and operator= private to prevent creation of
accidental copy (this fixes the warning).
When upgrading this code to C++11, these declarations should be
marked with '= delete' (and won't need to be private any more).
- New functions mt32emu_merge_and_add_rom_data and
mt32emu_merge_and_add_rom_files accept a pair of ROMs to be merged
and added to the emulation context upon success
- Improved descriptions of functions mt32emu_add_rom_data and
mt32emu_add_rom_file to mention the fact that they only handle full
ROM images yet to highlight the requirement wrt. memory allocation
of the ROM data array
- Added method ROMImage::isFileUserProvided to make memory cleanup easier
wrt. freeing the File of a ROMImage which may not be created internally
as with ROMImages merged from partial ones
- Minor formatting fix in ROMImage
- Mentioned that full ROMImages are required in description of Synth::open
that apparently advertised wrong directory, making all the public
headers global. This is never the intended way and the consumer application
is instead supposed to include headers from the library directory, likewise:
#include <mt32emu/mt32emu.h>
- Added metadata describing raw bitwise ROM dumps from supported hardware
models
- New overloaded methods enable finding a ROMInfo and creating a ROMImage
for a given File and a subset of known ROMInfos, e.g. filtered by type
and/or pairType
- New methods facilitate creation of a full ROM image from a couple
of the respective partial ones
Added support for documenting easily the exact library version
when a particular exported symbol was introduced. This will help
an application developer to quickly find the version requirements
yet adds a possibility to generate version map files automatically
for platforms that support symbol versioning.
- Introduced configuration option libmt32emu_PKGCONFIG_INSTALL_PREFIX.
Because pkgconfig files reside outside the library directory on some
systems, we have to allow the packager to specify pkgconfig prefix
separately.
- The pkgconfig file is no longer included in Runtime packages with shared
library, as is commonly adopted by popular Linux distros.
When creating a Devel package for shared library in DEB and RPM formats,
the package name and resulting package file name are now adjusted
automatically (still, not splitting stuff into several cmake components).
The advanced option libmt32emu_PACKAGE_TYPE is now possible to select
regardless whether a static or shared library is built. For static builds,
values Complete and Devel are identical but for Runtime, documentation
files are only added to the package.
This permits somewhat better build experience when using the top-level
CMakeLists.txt script. Specifically, it is now easy to omit development
files and build both components mt32emu_qt and mt32emu_smf2wav statically
linked with the library with just a single cmake command like
cmake -Dlibmt32emu_PACKAGE_TYPE=Runtime .
introduced in libmt32emu version 2.3.0
Since it is not really necessary in majority of cases but may nevertheless
update global C and C++ locale settings, it must now be explicitly enabled
with the new Cmake option libmt32emu_INSTALL_DEFAULT_LOCALE. Also, it no
longer touches the global C++ locale even if enabled, since that appears
to have no positive effect. So far, it has been found useful for building
shared library with some old versions of MS VC when linking C runtime
statically.
Also, mt32emu-qt now only initialises C locale upon startup.
Without this, a bunch of warnings is generated like:
-----
[ 3%] Building CXX object mt32emu/CMakeFiles/mt32emu.dir/src/Analog.cpp.o
In file included from F:/lang/work/OpenDUNE/munt.git/mt32emu/src/Analog.cpp:22:
F:/lang/work/OpenDUNE/munt.git/mt32emu/src/Analog.h: In destructor 'MT32Emu::Analog::~Analog()':
F:/lang/work/OpenDUNE/munt.git/mt32emu/src/Analog.h:41:21: warning: visibility attribute not supported in this configuration; ignored [-Wattributes]
41 | virtual ~Analog() {}
| ^
-----
- Synth class now exposes method
configureMIDIEventQueueSysexStorage(Bit32u) to select between
the available storage models and for setting the buffer size.
- Both setMIDIEventQueueSize and configureMIDIEventQueueSysexStorage
can now apply their respective settings while the Synth object
is closed. This way extra reallocations of the MidiEventQueue
can be avoided. Note, the effect of setMIDIEventQueueSize now
persists Synth reopenings.
- Minor cleanup to related method and functions.
Introduced helper interface SysexDataStorage that facilitates
various ways the SysEx data is stored. Specifically,
along with the dynamic memory allocation, a storage buffer
can now be preallocated and used to keep the SysEx data
of the MIDI event stored on the queue. This makes it possible
to push MIDI events to the queue even from a realtime thread.