diff --git a/specs/fmod_version.txt b/specs/fmod_version.txt index c285c50b9..1016b9388 100644 --- a/specs/fmod_version.txt +++ b/specs/fmod_version.txt @@ -1,3 +1,3 @@ -This version of ZDoom must be compiled with any version between 4.22 and 4.28 inclusive. +This version of ZDoom must be compiled with any version between 4.22 and 4.28 inclusive or 4.34. Use of the latest 4.26 is recommended though due to technical issues with 4.28. diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index 308e6db9e..e1a15bb24 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -75,6 +75,10 @@ extern HWND Window; #define SPECTRUM_SIZE 256 +#if FMOD_VERSION < 0x43400 +#define FMOD_OPENSTATE_PLAYING FMOD_OPENSTATE_STREAMING +#endif + // TYPES ------------------------------------------------------------------- struct FEnumList @@ -157,7 +161,9 @@ static const FEnumList OutputNames[] = { "Windows Multimedia", FMOD_OUTPUTTYPE_WINMM }, { "WinMM", FMOD_OUTPUTTYPE_WINMM }, { "WaveOut", FMOD_OUTPUTTYPE_WINMM }, +#if FMOD_VERSION < 0x43400 { "OpenAL", FMOD_OUTPUTTYPE_OPENAL }, +#endif { "WASAPI", FMOD_OUTPUTTYPE_WASAPI }, { "ASIO", FMOD_OUTPUTTYPE_ASIO }, @@ -165,6 +171,9 @@ static const FEnumList OutputNames[] = { "OSS", FMOD_OUTPUTTYPE_OSS }, { "ALSA", FMOD_OUTPUTTYPE_ALSA }, { "ESD", FMOD_OUTPUTTYPE_ESD }, +#if FMOD_VERSION >= 0x43400 + { "PulseAudio", FMOD_OUTPUTTYPE_PULSEAUDIO }, +#endif { "SDL", 666 }, // Mac @@ -388,12 +397,17 @@ public: bool is; FMOD_OPENSTATE openstate = FMOD_OPENSTATE_MAX; bool starving; + bool diskbusy; if (Stream == NULL) { return true; } +#if FMOD_VERSION < 0x43400 if (FMOD_OK != Stream->getOpenState(&openstate, NULL, &starving)) +#else + if (FMOD_OK != Stream->getOpenState(&openstate, NULL, &starving, &diskbusy)) +#endif { openstate = FMOD_OPENSTATE_ERROR; } @@ -436,7 +450,7 @@ public: Owner->Sys->setStreamBufferSize(16*1024, FMOD_TIMEUNIT_RAWBYTES); return result != FMOD_OK; } - if (JustStarted && openstate == FMOD_OPENSTATE_STREAMING) + if (JustStarted && openstate == FMOD_OPENSTATE_PLAYING) { JustStarted = false; } @@ -480,14 +494,19 @@ public: unsigned int percentbuffered; unsigned int position; bool starving; + bool diskbusy; float volume; float frequency; bool paused; bool isplaying; +#if FMOD_VERSION < 0x43400 if (FMOD_OK == Stream->getOpenState(&openstate, &percentbuffered, &starving)) +#else + if (FMOD_OK == Stream->getOpenState(&openstate, &percentbuffered, &starving, &diskbusy)) +#endif { - stats = (openstate <= FMOD_OPENSTATE_STREAMING ? OpenStateNames[openstate] : "Unknown state"); + stats = (openstate <= FMOD_OPENSTATE_PLAYING ? OpenStateNames[openstate] : "Unknown state"); stats.AppendFormat(",%3d%% buffered, %s", percentbuffered, starving ? "Starving" : "Well-fed"); } if (Channel == NULL) diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index f7e0b51b2..73928b8bd 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1266,6 +1266,7 @@ OptionString SoundOutputsUnix "ALSA", "ALSA" "SDL", "SDL" "ESD", "ESD" + "PulseAudio", "PulseAudio" "No sound", "No sound" }