Add a new API to format midi-note-names with translation: Do Re Mi...
authorRobin Gareus <robin@gareus.org>
Tue, 12 Jul 2016 21:00:15 +0000 (23:00 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 12 Jul 2016 21:02:46 +0000 (23:02 +0200)
This deprecates Evoral::midi_note_name(). we don't maintain i18n
for libevoral.

libs/ardour/ardour/parameter_descriptor.h
libs/ardour/ardour/value_as_string.h
libs/ardour/luabindings.cc
libs/ardour/parameter_descriptor.cc

index 9d219d17afffb0b45611cda54ef2747a8dc8ee3b..9a8c559d6e5c04049d965b44d8a3c3dc6e9f154f 100644 (file)
@@ -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();
index c2f40fc8c413d76dcf0fad0efa2058d2ea99b4b1..9e042b78fa2acf39d9420cfcbe715d17ef52b3d4 100644 (file)
@@ -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) {
index 93012bf82e0b7977c4c55ed2848d93379f8d64ab..f7ac8ec6331fb4aa855a2f65ddfb8c4e0749a9d6 100644 (file)
@@ -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")
index 880adfb162424b2b3d8e76eaa1b849d160480a3a..3a7eff9d1447e7d6c13a043c805f8720fb1e3394 100644 (file)
@@ -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