forked from Mirror/Ryujinx
Support audio effect output status (#890)
* Support audio effect output status * Remove extra line
This commit is contained in:
parent
a5e20a8fd1
commit
595e7716d8
5 changed files with 61 additions and 4 deletions
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
|
{
|
||||||
|
class EffectContext
|
||||||
|
{
|
||||||
|
public EffectOut OutStatus;
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,6 +34,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
|
|
||||||
private VoiceContext[] _voices;
|
private VoiceContext[] _voices;
|
||||||
|
|
||||||
|
private EffectContext[] _effects;
|
||||||
|
|
||||||
private int _track;
|
private int _track;
|
||||||
|
|
||||||
private PlayState _playState;
|
private PlayState _playState;
|
||||||
|
@ -42,22 +44,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
Horizon system,
|
Horizon system,
|
||||||
MemoryManager memory,
|
MemoryManager memory,
|
||||||
IAalOutput audioOut,
|
IAalOutput audioOut,
|
||||||
AudioRendererParameter Params)
|
AudioRendererParameter rendererParams)
|
||||||
{
|
{
|
||||||
_updateEvent = new KEvent(system);
|
_updateEvent = new KEvent(system);
|
||||||
|
|
||||||
_memory = memory;
|
_memory = memory;
|
||||||
_audioOut = audioOut;
|
_audioOut = audioOut;
|
||||||
_params = Params;
|
_params = rendererParams;
|
||||||
|
|
||||||
_track = audioOut.OpenTrack(
|
_track = audioOut.OpenTrack(
|
||||||
AudioRendererConsts.HostSampleRate,
|
AudioRendererConsts.HostSampleRate,
|
||||||
AudioRendererConsts.HostChannelsCount,
|
AudioRendererConsts.HostChannelsCount,
|
||||||
AudioCallback);
|
AudioCallback);
|
||||||
|
|
||||||
_memoryPools = CreateArray<MemoryPoolContext>(Params.EffectCount + Params.VoiceCount * 4);
|
_memoryPools = CreateArray<MemoryPoolContext>(rendererParams.EffectCount + rendererParams.VoiceCount * 4);
|
||||||
|
|
||||||
_voices = CreateArray<VoiceContext>(Params.VoiceCount);
|
_voices = CreateArray<VoiceContext>(rendererParams.VoiceCount);
|
||||||
|
|
||||||
|
_effects = CreateArray<EffectContext>(rendererParams.EffectCount);
|
||||||
|
|
||||||
InitializeAudioOut();
|
InitializeAudioOut();
|
||||||
|
|
||||||
|
@ -205,6 +209,16 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
voiceCtx.PlayState = voice.PlayState;
|
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();
|
UpdateAudio();
|
||||||
|
|
||||||
UpdateDataHeader outputHeader = new UpdateDataHeader();
|
UpdateDataHeader outputHeader = new UpdateDataHeader();
|
||||||
|
@ -245,6 +259,11 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
writer.Write(voice.OutStatus);
|
writer.Write(voice.OutStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (EffectContext effect in _effects)
|
||||||
|
{
|
||||||
|
writer.Write(effect.OutStatus);
|
||||||
|
}
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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];
|
||||||
|
}
|
||||||
|
}
|
|
@ -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];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Audio.AudioRendererManager
|
||||||
|
{
|
||||||
|
enum EffectState : byte
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
New = 1
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue