Commit graph

67 commits

Author SHA1 Message Date
Christoph Oelckers
1def61e3e3 - allow changing the reverb and resampling mode setting for WildMidi.
- fixed: WildMidi did not initialize the reverb data structures.
- removed the menu option for midi_timiditylike.
2015-12-30 10:14:18 +01:00
Randy Heit
3ec6ad5018 Add SysEx retrieval to the MIDI file reader 2015-12-29 22:39:38 -06:00
Randy Heit
afc36544b7 Add a WildMidi softsynth device
- This removes the preceding psuedo MIDI device for WildMidi.
2015-12-28 22:16:35 -06:00
Christoph Oelckers
a03b947729 - WildMidi generally working, some cleanup left to do... 2015-11-28 20:58:14 +01:00
Christoph Oelckers
6bb79be85c - got rid of std::auto_ptr, courtesy of Blzut3's patch. 2015-04-25 17:50:57 +02:00
Christoph Oelckers
c91745c714 - some fixes to make OpenAL branch compile with VC++ 2013 and OpenAL support. 2015-04-24 17:42:56 +02:00
Chris Robinson
a8348b13de Merge remote-tracking branch 'zdoom/master' into openal
Conflicts:
	output_sdl/CMakeLists.txt
	src/namedef.h
2015-01-15 13:08:05 -08:00
alexey.lysiuk
7d231c3008 Removed unnecessary SDL #include's 2014-12-16 22:56:09 +02:00
Chris Robinson
1a40c95f84 Rename some FMOD references to be generic sound system
Since they relates to other sound backends as well, there's no need to single
out FMOD in these places.
2014-06-26 16:58:18 -07:00
Chris Robinson
0017e1e6e8 Use a FileReader to handle music resources and audio decoding
Instead of the previous method where there'd be a filename and offset, and/or a
memory pointer, this uses a class to access resource data regardless of its
underlying form.
2014-06-25 04:25:36 -07:00
Braden Obrzut
d8ff4ec281 - Fixed: All clang 5.0 warnings.
- Renamed autostart/autozend since Xcode’s build process links in strictly alphabetical order.
2014-01-05 19:50:09 -05:00
Randy Heit
3123925fa8 - Fixed: Changing fluid_chorus and fluid_reverb did not take effect until the next song started.
SVN r3994 (trunk)
2012-12-21 23:58:33 +00:00
Randy Heit
f94b38fd7f - Fixed: The softsynths could get stuck on the last notes of nonlooping songs.
SVN r3426 (trunk)
2012-03-11 04:30:35 +00:00
Randy Heit
9457a1b3f8 - So, apparently the XMIDI library uses a fixed 120 Hz clock for MIDI events. As a result, we
should ignore any tempo events in XMIDI songs that were left over from the original MIDI
  files, since the converter didn't remove them.

SVN r3384 (trunk)
2012-02-23 02:22:56 +00:00
Randy Heit
c3dba9ca9a - Added writemidi console command. If the currently playing song is a MIDI variant, this will
write it to disk.

SVN r3383 (trunk)
2012-02-22 03:28:33 +00:00
Randy Heit
170284ad57 - Added Gez's HMI/XMI division fixes, and partially the XMI tempo fix (not currently used).
SVN r3377 (trunk)
2012-02-21 20:19:25 +00:00
Randy Heit
4a9892725d - Use the so-called SafeTerminateProcess() function to kill the child TiMidity++ process instead
of signaling an event. I would have preferred to use GenerateConsoleCtrlEvent(), but since it
  requires the caller be attached to the same console as the process it wants to kill, it's
  pretty much worthless. We will continue to look for the presence of the event name in the
  TiMidity++ binary despite no longer using it, because standard TiMidity++ builds do not write
  to stdout in binary mode on Windows systems.

SVN r2980 (trunk)
2010-11-04 03:47:49 +00:00
Christoph Oelckers
0490c35347 - added Edward-san's improvements for changemus command.
SVN r2902 (trunk)
2010-10-05 22:35:59 +00:00
Christoph Oelckers
6d78ff3469 - Backported GZDoom revisions 1018-1019: Fixed spelling of "pseudo" because it bugged me too much. ;)
SVN r2880 (trunk)
2010-10-02 13:49:33 +00:00
Randy Heit
b2b84ad11f - Fixed snd_mididevice so that changing it immediately restarts the song for all devices, not
just Windows system devices.
- Remove SMF generation from i_music.cpp, since the psuedo-MIDI devices do this now.

