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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
|
From 84d090e2fde50c66b965b84c73abd9f04a1770dd Mon Sep 17 00:00:00 2001
From: orbea <orbea@riseup.net>
Date: Thu, 7 May 2020 15:31:48 +0000
Subject: [PATCH] spu2-x: Make portaudio an optional dependency. (#3110)
* spu2-x: Make portaudio an optional dependency.
v2: Fix crash in the audio settings with SDL1 and without portaudio.
* cmake: Add PORTAUDIO_API to disable portaudio support.
---
build.sh | 4 +++-
cmake/BuildParameters.cmake | 1 +
cmake/SearchForStuff.cmake | 6 ++++--
cmake/SelectPcsx2Plugins.cmake | 15 ++++++++-------
plugins/spu2-x/src/CMakeLists.txt | 19 ++++++++++++++++---
plugins/spu2-x/src/Linux/Config.cpp | 20 +++++++++++++++++++-
plugins/spu2-x/src/SndOut.cpp | 2 ++
plugins/spu2-x/src/SndOut.h | 2 ++
8 files changed, 55 insertions(+), 14 deletions(-)
diff --git a/build.sh b/build.sh
index e1bc256475..54b30e404e 100755
--- a/build.sh
+++ b/build.sh
@@ -213,6 +213,7 @@ for ARG in "$@"; do
--pgo-optimize ) flags="$flags -DUSE_PGO_OPTIMIZE=TRUE" ;;
--pgo-generate ) flags="$flags -DUSE_PGO_GENERATE=TRUE" ;;
--no-dev9ghzdrk ) flags="$flags -DDISABLE_DEV9GHZDRK=TRUE" ;;
+ --no-portaudio ) flags="$flags -DPORTAUDIO_API=FALSE" ;;
--no-simd ) flags="$flags -DDISABLE_ADVANCE_SIMD=TRUE" ;;
--no-trans ) flags="$flags -DNO_TRANSLATION=TRUE" ;;
--cross-multilib ) flags="$flags -DCMAKE_TOOLCHAIN_FILE=$toolfile"; useCross=1; ;;
@@ -244,7 +245,8 @@ for ARG in "$@"; do
echo
echo "** Distribution Compatibilities **"
echo "--sdl12 : Build with SDL1.2 (requires if wx is linked against SDL1.2)"
- echo "--no-dev9ghzdrk : Skip dev9ghzdrk. (Avoids needing escalated privileges to build.)"
+ echo "--no-dev9ghzdrk : Skip dev9ghzdrk. (Avoids needing escalated privileges to build.)"
+ echo "--no-portaudio : Skip portaudio for spu2x."
echo
echo "** Expert Developer option **"
echo "--gtk3 : replace GTK2 by GTK3"
diff --git a/cmake/BuildParameters.cmake b/cmake/BuildParameters.cmake
index 235bdb8e59..83bab90dab 100644
--- a/cmake/BuildParameters.cmake
+++ b/cmake/BuildParameters.cmake
@@ -48,6 +48,7 @@ option(DISABLE_CHEATS_ZIP "Disable including the cheats_ws.zip file")
option(DISABLE_PCSX2_WRAPPER "Disable including the PCSX2-linux.sh file")
option(XDG_STD "Use XDG standard path instead of the standard PCSX2 path")
option(EXTRA_PLUGINS "Build various 'extra' plugins")
+option(PORTAUDIO_API "Build portaudio support on spu2x" ON)
option(SDL2_API "Use SDL2 on spu2x and onepad (wxWidget mustn't be built with SDL1.2 support" ON)
option(GTK3_API "Use GTK3 api (experimental/wxWidget must be built with GTK3 support)")
diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake
index a062d457a3..50f8f5f3e8 100644
--- a/cmake/SearchForStuff.cmake
+++ b/cmake/SearchForStuff.cmake
@@ -105,7 +105,9 @@ endif()
if(OPENCL_API)
check_lib(OPENCL OpenCL CL/cl.hpp)
endif()
-check_lib(PORTAUDIO portaudio portaudio.h pa_linux_alsa.h)
+if(PORTAUDIO_API)
+ check_lib(PORTAUDIO portaudio portaudio.h pa_linux_alsa.h)
+endif()
check_lib(SOUNDTOUCH SoundTouch soundtouch/SoundTouch.h)
if(SDL2_API)
@@ -227,4 +229,4 @@ if((GCC_VERSION VERSION_EQUAL "9.0" OR GCC_VERSION VERSION_GREATER "9.0") AND GC
https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=275ab714637a64672c6630cfd744af2c70957d5a
Even with that patch, compiling with LTO may still segfault. Use at your own risk!
This text being in a compile log in an open issue may cause it to be closed.")
-endif()
\ No newline at end of file
+endif()
diff --git a/cmake/SelectPcsx2Plugins.cmake b/cmake/SelectPcsx2Plugins.cmake
index 69d0e07b91..00bf22e6ca 100644
--- a/cmake/SelectPcsx2Plugins.cmake
+++ b/cmake/SelectPcsx2Plugins.cmake
@@ -7,7 +7,7 @@ set(msg_dep_cdvdgiga "check these libraries -> gtk2, libudev")
set(msg_dep_zerogs "check these libraries -> glew, opengl, X11, nvidia-cg-toolkit (>=2.1)")
set(msg_dep_gsdx "check these libraries -> opengl, png (>=1.2), zlib (>=1.2.4), X11, liblzma")
set(msg_dep_onepad "check these libraries -> sdl2, X11, gtk2")
-set(msg_dep_spu2x "check these libraries -> soundtouch (>=1.5), alsa, portaudio (>=1.9), sdl (>=1.2) pcsx2 common libs")
+set(msg_dep_spu2x "check these libraries -> soundtouch (>=1.5), alsa, portaudio (optional, >=1.9), sdl (>=1.2), pcsx2 common libs")
set(msg_dep_zerospu2 "check these libraries -> soundtouch (>=1.5), alsa")
set(msg_dep_dev "check these libraries -> gtk2, pcap, libxml2")
if(GLSL_API)
@@ -267,12 +267,13 @@ endif()
# spu2-x
#---------------------------------------
# requires: -SoundTouch
-# -ALSA
-# -Portaudio
+# -ALSA
# -SDL
# -common_libs
+#
+# optional: -Portaudio
#---------------------------------------
-if((PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND AND SDLn_FOUND AND common_libs)
+if((SOUNDTOUCH_FOUND AND SDLn_FOUND AND common_libs)
AND ((Linux AND ALSA_FOUND) OR (UNIX AND NOT Linux)))
set(spu2-x TRUE)
elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/spu2-x")
@@ -287,8 +288,8 @@ endif()
# zerospu2
#---------------------------------------
# requires: -SoundTouch
-# -ALSA
-# -PortAudio
+# -ALSA
+# -PortAudio
#---------------------------------------
if(EXTRA_PLUGINS)
if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerospu2" AND SOUNDTOUCH_FOUND AND ALSA_FOUND)
@@ -312,4 +313,4 @@ if(GTKn_FOUND)
set(USBnull TRUE)
endif()
#---------------------------------------
-#-------------------------------------------------------------------------------
\ No newline at end of file
+#-------------------------------------------------------------------------------
diff --git a/plugins/spu2-x/src/CMakeLists.txt b/plugins/spu2-x/src/CMakeLists.txt
index e4c7141287..d17538e33e 100644
--- a/plugins/spu2-x/src/CMakeLists.txt
+++ b/plugins/spu2-x/src/CMakeLists.txt
@@ -45,7 +45,6 @@ set(spu2xSources
RegTable.cpp
Reverb.cpp
SndOut.cpp
- SndOut_Portaudio.cpp
SndOut_SDL.cpp
spu2freeze.cpp
Spu2replay.cpp
@@ -111,7 +110,6 @@ else()
include_directories(Linux)
endif()
-
set(spu2xFinalSources
${spu2xSources}
${spu2xHeaders}
@@ -121,11 +119,26 @@ set(spu2xFinalSources
set(spu2xFinalLibs
Utilities_NO_TLS
${ALSA_LIBRARIES}
- ${PORTAUDIO_LIBRARIES}
${GTK2_LIBRARIES}
${SOUNDTOUCH_LIBRARIES}
)
+if (PORTAUDIO_FOUND)
+ set(spu2xFinalFlags
+ ${spu2xFinalFlags}
+ "-DSPU2X_PORTAUDIO"
+ )
+
+ LIST(APPEND spu2xFinalSources
+ SndOut_Portaudio.cpp
+ )
+
+ set(spu2xFinalLibs
+ ${spu2xFinalLibs}
+ ${PORTAUDIO_LIBRARIES}
+ )
+endif()
+
if (SDL2_API)
set(spu2xFinalLibs
${spu2xFinalLibs}
diff --git a/plugins/spu2-x/src/Linux/Config.cpp b/plugins/spu2-x/src/Linux/Config.cpp
index 998f9bd25a..96a9e7bc8b 100644
--- a/plugins/spu2-x/src/Linux/Config.cpp
+++ b/plugins/spu2-x/src/Linux/Config.cpp
@@ -76,7 +76,9 @@ bool _visual_debug_enabled = false; // windows only feature
u32 OutputModule = 0;
int SndOutLatencyMS = 300;
int SynchMode = 0; // Time Stretch, Async or Disabled
+#ifdef SPU2X_PORTAUDIO
static u32 OutputAPI = 0;
+#endif
static u32 SdlOutputAPI = 0;
int numSpeakers = 0;
@@ -122,7 +124,7 @@ void ReadSettings()
wxString temp;
-#if SDL_MAJOR_VERSION >= 2
+#if SDL_MAJOR_VERSION >= 2 || !defined(SPU2X_PORTAUDIO)
CfgReadStr(L"OUTPUT", L"Output_Module", temp, SDLOut->GetIdent());
#else
CfgReadStr(L"OUTPUT", L"Output_Module", temp, PortaudioOut->GetIdent());
@@ -130,6 +132,7 @@ void ReadSettings()
OutputModule = FindOutputModuleById(temp.c_str()); // find the driver index of this module
// find current API
+#ifdef SPU2X_PORTAUDIO
#ifdef __linux__
CfgReadStr(L"PORTAUDIO", L"HostApi", temp, L"ALSA");
if (temp == L"OSS")
@@ -142,6 +145,7 @@ void ReadSettings()
CfgReadStr(L"PORTAUDIO", L"HostApi", temp, L"OSS");
OutputAPI = 0; // L"OSS"
#endif
+#endif
#ifdef __unix__
CfgReadStr(L"SDL", L"HostApi", temp, L"pulseaudio");
@@ -158,7 +162,9 @@ void ReadSettings()
SndOutLatencyMS = CfgReadInt(L"OUTPUT", L"Latency", 300);
SynchMode = CfgReadInt(L"OUTPUT", L"Synch_Mode", 0);
+#ifdef SPU2X_PORTAUDIO
PortaudioOut->ReadSettings();
+#endif
#ifdef __unix__
SDLOut->ReadSettings();
#endif
@@ -209,7 +215,9 @@ void WriteSettings()
CfgWriteInt(L"OUTPUT", L"Synch_Mode", SynchMode);
CfgWriteInt(L"DEBUG", L"DelayCycles", delayCycles);
+#ifdef SPU2X_PORTAUDIO
PortaudioOut->WriteSettings();
+#endif
#ifdef __unix__
SDLOut->WriteSettings();
#endif
@@ -273,7 +281,9 @@ void DisplayDialog()
GtkWidget *output_frame, *output_box;
GtkWidget *mod_label, *mod_box;
+#ifdef SPU2X_PORTAUDIO
GtkWidget *api_label, *api_box;
+#endif
#if SDL_MAJOR_VERSION >= 2
GtkWidget *sdl_api_label, *sdl_api_box;
#endif
@@ -309,11 +319,14 @@ void DisplayDialog()
mod_label = gtk_label_new("Module:");
mod_box = gtk_combo_box_text_new();
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mod_box), "0 - No Sound (Emulate SPU2 only)");
+#ifdef SPU2X_PORTAUDIO
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mod_box), "1 - PortAudio (Cross-platform)");
+#endif
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mod_box), "2 - SDL Audio (Recommended for PulseAudio)");
//gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mod_box), "3 - Alsa (probably doesn't work)");
gtk_combo_box_set_active(GTK_COMBO_BOX(mod_box), OutputModule);
+#ifdef SPU2X_PORTAUDIO
api_label = gtk_label_new("PortAudio API:");
api_box = gtk_combo_box_text_new();
#ifdef __linux__
@@ -325,6 +338,7 @@ void DisplayDialog()
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(api_box), "OSS");
#endif
gtk_combo_box_set_active(GTK_COMBO_BOX(api_box), OutputAPI);
+#endif
#if SDL_MAJOR_VERSION >= 2
sdl_api_label = gtk_label_new("SDL API:");
@@ -383,8 +397,10 @@ void DisplayDialog()
gtk_container_add(GTK_CONTAINER(output_box), mod_label);
gtk_container_add(GTK_CONTAINER(output_box), mod_box);
+#ifdef SPU2X_PORTAUDIO
gtk_container_add(GTK_CONTAINER(output_box), api_label);
gtk_container_add(GTK_CONTAINER(output_box), api_box);
+#endif
#if SDL_MAJOR_VERSION >= 2
gtk_container_add(GTK_CONTAINER(output_box), sdl_api_label);
gtk_container_add(GTK_CONTAINER(output_box), sdl_api_box);
@@ -430,6 +446,7 @@ void DisplayDialog()
if (gtk_combo_box_get_active(GTK_COMBO_BOX(mod_box)) != -1)
OutputModule = gtk_combo_box_get_active(GTK_COMBO_BOX(mod_box));
+#ifdef SPU2X_PORTAUDIO
if (gtk_combo_box_get_active(GTK_COMBO_BOX(api_box)) != -1) {
OutputAPI = gtk_combo_box_get_active(GTK_COMBO_BOX(api_box));
#ifdef __linux__
@@ -456,6 +473,7 @@ void DisplayDialog()
}
#endif
}
+#endif
#if SDL_MAJOR_VERSION >= 2
if (gtk_combo_box_get_active(GTK_COMBO_BOX(sdl_api_box)) != -1) {
diff --git a/plugins/spu2-x/src/SndOut.cpp b/plugins/spu2-x/src/SndOut.cpp
index 7963b12b75..6d9d58c2b3 100644
--- a/plugins/spu2-x/src/SndOut.cpp
+++ b/plugins/spu2-x/src/SndOut.cpp
@@ -88,7 +88,9 @@ SndOutModule *mods[] =
DSoundOut,
WaveOut,
#endif
+#if defined(_WIN32) || defined(SPU2X_PORTAUDIO)
PortaudioOut,
+#endif
#if defined(SPU2X_SDL) || defined(SPU2X_SDL2)
SDLOut,
#endif
diff --git a/plugins/spu2-x/src/SndOut.h b/plugins/spu2-x/src/SndOut.h
index ba84075aec..918d9d08ff 100644
--- a/plugins/spu2-x/src/SndOut.h
+++ b/plugins/spu2-x/src/SndOut.h
@@ -673,7 +673,9 @@ extern SndOutModule *DSoundOut;
extern SndOutModule *XAudio2_27_Out;
extern SndOutModule *XAudio2Out;
#endif
+#if defined(_WIN32) || defined(SPU2X_PORTAUDIO)
extern SndOutModule *PortaudioOut;
+#endif
#if defined(SPU2X_SDL) || defined(SPU2X_SDL2)
extern SndOutModule *const SDLOut;
#endif
|