aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
diff options
context:
space:
mode:
authorsharmander <saldabain.dev@gmail.com>2021-12-23 11:33:56 -0500
committerGitHub <noreply@github.com>2021-12-23 13:33:56 -0300
commitcb43cc7e322014ce2bd0ee73b06d403be62fa8d5 (patch)
tree98dbdc73e947b94d04c5e12bf7dba80f93407e2c /Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
parente7c2dc8ec3329d50a52c36efeb31019850ce6015 (diff)
UI - Add Volume Controls + Mute Toggle (F2) (#2871)
* Add the ability to toggle mute in the status bar. * Add the ability to toggle mute in the status bar. * Formatting fixes * Add hotkey (F2) to mute * Add default hotkey to config.json * Add ability to change volume via slider. * Fix Headless * Fix SDL2 Problem : Credits to d3xMachina * Remove unnecessary work * Address gdk comments * Toggling with Hotkey now properly restores volume to original level. * Toggling with Hotkey now properly restores volume to original level. * Update UI to show Volume % instead of Muted/Unmuted * Clean up the volume ui a bit. * Undo unintentionally committed code. * Implement AudRen Support * Restore intiial volume level in function definition. * Finalize UI * Finalize UI * Use clamp for bounds check * Use Math.Clamp for volume in soundio * Address comments by gdkchan * Address remaining comments * Fix missing semicolon * Address remaining gdkchan comment * Fix comment * Change /* to // * Allow volume slider to change volume immediately. Also force label text to cast to int to prevent decimals from showing in status bar * Remove blank line * Undo setting of volume level when "Cancel" is pressed. * Fix allignment for settings window code
Diffstat (limited to 'Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs')
-rw-r--r--Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs27
1 files changed, 21 insertions, 6 deletions
diff --git a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
index 7518c447..d20c3c03 100644
--- a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
+++ b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
@@ -186,12 +186,12 @@ namespace Ryujinx.Audio.Renderer.Server
/// <summary>
/// Start the <see cref="AudioProcessor"/> and worker thread.
/// </summary>
- private void StartLocked()
+ private void StartLocked(float volume)
{
_isRunning = true;
// TODO: virtual device mapping (IAudioDevice)
- Processor.Start(_deviceDriver);
+ Processor.Start(_deviceDriver, volume);
_workerThread = new Thread(SendCommands)
{
@@ -263,7 +263,7 @@ namespace Ryujinx.Audio.Renderer.Server
/// Register a new <see cref="AudioRenderSystem"/>.
/// </summary>
/// <param name="renderer">The <see cref="AudioRenderSystem"/> to register.</param>
- private void Register(AudioRenderSystem renderer)
+ private void Register(AudioRenderSystem renderer, float volume)
{
lock (_sessionLock)
{
@@ -274,7 +274,7 @@ namespace Ryujinx.Audio.Renderer.Server
{
if (!_isRunning)
{
- StartLocked();
+ StartLocked(volume);
}
}
}
@@ -314,7 +314,7 @@ namespace Ryujinx.Audio.Renderer.Server
/// <param name="workBufferSize">The guest work buffer size.</param>
/// <param name="processHandle">The process handle of the application.</param>
/// <returns>A <see cref="ResultCode"/> reporting an error or a success.</returns>
- public ResultCode OpenAudioRenderer(out AudioRenderSystem renderer, IVirtualMemoryManager memoryManager, ref AudioRendererConfiguration parameter, ulong appletResourceUserId, ulong workBufferAddress, ulong workBufferSize, uint processHandle)
+ public ResultCode OpenAudioRenderer(out AudioRenderSystem renderer, IVirtualMemoryManager memoryManager, ref AudioRendererConfiguration parameter, ulong appletResourceUserId, ulong workBufferAddress, ulong workBufferSize, uint processHandle, float volume)
{
int sessionId = AcquireSessionId();
@@ -326,7 +326,7 @@ namespace Ryujinx.Audio.Renderer.Server
{
renderer = audioRenderer;
- Register(renderer);
+ Register(renderer, volume);
}
else
{
@@ -338,6 +338,21 @@ namespace Ryujinx.Audio.Renderer.Server
return result;
}
+ public float GetVolume()
+ {
+ if (Processor != null)
+ {
+ return Processor.GetVolume();
+ }
+
+ return 0f;
+ }
+
+ public void SetVolume(float volume)
+ {
+ Processor?.SetVolume(volume);
+ }
+
public void Dispose()
{
if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)