Zelda HLE: Implement saw wave generation (sample source 0001).
Fixes issue 7961.
This commit is contained in:
parent
91fade5e89
commit
34341af17d
|
@ -476,8 +476,12 @@ struct ZeldaAudioRenderer::VPB
|
||||||
|
|
||||||
enum SamplesSourceType
|
enum SamplesSourceType
|
||||||
{
|
{
|
||||||
// Simple square wave at 50% amplitude and 16KHz.
|
// Simple square wave at 50% amplitude and frequency controlled via the
|
||||||
|
// resampling ratio.
|
||||||
SRC_SQUARE_WAVE = 0,
|
SRC_SQUARE_WAVE = 0,
|
||||||
|
// Simple saw wave at 100% amplitude and frequency controlled via the
|
||||||
|
// resampling ratio.
|
||||||
|
SRC_SAW_WAVE = 1,
|
||||||
// Samples stored in ARAM at a rate of 16 samples/9 bytes, AFC encoded,
|
// Samples stored in ARAM at a rate of 16 samples/9 bytes, AFC encoded,
|
||||||
// at an arbitrary sample rate (resampling is applied).
|
// at an arbitrary sample rate (resampling is applied).
|
||||||
SRC_AFC_HQ_FROM_ARAM = 9,
|
SRC_AFC_HQ_FROM_ARAM = 9,
|
||||||
|
@ -772,6 +776,18 @@ void ZeldaAudioRenderer::LoadInputSamples(MixingBuffer* buffer, VPB* vpb)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case VPB::SRC_SAW_WAVE:
|
||||||
|
{
|
||||||
|
u32 pos = vpb->current_pos_frac;
|
||||||
|
for (size_t i = 0; i < buffer->size(); ++i)
|
||||||
|
{
|
||||||
|
(*buffer)[i] = pos & 0xFFFF;
|
||||||
|
pos += (vpb->resampling_ratio) >> 1;
|
||||||
|
}
|
||||||
|
vpb->current_pos_frac = pos & 0xFFFF;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case VPB::SRC_AFC_HQ_FROM_ARAM:
|
case VPB::SRC_AFC_HQ_FROM_ARAM:
|
||||||
DownloadAFCSamplesFromARAM(raw_input_samples.data() + 4, vpb,
|
DownloadAFCSamplesFromARAM(raw_input_samples.data() + 4, vpb,
|
||||||
NeededRawSamplesCount(*vpb));
|
NeededRawSamplesCount(*vpb));
|
||||||
|
|
Loading…
Reference in New Issue