Add a new API to format midi-note-names with translation: Do Re Mi...
This deprecates Evoral::midi_note_name(). we don't maintain i18n for libevoral.
This commit is contained in:
parent
cd5e86c24a
commit
6b5be3d892
@ -43,6 +43,8 @@ struct LIBARDOUR_API ParameterDescriptor : public Evoral::ParameterDescriptor
|
||||
HZ, ///< Frequency in Hertz
|
||||
};
|
||||
|
||||
static std::string midi_note_name (uint8_t);
|
||||
|
||||
ParameterDescriptor(const Evoral::Parameter& parameter);
|
||||
|
||||
ParameterDescriptor();
|
||||
|
@ -46,16 +46,7 @@ value_as_string(const ARDOUR::ParameterDescriptor& desc,
|
||||
|
||||
// Value is not a scale point, print it normally
|
||||
if (desc.unit == ARDOUR::ParameterDescriptor::MIDI_NOTE) {
|
||||
if (v >= 0 && v <= 127) {
|
||||
const int num = rint(v);
|
||||
static const char names[12][3] = {
|
||||
"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
|
||||
};
|
||||
snprintf(buf, sizeof(buf), "%s %d", names[num % 12], (num / 12) - 2);
|
||||
} else {
|
||||
// Odd, invalid range, just print the number
|
||||
snprintf(buf, sizeof(buf), "%.0f", v);
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "%s", ParameterDescriptor::midi_note_name (rint(v)).c_str());
|
||||
} else if (!desc.print_fmt.empty()) {
|
||||
snprintf(buf, sizeof(buf), desc.print_fmt.c_str(), v);
|
||||
} else if (desc.integer_step) {
|
||||
|
@ -742,6 +742,7 @@ LuaBindings::common (lua_State* L)
|
||||
.addVoidConstructor ()
|
||||
.addData ("label", &ParameterDescriptor::label)
|
||||
.addData ("logarithmic", &ParameterDescriptor::logarithmic)
|
||||
.addStaticFunction ("midi_note_name", &ParameterDescriptor::midi_note_name)
|
||||
.endClass ()
|
||||
|
||||
.deriveWSPtrClass <Processor, SessionObject> ("Processor")
|
||||
|
@ -188,4 +188,34 @@ ParameterDescriptor::update_steps()
|
||||
}
|
||||
}
|
||||
|
||||
std::string
|
||||
ParameterDescriptor::midi_note_name (const uint8_t b)
|
||||
{
|
||||
char buf[8];
|
||||
if (b > 127) {
|
||||
snprintf(buf, sizeof(buf), "%d", b);
|
||||
return buf;
|
||||
}
|
||||
|
||||
static const char* notes[] = {
|
||||
S_("Note|C"),
|
||||
S_("Note|C#"),
|
||||
S_("Note|D"),
|
||||
S_("Note|D#"),
|
||||
S_("Note|E"),
|
||||
S_("Note|F"),
|
||||
S_("Note|F#"),
|
||||
S_("Note|G"),
|
||||
S_("Note|G#"),
|
||||
S_("Note|A"),
|
||||
S_("Note|A#"),
|
||||
S_("Note|B")
|
||||
};
|
||||
|
||||
/* MIDI note 0 is in octave -1 (in scientific pitch notation) */
|
||||
const int octave = b / 12 - 1;
|
||||
snprintf (buf, sizeof (buf), "%s%d", notes[b % 12], octave);
|
||||
return buf;
|
||||
}
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
Loading…
Reference in New Issue
Block a user