This is a fork of Zandronum used on servers hosted by The Sentinels Playground (TSPG), Euroboros (EB), and Down Under Doomers (DUD).
修訂 | 4dc0c7a95f068bb7571e8988e652b9ec3cebd542 (tree) |
---|---|
時間 | 2010-08-16 04:54:59 |
作者 | Randy Heit <rheit@zdoo...> |
Commiter | Randy Heit |
- Added FluidSynth support as snd_mididevice -5. Only tested with Linux. I will have
SVN r2545 (trunk)
@@ -0,0 +1,23 @@ | ||
1 | +# - Find fluidsynth | |
2 | +# Find the native fluidsynth includes and library | |
3 | +# | |
4 | +# FLUIDSYNTH_INCLUDE_DIR - where to find fluidsynth.h | |
5 | +# FLUIDSYNTH_LIBRARIES - List of libraries when using fluidsynth. | |
6 | +# FLUIDSYNTH_FOUND - True if fluidsynth found. | |
7 | + | |
8 | + | |
9 | +IF (FLUIDSYNTH_INCLUDE_DIR AND FLUIDSYNTH_LIBRARIES) | |
10 | + # Already in cache, be silent | |
11 | + SET(FluidSynth_FIND_QUIETLY TRUE) | |
12 | +ENDIF (FLUIDSYNTH_INCLUDE_DIR AND FLUIDSYNTH_LIBRARIES) | |
13 | + | |
14 | +FIND_PATH(FLUIDSYNTH_INCLUDE_DIR fluidsynth.h) | |
15 | + | |
16 | +FIND_LIBRARY(FLUIDSYNTH_LIBRARIES NAMES fluidsynth ) | |
17 | +MARK_AS_ADVANCED( FLUIDSYNTH_LIBRARIES FLUIDSYNTH_INCLUDE_DIR ) | |
18 | + | |
19 | +# handle the QUIETLY and REQUIRED arguments and set FLUIDSYNTH_FOUND to TRUE if | |
20 | +# all listed variables are TRUE | |
21 | +INCLUDE(FindPackageHandleStandardArgs) | |
22 | +FIND_PACKAGE_HANDLE_STANDARD_ARGS(FluidSynth DEFAULT_MSG FLUIDSYNTH_LIBRARIES FLUIDSYNTH_INCLUDE_DIR) | |
23 | + |
@@ -31,6 +31,10 @@ | ||
31 | 31 | # fmodapi<version>linux[64] -or simply- fmod |
32 | 32 | # jpeg-6b |
33 | 33 | # ... |
34 | +# The recommended method is to put it in the zdoom tree, since its | |
35 | +# headers are unversioned. Especially now that we can't work properly | |
36 | +# with anything newer than 4.26.xx, you probably don't want to use | |
37 | +# a system-wide version. | |
34 | 38 | |
35 | 39 | # Construct version numbers for searching for the FMOD library on Linux. |
36 | 40 | set( MINOR_VERSIONS "50" "49" "48" "47" "46" "45" "44" "43" "42" "41" |
@@ -236,6 +240,10 @@ | ||
236 | 240 | endif( FMOD_LIBRARY ) |
237 | 241 | |
238 | 242 | |
243 | +# Search for FluidSynth | |
244 | + | |
245 | +include( ../FindFluidSynth.cmake ) | |
246 | + | |
239 | 247 | # Search for NASM |
240 | 248 | |
241 | 249 | if( NOT NO_ASM ) |
@@ -370,7 +378,8 @@ | ||
370 | 378 | |
371 | 379 | if( CMAKE_COMPILER_IS_GNUCXX ) |
372 | 380 | if( PROFILE ) |
373 | - set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg" ) | |
381 | + set( CMAKE_C_FLinclude( FindFluidSynth.cmake ) | |
382 | +AGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg" ) | |
374 | 383 | set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg" ) |
375 | 384 | set( CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -pg" ) |
376 | 385 | set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -pg" ) |
@@ -476,8 +485,10 @@ | ||
476 | 485 | |
477 | 486 | # Libraries ZDoom needs |
478 | 487 | |
479 | -set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_LIBRARIES}" "${FMOD_LIBRARY}" ) | |
480 | -include_directories( "${ZLIB_INCLUDE_DIR}" "${FMOD_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" ) | |
488 | + | |
489 | +message( STATUS "Fluid synth libs: ${FLUIDSYNTH_LIBRARIES}" ) | |
490 | +set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_LIBRARIES}" "${FMOD_LIBRARY}" "${FLUIDSYNTH_LIBRARIES}" ) | |
491 | +include_directories( "${ZLIB_INCLUDE_DIR}" "${FMOD_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${FLUIDSYNTH_INCLUDE_DIR}" ) | |
481 | 492 | |
482 | 493 | # Start defining source files for ZDoom |
483 | 494 |
@@ -572,6 +583,9 @@ | ||
572 | 583 | set( X86_SOURCES ) |
573 | 584 | endif( SSE_MATTERS ) |
574 | 585 | |
586 | +if( FLUIDSYNTH_FOUND ) | |
587 | + add_definitions( -DHAVE_FLUIDSYNTH ) | |
588 | +endif( FLUIDSYNTH_FOUND ) | |
575 | 589 | |
576 | 590 | add_executable( zdoom WIN32 |
577 | 591 | autostart.cpp |
@@ -793,6 +807,7 @@ | ||
793 | 807 | sound/music_mus_midiout.cpp |
794 | 808 | sound/music_mus_opl.cpp |
795 | 809 | sound/music_stream.cpp |
810 | + sound/music_fluidsynth_mididevice.cpp | |
796 | 811 | sound/music_timidity_mididevice.cpp |
797 | 812 | sound/music_win_mididevice.cpp |
798 | 813 | textures/automaptexture.cpp |
@@ -101,6 +101,7 @@ | ||
101 | 101 | EXTERN_CVAR (Int, snd_samplerate) |
102 | 102 | EXTERN_CVAR (Bool, snd_pitched) |
103 | 103 | EXTERN_CVAR (Int, snd_channels) |
104 | +EXTERN_CVAR (String, snd_midipatchset) | |
104 | 105 | |
105 | 106 | extern int sfx_empty; |
106 | 107 |
@@ -115,7 +116,6 @@ | ||
115 | 116 | CVAR (String, snd_resampler, "Linear", CVAR_ARCHIVE|CVAR_GLOBALCONFIG) |
116 | 117 | CVAR (String, snd_speakermode, "Auto", CVAR_ARCHIVE|CVAR_GLOBALCONFIG) |
117 | 118 | CVAR (String, snd_output_format, "PCM-16", CVAR_ARCHIVE|CVAR_GLOBALCONFIG) |
118 | -CVAR (String, snd_midipatchset, "", CVAR_ARCHIVE|CVAR_GLOBALCONFIG) | |
119 | 119 | CVAR (Bool, snd_profile, false, 0) |
120 | 120 | |
121 | 121 | // Underwater low-pass filter cutoff frequency. Set to 0 to disable the filter. |
@@ -644,6 +644,7 @@ | ||
644 | 644 | ChannelGroupTargetUnit = NULL; |
645 | 645 | SfxReverbHooked = false; |
646 | 646 | SfxReverbPlaceholder = NULL; |
647 | + SfxHeadMixer = NULL; | |
647 | 648 | OutputPlugin = 0; |
648 | 649 | |
649 | 650 | Printf("I_InitSound: Initializing FMOD\n"); |
@@ -706,7 +707,8 @@ | ||
706 | 707 | |
707 | 708 | if (!ShowedBanner) |
708 | 709 | { |
709 | - Printf("FMOD Sound System, copyright © Firelight Technologies Pty, Ltd., 1994-2009.\n"); | |
710 | + // '\xa9' is the copyright symbol in the Windows-1252 code page. | |
711 | + Printf("FMOD Sound System, copyright \xa9 Firelight Technologies Pty, Ltd., 1994-2009.\n"); | |
710 | 712 | Printf("Loaded FMOD version %x.%02x.%02x\n", version >> 16, (version >> 8) & 255, version & 255); |
711 | 713 | ShowedBanner = true; |
712 | 714 | } |
@@ -1014,6 +1016,12 @@ | ||
1014 | 1016 | result = Sys->createDSPByType(FMOD_DSP_TYPE_MIXER, &SfxReverbPlaceholder); |
1015 | 1017 | if (result == FMOD_OK) |
1016 | 1018 | { |
1019 | + result = Sys->createDSPByType(FMOD_DSP_TYPE_MIXER, &SfxHeadMixer); | |
1020 | + result = sfx_head->addInput(SfxHeadMixer, &SfxConnection); | |
1021 | + result = sfx_head->disconnectFrom(pausable_head); | |
1022 | + sfx_head = SfxHeadMixer; | |
1023 | + SfxHeadMixer->setActive(true); | |
1024 | + SfxHeadMixer->setBypass(false); | |
1017 | 1025 | // Replace the PausableSFX->SFX connection with |
1018 | 1026 | // PausableSFX->ReverbPlaceholder->SFX. |
1019 | 1027 | result = SfxReverbPlaceholder->addInput(pausable_head, NULL); |
@@ -1023,13 +1031,13 @@ | ||
1023 | 1031 | result = sfx_head->addInput(SfxReverbPlaceholder, &connection); |
1024 | 1032 | if (result == FMOD_OK) |
1025 | 1033 | { |
1026 | - sfx_head->disconnectFrom(pausable_head); | |
1034 | +// sfx_head->disconnectFrom(pausable_head); | |
1027 | 1035 | SfxReverbPlaceholder->setActive(true); |
1028 | 1036 | SfxReverbPlaceholder->setBypass(true); |
1029 | 1037 | // The placeholder now takes the place of the pausable_head |
1030 | 1038 | // for the following connections. |
1031 | 1039 | pausable_head = SfxReverbPlaceholder; |
1032 | - SfxConnection = connection; | |
1040 | + // SfxConnection = connection; | |
1033 | 1041 | } |
1034 | 1042 | } |
1035 | 1043 | else |
@@ -1038,6 +1046,7 @@ | ||
1038 | 1046 | SfxReverbPlaceholder = NULL; |
1039 | 1047 | } |
1040 | 1048 | } |
1049 | +#if 1 | |
1041 | 1050 | result = WaterLP->addInput(pausable_head, NULL); |
1042 | 1051 | WaterLP->setActive(false); |
1043 | 1052 | WaterLP->setParameter(FMOD_DSP_LOWPASS_CUTOFF, snd_waterlp); |
@@ -1069,6 +1078,7 @@ | ||
1069 | 1078 | { |
1070 | 1079 | result = sfx_head->addInput(WaterLP, NULL); |
1071 | 1080 | } |
1081 | +#endif | |
1072 | 1082 | } |
1073 | 1083 | } |
1074 | 1084 | } |
@@ -1147,6 +1157,11 @@ | ||
1147 | 1157 | SfxReverbPlaceholder->release(); |
1148 | 1158 | SfxReverbPlaceholder = NULL; |
1149 | 1159 | } |
1160 | + if (SfxHeadMixer != NULL) | |
1161 | + { | |
1162 | + SfxHeadMixer->release(); | |
1163 | + SfxHeadMixer = NULL; | |
1164 | + } | |
1150 | 1165 | |
1151 | 1166 | Sys->close(); |
1152 | 1167 | if (OutputPlugin != 0) |
@@ -1330,10 +1345,10 @@ | ||
1330 | 1345 | #endif |
1331 | 1346 | |
1332 | 1347 | out.Format ("%d channels,"TEXTCOLOR_YELLOW"%5.2f"TEXTCOLOR_NORMAL"%% CPU " |
1333 | - "(DSP:"TEXTCOLOR_YELLOW"%2.2f"TEXTCOLOR_NORMAL"%% " | |
1334 | - "Stream:"TEXTCOLOR_YELLOW"%2.2f"TEXTCOLOR_NORMAL"%% " | |
1335 | - "Geometry:"TEXTCOLOR_YELLOW"%2.2f"TEXTCOLOR_NORMAL"%% " | |
1336 | - "Update:"TEXTCOLOR_YELLOW"%2.2f"TEXTCOLOR_NORMAL"%%)", | |
1348 | + "(DSP:"TEXTCOLOR_YELLOW"%5.2f"TEXTCOLOR_NORMAL"%% " | |
1349 | + "Stream:"TEXTCOLOR_YELLOW"%5.2f"TEXTCOLOR_NORMAL"%% " | |
1350 | + "Geometry:"TEXTCOLOR_YELLOW"%5.2f"TEXTCOLOR_NORMAL"%% " | |
1351 | + "Update:"TEXTCOLOR_YELLOW"%5.2f"TEXTCOLOR_NORMAL"%%)", | |
1337 | 1352 | channels, total, dsp, stream, geometry, update); |
1338 | 1353 | return out; |
1339 | 1354 | } |
@@ -103,7 +103,8 @@ | ||
103 | 103 | FMOD::DSP *WaterLP, *WaterReverb; |
104 | 104 | FMOD::DSPConnection *SfxConnection; |
105 | 105 | FMOD::DSP *ChannelGroupTargetUnit; |
106 | - FMOD::DSP *SfxReverbPlaceholder; | |
106 | + FMOD::DSP *SfxReverbPlaceholder; | |
107 | + FMOD::DSP *SfxHeadMixer; | |
107 | 108 | bool SfxReverbHooked; |
108 | 109 | float LastWaterLP; |
109 | 110 | unsigned int OutputPlugin; |
@@ -162,6 +162,18 @@ | ||
162 | 162 | { |
163 | 163 | } |
164 | 164 | |
165 | +void MusInfo::FluidSettingInt(const char *, int) | |
166 | +{ | |
167 | +} | |
168 | + | |
169 | +void MusInfo::FluidSettingNum(const char *, double) | |
170 | +{ | |
171 | +} | |
172 | + | |
173 | +void MusInfo::FluidSettingStr(const char *, const char *) | |
174 | +{ | |
175 | +} | |
176 | + | |
165 | 177 | FString MusInfo::GetStats() |
166 | 178 | { |
167 | 179 | return "No stats available for this song"; |
@@ -428,6 +440,12 @@ | ||
428 | 440 | { |
429 | 441 | info = new MUSSong2(file, musiccache, len, MIDI_Timidity); |
430 | 442 | } |
443 | +#ifdef HAVE_FLUIDSYNTH | |
444 | + else if (snd_mididevice == -5 && device == MDEV_DEFAULT) | |
445 | + { | |
446 | + info = new MUSSong2(file, musiccache, len, MIDI_Fluid); | |
447 | + } | |
448 | +#endif | |
431 | 449 | if (info != NULL && !info->IsValid()) |
432 | 450 | { |
433 | 451 | delete info; |
@@ -98,6 +98,9 @@ | ||
98 | 98 | virtual FString GetStats(); |
99 | 99 | virtual MusInfo *GetOPLDumper(const char *filename); |
100 | 100 | virtual MusInfo *GetWaveDumper(const char *filename, int rate); |
101 | + virtual void FluidSettingInt(const char *setting, int value); // FluidSynth settings | |
102 | + virtual void FluidSettingNum(const char *setting, double value); // " | |
103 | + virtual void FluidSettingStr(const char *setting, const char *value); // " | |
101 | 104 | |
102 | 105 | enum EState |
103 | 106 | { |
@@ -95,6 +95,9 @@ | ||
95 | 95 | virtual bool NeedThreadedCallback() = 0; |
96 | 96 | virtual void PrecacheInstruments(const WORD *instruments, int count); |
97 | 97 | virtual void TimidityVolumeChanged(); |
98 | + virtual void FluidSettingInt(const char *setting, int value); | |
99 | + virtual void FluidSettingNum(const char *setting, double value); | |
100 | + virtual void FluidSettingStr(const char *setting, const char *value); | |
98 | 101 | virtual FString GetStats(); |
99 | 102 | }; |
100 | 103 |
@@ -255,6 +258,64 @@ | ||
255 | 258 | FILE *File; |
256 | 259 | }; |
257 | 260 | |
261 | +// FluidSynth implementation of a MIDI device ------------------------------- | |
262 | + | |
263 | +#ifdef HAVE_FLUIDSYNTH | |
264 | +#include <fluidsynth.h> | |
265 | + | |
266 | +class FluidSynthMIDIDevice : public MIDIDevice | |
267 | +{ | |
268 | +public: | |
269 | + FluidSynthMIDIDevice(); | |
270 | + ~FluidSynthMIDIDevice(); | |
271 | + | |
272 | + int Open(void (*callback)(unsigned int, void *, DWORD, DWORD), void *userdata); | |
273 | + void Close(); | |
274 | + bool IsOpen() const; | |
275 | + int GetTechnology() const; | |
276 | + int SetTempo(int tempo); | |
277 | + int SetTimeDiv(int timediv); | |
278 | + int StreamOut(MIDIHDR *data); | |
279 | + int StreamOutSync(MIDIHDR *data); | |
280 | + int Resume(); | |
281 | + void Stop(); | |
282 | + int PrepareHeader(MIDIHDR *data); | |
283 | + int UnprepareHeader(MIDIHDR *data); | |
284 | + bool FakeVolume(); | |
285 | + bool Pause(bool paused); | |
286 | + bool NeedThreadedCallback(); | |
287 | + void PrecacheInstruments(const WORD *instruments, int count); | |
288 | + FString GetStats(); | |
289 | + void FluidSettingInt(const char *setting, int value); | |
290 | + void FluidSettingNum(const char *setting, double value); | |
291 | + void FluidSettingStr(const char *setting, const char *value); | |
292 | + | |
293 | +protected: | |
294 | + static bool FillStream(SoundStream *stream, void *buff, int len, void *userdata); | |
295 | + bool ServiceStream(void *buff, int numbytes); | |
296 | + void HandleEvent(int status, int parm1, int parm2); | |
297 | + int LoadPatchSets(const char *patches); | |
298 | + | |
299 | + void (*Callback)(unsigned int, void *, DWORD, DWORD); | |
300 | + void *CallbackData; | |
301 | + | |
302 | + void CalcTickRate(); | |
303 | + int PlayTick(); | |
304 | + | |
305 | + FCriticalSection CritSec; | |
306 | + SoundStream *Stream; | |
307 | + fluid_settings_t *FluidSettings; | |
308 | + fluid_synth_t *FluidSynth; | |
309 | + double Tempo; | |
310 | + double Division; | |
311 | + double SamplesPerTick; | |
312 | + double NextTickIn; | |
313 | + MIDIHDR *Events; | |
314 | + bool Started; | |
315 | + DWORD Position; | |
316 | +}; | |
317 | +#endif | |
318 | + | |
258 | 319 | // Base class for streaming MUS and MIDI files ------------------------------ |
259 | 320 | |
260 | 321 | // MIDI device selection. |
@@ -262,7 +323,8 @@ | ||
262 | 323 | { |
263 | 324 | MIDI_Win, |
264 | 325 | MIDI_OPL, |
265 | - MIDI_Timidity | |
326 | + MIDI_Timidity, | |
327 | + MIDI_Fluid | |
266 | 328 | }; |
267 | 329 | |
268 | 330 | class MIDIStreamer : public MusInfo |
@@ -282,6 +344,9 @@ | ||
282 | 344 | bool IsValid() const; |
283 | 345 | void Update(); |
284 | 346 | FString GetStats(); |
347 | + void FluidSettingInt(const char *setting, int value); | |
348 | + void FluidSettingNum(const char *setting, double value); | |
349 | + void FluidSettingStr(const char *setting, const char *value); | |
285 | 350 | |
286 | 351 | protected: |
287 | 352 | MIDIStreamer(const char *dumpname, EMIDIDevice type); |
@@ -9,6 +9,9 @@ | ||
9 | 9 | |
10 | 10 | static DWORD nummididevices; |
11 | 11 | static bool nummididevicesset; |
12 | + | |
13 | +CVAR (String, snd_midipatchset, "", CVAR_ARCHIVE|CVAR_GLOBALCONFIG); | |
14 | + | |
12 | 15 | #ifdef _WIN32 |
13 | 16 | UINT mididevice; |
14 | 17 |
@@ -19,7 +22,7 @@ | ||
19 | 22 | if (!nummididevicesset) |
20 | 23 | return; |
21 | 24 | |
22 | - if ((self >= (signed)nummididevices) || (self < -4)) | |
25 | + if ((self >= (signed)nummididevices) || (self < -5)) | |
23 | 26 | { |
24 | 27 | Printf ("ID out of range. Using default device.\n"); |
25 | 28 | self = 0; |
@@ -177,8 +180,8 @@ | ||
177 | 180 | |
178 | 181 | CUSTOM_CVAR(Int, snd_mididevice, -1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) |
179 | 182 | { |
180 | - if (self < -3) | |
181 | - self = -3; | |
183 | + if (self < -5) | |
184 | + self = -5; | |
182 | 185 | else if (self > -1) |
183 | 186 | self = -1; |
184 | 187 | } |
@@ -215,6 +215,12 @@ | ||
215 | 215 | assert(0); |
216 | 216 | // Intentional fall-through for non-Windows systems. |
217 | 217 | |
218 | +#ifdef HAVE_FLUIDSYNTH | |
219 | + case MIDI_Fluid: | |
220 | + MIDI = new FluidSynthMIDIDevice; | |
221 | + break; | |
222 | +#endif | |
223 | + | |
218 | 224 | case MIDI_Timidity: |
219 | 225 | MIDI = new TimidityMIDIDevice; |
220 | 226 | break; |
@@ -225,10 +231,10 @@ | ||
225 | 231 | } |
226 | 232 | |
227 | 233 | #ifndef _WIN32 |
228 | - assert(MIDI->NeedThreadedCallback() == false); | |
234 | + assert(MIDI == NULL || MIDI->NeedThreadedCallback() == false); | |
229 | 235 | #endif |
230 | 236 | |
231 | - if (0 != MIDI->Open(Callback, this)) | |
237 | + if (MIDI == NULL || 0 != MIDI->Open(Callback, this)) | |
232 | 238 | { |
233 | 239 | Printf(PRINT_BOLD, "Could not open MIDI out device\n"); |
234 | 240 | return; |
@@ -435,6 +441,48 @@ | ||
435 | 441 | } |
436 | 442 | } |
437 | 443 | |
444 | +//========================================================================== | |
445 | +// | |
446 | +// MIDIStreamer :: FluidSettingInt | |
447 | +// | |
448 | +//========================================================================== | |
449 | + | |
450 | +void MIDIStreamer::FluidSettingInt(const char *setting, int value) | |
451 | +{ | |
452 | + if (MIDI != NULL) | |
453 | + { | |
454 | + MIDI->FluidSettingInt(setting, value); | |
455 | + } | |
456 | +} | |
457 | + | |
458 | +//========================================================================== | |
459 | +// | |
460 | +// MIDIStreamer :: FluidSettingNum | |
461 | +// | |
462 | +//========================================================================== | |
463 | + | |
464 | +void MIDIStreamer::FluidSettingNum(const char *setting, double value) | |
465 | +{ | |
466 | + if (MIDI != NULL) | |
467 | + { | |
468 | + MIDI->FluidSettingNum(setting, value); | |
469 | + } | |
470 | +} | |
471 | + | |
472 | +//========================================================================== | |
473 | +// | |
474 | +// MIDIDeviceStreamer :: FluidSettingStr | |
475 | +// | |
476 | +//========================================================================== | |
477 | + | |
478 | +void MIDIStreamer::FluidSettingStr(const char *setting, const char *value) | |
479 | +{ | |
480 | + if (MIDI != NULL) | |
481 | + { | |
482 | + MIDI->FluidSettingStr(setting, value); | |
483 | + } | |
484 | +} | |
485 | + | |
438 | 486 | |
439 | 487 | //========================================================================== |
440 | 488 | // |
@@ -842,6 +890,36 @@ | ||
842 | 890 | |
843 | 891 | //========================================================================== |
844 | 892 | // |
893 | +// MIDIDevice :: FluidSettingInt | |
894 | +// | |
895 | +//========================================================================== | |
896 | + | |
897 | +void MIDIDevice::FluidSettingInt(const char *setting, int value) | |
898 | +{ | |
899 | +} | |
900 | + | |
901 | +//========================================================================== | |
902 | +// | |
903 | +// MIDIDevice :: FluidSettingNum | |
904 | +// | |
905 | +//========================================================================== | |
906 | + | |
907 | +void MIDIDevice::FluidSettingNum(const char *setting, double value) | |
908 | +{ | |
909 | +} | |
910 | + | |
911 | +//========================================================================== | |
912 | +// | |
913 | +// MIDIDevice :: FluidSettingStr | |
914 | +// | |
915 | +//========================================================================== | |
916 | + | |
917 | +void MIDIDevice::FluidSettingStr(const char *setting, const char *value) | |
918 | +{ | |
919 | +} | |
920 | + | |
921 | +//========================================================================== | |
922 | +// | |
845 | 923 | // MIDIDevice :: GetStats |
846 | 924 | // |
847 | 925 | //========================================================================== |