Commit graph

48 commits

Author SHA1 Message Date
Christoph Oelckers
08d2ac0eee - moved the sound system's sound stream for the music out of the song objects.
It is now being handled by the controlling code.
While of no benefit for GZDoom itself, this finally allows to separate the entire music code into a separate, engine independent project that merely provides streamed music data when not playing on a hardware device (WinMM Midi or CD Audio.)
The tight coupling of the music code with the sound backend made this nearly impossible before
2020-01-05 12:56:39 +01:00
Christoph Oelckers
fce866054e - reordering code a bit to see where the stream must be started. 2020-01-05 12:56:37 +01:00
Christoph Oelckers
e3bb9332d0 - a bit of cleanup - moving internal class declarations into the sources.
Now i_musicinterns.h doesn't bleed the entire implementation everywhere anymore.
2020-01-05 12:56:35 +01:00
Christoph Oelckers
e76f590df8 - moved all configuration code to zmusic project.
The CVARs are now just getting forwarded without any own logic.
2020-01-05 12:56:30 +01:00
Christoph Oelckers
5d73f09ebf - first state of music configuration refactor.
# Conflicts:
#	src/sound/music/midi_cvars.cpp
2020-01-05 12:56:28 +01:00
Christoph Oelckers
3837cf8f0f - ... and the raw OPL format. 2020-01-05 11:53:04 +01:00
Christoph Oelckers
5743a56ef4 - created a new zmusic library which will eventually contain all the music playback code.
Currently all it contains are the MIDI sources and the MIDI devices, the rest needs to be reworked first.

# Conflicts:
#	libraries/zmusic/i_module.cpp
#	libraries/zmusic/i_module.h
#	src/CMakeLists.txt
#	src/i_module.cpp
#	src/i_module.h
#	src/sound/music/midi_cvars.cpp
#	src/utility/i_module.cpp
#	src/utility/i_module.h

# Conflicts:
#	src/CMakeLists.txt
#	src/sound/musicformats/music_opl.cpp
2020-01-05 11:46:20 +01:00
Christoph Oelckers
c52b516c6f - more dependency removal, this time from the MIDI devices.
# Conflicts:
#	src/sound/mididevices/music_win_mididevice.cpp

# Conflicts:
#	src/sound/mididevices/music_softsynth_mididevice.cpp
#	src/sound/mididevices/music_timidity_mididevice.cpp
#	src/sound/mididevices/music_timiditypp_mididevice.cpp
#	src/sound/mididevices/music_wavewriter_mididevice.cpp
2020-01-05 02:43:50 +01:00
Christoph Oelckers
d3bfffbdab - removed all dependencies on ZDoom code from the MIDI sources (including TArray and FileReader.) 2020-01-05 02:36:35 +01:00
Christoph Oelckers
5460c72ee9 - moved the stream handling out of the MIDI device into the MIDIStreamer class.
This isn't the final location but this means that the device is merely a data provider, with the sole exception of the Win32 MIDI device whose unwieldy usage requirements unfortunately dictate much of the needed interface here.
2020-01-05 02:36:30 +01:00
Christoph Oelckers
f15be8b270 - split out the MIDIDevice implementation into its own source file. 2020-01-05 02:36:27 +01:00
Christoph Oelckers
447290aa4f - WildMidi also done. 2020-01-05 02:31:56 +01:00
Christoph Oelckers
30f23738b3 - Timidity++ done. 2020-01-05 02:31:53 +01:00
Christoph Oelckers
08f3a349e8 - work on GUS MIDI device plus some cleanup
This is not tested yet!
2020-01-05 02:31:42 +01:00
Christoph Oelckers
309a45ed48 - Gave OPN device the same treatment
Also made some improvements to the interface.

# Conflicts:
#	src/sound/mididevices/midi_cvars.cpp
2020-01-05 02:31:38 +01:00
Christoph Oelckers
f6eedb737b - same treatment for the OPL Midi player.
# Conflicts:
#	src/sound/mididevices/music_opl_mididevice.cpp
2020-01-05 02:17:53 +01:00
Christoph Oelckers
4aca10e062 - cleared FluidSynthMIDIDevice of most ZDoom dependencies.
# Conflicts:
#	src/sound/mididevices/music_fluidsynth_mididevice.cpp

# Conflicts:
#	src/sound/mididevices/music_fluidsynth_mididevice.cpp
2020-01-05 02:16:30 +01:00
Christoph Oelckers
726f65e91b - more work on music code
- renamed the FluidSetting functions to ChangeSetting so that they can be used as a generic means to change music player options without overloading the virtual function table for each minor thing.
- pass Printf as a parameter to the MIDI renderer to uncouple it from the main GZDoom code.
- throw exceptions when setting up the renderer fails so that this can be handled consistently for all construction errors here.
- delete FluidSynth handles before the constructor aborts.
2020-01-05 02:14:14 +01:00
Christoph Oelckers
9437bcda64 - removed most dependencies on ZDoom code in ADL Midi device. 2020-01-05 02:11:52 +01:00
Christoph Oelckers
a63d90034b - cleaned up the dependencies of the OPL interface layer.
This also removes the OPL dumper because I wasn't able to get any non-broken output from it and have no desire to fix such a niche feature.

