mirror of
https://github.com/par274/sharpemu.git
synced 2026-07-28 13:40:58 +08:00
2b6bd5a532
* [audio] added sdl audio backend and in-tree atrac9 decoder * [input] replaced per-platform pad readers with sdl gamepad input * [video] added sdl window and host display plumbing * [gui] added host display options and per-game render settings * [bink] synced host movie playback to the guest audio clock * [cpu] hooked windows write faults into guest image tracking * [perf] added guest and render profiling, reserved host cpu lanes * [kernel] fixed stale pthread mutex handle alias * [host] wired the sdl session, save-data paths and project references * [audio] hoisted ajm trace stackalloc out of its loop * [video] Add guest image sync setting * [build] Strip native symbols * reuse
60 lines
1.9 KiB
C#
60 lines
1.9 KiB
C#
// SPDX-License-Identifier: MIT
|
|
#nullable disable
|
|
using System;
|
|
|
|
namespace LibAtrac9
|
|
{
|
|
internal static class Quantization
|
|
{
|
|
public static void DequantizeSpectra(Block block)
|
|
{
|
|
foreach (Channel channel in block.Channels)
|
|
{
|
|
Array.Clear(channel.Spectra, 0, channel.Spectra.Length);
|
|
|
|
for (int i = 0; i < channel.CodedQuantUnits; i++)
|
|
{
|
|
DequantizeQuantUnit(channel, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void DequantizeQuantUnit(Channel channel, int band)
|
|
{
|
|
int subBandIndex = Tables.QuantUnitToCoeffIndex[band];
|
|
int subBandCount = Tables.QuantUnitToCoeffCount[band];
|
|
double stepSize = Tables.QuantizerStepSize[channel.Precisions[band]];
|
|
double stepSizeFine = Tables.QuantizerFineStepSize[channel.PrecisionsFine[band]];
|
|
|
|
for (int sb = 0; sb < subBandCount; sb++)
|
|
{
|
|
double coarse = channel.QuantizedSpectra[subBandIndex + sb] * stepSize;
|
|
double fine = channel.QuantizedSpectraFine[subBandIndex + sb] * stepSizeFine;
|
|
channel.Spectra[subBandIndex + sb] = coarse + fine;
|
|
}
|
|
}
|
|
|
|
public static void ScaleSpectrum(Block block)
|
|
{
|
|
foreach (Channel channel in block.Channels)
|
|
{
|
|
ScaleSpectrum(channel);
|
|
}
|
|
}
|
|
|
|
private static void ScaleSpectrum(Channel channel)
|
|
{
|
|
int quantUnitCount = channel.Block.QuantizationUnitCount;
|
|
double[] spectra = channel.Spectra;
|
|
|
|
for (int i = 0; i < quantUnitCount; i++)
|
|
{
|
|
for (int sb = Tables.QuantUnitToCoeffIndex[i]; sb < Tables.QuantUnitToCoeffIndex[i + 1]; sb++)
|
|
{
|
|
spectra[sb] *= Tables.SpectrumScale[channel.ScaleFactors[i]];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|