summaryrefslogtreecommitdiff
path: root/games-engines/scummvm/files/scummvm-2.2.0-fluidsynth-2.2.patch
blob: 8bb94ec6ab6e17360f165f2615761411db64e8a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
diff --git a/audio/softsynth/fluidsynth.cpp b/audio/softsynth/fluidsynth.cpp
index e0d7c4e3df..d8e82c24f5 100644
--- a/audio/softsynth/fluidsynth.cpp
+++ b/audio/softsynth/fluidsynth.cpp
@@ -46,6 +46,14 @@
 #include "backends/platform/ios7/ios7_common.h"
 #endif
 
+// We assume here Fluidsynth minor will never be above 255 and
+// that micro versions won't break API compatibility
+#if defined(FLUIDSYNTH_VERSION_MAJOR) && defined(FLUIDSYNTH_VERSION_MINOR)
+#define FS_API_VERSION ((FLUIDSYNTH_VERSION_MAJOR << 8) | FLUIDSYNTH_VERSION_MINOR)
+#else
+#define FS_API_VERSION 0
+#endif
+
 class MidiDriver_FluidSynth : public MidiDriver_Emulated {
 private:
 	MidiChannel_MPU401 _midiChannels[16];
@@ -75,7 +83,7 @@ public:
 
 	void setEngineSoundFont(Common::SeekableReadStream *soundFontData) override;
 	bool acceptsSoundFontData() override {
-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
+#if FS_API_VERSION >= 0x0200
 		return true;
 #else
 		return false;
@@ -134,7 +142,7 @@ void MidiDriver_FluidSynth::setStr(const char *name, const char *val) {
 
 // Soundfont memory loader callback functions.
 
-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
+#if FS_API_VERSION >= 0x0200
 static void *SoundFontMemLoader_open(const char *filename) {
 	void *p;
 	if (filename[0] != '&') {
@@ -144,11 +152,19 @@ static void *SoundFontMemLoader_open(const char *filename) {
 	return p;
 }
 
+#if FS_API_VERSION >= 0x0202
+static int SoundFontMemLoader_read(void *buf, fluid_long_long_t count, void *handle) {
+#else
 static int SoundFontMemLoader_read(void *buf, int count, void *handle) {
+#endif
 	return ((Common::SeekableReadStream *) handle)->read(buf, count) == (uint32)count ? FLUID_OK : FLUID_FAILED;
 }
 
+#if FS_API_VERSION >= 0x0202
+static int SoundFontMemLoader_seek(void *handle, fluid_long_long_t offset, int origin) {
+#else
 static int SoundFontMemLoader_seek(void *handle, long offset, int origin) {
+#endif
 	return ((Common::SeekableReadStream *) handle)->seek(offset, origin) ? FLUID_OK : FLUID_FAILED;
 }
 
@@ -157,7 +173,11 @@ static int SoundFontMemLoader_close(void *handle) {
 	return FLUID_OK;
 }
 
+#if FS_API_VERSION >= 0x0202
+static fluid_long_long_t SoundFontMemLoader_tell(void *handle) {
+#else
 static long SoundFontMemLoader_tell(void *handle) {
+#endif
 	return ((Common::SeekableReadStream *) handle)->pos();
 }
 #endif
@@ -166,7 +186,8 @@ int MidiDriver_FluidSynth::open() {
 	if (_isOpen)
 		return MERR_ALREADY_OPEN;
 
-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
+
+#if FS_API_VERSION >= 0x0200
 	// When provided with in-memory SoundFont data, only use the configured
 	// SoundFont instead if it's explicitly configured on the current game.
 	bool isUsingInMemorySoundFontData = _engineSoundFontData && !ConfMan.getActiveDomain()->contains("soundfont");
@@ -195,7 +216,11 @@ int MidiDriver_FluidSynth::open() {
 	_synth = new_fluid_synth(_settings);
 
 	if (ConfMan.getBool("fluidsynth_chorus_activate")) {
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_chorus_on(_synth, -1, 1);
+#else
 		fluid_synth_set_chorus_on(_synth, 1);
+#endif
 
 		int chorusNr = ConfMan.getInt("fluidsynth_chorus_nr");
 		double chorusLevel = (double)ConfMan.getInt("fluidsynth_chorus_level") / 100.0;
@@ -210,22 +235,49 @@ int MidiDriver_FluidSynth::open() {
 			chorusType = FLUID_CHORUS_MOD_TRIANGLE;
 		}
 
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_set_chorus_group_nr(_synth, -1, chorusNr);
+		fluid_synth_set_chorus_group_level(_synth, -1, chorusLevel);
+		fluid_synth_set_chorus_group_speed(_synth, -1, chorusSpeed);
+		fluid_synth_set_chorus_group_depth(_synth, -1, chorusDepthMs);
+		fluid_synth_set_chorus_group_type(_synth, -1, chorusType);
+#else
 		fluid_synth_set_chorus(_synth, chorusNr, chorusLevel, chorusSpeed, chorusDepthMs, chorusType);
+#endif
 	} else {
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_chorus_on(_synth, -1, 0);
+#else
 		fluid_synth_set_chorus_on(_synth, 0);
+#endif
 	}
 
 	if (ConfMan.getBool("fluidsynth_reverb_activate")) {
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_reverb_on(_synth, -1, 1);
+#else
 		fluid_synth_set_reverb_on(_synth, 1);
+#endif
 
 		double reverbRoomSize = (double)ConfMan.getInt("fluidsynth_reverb_roomsize") / 100.0;
 		double reverbDamping = (double)ConfMan.getInt("fluidsynth_reverb_damping") / 100.0;
 		int reverbWidth = ConfMan.getInt("fluidsynth_reverb_width");
 		double reverbLevel = (double)ConfMan.getInt("fluidsynth_reverb_level") / 100.0;
 
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_set_reverb_group_roomsize(_synth, -1, reverbRoomSize);
+		fluid_synth_set_reverb_group_damp(_synth, -1, reverbDamping);
+		fluid_synth_set_reverb_group_width(_synth, -1, reverbWidth);
+		fluid_synth_set_reverb_group_level(_synth, -1, reverbLevel);
+#else
 		fluid_synth_set_reverb(_synth, reverbRoomSize, reverbDamping, reverbWidth, reverbLevel);
+#endif
 	} else {
+#if FS_API_VERSION >= 0x0202
+		fluid_synth_reverb_on(_synth, -1, 0);
+#else
 		fluid_synth_set_reverb_on(_synth, 0);
+#endif
 	}
 
 	Common::String interpolation = ConfMan.get("fluidsynth_misc_interpolation");
@@ -246,7 +298,7 @@ int MidiDriver_FluidSynth::open() {
 	const char *soundfont = !isUsingInMemorySoundFontData ?
 			ConfMan.get("soundfont").c_str() : Common::String::format("&%p", (void *)_engineSoundFontData).c_str();
 
-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
+#if FS_API_VERSION >= 0x0200
 	if (isUsingInMemorySoundFontData) {
 		fluid_sfloader_t *soundFontMemoryLoader = new_fluid_defsfloader(_settings);
 		fluid_sfloader_set_callbacks(soundFontMemoryLoader,