Skip to content

Commit afaa8f5

Browse files
Make triangle noise removal adjustable
1 parent 8f4c035 commit afaa8f5

5 files changed

Lines changed: 33 additions & 4 deletions

File tree

libretro/libretro.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,6 +1348,13 @@ static void check_variables(bool startup) {
13481348
FCEUI_SetLowPass(lowpass);
13491349
}
13501350

1351+
var.key = "fceumm_next_removetrianglenoise";
1352+
1353+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
1354+
bool newval = (!strcmp(var.value, "enabled"));
1355+
FCEUI_RemoveTringleNoise(newval);
1356+
}
1357+
13511358
var.key = "fceumm_next_reducedmcpopping";
13521359

13531360
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {

libretro/libretro_core_options.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,20 @@ struct retro_core_option_v2_definition option_defs[] = {
458458
},
459459
"disabled",
460460
},
461+
{
462+
"fceumm_next_removetrianglenoise",
463+
"Remove Triangle Noise",
464+
NULL,
465+
"Remove tringle channel ultrasonic frequencies.",
466+
NULL,
467+
"audio",
468+
{
469+
{ "disabled", NULL },
470+
{ "enabled", NULL },
471+
{ NULL, NULL },
472+
},
473+
"disabled",
474+
},
461475
{
462476
"fceumm_next_reducedmcpopping",
463477
"Reduce DMC Popping",

src/driver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi);
165165
#endif
166166

167167
void FCEUI_SetLowPass(int q);
168+
169+
void FCEUI_RemoveTringleNoise(int d);
168170
void FCEUI_ReduceDmcPopping(int d);
169171
void FCEUI_ReverseDMCBitOrder(int d);
170172

src/fceu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ typedef struct {
101101
int ReplaceP2StartWithMicrophone;
102102
int PPUOverclockEnabled;
103103
int SkipDMC7BitOverclock;
104+
int RemoveTriangleNoise;
104105
int ReduceDMCPopping;
105106
int ReverseDMCBitOrder;
106107
int VRC7ToneType; /*0: mapper dependenr, 1: 2413 2: vrcc7 3: 281B */

src/sound.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "cart.h"
3535
#include "nsf.h"
3636
#include "apu.h"
37+
#include "driver.h"
3738

3839
static uint32 square_mix_table[32]; /* square channel mix table */
3940
static uint32 tnd_mix_table[203]; /* triangle/noise/dmc channel mix table */
@@ -880,7 +881,7 @@ static void RDoTriangle(void) {
880881
triout = GetOutput(SND_TRIANGLE, TriangleOutput());
881882
triout = (triout << TRINPCM_SHIFT) & (~0xFFFF);
882883

883-
if ((triangle.length.counter == 0) || (triangle.linearCounter == 0) || triangle.timer.period <= 4) {
884+
if ((triangle.length.counter == 0) || (triangle.linearCounter == 0) || (FSettings.RemoveTriangleNoise && (triangle.timer.period <= 4))) {
884885
/* Counter is halted, but we still need to output. */
885886
for (V = triangle.timer.cvbc; V < SOUNDTS; V++) {
886887
WaveHi[V] += triout;
@@ -926,7 +927,7 @@ static void RDoTriangleNoisePCMLQ(void) {
926927

927928
/* setup triangle params */
928929
freq[0] = (triangle.timer.period + 1) << 17;
929-
if ((triangle.length.counter == 0) || (triangle.linearCounter == 0) || (triangle.timer.period <= 4)) {
930+
if ((triangle.length.counter == 0) || (triangle.linearCounter == 0) || (FSettings.RemoveTriangleNoise && (triangle.timer.period <= 4))) {
930931
inie[0] = 0;
931932
}
932933

@@ -1248,11 +1249,15 @@ void FCEUI_SetSoundQuality(int quality) {
12481249
}
12491250

12501251
void FCEUI_ReduceDmcPopping(int d) {
1251-
FSettings.ReduceDMCPopping = d;
1252+
FSettings.ReduceDMCPopping = d ? TRUE : FALSE;
12521253
}
12531254

12541255
void FCEUI_ReverseDMCBitOrder(int d) {
1255-
FSettings.ReverseDMCBitOrder = d;
1256+
FSettings.ReverseDMCBitOrder = d ? TRUE : FALSE;
1257+
}
1258+
1259+
void FCEUI_RemoveTringleNoise(int d) {
1260+
FSettings.RemoveTriangleNoise = d ? TRUE : FALSE;
12561261
}
12571262

12581263
void FCEUI_SetSoundVolume(int channel, int volume) {

0 commit comments

Comments
 (0)