# Conflicts:
#	src/sound/mididevices/music_opldumper_mididevice.cpp
2020-01-05 02:11:49 +01:00
Christoph Oelckers
d018b430f7 - made the class definitions of the MIDI devices private to the implementations. 2019-07-09 22:58:08 +02:00
nashmuhandes
ddaae8e614 Added a master volume setting.
# Conflicts:
#	wadsrc/static/language.enu
2019-04-28 22:25:50 +02:00
Christoph Oelckers
da5fccb598 - fixed: Do not pass Sysex messages to Windows's GS Wavetable synth.
This will totally refuse to play a MIDI if that happens.
Duke Nukem's Alienz.mid, which did not play before works after this change.
2018-11-02 13:20:57 +01:00
alexey.lysiuk
a545e7de35 - added end line to various messages
so they don't screw up further output anymore

(cherry picked from commit f17f8c9359)

# Conflicts:
#	src/gl/compatibility/gl_swshader20.cpp
2018-05-12 11:49:10 +02:00
Vitaly Novichkov
6308fb311b Added support for libOPNMIDI Playing device 2018-03-24 17:58:47 +03:00
Rachael Alexanderson
0893f0c01e Merge remote-tracking branch 'origin/master' into adlMIDI 2018-03-22 14:28:54 -04:00
alexey.lysiuk
7f17121df8 Fixed crash in MIDI to wave writer 2018-03-08 11:38:02 +02:00
Christoph Oelckers
2d2d44baad - integrated ADL as a proper device in the MIDI device list.
- resorted the MIDI device menu option by device types (i.e. all SW synths first, FM synths second)
- allow setting the ADL bank.
2018-03-07 21:20:25 +01:00
Christoph Oelckers
fd801b8b94 Merge branch 'adlMIDI'
# Conflicts:
#	src/sound/musicformats/music_midistream.cpp
2018-03-07 20:31:32 +01:00
Christoph Oelckers
9b61ee9618 - fixed: The MIDI wave writer set the sample rate to save at too late.
This was done after the players had already been created. To ensure that everything gets set properly it is necessary to pass the desired sample rate to the device's constructor and let it make sure that a proper sample rate gets set.
2018-03-06 22:41:27 +01:00
Christoph Oelckers
e1bb14803e - print an error message if the requested MIDI device cannot be started.
This will only be done the first time a given setup fails. Repeated messages will be muted.
2018-03-03 08:52:25 +01:00
Christoph Oelckers
4c0f68bcd4 Merge branch 'master' into timidity++
# Conflicts:
#	src/sound/musicformats/music_midistream.cpp
2018-03-02 00:08:12 +01:00
Christoph Oelckers
4ccbc4ea9e - Send a GM reset SYSEX event when music playback is started. 2018-02-28 09:46:28 +01:00
Christoph Oelckers
eb124f6160 - made the sound font loading a bit more error resistant.
- implemented a fallback both for sound font lookup and for MIDI device selection so that if some non-working combination is set up, the player will fall back to something that works.
2018-02-26 16:36:30 +01:00
alexey.lysiuk
4fdf488960 Fixed MSVC compilation warning
VC\include\type_traits(1468): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
src\sound\musicformats\music_midistream.cpp(832): note: see reference to function template instantiation 'std::function<bool (int)>::function<MIDIStreamer::SetMIDISource::<lambda_...>,int,void>(_Fx)' being compiled
2018-02-26 13:22:36 +02:00
Christoph Oelckers
27f9330c81 - reimplemented thr OPL dumoer for MIDI. 2018-02-24 18:55:42 +01:00
Christoph Oelckers
2202a52840 - made the MIDI to WAVE dumper functional again, including the option of choosing the MIDI synth and sound font with which it should be rendered. 2018-02-24 18:19:27 +01:00
Christoph Oelckers
7a851fd3f1 libADL MIDI test. It sounds awful so obviously there's still something wrong here. Definitely not usable yet. 2018-02-23 21:56:34 +01:00
Christoph Oelckers
5da1433c57 - fixed a memory leak and removed debug output. 2018-02-23 18:57:30 +01:00
Christoph Oelckers
88f9f0982c - fixed Timidity++ playback. 2018-02-23 18:33:54 +01:00
Christoph Oelckers
ddedcd9fc2 Removed all conditional checks on HAVE_FLUIDSYNTH
With the current setup it makes zero sense to exclude it. This was all a remnant of its introduction when it couldn't be taken for granted.
2018-02-23 14:36:26 +01:00
Christoph Oelckers
adebd644f2 Rewroter 'writemidi' CCMD to work independently of the currently playing song's data.
The first benefit of separating the MIDI data sources from the playback classes. :)
2018-02-23 14:26:29 +01:00
Christoph Oelckers
9a1479ab08 Separate MIDI streamer and source creation in the high level code. 2018-02-23 13:20:07 +01:00
Christoph Oelckers
9aa1199902 Split the different MIDI format implementations into a separate 'Source' class.
This is necessary to write a universal, device independent wave dumper for MIDIs.
With each format inheriting from the main player class it is not possible to create a generic dumper player.
2018-02-23 12:40:43 +01:00
Christoph Oelckers
ba37f093e0 - use FluidSynth as default MIDI device and allow loading a 'gzdoom.sf2' sound font if none is specified. The search rules for this file will be the same as for gzdoom.pk3. 2017-05-13 12:33:14 +02:00
Christoph Oelckers
f9bb64a5f3 - fixed: MIDIStreamer::Update did not check if the device was still valid.
Stopping a song can delete device while the streamer is still valid.
2017-03-13 00:38:59 +01:00
Christoph Oelckers
daacaa961e - removed Windows includes from two more files. 2017-03-10 23:30:30 +01:00
Christoph Oelckers
5eb9587135 - moved the various music format files into their own directory. 2017-03-10 22:26:02 +01:00
Renamed from src/sound/music_midistream.cpp (Browse further)