Commit graph

151 commits

Author SHA1 Message Date
Randy Heit
5ee988f607 Fixed: Applying reverb with FMOD 4.36.yy killed sound
- It turns out that the FMOD_REVERB_PROPERTIES structure actually changed
  with 4.36.00 and not with 4.38.00.
2016-02-06 19:29:13 -06:00
Randy Heit
09a17c2198 Quiet some narrowing conversion warnings from VS2015 2016-02-05 22:18:53 -06:00
Randy Heit
16781e47ae Use a 64k stream buffer for all streams, not just net streams
- FLACs need a larger buffer than the default to run without starving on
  later versions of FMOD.
2016-01-14 20:41:09 -06:00
Kyle Evans
7c6237e134 <stdlib.h> has replaced <malloc.h> on FreeBSD as well 2015-12-10 21:24:37 -06:00
alexey.lysiuk
621116a289 Disabled loading of SDL output plugin for FMOD Ex on OS X
Long path to executable file corrupts stack inside FMOD library
This plugin is not being built for OS X, output through CoreAudio works just fine
2015-09-18 10:53:46 +03:00
Christoph Oelckers
3c1fa3bed9 - fixed some GCC warnings. 2015-04-29 00:19:21 +02:00
Christoph Oelckers
aecff68a4d - cleanup of sound system startup and menu handling:
* added global functions that check whether FMod and OpenAL are present, without initializing the sound backend.
* make sound init code more fault tolerant. It will now try to switch between FMod and OpenAL if the currently active one cannot be found but the other one can.
* added 'ifoption' checks for sound backend to menu code.
* only show sound backends which are present and hide the options for the ones which are not.
2015-04-26 12:13:21 +02:00
Christoph Oelckers
8e70a9b894 - added a NULL check to FMODStreamCapsule destructor, just to be safe. 2015-04-26 09:58:10 +02: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
d880783784 - make OpenAL and the decoder libraries delay loaded so that ZDoom can still start without them being present.
This required the addition of a few exception handlers so to avoid #ifdef overuse I also added some #defines for non-Windows systems that allow using __try and __except directly in the code without #ifdef'ing them out.
2015-04-25 12:25:10 +02:00
Christoph Oelckers
1f2a431d15 Merge branch 'master' into openal 2015-04-24 09:21:06 +02:00
Randy Heit
a7ff9478a7 Fixed: S_PrecacheLevel() could create orphan channels
- S_PrecacheLevel() must also mark currently playing sounds as
  used. If we don't, the sound could be unloaded and the underlying
  channel stopped without triggering a channel callback. That would leave
  the code in s_sound.cpp thinking the sound is still playing even though
  it isn't.
- Added an invalid channel check to FMODSoundRenderer::StopChannel() so
  that orphan channels passed to it will be returned at least when
  S_StopAllChannels() is called.
2015-04-22 20:33:08 -05:00
Randy Heit
7ee1853403 Remove OpenAL and Sound Manager output options for FMOD
- OpenAL never actualy worked properly and was removed in later FMODs.
- Sound Manager was deprecated by Apple long ago and is not supported for
  64-bit applications. It was also removed in later FMODs.
2015-04-22 19:09:33 -05:00
Randy Heit
dba76c1aea Disable PCM-8 output when not using DirectSound
- PCM-8 sounds like garbage with WASAPI and WaveOut, so force anything not
  DirectSound to use PCM-16 if PCM-8 is selected.
2015-04-22 18:32:45 -05:00
Christoph Oelckers
c249157876 Merge branch 'master' into openal 2015-03-24 17:59:08 +01:00
Edoardo Prezioso
d880b84ea0 - Fixed build with FMOD 4.40.x-4.42.x.
The 'Prologic' speakermode enumeration is removed since 4.40, not 4.44.
This makes possible to build it on linux x64, as the latest version of FMOD which has the dedicated linux64 download link is 4.42.
2015-02-27 15:24:22 +01:00
Randy Heit
a69a06c249 Enable underwater effect for FMOD 4.36+
- The FMOD_DSP_TYPE_REVERB unit was removed in FMOD 4.36. It has been
  replaced by a FMOD_DSP_TYPE_SFXREVERB unit, which is what should have
  been used in the first place.
2015-02-26 21:52:03 -06:00
Randy Heit
410d3007d3 Allow building with FMOD 4.34 2015-02-26 18:49:10 -06:00
Chris Robinson
e8233d7e87 Merge remote-tracking branch 'zdoom/master' into openal 2014-07-16 08:31:12 -07:00
Braden Obrzut
fa5dfe79ae - Disable cubic and spline resamplers on 64-bit with fmod 4.26 since they crash. 2014-07-15 21:07:07 -04:00
Chris Robinson
3d33f565a4 Use a proper, more unique, pointer formatter for the open callback 2014-06-25 17:10:17 -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
Chris Robinson
7ff7c151a8 Merge remote-tracking branch 'origin/master' into openal
Conflicts:
	src/CMakeLists.txt
