aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Audio/AudioManagers.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2024-02-22 16:58:33 -0300
committerGitHub <noreply@github.com>2024-02-22 16:58:33 -0300
commitd4d0a48bfe89d6e8e12ce16829bb2c440b56007c (patch)
tree2376566ed2c06181b3dbc547b1f99f5b533d918b /src/Ryujinx.Horizon/Audio/AudioManagers.cs
parent57d8afd0c99bb43d1ba1e3cc630d257c5da92741 (diff)
Migrate Audio service to new IPC (#6285)
* Migrate audren to new IPC * Migrate audout * Migrate audin * Migrate hwopus * Bye bye old audio service * Switch volume control to IHardwareDeviceDriver * Somewhat unrelated changes * Remove Concentus reference from HLE * Implement OpenAudioRendererForManualExecution * Remove SetVolume/GetVolume methods that are not necessary * Remove SetVolume/GetVolume methods that are not necessary (2) * Fix incorrect volume update * PR feedback * PR feedback * Stub audrec * Init outParameter * Make FinalOutputRecorderParameter/Internal readonly * Make FinalOutputRecorder IDisposable * Fix HardwareOpusDecoderManager parameter buffers * Opus work buffer size and error handling improvements * Add AudioInProtocolName enum * Fix potential divisions by zero
Diffstat (limited to 'src/Ryujinx.Horizon/Audio/AudioManagers.cs')
-rw-r--r--src/Ryujinx.Horizon/Audio/AudioManagers.cs78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/Ryujinx.Horizon/Audio/AudioManagers.cs b/src/Ryujinx.Horizon/Audio/AudioManagers.cs
new file mode 100644
index 00000000..493a6f9b
--- /dev/null
+++ b/src/Ryujinx.Horizon/Audio/AudioManagers.cs
@@ -0,0 +1,78 @@
+using Ryujinx.Audio;
+using Ryujinx.Audio.Input;
+using Ryujinx.Audio.Integration;
+using Ryujinx.Audio.Output;
+using Ryujinx.Audio.Renderer.Device;
+using Ryujinx.Audio.Renderer.Server;
+using Ryujinx.Cpu;
+using Ryujinx.Horizon.Sdk.Audio;
+using System;
+
+namespace Ryujinx.Horizon.Audio
+{
+ class AudioManagers : IDisposable
+ {
+ public AudioManager AudioManager { get; }
+ public AudioOutputManager AudioOutputManager { get; }
+ public AudioInputManager AudioInputManager { get; }
+ public AudioRendererManager AudioRendererManager { get; }
+ public VirtualDeviceSessionRegistry AudioDeviceSessionRegistry { get; }
+
+ public AudioManagers(IHardwareDeviceDriver audioDeviceDriver, ITickSource tickSource)
+ {
+ AudioManager = new AudioManager();
+ AudioOutputManager = new AudioOutputManager();
+ AudioInputManager = new AudioInputManager();
+ AudioRendererManager = new AudioRendererManager(tickSource);
+ AudioDeviceSessionRegistry = new VirtualDeviceSessionRegistry(audioDeviceDriver);
+
+ IWritableEvent[] audioOutputRegisterBufferEvents = new IWritableEvent[Constants.AudioOutSessionCountMax];
+
+ for (int i = 0; i < audioOutputRegisterBufferEvents.Length; i++)
+ {
+ audioOutputRegisterBufferEvents[i] = new AudioEvent();
+ }
+
+ AudioOutputManager.Initialize(audioDeviceDriver, audioOutputRegisterBufferEvents);
+
+ IWritableEvent[] audioInputRegisterBufferEvents = new IWritableEvent[Constants.AudioInSessionCountMax];
+
+ for (int i = 0; i < audioInputRegisterBufferEvents.Length; i++)
+ {
+ audioInputRegisterBufferEvents[i] = new AudioEvent();
+ }
+
+ AudioInputManager.Initialize(audioDeviceDriver, audioInputRegisterBufferEvents);
+
+ IWritableEvent[] systemEvents = new IWritableEvent[Constants.AudioRendererSessionCountMax];
+
+ for (int i = 0; i < systemEvents.Length; i++)
+ {
+ systemEvents[i] = new AudioEvent();
+ }
+
+ AudioManager.Initialize(audioDeviceDriver.GetUpdateRequiredEvent(), AudioOutputManager.Update, AudioInputManager.Update);
+
+ AudioRendererManager.Initialize(systemEvents, audioDeviceDriver);
+
+ AudioManager.Start();
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ AudioManager.Dispose();
+ AudioOutputManager.Dispose();
+ AudioInputManager.Dispose();
+ AudioRendererManager.Dispose();
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(disposing: true);
+ GC.SuppressFinalize(this);
+ }
+ }
+}