Modify ParameterDescriptor::midi_note_name() to offer chance to get a non-octave-version

This commit is contained in:
Paul Davis 2021-11-08 15:15:56 -07:00
parent 22efa2bf17
commit 55a0aadc74
2 changed files with 9 additions and 4 deletions

View File

@ -50,7 +50,7 @@ struct LIBARDOUR_API ParameterDescriptor : public Evoral::ParameterDescriptor
HZ, ///< Frequency in Hertz
};
static std::string midi_note_name (uint8_t, bool translate=true);
static std::string midi_note_name (uint8_t, bool translate = true, bool with_octave = true);
/** Dual of midi_note_name, convert a note name into its midi note number. */
typedef std::map<std::string, uint8_t> NameNumMap;

View File

@ -252,7 +252,7 @@ ParameterDescriptor::update_steps()
}
std::string
ParameterDescriptor::midi_note_name (const uint8_t b, bool translate)
ParameterDescriptor::midi_note_name (const uint8_t b, bool translate, bool with_octave)
{
char buf[16];
if (b > 127) {
@ -279,9 +279,14 @@ ParameterDescriptor::midi_note_name (const uint8_t b, bool translate)
S_("Note|B")
};
/* MIDI note 0 is in octave -1 (in scientific pitch notation) */
const int octave = b / 12 - 1;
const size_t p = b % 12;
/* MIDI note 0 is in octave -1 (in scientific pitch notation) */
if (!with_octave) {
return translate ? notes[p] : en_notes[p];
}
const int octave = b / 12 - 1;
snprintf (buf, sizeof (buf), "%s%d", translate ? notes[p] : en_notes[p], octave);
return buf;
}