mute bug solved. Noe plays while being modified

This commit is contained in:
2022-07-11 20:03:12 +02:00
parent e0b349496a
commit ee84a7883a
2 changed files with 57 additions and 50 deletions

105
main.cpp
View File

@@ -80,6 +80,13 @@ const char* get_zero_padded(const uint8_t num) {
return zero_padded; return zero_padded;
} }
void playNote(Note &note) {
channel[0].setup(note.Get());
channel[1].setup(0);
channel[2].setup(0);
channel[3].setup(0);
SDL_PauseAudioDevice(sdlAudioDevice, 0);
}
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
for (int i=0; i<4; ++i) channel[i].setNoteLength(SOUND_NUM_SAMPLES); for (int i=0; i<4; ++i) channel[i].setNoteLength(SOUND_NUM_SAMPLES);
song.SetCurrentNote(0, 0, (34<<10) + (2<<8) + (7<<4) + 5); song.SetCurrentNote(0, 0, (34<<10) + (2<<8) + (7<<4) + 5);
@@ -202,11 +209,12 @@ int main(int argc, char* argv[]) {
if (key == SDL_SCANCODE_RETURN) copied_note = note.Get(); if (key == SDL_SCANCODE_RETURN) copied_note = note.Get();
if (key == SDL_SCANCODE_SPACE) { if (key == SDL_SCANCODE_SPACE) {
note.Set(copied_note); note.Set(copied_note);
channel[0].setup(note.Get()); playNote(note);
/*channel[0].setup(note.Get());
channel[1].setup(0); channel[1].setup(0);
channel[2].setup(0); channel[2].setup(0);
channel[3].setup(0); channel[3].setup(0);
SDL_PauseAudioDevice(sdlAudioDevice, 0); SDL_PauseAudioDevice(sdlAudioDevice, 0);*/
} }
if (key == SDL_SCANCODE_F4) { if (key == SDL_SCANCODE_F4) {
for (int i=0;i<4;++i) { for (int i=0;i<4;++i) {
@@ -240,78 +248,77 @@ int main(int argc, char* argv[]) {
case SDL_SCANCODE_H: note.SetFirstNote(8, base_octave, current_instrument, current_volume, current_effect); break; case SDL_SCANCODE_H: note.SetFirstNote(8, base_octave, current_instrument, current_volume, current_effect); break;
case SDL_SCANCODE_N: note.SetFirstNote(9, base_octave, current_instrument, current_volume, current_effect); break; case SDL_SCANCODE_N: note.SetFirstNote(9, base_octave, current_instrument, current_volume, current_effect); break;
case SDL_SCANCODE_J: note.SetFirstNote(10, base_octave, current_instrument, current_volume, current_effect); break; case SDL_SCANCODE_J: note.SetFirstNote(10, base_octave, current_instrument, current_volume, current_effect); break;
case SDL_SCANCODE_M: case SDL_SCANCODE_M: note.SetFirstNote(11, base_octave, current_instrument, current_volume, current_effect); break;
note.SetFirstNote(11, base_octave, current_instrument, current_volume, current_effect); break; case SDL_SCANCODE_A: note.SetSilence(); break;
case SDL_SCANCODE_A:
note.SetSilence(); break;
default: m = false; break; default: m = false; break;
}; };
if (m) { if (m) {
channel[0].setup(note.Get()); playNote(note);
/*channel[0].setup(note.Get());
channel[1].setup(0); channel[1].setup(0);
channel[2].setup(0); channel[2].setup(0);
channel[3].setup(0); channel[3].setup(0);
SDL_PauseAudioDevice(sdlAudioDevice, 0); SDL_PauseAudioDevice(sdlAudioDevice, 0);*/
} }
} }
if (selected_part==1) { if (selected_part==1) {
switch(key) { switch(key) {
case SDL_SCANCODE_2: note.SetOctave(2); break; case SDL_SCANCODE_2: note.SetOctave(2); playNote(note); break;
case SDL_SCANCODE_3: note.SetOctave(3); break; case SDL_SCANCODE_3: note.SetOctave(3); playNote(note); break;
case SDL_SCANCODE_4: note.SetOctave(4); break; case SDL_SCANCODE_4: note.SetOctave(4); playNote(note); break;
case SDL_SCANCODE_5: note.SetOctave(5); break; case SDL_SCANCODE_5: note.SetOctave(5); playNote(note); break;
case SDL_SCANCODE_6: note.SetOctave(6); break; case SDL_SCANCODE_6: note.SetOctave(6); playNote(note); break;
default: break; default: break;
}; };
} }
if (selected_part==2) { if (selected_part==2) {
switch(key) { switch(key) {
case SDL_SCANCODE_0: note.SetInstrument(0); break; case SDL_SCANCODE_0: note.SetInstrument(0); playNote(note); break;
case SDL_SCANCODE_1: note.SetInstrument(1); break; case SDL_SCANCODE_1: note.SetInstrument(1); playNote(note); break;
case SDL_SCANCODE_2: note.SetInstrument(2); break; case SDL_SCANCODE_2: note.SetInstrument(2); playNote(note); break;
case SDL_SCANCODE_3: note.SetInstrument(3); break; case SDL_SCANCODE_3: note.SetInstrument(3); playNote(note); break;
default: break; default: break;
}; };
} }
if (selected_part==3) { if (selected_part==3) {
switch(key) { switch(key) {
case SDL_SCANCODE_0: note.SetVolume(0); break; case SDL_SCANCODE_0: note.SetVolume(0); playNote(note); break;
case SDL_SCANCODE_1: note.SetVolume(1); break; case SDL_SCANCODE_1: note.SetVolume(1); playNote(note); break;
case SDL_SCANCODE_2: note.SetVolume(2); break; case SDL_SCANCODE_2: note.SetVolume(2); playNote(note); break;
case SDL_SCANCODE_3: note.SetVolume(3); break; case SDL_SCANCODE_3: note.SetVolume(3); playNote(note); break;
case SDL_SCANCODE_4: note.SetVolume(4); break; case SDL_SCANCODE_4: note.SetVolume(4); playNote(note); break;
case SDL_SCANCODE_5: note.SetVolume(5); break; case SDL_SCANCODE_5: note.SetVolume(5); playNote(note); break;
case SDL_SCANCODE_6: note.SetVolume(6); break; case SDL_SCANCODE_6: note.SetVolume(6); playNote(note); break;
case SDL_SCANCODE_7: note.SetVolume(7); break; case SDL_SCANCODE_7: note.SetVolume(7); playNote(note); break;
case SDL_SCANCODE_8: note.SetVolume(8); break; case SDL_SCANCODE_8: note.SetVolume(8); playNote(note); break;
case SDL_SCANCODE_9: note.SetVolume(9); break; case SDL_SCANCODE_9: note.SetVolume(9); playNote(note); break;
case SDL_SCANCODE_A: note.SetVolume(10); break; case SDL_SCANCODE_A: note.SetVolume(10); playNote(note); break;
case SDL_SCANCODE_B: note.SetVolume(11); break; case SDL_SCANCODE_B: note.SetVolume(11); playNote(note); break;
case SDL_SCANCODE_C: note.SetVolume(12); break; case SDL_SCANCODE_C: note.SetVolume(12); playNote(note); break;
case SDL_SCANCODE_D: note.SetVolume(13); break; case SDL_SCANCODE_D: note.SetVolume(13);playNote(note); break;
case SDL_SCANCODE_E: note.SetVolume(14); break; case SDL_SCANCODE_E: note.SetVolume(14); playNote(note); break;
case SDL_SCANCODE_F: note.SetVolume(15); break; case SDL_SCANCODE_F: note.SetVolume(15); playNote(note); break;
default: break; default: break;
}; };
} }
if (selected_part==4) { if (selected_part==4) {
switch(key) { switch(key) {
case SDL_SCANCODE_0: note.SetEffect(0); break; case SDL_SCANCODE_0: note.SetEffect(0); playNote(note); break;
case SDL_SCANCODE_1: note.SetEffect(1); break; case SDL_SCANCODE_1: note.SetEffect(1); playNote(note); break;
case SDL_SCANCODE_2: note.SetEffect(2); break; case SDL_SCANCODE_2: note.SetEffect(2); playNote(note); break;
case SDL_SCANCODE_3: note.SetEffect(3); break; case SDL_SCANCODE_3: note.SetEffect(3); playNote(note); break;
case SDL_SCANCODE_4: note.SetEffect(4); break; case SDL_SCANCODE_4: note.SetEffect(4); playNote(note); break;
case SDL_SCANCODE_5: note.SetEffect(5); break; case SDL_SCANCODE_5: note.SetEffect(5); playNote(note); break;
case SDL_SCANCODE_6: note.SetEffect(6); break; case SDL_SCANCODE_6: note.SetEffect(6); playNote(note); break;
case SDL_SCANCODE_7: note.SetEffect(7); break; case SDL_SCANCODE_7: note.SetEffect(7); playNote(note); break;
case SDL_SCANCODE_8: note.SetEffect(8); break; case SDL_SCANCODE_8: note.SetEffect(8); playNote(note); break;
case SDL_SCANCODE_9: note.SetEffect(9); break; case SDL_SCANCODE_9: note.SetEffect(9); playNote(note); break;
case SDL_SCANCODE_A: note.SetEffect(10); break; case SDL_SCANCODE_A: note.SetEffect(10); playNote(note); break;
case SDL_SCANCODE_B: note.SetEffect(11); break; case SDL_SCANCODE_B: note.SetEffect(11); playNote(note); break;
case SDL_SCANCODE_C: note.SetEffect(12); break; case SDL_SCANCODE_C: note.SetEffect(12); playNote(note); break;
case SDL_SCANCODE_D: note.SetEffect(13); break; case SDL_SCANCODE_D: note.SetEffect(13); playNote(note); break;
case SDL_SCANCODE_E: note.SetEffect(14); break; case SDL_SCANCODE_E: note.SetEffect(14); playNote(note); break;
case SDL_SCANCODE_F: note.SetEffect(15); break; case SDL_SCANCODE_F: note.SetEffect(15); playNote(note); break;
default: break; default: break;
}; };
} }

View File

@@ -38,7 +38,7 @@ void toneGen::setup(const uint8_t note, const uint8_t instrument, const uint8_t
this->instrument = instrument; this->instrument = instrument;
this->volume = volume; this->volume = volume;
this->effect = effect; this->effect = effect;
this->muted = false; //this->muted = false;
this->nominal_volume = float(volume) / 15.0f; this->nominal_volume = float(volume) / 15.0f;
this->current_volume = this->effect == CHIPTUNE_EFFECT_FADEIN ? 0.0f : this->nominal_volume; this->current_volume = this->effect == CHIPTUNE_EFFECT_FADEIN ? 0.0f : this->nominal_volume;