SVN r2875 (trunk)
2010-10-02 04:12:21 +00:00
Randy Heit
90dd40c58f - Reimplemented TiMidity++ playback so that it also can handle XMI subsongs.
SVN r2874 (trunk)
2010-10-02 03:36:19 +00:00
Randy Heit
b6941be55f - Reimplemented FMOD MIDI playback as a psuedo-MIDI device so that it can take advantage of XMI subsongs.
SVN r2872 (trunk)
2010-10-02 02:19:50 +00:00
Randy Heit
bc08502132 - Pass SMF files through the MIDI conversion process too, to give TiMidity++ and FMOD some
degree of support for songs that use loop controllers to loop the song back to a point after
  the very beginning of the song.
- Enable loops during SMF generation. Infinite loops will be clamped to some finite amount. (This is currently 30, so a 3 minute song will still restart from the very beginning after 90 minutes)
- Fixed: The SMF, HMI, and XMI readers all generated invalid MEVT_NOP events.
- Fixed: SMF generation died on songs that set their tempo during the initial beat.


SVN r2864 (trunk)
2010-09-29 03:35:53 +00:00
Randy Heit
5a3b3631c3 - Added XMIDI support (including subsongs).
- Moved unaligned accessors into m_swap.h.

SVN r2859 (trunk)
2010-09-28 03:58:41 +00:00
Randy Heit
4397ef3323 - Added HMP file support.
SVN r2849 (trunk)
2010-09-24 02:46:48 +00:00
Randy Heit
5871712fd4 - Fixed incorrect definition of FLUID_FAILED when building with DYN_FLUIDSYNTH enabled.
SVN r2818 (trunk)
2010-09-18 02:12:49 +00:00
Randy Heit
070ec75785 - Cleaned up the ugly MIDI song creating code a little.
- Added a generic Standard MIDI File creator that works with any of the sequencers. mus2midi.cpp
  is no longer used but is kept around as a reference.

SVN r2677 (trunk)
2010-09-03 05:08:05 +00:00
Randy Heit
81e21b0688 - Renamed music_midi_midiout.cpp to music_smf_midiout.cpp.
- Moved MIDI precaching logic into MIDIStreamer so that SMF and HMI files can both use the
  same implementation.
- Added a player for HMI midi files.

SVN r2675 (trunk)
2010-09-02 23:17:58 +00:00
Randy Heit
6f82db47b8 - Merge the shared code for the softsynths into a common base class.
SVN r2560 (trunk)
2010-08-20 04:21:53 +00:00
Randy Heit
eafb0ab7cf - Expose more FluidSynth settings through these cvars:
* fluid_samplerate
  * fluid_threads
  * fluid_reverb_roomsize
  * fluid_reverb_damping
  * fluid_reverb_width
  * fluid_reverb_level
  * fluid_chorus_voices
  * fluid_chorus_level
  * fluid_chorus_speed
  * fluid_chorus_depth
  * fluid_chorus_type

SVN r2559 (trunk)
2010-08-19 23:11:16 +00:00
Randy Heit
a68e9c8fa6 - Added a dlopen() version of on-demand FluidSynth loading and exposed it
to CMake through the DYN_FLUIDSYNTH option.



SVN r2558 (trunk)
2010-08-19 20:46:19 +00:00
Randy Heit
f389cd8b0f - Add on-demand loading for fluidsynth.dll. This also lets you build with FluidSynth support
without actually having the FluidSynth development files installed.

SVN r2557 (trunk)
2010-08-19 16:49:43 +00:00
Randy Heit
1fa4bbf69c - Added FluidSynth support as snd_mididevice -5. Only tested with Linux. I will have
to try compiling it myself on Windows to see if it's really that slow or if
  Ubuntu just ships an unoptimized version, because performance is pretty pathetic
  when compared to the other options. (I understand that it's a complete SoundFont2
  renderer, so it is understandably slower than something like TiMidity++, but still.
  Does it really need to be around 10x slower? I played with the chorus, reverb, and
  interpolation settings, and none of them seemed to make much difference in
  performance.)



