summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-07-12 23:00:15 +0200
committerRobin Gareus <robin@gareus.org>2016-07-12 23:02:46 +0200
commit6b5be3d89257fb91a1c8c1b2d166106deb5a6874 (patch)
tree3b9fadd8e0abe2ec080acf8dbf8f932dd0f54af9 /libs
parentcd5e86c24a39a7343bfa2089ceaf995ed69342ce (diff)
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.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/parameter_descriptor.h2
-rw-r--r--libs/ardour/ardour/value_as_string.h11
-rw-r--r--libs/ardour/luabindings.cc1
-rw-r--r--libs/ardour/parameter_descriptor.cc30
4 files changed, 34 insertions, 10 deletions
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, SessionObject> ("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