SplitterHardwareDevice.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Ryujinx.Audio.Integration;
  2. using System;
  3. namespace Ryujinx.Audio.Renderer.Utils
  4. {
  5. public class SplitterHardwareDevice : IHardwareDevice
  6. {
  7. private IHardwareDevice _baseDevice;
  8. private IHardwareDevice _secondaryDevice;
  9. public SplitterHardwareDevice(IHardwareDevice baseDevice, IHardwareDevice secondaryDevice)
  10. {
  11. _baseDevice = baseDevice;
  12. _secondaryDevice = secondaryDevice;
  13. }
  14. public void AppendBuffer(ReadOnlySpan<short> data, uint channelCount)
  15. {
  16. _baseDevice.AppendBuffer(data, channelCount);
  17. _secondaryDevice?.AppendBuffer(data, channelCount);
  18. }
  19. public void SetVolume(float volume)
  20. {
  21. _baseDevice.SetVolume(volume);
  22. _secondaryDevice.SetVolume(volume);
  23. }
  24. public float GetVolume()
  25. {
  26. return _baseDevice.GetVolume();
  27. }
  28. public uint GetChannelCount()
  29. {
  30. return _baseDevice.GetChannelCount();
  31. }
  32. public uint GetSampleRate()
  33. {
  34. return _baseDevice.GetSampleRate();
  35. }
  36. public void Dispose()
  37. {
  38. Dispose(true);
  39. }
  40. protected virtual void Dispose(bool disposing)
  41. {
  42. if (disposing)
  43. {
  44. _baseDevice.Dispose();
  45. _secondaryDevice?.Dispose();
  46. }
  47. }
  48. }
  49. }