SVN r2545 (trunk)
2010-08-15 19:54:59 +00:00
Randy Heit
503b934938 - Added better error messages for MIDI playback failure than just "MIDI playback failure".
SVN r2383 (trunk)
2010-06-20 04:41:23 +00:00
Randy Heit
5300572b88 - Moved USE_WINDOWS_DWORD definition out of music_gme.cpp and into i_musicinterns.h.
SVN r1632 (trunk)
2009-06-04 00:58:42 +00:00
Randy Heit
a8de4fc2da - Fixed compilation of i_keyboard.cpp with MinGW, because w32api still doesn't have
everything that was new for XP.
- Swapped snes_spc out for the full Game Music Emu library.

SVN r1631 (trunk)
2009-06-03 03:05:02 +00:00
Christoph Oelckers
a908834a11 - added some default definitions for constants that may miss in some headers.
- replaced __va_copy with va_copy per Chris's suggestion.
- replaced #include <malloc.h> with #include <stdlib.h> where possible.


SVN r1524 (trunk)
2009-04-07 07:06:07 +00:00
Randy Heit
9f21b22cc5 - Fixed spurious warnings on 32-bit VC++ debug builds.
- Made the subsong (order) number a proper parameter to MusInfo::Play()
  instead of requiring a separate SetPosition() call to do it.



SVN r1104 (trunk)
2008-08-03 03:54:48 +00:00
Randy Heit
01f59fa85f - Added an alternate module replay engine that uses foo_dumb's replayer, a
heavily customized version of DUMB (Dynamic Universal Music Bibliotheque).
  It has been slightly modified by me:
  * Added support for Ogg Vorbis-compressed samples in XM files ala FMOD.
  * Removed excessive mallocs from the replay core.
  * Rerolled the loops in resample.c. Unrolling them made the object file
    ~250k large while providing little benefit. Even at ~100k, I think it's
    still larger than it ought to be, but I'll live with it for now.
  Other than that, it's essentially the same thing you'd hear in foobar2000,
  minus some subsong detection features. Release builds of the library look
  like they might even be slightly faster than FMOD, which is a plus.
- Fixed: Timidity::font_add() did not release the file reader it created.
- Fixed: The SF2 loader did not free the sample headers in its destructor.


SVN r995 (trunk)
2008-05-29 23:33:07 +00:00
Randy Heit
c86d7e0afd - Fixed: FString::StripRight() stripped the final character of the string if
there were no designated characters to strip at the end of it.
- Added support for Shoutcast/Icecast playlists.
- Added an error message when a playlist could not be opened.
- Added support for PLS format playlists, in addition to M3U.
- Changed FPlayList to use an array of FStrings.
- Fixed: Playlists required every song to be specified by an absolute path.


SVN r951 (trunk)
2008-04-30 05:36:24 +00:00
Randy Heit
effe9427fd - Added the writewave command to write the internal TiMidity's output to a
wave file.
- Changed the default channel velocity for MUS files from 64 to 100 to
  better match apparent MIDI practice. (Would like to know what this is
  supposed to be.)
- Changed the mus2midi channel assignments to match the internal player's.
- Fixed: apply_envelope_to_amp() should clamp the mix levels to 0.


SVN r926 (trunk)
2008-04-19 21:36:53 +00:00
Randy Heit
f6866df0e6 - Made the maximum number of TiMidity voices configurable through the
timidity_voices cvar.
- Added stats lines for the OPL and Timidity MIDI devices.
- Completely changed the way TiMidity volume calculations are done. It
  should now be extremely close to the output a real GUS would produce with
  its official MIDI player (excepting where TiMidity normalizes sample
  volumes). The new equations more closely match what is specified by the DLS
  and SF2 specs (but not quite), so I presume it's also more musically
  correct than what TiMidity (and TiMidity++) do.


SVN r925 (trunk)
2008-04-19 05:57:09 +00:00
Christoph Oelckers
96b72f2e33 - Changed the internal Timidity player so that it uses timidity_mastervolume
because it has the same sound volume issues as the external one.
- Replaced use of stdio in Timidity with FileReader and added the option to read
  from the lump directory. If the main config file is inside the lump directory
  it will assume that everything else is as well. If it is a real file it will be
  assumed that the rest is real files as well.