2014-06-15 12:04:15 -07:00
Randy Heit
8b02bb55aa Fix compiling with FMOD 4.36
- That stuff I thought that went poof in FMOD Ex 4.37 was apparently
  already gone in 4.36.
2014-01-30 20:30:40 -06:00
Christoph Oelckers
7cb70f60b3 - removed duplicate #define warning in fmodsound.cpp.
- commented out output of Cr0NpxState for floating point state because this variable was renamed in most recent Windows headers.
- added CMAKE option to generate assembly output for release builds.
- added my CMake-based project directory to .gitignore.
2013-11-28 11:03:19 +01:00
Braden Obrzut
97d7b1e59e Merge branch 'origin/maint'
Conflicts:
	src/sound/fmodsound.cpp
2013-10-23 19:39:22 -04:00
Edoardo Prezioso
4ce0574b3f - Use a more conformant C++ preprocessor macro identifier for Unix systems.
The 'unix' identifier isn't defined when '-std' is passed to the compiler (tested with gcc and clang), so use '__unix__' which is well enough documented.
2013-07-30 11:46:14 +02:00
Christoph Oelckers
db562142f0 - Fix c++11 literal suffix warnings / patch by Edward-san. 2013-07-22 22:25:44 +02:00
Christoph Oelckers
a6ba2ce8b9 - added DavidPH's patch for compiling with FModEx 4.44.01. 2013-06-23 18:47:39 +02:00
Randy Heit
1b9c71b252 - Added S_ChangeSoundVolume() to change the volume of an already playing sound, accessible
through the new ACS function SoundVolume.

SVN r4318 (trunk)
2013-06-01 17:46:50 +00:00
Randy Heit
3ddac32b4f - Because setting a DSP unit inactive completely ceases all processing on it, including timing,
sounds queued up while the Channel Group Target Unit is inactive will all play at the same time
  once the unit is made active. To avoid this, it is now only deactivated when the gamestate is
  GS_LEVEL. Otherwise, it just gets muted. Fixes http://forum.zdoom.org/viewtopic.php?f=2&t=33592 "Strife voices overlap"

SVN r3818 (trunk)
2012-08-10 03:49:50 +00:00
Randy Heit
12ef53a2ff - snd_midipatchset and fluid_patchset are now processed through NicePath() for variable
substitution. In addition, on Windows, if they contain no path separator, they will
  automatically have $PROGDIR prepended to them.

SVN r3781 (trunk)
2012-07-21 03:46:36 +00:00
Randy Heit
d6c3d77a38 - Fixed: Stereo sound volume reduction should only be done for stereo sounds played in 3D. Head-
relative ones should remain full volume.

SVN r3540 (trunk)
2012-04-08 04:57:59 +00:00
Randy Heit
bff5a9b8d8 - Fixed: Trying to init FMOD with profiling enabled when the network socket was in use would fail.
We now fallback to no profiling when this happens.

SVN r3468 (trunk)
2012-03-22 22:40:30 +00:00
Randy Heit
ebd115e7ca - Removed snd_3dspread, because it totally does not do what I want. I was using it to preserve
some of the stereoness of stereo sounds played in 3D. My testing was done only with stereo
  speakers, however, and I did not realize that it was moving the perceived physical location
  of the sound itself (because it sounded fine with my two speakers). So when 3D spread started
  working with mono sounds as well in FMOD 4.28, sound positioning was completely broken for
  everything when outputting to more than two speakers, because sounds were being spread
  across a 180 degree arc.

  Whoops!

  Stereo sounds are now completely mono when not played by you, the listener.

SVN r3357 (trunk)
2012-02-14 03:15:13 +00:00
Randy Heit
68fbd75897 - Fixed compilation with FMOD 4.38+. The removal of hardware voices and EAX was a fairly
major change, so I'm making no provisions for using older FMOD DLLs when compiled with the
  4.38 API. However, sound positioning is still broken like in 4.28, so you are recommended
  to continue building with 4.26. Also, the Freeverb-based DSP unit is no longer present in
  FMOD, so the underwater effect is currently unavailable when using 4.38 until I can figure
  out how to make it work with the SFX Reverb unit instead. (And on that topic, the Freeverb
  DSP was officially only for stereo outputs, so I really shouldn't have been using it in the
  first place.)
