Skip to content

Commit 0df4d72

Browse files
committed
Replace Blip_Buffer with fork
1 parent 1a79068 commit 0df4d72

5 files changed

Lines changed: 849 additions & 651 deletions

File tree

Source/APU/Mixer.cpp

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ CMixer::CMixer()
8787
m_iHighDamp = 0;
8888
m_fOverallVol = 1.0f;
8989

90-
m_dSumSS = 0.0;
91-
m_dSumTND = 0.0;
92-
9390
m_iMeterDecayRate = DECAY_SLOW; // // // 050B
9491
}
9592

@@ -191,6 +188,8 @@ float CMixer::GetAttenuation() const
191188
return Attenuation;
192189
}
193190

191+
constexpr int N163_RANGE = 1200;
192+
194193
void CMixer::UpdateSettings(int LowCut, int HighCut, int HighDamp, float OverallVol)
195194
{
196195
float Volume = OverallVol * GetAttenuation();
@@ -225,15 +224,13 @@ void CMixer::UpdateSettings(int LowCut, int HighCut, int HighDamp, float Overall
225224
SynthFDS.treble_eq(fds_eq);
226225

227226
// Volume levels
228-
Synth2A03SS.volume(Volume * m_fLevelAPU1);
229-
Synth2A03TND.volume(Volume * m_fLevelAPU2);
230-
SynthVRC6.volume(Volume * 3.98333f * m_fLevelVRC6);
231-
SynthFDS.volume(Volume * 1.00f * m_fLevelFDS);
232-
SynthMMC5.volume(Volume * 1.18421f * m_fLevelMMC5);
233-
234-
// Not checked
235-
SynthS5B.volume(Volume * m_fLevelS5B); // // // 050B
236-
SynthN163.volume(Volume * 1.1f * m_fLevelN163);
227+
Synth2A03SS.volume(Volume * m_fLevelAPU1, 500);
228+
Synth2A03TND.volume(Volume * m_fLevelAPU2, 500);
229+
SynthVRC6.volume(Volume * 3.98333f * m_fLevelVRC6, 500);
230+
SynthMMC5.volume(Volume * 1.18421f * m_fLevelMMC5, 130);
231+
SynthS5B.volume(Volume * m_fLevelS5B, 1600); // Not checked
232+
SynthFDS.volume(Volume * 1.00f * m_fLevelFDS, 3500);
233+
SynthN163.volume(Volume * 1.1f * m_fLevelN163, N163_RANGE); // Not checked
237234

238235
m_iLowCut = LowCut;
239236
m_iHighCut = HighCut;
@@ -245,7 +242,7 @@ void CMixer::SetNamcoVolume(float fVol)
245242
{
246243
float fVolume = fVol * m_fOverallVol * GetAttenuation();
247244

248-
SynthN163.volume(fVolume * 1.1f * m_fLevelN163);
245+
SynthN163.volume(fVolume * 1.1f * m_fLevelN163, N163_RANGE);
249246
}
250247

251248
int CMixer::GetMeterDecayRate() const // // // 050B
@@ -258,7 +255,7 @@ void CMixer::SetMeterDecayRate(int Rate) // // // 050B
258255
m_iMeterDecayRate = Rate;
259256
}
260257

261-
void CMixer::MixSamples(blip_sample_t *pBuffer, uint32_t Count)
258+
void CMixer::MixSamples(blip_amplitude_t *pBuffer, uint32_t Count)
262259
{
263260
// For VRC7
264261
BlipBuffer.mix_samples(pBuffer, Count);
@@ -286,8 +283,9 @@ void CMixer::ClearBuffer()
286283
{
287284
BlipBuffer.clear();
288285

289-
m_dSumSS = 0;
290-
m_dSumTND = 0;
286+
#define X(SYNTH) SYNTH.clear();
287+
FOREACH_SYNTH(X, );
288+
#undef X
291289
}
292290

293291
int CMixer::SamplesAvail() const
@@ -336,9 +334,8 @@ void CMixer::MixInternal1(int Time)
336334
double Sum = CalcPin1(m_iChannels[CHANID_SQUARE1], m_iChannels[CHANID_SQUARE2]);
337335
#endif
338336

339-
double Delta = (Sum - m_dSumSS) * AMP_2A03;
340-
Synth2A03SS.offset(Time, (int)Delta, &BlipBuffer);
341-
m_dSumSS = Sum;
337+
double Delta = Sum * AMP_2A03;
338+
Synth2A03SS.update(Time, (int)Delta, &BlipBuffer);
342339
}
343340

344341
void CMixer::MixInternal2(int Time)
@@ -350,9 +347,8 @@ void CMixer::MixInternal2(int Time)
350347
double Sum = CalcPin2(m_iChannels[CHANID_TRIANGLE], m_iChannels[CHANID_NOISE], m_iChannels[CHANID_DPCM]);
351348
#endif
352349

353-
double Delta = (Sum - m_dSumTND) * AMP_2A03;
354-
Synth2A03TND.offset(Time, (int)Delta, &BlipBuffer);
355-
m_dSumTND = Sum;
350+
double Delta = Sum * AMP_2A03;
351+
Synth2A03TND.update(Time, (int)Delta, &BlipBuffer);
356352
}
357353

