Skip to content

Commit

Permalink
Refactor voice muting using a bitset
Browse files Browse the repository at this point in the history
  • Loading branch information
drfiemost committed Sep 15, 2024
1 parent 062f1a9 commit 42ea9d0
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 36 deletions.
9 changes: 3 additions & 6 deletions src/args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,10 +168,7 @@ int ConsolePlayer::args(int argc, const char *argv[])
m_driver.file = false;
m_driver.info = false;

for (int i=0; i<9; i++)
{
vMute[i] = false;
}
m_mute_channel.reset();

int infile = 0;
int i = 0;
Expand Down Expand Up @@ -257,8 +254,8 @@ int ConsolePlayer::args(int argc, const char *argv[])
else
{
const int voice = atoi(&argv[i][2]);
if (voice > 0 && voice <= 9)
vMute[voice-1] = true;
if (voice > 0 && voice <= m_mute_channel.size())
m_mute_channel[voice-1] = true;
}
}

Expand Down
54 changes: 27 additions & 27 deletions src/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -816,15 +816,15 @@ bool ConsolePlayer::open (void)
m_speed.current = m_speed.max;
m_engine.fastForward (100 * m_speed.current);

m_engine.mute(0, 0, vMute[0]);
m_engine.mute(0, 1, vMute[1]);
m_engine.mute(0, 2, vMute[2]);
m_engine.mute(1, 0, vMute[3]);
m_engine.mute(1, 1, vMute[4]);
m_engine.mute(1, 2, vMute[5]);
m_engine.mute(2, 0, vMute[6]);
m_engine.mute(2, 1, vMute[7]);
m_engine.mute(2, 2, vMute[8]);
m_engine.mute(0, 0, m_mute_channel[0]);
m_engine.mute(0, 1, m_mute_channel[1]);
m_engine.mute(0, 2, m_mute_channel[2]);
m_engine.mute(1, 0, m_mute_channel[3]);
m_engine.mute(1, 1, m_mute_channel[4]);
m_engine.mute(1, 2, m_mute_channel[5]);
m_engine.mute(2, 0, m_mute_channel[6]);
m_engine.mute(2, 1, m_mute_channel[7]);
m_engine.mute(2, 2, m_mute_channel[8]);

// As yet we don't have a required songlength
// so try the songlength database or keep the default
Expand Down Expand Up @@ -1149,48 +1149,48 @@ void ConsolePlayer::decodeKeys ()
break;

case A_TOGGLE_VOICE1:
vMute[0] = !vMute[0];
m_engine.mute(0, 0, vMute[0]);
m_mute_channel.flip(0);
m_engine.mute(0, 0, m_mute_channel[0]);
break;

case A_TOGGLE_VOICE2:
vMute[1] = !vMute[1];
m_engine.mute(0, 1, vMute[1]);
m_mute_channel.flip(1);
m_engine.mute(0, 1, m_mute_channel[1]);
break;

case A_TOGGLE_VOICE3:
vMute[2] = !vMute[2];
m_engine.mute(0, 2, vMute[2]);
m_mute_channel.flip(2);
m_engine.mute(0, 2, m_mute_channel[2]);
break;

case A_TOGGLE_VOICE4:
vMute[3] = !vMute[3];
m_engine.mute(1, 0, vMute[3]);
m_mute_channel.flip(3);
m_engine.mute(1, 0, m_mute_channel[3]);
break;

case A_TOGGLE_VOICE5:
vMute[4] = !vMute[4];
m_engine.mute(1, 1, vMute[4]);
m_mute_channel.flip(4);
m_engine.mute(1, 1, m_mute_channel[4]);
break;

case A_TOGGLE_VOICE6:
vMute[5] = !vMute[5];
m_engine.mute(1, 2, vMute[5]);
m_mute_channel.flip(5);
m_engine.mute(1, 2, m_mute_channel[5]);
break;

case A_TOGGLE_VOICE7:
vMute[6] = !vMute[6];
m_engine.mute(2, 0, vMute[6]);
m_mute_channel.flip(6);
m_engine.mute(2, 0, m_mute_channel[6]);
break;

case A_TOGGLE_VOICE8:
vMute[7] = !vMute[7];
m_engine.mute(2, 1, vMute[7]);
m_mute_channel.flip(7);
m_engine.mute(2, 1, m_mute_channel[7]);
break;

case A_TOGGLE_VOICE9:
vMute[8] = !vMute[8];
m_engine.mute(2, 2, vMute[8]);
m_mute_channel.flip(8);
m_engine.mute(2, 2, m_mute_channel[8]);
break;

case A_TOGGLE_FILTER:
Expand Down
7 changes: 4 additions & 3 deletions src/player.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@
# include "config.h"
#endif

#include <string>

#include <sidplayfp/SidTune.h>
#include <sidplayfp/sidplayfp.h>
#include <sidplayfp/SidConfig.h>
Expand All @@ -41,6 +39,9 @@

#include "sidlib_features.h"

#include <string>
#include <bitset>

#ifdef HAVE_TSID
# if HAVE_TSID > 1
# include <tsid2/tsid2.h>
Expand Down Expand Up @@ -171,7 +172,7 @@ class ConsolePlayer

bool m_autofilter;

bool vMute[9];
std::bitset<9> m_mute_channel;

int m_channels;
int m_precision;
Expand Down

0 comments on commit 42ea9d0

Please # to comment.