- Since I would like to eventually figure out the sound positioning issues with the newer
  FMODs, the following have been added:
  * snd_drawoutput now labels its outputs with the speakers they represent.
  * DCanvas::DrawTextA was added as an alias for DrawText, since the Windows headers #define
    DrawText to a Unicode/non-Unicode variant.
  * The loopsound console command was added to spawn an actor at the player's location and
    have it loop a sound infinitely.
  Hopefully I can figure it out. FMOD's 3D example works, so I assume the problem lies with
  my code, though I don't really know where to begin looking for the problem.

SVN r3350 (trunk)
2012-02-10 00:53:50 +00:00
Braden Obrzut
5c81cf20ba - Merged r1236, r1237, and r1240 of GZDoom.
SVN r3279 (trunk)
2011-08-14 23:53:20 +00:00
Braden Obrzut
f42358ad08 - Backported FMOD Ex 4.34 fixes from gzdoom-macosx. (With changes to continue to allow compilation with 4.22-4.28.)
SVN r3278 (trunk)
2011-08-13 21:11:09 +00:00
Christoph Oelckers
f84368677a - updated OpenAL branch.
SVN r3269 (openal)
2011-07-08 22:00:23 +00:00
Christoph Oelckers
1993e969b7 - GCC warning fixes (GCC stupidity for the most part.)
SVN r3154 (trunk)
2011-02-19 08:59:43 +00:00
Randy Heit
869b9c9ccc - Fixed: FMODSoundRenderer::DrawWaveDebug() only allocated enough space for the wavearray based
on the window_size, so for large numbers of output channels, it would not allocate enough
  space for the spectrum data (which is definied by SPECTRUM_SIZE, not the window_size) and
  write junk on the stack when drawing the spectrums, causing a crash.

SVN r3087 (trunk)
2011-01-02 18:11:48 +00:00
Christoph Oelckers
5ff3b3f329 - added Gez's VOC loader.
SVN r2901 (trunk)
2010-10-05 22:31:22 +00:00
Christoph Oelckers
5e824ba0e0 - sync OpenAL branch with trunk.
SVN r2780 (openal)
2010-09-15 12:31:18 +00:00
Randy Heit
2c397b1aac - Add a default search for Creative's CT4MGM.SF2 on Windows if fluid_patchset is unspecified.
- Use fluid_patchset to specify the SoundFont(s) for FluidSynth instead of doubling up with
  snd_midipatchset, which is already used by FMOD.

SVN r2555 (trunk)
2010-08-19 15:46:49 +00:00
Randy Heit
d53ef3f38a - Oops. These changes didn't belong in the repository.
SVN r2547 (trunk)
2010-08-15 20:05:35 +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
Christoph Oelckers
5603c70574 [OpenAL branch]
- apply Chris's latest patch.




SVN r2534 (openal)
2010-08-13 07:07:26 +00:00
Randy Heit
3416a7fc47 - Fix compilation with MinGW + w32api and clean up warnings.
SVN r2505 (trunk)
2010-08-11 03:56:31 +00:00
Randy Heit
c29639426f - Sounds that define a loop no longer play looped by default. They must be started with
CHAN_LOOP so that the higher level sound code knows they loop and can handle them accordingly.
- Added support for a LOOP_BIDI tag. Set it to "1", "On", "True", or "Yes" to use a
  bidirectional loop. This only works with sounds and not music, because music is streamed
  so does not support them.
- Extended custom loop support to work with samples as well as music.

SVN r2434 (trunk)
2010-07-15 23:07:41 +00:00
Randy Heit
99a2014ead - Added support for custom loop points for songs. This does not work with MP3 because of the
way MP3 obfuscates custom tags. Vorbis and FLAC are fine. (I could make it work with MP3,
  but you should be using Vorbis instead.) They are:
  * LOOP_START: Start time for the loop. If omitted, the song repeats from the beginning.
  * LOOP_END: End time for the loop. If omitted, the song loops at the end. (If you need to specify this, why aren't you using a shorter song.)
  You only need to specify one of these tags to set the custom loop. Naturally, you can set
  them both, as well. The format for each tag is the same:
  * If it contains a colon (:), it specifies by time. This may be of the form 00:00:00.00
    (HH:MM:SS.ss) to specify by play. Various parts may be left off. e.g. To start the loop
    at 20 seconds in, you can use ":20", 0:20", "00:00:20", ":20.0", etc. Values after the
    decimal are fractions of a second and accurate to one millisecond.
  * If you don't include a colon but just have a raw number, then it's the number of PCM
    samples at which to loop.
  * Any characters other than digits (0-9), colons (:), or a single decimal point for the
    seconds portion will result in the tag being ignored.

SVN r2424 (trunk)
2010-07-10 02:59:34 +00:00