using Ryujinx.Common.Utilities; using System; using System.Runtime.InteropServices; namespace Ryujinx.Audio.Renderer.Parameter { /// /// Input information for a mix. /// /// Also used on the client side for mix tracking. [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct MixParameter { /// /// Base volume of the mix. /// public float Volume; /// /// Target sample rate of the mix. /// public uint SampleRate; /// /// Target buffer count. /// public uint BufferCount; /// /// Set to true if in use. /// [MarshalAs(UnmanagedType.I1)] public bool IsUsed; /// /// Set to true if it was changed. /// [MarshalAs(UnmanagedType.I1)] public bool IsDirty; /// /// Reserved/padding. /// private ushort _reserved1; /// /// The id of the mix. /// public int MixId; /// /// The effect count. (client side) /// public uint EffectCount; /// /// The mix node id. /// public int NodeId; /// /// Reserved/padding. /// private ulong _reserved2; /// /// Mix buffer volumes storage. /// private MixVolumeArray _mixBufferVolumeArray; /// /// The mix to output the result of this mix. /// public int DestinationMixId; /// /// The splitter to output the result of this mix. /// public uint DestinationSplitterId; /// /// Reserved/padding. /// private uint _reserved3; [StructLayout(LayoutKind.Sequential, Size = 4 * Constants.MixBufferCountMax * Constants.MixBufferCountMax, Pack = 1)] private struct MixVolumeArray { } /// /// Mix buffer volumes. /// /// Used when no splitter id is specified. public Span MixBufferVolume => SpanHelpers.AsSpan(ref _mixBufferVolumeArray); } }