49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using LibAtrac9.Utilities;
|
|
|
|
namespace LibAtrac9
|
|
{
|
|
internal class Channel
|
|
{
|
|
public Atrac9Config Config { get; }
|
|
public int ChannelIndex { get; }
|
|
public bool IsPrimary => Block.PrimaryChannelIndex == ChannelIndex;
|
|
public Block Block { get; }
|
|
public Mdct Mdct { get; }
|
|
|
|
public double[] Pcm { get; } = new double[256];
|
|
public double[] Spectra { get; } = new double[256];
|
|
|
|
public int CodedQuantUnits { get; set; }
|
|
public int ScaleFactorCodingMode { get; set; }
|
|
public int[] ScaleFactors { get; } = new int[31];
|
|
public int[] ScaleFactorsPrev { get; } = new int[31];
|
|
|
|
public int[] Precisions { get; } = new int[30];
|
|
public int[] PrecisionsFine { get; } = new int[30];
|
|
public int[] PrecisionMask { get; } = new int[30];
|
|
|
|
public int[] SpectraValuesBuffer { get; } = new int[16];
|
|
public int[] CodebookSet { get; } = new int[30];
|
|
|
|
public int[] QuantizedSpectra { get; } = new int[256];
|
|
public int[] QuantizedSpectraFine { get; } = new int[256];
|
|
|
|
public int BexMode { get; set; }
|
|
public int BexValueCount { get; set; }
|
|
public int[] BexValues { get; } = new int[4];
|
|
public double[] BexScales { get; } = new double[6];
|
|
public Atrac9Rng Rng { get; set; }
|
|
|
|
public Channel(Block parentBlock, int channelIndex)
|
|
{
|
|
Block = parentBlock;
|
|
ChannelIndex = channelIndex;
|
|
Config = parentBlock.Config;
|
|
Mdct = new Mdct(Config.FrameSamplesPower, Tables.ImdctWindow[Config.FrameSamplesPower - 6]);
|
|
}
|
|
|
|
public void UpdateCodedUnits() =>
|
|
CodedQuantUnits = IsPrimary ? Block.QuantizationUnitCount : Block.StereoQuantizationUnit;
|
|
}
|
|
}
|