358354
void CMixer::MixN163(int Value, int Time)
@@ -426,7 +422,7 @@ void CMixer::AddValue(int ChanID, int Chip, int Value, int AbsValue, int FrameCy
426422

427423
int CMixer::ReadBuffer(void *Buffer)
428424
{
429-
return BlipBuffer.read_samples((blip_sample_t*)Buffer, BlipBuffer.samples_avail());
425+
return BlipBuffer.read_samples((blip_amplitude_t*)Buffer, BlipBuffer.samples_avail());
430426
}
431427

432428
int32_t CMixer::GetChanOutput(uint8_t Chan) const
@@ -475,5 +471,5 @@ void CMixer::ClearChannelLevels()
475471

476472
uint32_t CMixer::ResampleDuration(uint32_t Time) const
477473
{
478-
return (uint32_t)BlipBuffer.resampled_duration((blip_time_t)Time);
474+
return (uint32_t)BlipBuffer.resampled_duration((blip_nsamp_t)Time);
479475
}

Source/APU/Mixer.h

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class CMixer
5353
void ClearBuffer();
5454
void FinishBuffer(int t);
5555
int SamplesAvail() const;
56-
void MixSamples(blip_sample_t *pBuffer, uint32_t Count);
56+
void MixSamples(blip_amplitude_t *pBuffer, uint32_t Count);
5757
uint32_t GetMixSampleCount(int t) const;
5858

5959
void AddSample(int ChanID, int Value);
@@ -87,20 +87,26 @@ class CMixer
8787

8888
private:
8989
// Blip buffer synths
90-
Blip_Synth<blip_good_quality, -500> Synth2A03SS;
91-
Blip_Synth<blip_good_quality, -500> Synth2A03TND;
92-
Blip_Synth<blip_good_quality, -500> SynthVRC6;
93-
Blip_Synth<blip_good_quality, -130> SynthMMC5;
94-
Blip_Synth<blip_good_quality, -1600> SynthN163;
95-
Blip_Synth<blip_good_quality, -3500> SynthFDS;
96-
Blip_Synth<blip_good_quality, -1200> SynthS5B; // // // 050B
97-
90+
Blip_Synth<blip_good_quality> Synth2A03SS;
91+
Blip_Synth<blip_good_quality> Synth2A03TND;
92+
Blip_Synth<blip_good_quality> SynthVRC6;
93+
Blip_Synth<blip_good_quality> SynthMMC5;
94+
Blip_Synth<blip_good_quality> SynthN163;
95+
Blip_Synth<blip_good_quality> SynthFDS;
96+
Blip_Synth<blip_good_quality> SynthS5B; // // // 050B
97+
98+
#define FOREACH_SYNTH(X, SEP) \
99+
X(Synth2A03SS) SEP \
100+
X(Synth2A03TND) SEP \
101+
X(SynthVRC6) SEP \
102+
X(SynthMMC5) SEP \
103+
X(SynthN163) SEP \
104+
X(SynthFDS) SEP \
105+
X(SynthS5B)
106+
98107
// Blip buffer object
99108
Blip_Buffer BlipBuffer;
100109

101-
double m_dSumSS;
102-
double m_dSumTND;
103-
104110
int32_t m_iChannels[CHANNELS];
105111
uint8_t m_iExternalChip;
106112
uint32_t m_iSampleRate;

Source/APU/VRC7.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ void CVRC7::EndFrame()
137137
LastSample = Sample;
138138
}
139139

140-
m_pMixer->MixSamples((blip_sample_t*)m_pBuffer, WantSamples);
140+
m_pMixer->MixSamples((blip_amplitude_t*)m_pBuffer, WantSamples);
141141

142142
m_iBufferPtr -= WantSamples;
143143
m_iTime = 0;

0 commit comments

Comments
 (0)