aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Audio/Output/AudioOutputManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Audio/Output/AudioOutputManager.cs')
-rw-r--r--Ryujinx.Audio/Output/AudioOutputManager.cs40
1 files changed, 38 insertions, 2 deletions
diff --git a/Ryujinx.Audio/Output/AudioOutputManager.cs b/Ryujinx.Audio/Output/AudioOutputManager.cs
index 852632fa..dd115295 100644
--- a/Ryujinx.Audio/Output/AudioOutputManager.cs
+++ b/Ryujinx.Audio/Output/AudioOutputManager.cs
@@ -208,13 +208,14 @@ namespace Ryujinx.Audio.Output
SampleFormat sampleFormat,
ref AudioInputConfiguration parameter,
ulong appletResourceUserId,
- uint processHandle)
+ uint processHandle,
+ float volume)
{
int sessionId = AcquireSessionId();
_sessionsBufferEvents[sessionId].Clear();
- IHardwareDeviceSession deviceSession = _deviceDriver.OpenDeviceSession(IHardwareDeviceDriver.Direction.Output, memoryManager, sampleFormat, parameter.SampleRate, parameter.ChannelCount);
+ IHardwareDeviceSession deviceSession = _deviceDriver.OpenDeviceSession(IHardwareDeviceDriver.Direction.Output, memoryManager, sampleFormat, parameter.SampleRate, parameter.ChannelCount, volume);
AudioOutputSystem audioOut = new AudioOutputSystem(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);
@@ -247,6 +248,41 @@ namespace Ryujinx.Audio.Output
return result;
}
+ /// <summary>
+ /// Sets the volume for all output devices.
+ /// </summary>
+ /// <param name="volume">The volume to set.</param>
+ public void SetVolume(float volume)
+ {
+ if (_sessions != null)
+ {
+ foreach (AudioOutputSystem session in _sessions)
+ {
+ session?.SetVolume(volume);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the volume for all output devices.
+ /// </summary>
+ /// <returns>A float indicating the volume level.</returns>
+ public float GetVolume()
+ {
+ if (_sessions != null)
+ {
+ foreach (AudioOutputSystem session in _sessions)
+ {
+ if (session != null)
+ {
+ return session.GetVolume();
+ }
+ }
+ }
+
+ return 0.0f;
+ }
+
public void Dispose()
{
if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)