aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Audio/AudioManagers.cs
diff options
context:
space:
mode:
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);
+ }
+ }
+}