aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/EffectContext.cs7
-rw-r--r--Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/IAudioRenderer.cs27
-rw-r--r--Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectIn.cs12
-rw-r--r--Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectOut.cs11
-rw-r--r--Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectState.cs8
5 files changed, 61 insertions, 4 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/EffectContext.cs b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/EffectContext.cs
new file mode 100644
index 00000000..88f087ed
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/EffectContext.cs
@@ -0,0 +1,7 @@
+namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
+{
+ class EffectContext
+ {
+ public EffectOut OutStatus;
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/IAudioRenderer.cs b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/IAudioRenderer.cs
index aa9b6e51..379cf2df 100644
--- a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/IAudioRenderer.cs
+++ b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/IAudioRenderer.cs
@@ -34,6 +34,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
private VoiceContext[] _voices;
+ private EffectContext[] _effects;
+
private int _track;
private PlayState _playState;
@@ -42,22 +44,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
Horizon system,
MemoryManager memory,
IAalOutput audioOut,
- AudioRendererParameter Params)
+ AudioRendererParameter rendererParams)
{
_updateEvent = new KEvent(system);
_memory = memory;
_audioOut = audioOut;
- _params = Params;
+ _params = rendererParams;
_track = audioOut.OpenTrack(
AudioRendererConsts.HostSampleRate,
AudioRendererConsts.HostChannelsCount,
AudioCallback);
- _memoryPools = CreateArray<MemoryPoolContext>(Params.EffectCount + Params.VoiceCount * 4);
+ _memoryPools = CreateArray<MemoryPoolContext>(rendererParams.EffectCount + rendererParams.VoiceCount * 4);
+
+ _voices = CreateArray<VoiceContext>(rendererParams.VoiceCount);
- _voices = CreateArray<VoiceContext>(Params.VoiceCount);
+ _effects = CreateArray<EffectContext>(rendererParams.EffectCount);
InitializeAudioOut();
@@ -205,6 +209,16 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
voiceCtx.PlayState = voice.PlayState;
}
+ EffectIn[] effectsIn = reader.Read<EffectIn>(inputHeader.EffectSize);
+
+ for (int index = 0; index < effectsIn.Length; index++)
+ {
+ if (effectsIn[index].IsNew != 0)
+ {
+ _effects[index].OutStatus.State = EffectState.New;
+ }
+ }
+
UpdateAudio();
UpdateDataHeader outputHeader = new UpdateDataHeader();
@@ -245,6 +259,11 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
writer.Write(voice.OutStatus);
}
+ foreach (EffectContext effect in _effects)
+ {
+ writer.Write(effect.OutStatus);
+ }
+
return ResultCode.Success;
}
diff --git a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectIn.cs b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectIn.cs
new file mode 100644
index 00000000..03520475
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectIn.cs
@@ -0,0 +1,12 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
+{
+ [StructLayout(LayoutKind.Sequential, Size = 0xc0, Pack = 1)]
+ unsafe struct EffectIn
+ {
+ public byte Unknown0x0;
+ public byte IsNew;
+ public fixed byte Unknown[0xbe];
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectOut.cs b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectOut.cs
new file mode 100644
index 00000000..5106ad9e
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectOut.cs
@@ -0,0 +1,11 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
+{
+ [StructLayout(LayoutKind.Sequential, Size = 0x10, Pack = 1)]
+ unsafe struct EffectOut
+ {
+ public EffectState State;
+ public fixed byte Reserved[15];
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectState.cs b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectState.cs
new file mode 100644
index 00000000..ed676684
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Audio/AudioRendererManager/Types/EffectState.cs
@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
+{
+ enum EffectState : byte
+ {
+ None = 0,
+ New = 1
+ }
+}