- Fixed: None of the error returns in Timidity::read_config_file closed the file being read.


SVN r906 (trunk)
2008-04-12 21:36:10 +00:00
Randy Heit
b340f9c762 - Removed some GCC warnings.
- Fixed: MinGW doesn't have _get_pgmptr(), so it couldn't compile i_main.cpp.
- Fixed: MOD_WAVETABLE and MOD_SWSYNTH are not defined by w32api, so MinGW
  failed compiling the new MIDI code.
- Fixed: LocalSndInfo and LocalSndSeq in S_Start() need to be const char
  pointers, since "" is a constant.
- Fixed: parsecontext.h was missing a newline at the end of the file.


SVN r904 (trunk)
2008-04-12 05:33:20 +00:00
Randy Heit
0d18580ff0 - Fixed: Timidity::Channel::mono, rpn, and nrpn were not initialized. In
particular, this meant that every channel was almost certainly in mono mode,
  which can sound pretty bad if the song isn't meant to be played that way.
- Added bank numbers to the MIDI precaching for Timidity, since I guess I do
  need to care about banks, if even the Duke MIDIs use various banks.
- Fixed: snd_midiprecache only exists in Win32 builds, so gameconfigfile.cpp
  shouldn't unconditionally link against it.
- Fixed: pre_resample() was still disabled, and it left two samples at the end
  of the new wave data uninitialized.


SVN r903 (trunk)
2008-04-12 05:04:37 +00:00
Randy Heit
10c0d67b78 - Changed the MIDIStreamer to send the all notes off controller to each
channel when restarting the song, rather than emitting a single note off
  event which only has a 1 in 127 chance of being for a note that's playing
  on that channel. Then I decided it would probably be a good idea to reset
  all the controllers as well.
- Increasing the size of the internal Timidity stream buffer from 1/14 sec
  (copied from the OPL player) improved its sound dramatically, so apparently
  Timidity has issues with short stream buffers. It's now at 1/2 sec in
  length. However, there seems to be something weird going on with
  corazonazul_ff6boss.mid near the beginning where it stops and immediately
  restarts a guitar on the exact same note.
- Added a new sound debugging cvar: snd_drawoutput, which can show various
  oscilloscopes and spectrums.
- Internal TiMidity now plays music.
- Changed the progdir global variable into an FString.

SVN r900 (trunk)
2008-04-11 04:59:23 +00:00
Randy Heit
68e4b3d946 - Reimplemented snd_midiprecache, now for MIDI as well as MUS, and
defaulting to false.


SVN r895 (trunk)
2008-04-09 03:55:04 +00:00
Randy Heit
3a5afd1418 - Added support for dumping from RAW/DRO/IMF files, so now anything that
can be played as OPL can also be dumped.
- Removed the opl_enable cvar, since OPL playback is now selectable as just
  another MIDI device.
- Added support for DRO playback and dual-chip RAW playback.
- Removed MUS support from OPLMUSSong, since using the OPLMIDIDevice with
  MUSSong2 works just as well. There are still lots of leftover bits in
  the class that should probably be removed at some point, too.
- Added dual-chip dumping support for the RAW format.
- Added DosBox Raw OPL (.DRO) dumping support. For whatever reason,
  in_adlib calculates the song length for this format wrong, even though
  the exact length is stored right in the header. (But in_adlib seems buggy
  in general; too bad it's the only Windows version of Adplug that seems to
  exist.)
- Rewrote the OPL dumper to work with MIDI as well as MUS.


SVN r872 (trunk)
2008-04-03 02:31:39 +00:00
Randy Heit
f23e9df084 - Fixed: OPLMIDIDevice sent the wrong pitch wheel value to the player code.
Missimp.mid sounds a lot better now, though still a little off.
- Fixed: MIDI files that had ticks with nothing but meta-events did not play
  properly. (fixes sonic3_finalboss.mid)


SVN r868 (trunk)
2008-03-30 02:51:34 +00:00
Randy Heit
930de248fd - Applied Const's Makefile.linux changes.
- Made the OPL MIDI synth available from Linux.



SVN r866 (trunk)
2008-03-30 00:04:09 +00:00