From: Robin Gareus Date: Tue, 12 Jul 2016 21:00:15 +0000 (+0200) Subject: Add a new API to format midi-note-names with translation: Do Re Mi... X-Git-Tag: 5.0-pre1~153 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=6b5be3d89257fb91a1c8c1b2d166106deb5a6874 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. --- diff --git a/libs/ardour/ardour/parameter_descriptor.h b/libs/ardour/ardour/parameter_descriptor.h index 9d219d17af..9a8c559d6e 100644 --- a/libs/ardour/ardour/parameter_descriptor.h +++ b/libs/ardour/ardour/parameter_descriptor.h @@ -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(); diff --git a/libs/ardour/ardour/value_as_string.h b/libs/ardour/ardour/value_as_string.h index c2f40fc8c4..9e042b78fa 100644 --- a/libs/ardour/ardour/value_as_string.h +++ b/libs/ardour/ardour/value_as_string.h @@ -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) { diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 93012bf82e..f7ac8ec633 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -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") diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc index 880adfb162..3a7eff9d14 100644 --- a/libs/ardour/parameter_descriptor.cc +++ b/libs/ardour/parameter_descriptor.cc @@ -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