ref: 7a16e6a7caf6c001064e47e5da9c19f9e2c75d43
parent: 5c5fedc5f76277abc281066b26dd7463a06841b4
author: Chris Moeller <kode54@gmail.com>
date: Mon Aug 26 18:50:32 EDT 2013
Invalid notes correctly cause note fade, and range of valid notes increased to include 120/B-9
--- a/dumb/include/internal/it.h
+++ b/dumb/include/internal/it.h
@@ -57,7 +57,6 @@
*/
//#define STEREO_SAMPLES_COUNT_AS_TWO
#define INVALID_ORDERS_END_SONG
-#define INVALID_NOTES_CAUSE_NOTE_CUT
#define SUSTAIN_LOOP_OVERRIDES_NORMAL_LOOP
#define VOLUME_OUT_OF_RANGE_SETS_MAXIMUM
--- a/dumb/src/it/itrender.c
+++ b/dumb/src/it/itrender.c
@@ -1731,22 +1731,10 @@
int i, envelopes_copied = 0;
if (channel->playing) {
-#ifdef INVALID_NOTES_CAUSE_NOTE_CUT
- if (channel->note == IT_NOTE_OFF)
- nna = NNA_NOTE_OFF;
- else if (channel->note >= 120 || !channel->playing->instrument || (channel->playing->flags & IT_PLAYING_DEAD))
- nna = NNA_NOTE_CUT;
- else if (channel->new_note_action != 0xFF)
- {
- nna = channel->new_note_action;
- }
- else
- nna = channel->playing->instrument->new_note_action;
-#else
if (channel->note == IT_NOTE_CUT)
nna = NNA_NOTE_CUT;
- if (channel->note >= 120)
- nna = NNA_NOTE_OFF;
+ if (channel->note > 120)
+ nna = NNA_NOTE_FADE;
else if (!channel->playing->instrument || (channel->playing->flags & IT_PLAYING_DEAD))
nna = NNA_NOTE_CUT;
else if (channel->new_note_action != 0xFF)
@@ -1755,7 +1743,6 @@
}
else
nna = channel->playing->instrument->new_note_action;
-#endif
if (!(channel->playing->flags & IT_PLAYING_SUSTAINOFF))
{
@@ -1785,7 +1772,7 @@
channel->new_note_action = 0xFF;
- if (channel->sample == 0 || channel->note >= 120)
+ if (channel->sample == 0 || channel->note > 120)
return;
channel->destnote = IT_NOTE_OFF;
@@ -3197,7 +3184,7 @@
if (entry->mask & IT_ENTRY_INSTRUMENT)
channel->instrument = entry->instrument;
instrument_to_sample(sigdata, channel);
- if (channel->note < 120) {
+ if (channel->note <= 120) {
if ((sigdata->flags & IT_USE_INSTRUMENTS) && channel->sample == 0)
it_retrigger_note(sigrenderer, channel); /* Stop the note */ /*return 1;*/
if (entry->mask & IT_ENTRY_INSTRUMENT)
@@ -3242,7 +3229,7 @@
channel->lastEF = v;
}
if ((entry->mask & IT_ENTRY_NOTE) || ((sigdata->flags & IT_COMPATIBLE_GXX) && (entry->mask & IT_ENTRY_INSTRUMENT))) {
- if (channel->note < 120) {
+ if (channel->note <= 120) {
if (channel->sample)
channel->destnote = channel->truenote;
else
@@ -3267,7 +3254,7 @@
channel->lastEF = v;
}
if ((entry->mask & IT_ENTRY_NOTE) || ((sigdata->flags & IT_COMPATIBLE_GXX) && (entry->mask & IT_ENTRY_INSTRUMENT))) {
- if (channel->note < 120) {
+ if (channel->note <= 120) {
if (channel->sample)
channel->destnote = channel->truenote;
else
@@ -3282,7 +3269,7 @@
if ((entry->mask & IT_ENTRY_NOTE) ||
((entry->mask & IT_ENTRY_INSTRUMENT) && (!channel->playing || entry->instrument != channel->playing->instnum)))
{
- if (channel->note < 120) {
+ if (channel->note <= 120) {
get_true_pan(sigdata, channel);
if ((entry->mask & IT_ENTRY_NOTE) || !(sigdata->flags & (IT_WAS_AN_S3M|IT_WAS_A_PTM)))
it_retrigger_note(sigrenderer, channel);