@@ -106,6 +106,11 @@ struct CaptureSessionConfig
106106 // / </summary>
107107 uint32_t audioInputVolumePercentage;
108108
109+ // / <summary>
110+ // / System/desktop audio volume as a percentage. 100 preserves the captured signal.
111+ // / </summary>
112+ uint32_t systemAudioVolumePercentage;
113+
109114 // / <summary>
110115 // / Target video frame rate (FPS). Default is 30.
111116 // / </summary>
@@ -132,7 +137,8 @@ struct CaptureSessionConfig
132137 uint32_t vidBitrate = 5'000'000 ,
133138 uint32_t audBitrate = 128'000 ,
134139 std::wstring audioSourceId = L" " ,
135- uint32_t audioVolumePercentage = 100 )
140+ uint32_t audioVolumePercentage = 100 ,
141+ uint32_t systemVolumePercentage = 100 )
136142 : targetType(CaptureTargetType::Monitor)
137143 , hMonitor(monitor)
138144 , hwnd(nullptr )
@@ -147,6 +153,7 @@ struct CaptureSessionConfig
147153 , audioBitrate(audBitrate)
148154 , audioInputSourceId(std::move(audioSourceId))
149155 , audioInputVolumePercentage(audioVolumePercentage)
156+ , systemAudioVolumePercentage(systemVolumePercentage)
150157 {
151158 }
152159
@@ -161,7 +168,8 @@ struct CaptureSessionConfig
161168 uint32_t vidBitrate = 5'000'000 ,
162169 uint32_t audBitrate = 128'000 ,
163170 std::wstring audioSourceId = L" " ,
164- uint32_t audioVolumePercentage = 100 )
171+ uint32_t audioVolumePercentage = 100 ,
172+ uint32_t systemVolumePercentage = 100 )
165173 : targetType(CaptureTargetType::Monitor)
166174 , hMonitor(monitor)
167175 , hwnd(nullptr )
@@ -176,6 +184,7 @@ struct CaptureSessionConfig
176184 , audioBitrate(audBitrate)
177185 , audioInputSourceId(std::move(audioSourceId))
178186 , audioInputVolumePercentage(audioVolumePercentage)
187+ , systemAudioVolumePercentage(systemVolumePercentage)
179188 {
180189 }
181190
@@ -197,6 +206,7 @@ struct CaptureSessionConfig
197206 , audioBitrate(128'000 )
198207 , audioInputSourceId(L" " )
199208 , audioInputVolumePercentage(100 )
209+ , systemAudioVolumePercentage(100 )
200210 {
201211 }
202212
@@ -208,9 +218,10 @@ struct CaptureSessionConfig
208218 uint32_t vidBitrate = 5'000'000 ,
209219 uint32_t audBitrate = 128'000 ,
210220 std::wstring audioSourceId = L" " ,
211- uint32_t audioVolumePercentage = 100 )
221+ uint32_t audioVolumePercentage = 100 ,
222+ uint32_t systemVolumePercentage = 100 )
212223 {
213- CaptureSessionConfig config (monitor, std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage);
224+ CaptureSessionConfig config (monitor, std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage, systemVolumePercentage );
214225 config.targetType = CaptureTargetType::Monitor;
215226 return config;
216227 }
@@ -223,9 +234,10 @@ struct CaptureSessionConfig
223234 uint32_t vidBitrate = 5'000'000 ,
224235 uint32_t audBitrate = 128'000 ,
225236 std::wstring audioSourceId = L" " ,
226- uint32_t audioVolumePercentage = 100 )
237+ uint32_t audioVolumePercentage = 100 ,
238+ uint32_t systemVolumePercentage = 100 )
227239 {
228- CaptureSessionConfig config (nullptr , std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage);
240+ CaptureSessionConfig config (nullptr , std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage, systemVolumePercentage );
229241 config.targetType = CaptureTargetType::Window;
230242 config.hwnd = window;
231243 return config;
@@ -243,9 +255,10 @@ struct CaptureSessionConfig
243255 uint32_t vidBitrate = 5'000'000 ,
244256 uint32_t audBitrate = 128'000 ,
245257 std::wstring audioSourceId = L" " ,
246- uint32_t audioVolumePercentage = 100 )
258+ uint32_t audioVolumePercentage = 100 ,
259+ uint32_t systemVolumePercentage = 100 )
247260 {
248- CaptureSessionConfig config (monitor, std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage);
261+ CaptureSessionConfig config (monitor, std::move (path), audio, fps, vidBitrate, audBitrate, std::move (audioSourceId), audioVolumePercentage, systemVolumePercentage );
249262 config.targetType = CaptureTargetType::Rectangle;
250263 config.sourceLeft = left;
251264 config.sourceTop = top;
@@ -335,21 +348,24 @@ struct CaptureSessionConfig
335348 constexpr uint32_t MIN_AUDIO_BITRATE = 32'000 ; // 32 kbps
336349 constexpr uint32_t MAX_AUDIO_BITRATE = 320'000 ; // 320 kbps
337350
338- if (audioEnabled )
351+ if (audioBitrate < MIN_AUDIO_BITRATE || audioBitrate > MAX_AUDIO_BITRATE )
339352 {
340- if (audioBitrate < MIN_AUDIO_BITRATE || audioBitrate > MAX_AUDIO_BITRATE )
341- {
342- result.AddError (" audioBitrate must be between " +
343- std::to_string (MIN_AUDIO_BITRATE ) + " and " +
344- std::to_string (MAX_AUDIO_BITRATE ) + " (got " +
345- std::to_string (audioBitrate) + " )" );
346- }
353+ result.AddError (" audioBitrate must be between " +
354+ std::to_string (MIN_AUDIO_BITRATE ) + " and " +
355+ std::to_string (MAX_AUDIO_BITRATE ) + " (got " +
356+ std::to_string (audioBitrate) + " )" );
357+ }
347358
348- if (audioInputVolumePercentage > 100 )
349- {
350- result.AddError (" audioInputVolumePercentage must be between 0 and 100 (got " +
351- std::to_string (audioInputVolumePercentage) + " )" );
352- }
359+ if (audioInputVolumePercentage > 100 )
360+ {
361+ result.AddError (" audioInputVolumePercentage must be between 0 and 100 (got " +
362+ std::to_string (audioInputVolumePercentage) + " )" );
363+ }
364+
365+ if (systemAudioVolumePercentage > 100 )
366+ {
367+ result.AddError (" systemAudioVolumePercentage must be between 0 and 100 (got " +
368+ std::to_string (systemAudioVolumePercentage) + " )" );
353369 }
354370
355371 return result;
0 commit comments