diff --git a/main.cpp b/main.cpp index 61f2489..be4da3a 100755 --- a/main.cpp +++ b/main.cpp @@ -160,6 +160,7 @@ int main(int argc, char* argv[]) { for (int i=0; i<4; ++i) { if ((sdlEvent.button.x >= 12+i*35) && (sdlEvent.button.x <= 45+i*35) && (sdlEvent.button.y >= 2) && (sdlEvent.button.y <= 13) ) { muted[i] = not muted[i]; + channel[i].setMute(muted[i]); } } } @@ -208,18 +209,18 @@ int main(int argc, char* argv[]) { SDL_PauseAudioDevice(sdlAudioDevice, 0); } if (key == SDL_SCANCODE_F4) { - channel[0].setup(song.GetCurrentNote(0, selected_row)); - channel[1].setup(song.GetCurrentNote(1, selected_row)); - channel[2].setup(song.GetCurrentNote(2, selected_row)); - channel[3].setup(song.GetCurrentNote(3, selected_row)); + for (int i=0;i<4;++i) { + channel[i].setup(song.GetCurrentNote(i, selected_row)); + channel[i].setMute(muted[i]); + } SDL_PauseAudioDevice(sdlAudioDevice, 0); } if (key == SDL_SCANCODE_F5) { song.Play(); - channel[0].setup(song.GetCurrentNote(0)); - channel[1].setup(song.GetCurrentNote(1)); - channel[2].setup(song.GetCurrentNote(2)); - channel[3].setup(song.GetCurrentNote(3)); + for (int i=0;i<4;++i) { + channel[i].setup(song.GetCurrentNote(i)); + channel[i].setMute(muted[i]); + } SDL_PauseAudioDevice(sdlAudioDevice, 0); } if (key == SDL_SCANCODE_F8) { diff --git a/tonegen.cpp b/tonegen.cpp index 2d19eaf..a80c434 100755 --- a/tonegen.cpp +++ b/tonegen.cpp @@ -11,6 +11,7 @@ toneGen::toneGen() { this->instrument = CHIPTUNE_INSTRUMENT_NOISE; this->volume = 0; this->effect = CHIPTUNE_EFFECT_FADEOUT; + this->muted = false; this->current_volume = this->nominal_volume = 1.0f; @@ -37,6 +38,7 @@ void toneGen::setup(const uint8_t note, const uint8_t instrument, const uint8_t this->instrument = instrument; this->volume = volume; this->effect = effect; + this->muted = false; this->nominal_volume = float(volume) / 15.0f; this->current_volume = this->effect == CHIPTUNE_EFFECT_FADEIN ? 0.0f : this->nominal_volume; @@ -92,9 +94,13 @@ const int toneGen::getSamples(const int numSamples, Sint16 *buffer) { buffer[i] = (rand()*2)-AUDIO_FORMAT_MAX_VALUE; break; } - buffer[i] *= this->current_volume; + buffer[i] *= (muted ? 0 : this->current_volume); } this->current_pos += actual_samples_generated; return actual_samples_generated; } + +void toneGen::setMute(const bool value) { + muted = value; +} diff --git a/tonegen.h b/tonegen.h index 86c80c4..90ebc19 100755 --- a/tonegen.h +++ b/tonegen.h @@ -21,6 +21,7 @@ class toneGen { void setup(const uint8_t note, const uint8_t instrument, const uint8_t volume, const uint8_t effect); void setup(const uint16_t tracker_note); const int getSamples(const int numSamples, Sint16 *buffer); + void setMute(const bool value); private: uint8_t note, instrument, volume, effect; @@ -29,4 +30,5 @@ class toneGen { int note_length; int current_pos; float vibrato_counter; + bool muted; };