summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-02 21:52:21 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-02 21:52:21 +0000
commite0edca5a2abd65d869348e4bddb9d07ecc156450 (patch)
tree3ebb98c670729ee017b4245c4e003f2d013df773
parent8b0354f91003582c4eafc4f2e1ef7ab2daba22e7 (diff)
first, incomplete pass at step entry dialog, along with various SVG and PNG files for notes and dynamics notation
git-svn-id: svn://localhost/ardour2/branches/3.0@7529 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour_ui.cc2
-rw-r--r--gtk2_ardour/gtk_pianokeyboard.c688
-rw-r--r--gtk2_ardour/gtk_pianokeyboard.h66
-rw-r--r--gtk2_ardour/icons/chord.pngbin0 -> 769 bytes
-rw-r--r--gtk2_ardour/icons/eighthnote.pngbin0 -> 597 bytes
-rw-r--r--gtk2_ardour/icons/forte.pngbin0 -> 517 bytes
-rw-r--r--gtk2_ardour/icons/fortissimo.pngbin0 -> 775 bytes
-rw-r--r--gtk2_ardour/icons/fortississimo.pngbin0 -> 963 bytes
-rw-r--r--gtk2_ardour/icons/halfnote.pngbin0 -> 430 bytes
-rw-r--r--gtk2_ardour/icons/mezzforte.pngbin0 -> 802 bytes
-rw-r--r--gtk2_ardour/icons/mezzoforte.pngbin0 -> 802 bytes
-rw-r--r--gtk2_ardour/icons/mezzopiano.pngbin0 -> 784 bytes
-rw-r--r--gtk2_ardour/icons/pianissimo.pngbin0 -> 696 bytes
-rw-r--r--gtk2_ardour/icons/pianississimo.pngbin0 -> 746 bytes
-rw-r--r--gtk2_ardour/icons/piano.pngbin0 -> 481 bytes
-rw-r--r--gtk2_ardour/icons/quarternote.pngbin0 -> 335 bytes
-rw-r--r--gtk2_ardour/icons/sixteenthnote.pngbin0 -> 724 bytes
-rw-r--r--gtk2_ardour/icons/sixtyfourthnote.pngbin0 -> 1004 bytes
-rw-r--r--gtk2_ardour/icons/thirtysecondnote.pngbin0 -> 858 bytes
-rw-r--r--gtk2_ardour/icons/wholenote.pngbin0 -> 414 bytes
-rw-r--r--gtk2_ardour/midi_time_axis.cc67
-rw-r--r--gtk2_ardour/midi_time_axis.h2
-rw-r--r--gtk2_ardour/step_entry.cc243
-rw-r--r--gtk2_ardour/step_entry.h84
-rw-r--r--gtk2_ardour/wscript2
-rw-r--r--icons/Music_dynamic_forte.svg20
-rw-r--r--icons/Music_dynamic_fortissimo.svg20
-rw-r--r--icons/Music_dynamic_fortississimo.svg20
-rw-r--r--icons/Music_dynamic_mezzo_forte.svg20
-rw-r--r--icons/Music_dynamic_pianissimo.svg20
-rw-r--r--icons/Music_dynamic_pianississimo.svg20
-rw-r--r--icons/Music_dynamic_piano.svg20
-rw-r--r--icons/chord.svg66
-rw-r--r--icons/eighthnote.svg64
-rw-r--r--icons/halfnote.svg64
-rw-r--r--icons/mezzopiano.svg75
-rw-r--r--icons/quarternote.svg64
-rw-r--r--icons/sixteenthnote.svg64
-rw-r--r--icons/sixyfourthnote.svg64
-rw-r--r--icons/thirtysecondnote.svg64
-rw-r--r--icons/wholenote.svg64
41 files changed, 1855 insertions, 28 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 004f37075d..14d8215a62 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -1555,7 +1555,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
_session->cancel_audition ();
return;
}
-
+
if (_session->config.get_external_sync()) {
switch (_session->config.get_sync_source()) {
case JACK:
diff --git a/gtk2_ardour/gtk_pianokeyboard.c b/gtk2_ardour/gtk_pianokeyboard.c
new file mode 100644
index 0000000000..58e742e32c
--- /dev/null
+++ b/gtk2_ardour/gtk_pianokeyboard.c
@@ -0,0 +1,688 @@
+/*-
+ * Copyright (c) 2007, 2008 Edward Tomasz NapieraƂa <trasz@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * This is piano_keyboard, piano keyboard-like GTK+ widget. It contains
+ * no MIDI-specific code.
+ *
+ * For questions and comments, contact Edward Tomasz Napierala <trasz@FreeBSD.org>.
+ */
+
+#include <assert.h>
+#include <string.h>
+#include <strings.h>
+#include <stdint.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "gtk_pianokeyboard.h"
+
+#define PIANO_KEYBOARD_DEFAULT_WIDTH 730
+#define PIANO_KEYBOARD_DEFAULT_HEIGHT 70
+
+enum {
+ NOTE_ON_SIGNAL,
+ NOTE_OFF_SIGNAL,
+ LAST_SIGNAL
+};
+
+static guint piano_keyboard_signals[LAST_SIGNAL] = { 0 };
+
+static void
+draw_keyboard_cue(PianoKeyboard *pk)
+{
+ int w = pk->notes[0].w;
+ int h = pk->notes[0].h;
+
+ GdkGC *gc = GTK_WIDGET(pk)->style->fg_gc[0];
+
+ int first_note_in_lower_row = (pk->octave + 5) * 12;
+ int last_note_in_lower_row = (pk->octave + 6) * 12 - 1;
+ int first_note_in_higher_row = (pk->octave + 6) * 12;
+ int last_note_in_higher_row = (pk->octave + 7) * 12 + 4;
+
+ gdk_draw_line(GTK_WIDGET(pk)->window, gc, pk->notes[first_note_in_lower_row].x + 3,
+ h - 6, pk->notes[last_note_in_lower_row].x + w - 3, h - 6);
+
+ gdk_draw_line(GTK_WIDGET(pk)->window, gc, pk->notes[first_note_in_higher_row].x + 3,
+ h - 9, pk->notes[last_note_in_higher_row].x + w - 3, h - 9);
+}
+
+static void
+draw_note(PianoKeyboard *pk, int note)
+{
+ GdkColor black = {0, 0, 0, 0};
+ GdkColor white = {0, 65535, 65535, 65535};
+
+ GdkGC *gc = GTK_WIDGET(pk)->style->fg_gc[0];
+ GtkWidget *widget;
+
+ int is_white = pk->notes[note].white;
+
+ int x = pk->notes[note].x;
+ int w = pk->notes[note].w;
+ int h = pk->notes[note].h;
+
+ if (pk->notes[note].pressed || pk->notes[note].sustained)
+ is_white = !is_white;
+
+ if (is_white)
+ gdk_gc_set_rgb_fg_color(gc, &white);
+ else
+ gdk_gc_set_rgb_fg_color(gc, &black);
+
+ gdk_draw_rectangle(GTK_WIDGET(pk)->window, gc, TRUE, x, 0, w, h);
+ gdk_gc_set_rgb_fg_color(gc, &black);
+ gdk_draw_rectangle(GTK_WIDGET(pk)->window, gc, FALSE, x, 0, w, h);
+
+ if (pk->enable_keyboard_cue)
+ draw_keyboard_cue(pk);
+
+ /* We need to redraw black keys that partially obscure the white one. */
+ if (note < NNOTES - 2 && !pk->notes[note + 1].white)
+ draw_note(pk, note + 1);
+
+ if (note > 0 && !pk->notes[note - 1].white)
+ draw_note(pk, note - 1);
+
+ /*
+ * XXX: This doesn't really belong here. Originally I wanted to pack PianoKeyboard into GtkFrame
+ * packed into GtkAlignment. I failed to make it behave the way I want. GtkFrame would need
+ * to adapt to the "proper" size of PianoKeyboard, i.e. to the useful_width, not allocated width;
+ * that didn't work.
+ */
+ widget = GTK_WIDGET(pk);
+ gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, NULL, pk->widget_margin, 0,
+ widget->allocation.width - pk->widget_margin * 2 + 1, widget->allocation.height);
+}
+
+static int
+press_key(PianoKeyboard *pk, int key)
+{
+ assert(key >= 0);
+ assert(key < NNOTES);
+
+ pk->maybe_stop_sustained_notes = 0;
+
+ /* This is for keyboard autorepeat protection. */
+ if (pk->notes[key].pressed)
+ return 0;
+
+ if (pk->sustain_new_notes)
+ pk->notes[key].sustained = 1;
+ else
+ pk->notes[key].sustained = 0;
+
+ pk->notes[key].pressed = 1;
+
+ g_signal_emit_by_name(GTK_WIDGET(pk), "note-on", key);
+ draw_note(pk, key);
+
+ return 1;
+}
+
+static int
+release_key(PianoKeyboard *pk, int key)
+{
+ assert(key >= 0);
+ assert(key < NNOTES);
+
+ pk->maybe_stop_sustained_notes = 0;
+
+ if (!pk->notes[key].pressed)
+ return 0;
+
+ if (pk->sustain_new_notes)
+ pk->notes[key].sustained = 1;
+
+ pk->notes[key].pressed = 0;
+
+ if (pk->notes[key].sustained)
+ return 0;
+
+ g_signal_emit_by_name(GTK_WIDGET(pk), "note-off", key);
+ draw_note(pk, key);
+
+ return 1;
+}
+
+static void
+stop_unsustained_notes(PianoKeyboard *pk)
+{
+ int i;
+
+ for (i = 0; i < NNOTES; i++) {
+ if (pk->notes[i].pressed && !pk->notes[i].sustained) {
+ pk->notes[i].pressed = 0;
+ g_signal_emit_by_name(GTK_WIDGET(pk), "note-off", i);
+ draw_note(pk, i);
+ }
+ }
+}
+
+static void
+stop_sustained_notes(PianoKeyboard *pk)
+{
+ int i;
+
+ for (i = 0; i < NNOTES; i++) {
+ if (pk->notes[i].sustained) {
+ pk->notes[i].pressed = 0;
+ pk->notes[i].sustained = 0;
+ g_signal_emit_by_name(GTK_WIDGET(pk), "note-off", i);
+ draw_note(pk, i);
+ }
+ }
+}
+
+static int
+key_binding(PianoKeyboard *pk, const char *key)
+{
+ gpointer notused, note;
+ gboolean found;
+
+ assert(pk->key_bindings != NULL);
+
+ found = g_hash_table_lookup_extended(pk->key_bindings, key, &notused, &note);
+
+ if (!found)
+ return -1;
+
+ return (intptr_t)note;
+}
+
+static void
+bind_key(PianoKeyboard *pk, const char *key, int note)
+{
+ assert(pk->key_bindings != NULL);
+
+ g_hash_table_insert(pk->key_bindings, (gpointer)key, (gpointer)((intptr_t)note));
+}
+
+static void
+clear_notes(PianoKeyboard *pk)
+{
+ assert(pk->key_bindings != NULL);
+
+ g_hash_table_remove_all(pk->key_bindings);
+}
+
+static void
+bind_keys_qwerty(PianoKeyboard *pk)
+{
+ clear_notes(pk);
+
+ /* Lower keyboard row - "zxcvbnm". */
+ bind_key(pk, "z", 12); /* C0 */
+ bind_key(pk, "s", 13);
+ bind_key(pk, "x", 14);
+ bind_key(pk, "d", 15);
+ bind_key(pk, "c", 16);
+ bind_key(pk, "v", 17);
+ bind_key(pk, "g", 18);
+ bind_key(pk, "b", 19);
+ bind_key(pk, "h", 20);
+ bind_key(pk, "n", 21);
+ bind_key(pk, "j", 22);
+ bind_key(pk, "m", 23);
+
+ /* Upper keyboard row, first octave - "qwertyu". */
+ bind_key(pk, "q", 24);
+ bind_key(pk, "2", 25);
+ bind_key(pk, "w", 26);
+ bind_key(pk, "3", 27);
+ bind_key(pk, "e", 28);
+ bind_key(pk, "r", 29);
+ bind_key(pk, "5", 30);
+ bind_key(pk, "t", 31);
+ bind_key(pk, "6", 32);
+ bind_key(pk, "y", 33);
+ bind_key(pk, "7", 34);
+ bind_key(pk, "u", 35);
+
+ /* Upper keyboard row, the rest - "iop". */
+ bind_key(pk, "i", 36);
+ bind_key(pk, "9", 37);
+ bind_key(pk, "o", 38);
+ bind_key(pk, "0", 39);
+ bind_key(pk, "p", 40);
+}
+
+static void
+bind_keys_qwertz(PianoKeyboard *pk)
+{
+ bind_keys_qwerty(pk);
+
+ /* The only difference between QWERTY and QWERTZ is that the "y" and "z" are swapped together. */
+ bind_key(pk, "y", 12);
+ bind_key(pk, "z", 33);
+}
+
+static void
+bind_keys_azerty(PianoKeyboard *pk)
+{
+ clear_notes(pk);
+
+ /* Lower keyboard row - "wxcvbn,". */
+ bind_key(pk, "w", 12); /* C0 */
+ bind_key(pk, "s", 13);
+ bind_key(pk, "x", 14);
+ bind_key(pk, "d", 15);
+ bind_key(pk, "c", 16);
+ bind_key(pk, "v", 17);
+ bind_key(pk, "g", 18);
+ bind_key(pk, "b", 19);
+ bind_key(pk, "h", 20);
+ bind_key(pk, "n", 21);
+ bind_key(pk, "j", 22);
+ bind_key(pk, "comma", 23);
+
+ /* Upper keyboard row, first octave - "azertyu". */
+ bind_key(pk, "a", 24);
+ bind_key(pk, "eacute", 25);
+ bind_key(pk, "z", 26);
+ bind_key(pk, "quotedbl", 27);
+ bind_key(pk, "e", 28);
+ bind_key(pk, "r", 29);
+ bind_key(pk, "parenleft", 30);
+ bind_key(pk, "t", 31);
+ bind_key(pk, "minus", 32);
+ bind_key(pk, "y", 33);
+ bind_key(pk, "egrave", 34);
+ bind_key(pk, "u", 35);
+
+ /* Upper keyboard row, the rest - "iop". */
+ bind_key(pk, "i", 36);
+ bind_key(pk, "ccedilla", 37);
+ bind_key(pk, "o", 38);
+ bind_key(pk, "agrave", 39);
+ bind_key(pk, "p", 40);
+}
+
+static gint
+keyboard_event_handler(GtkWidget *mk, GdkEventKey *event, gpointer notused)
+{
+ int note;
+ char *key;
+ guint keyval;
+ GdkKeymapKey kk;
+ PianoKeyboard *pk = PIANO_KEYBOARD(mk);
+
+ /* We're not using event->keyval, because we need keyval with level set to 0.
+ E.g. if user holds Shift and presses '7', we want to get a '7', not '&'. */
+ kk.keycode = event->hardware_keycode;
+ kk.level = 0;
+ kk.group = 0;
+
+ keyval = gdk_keymap_lookup_key(NULL, &kk);
+
+ key = gdk_keyval_name(gdk_keyval_to_lower(keyval));
+
+ if (key == NULL) {
+ g_message("gtk_keyval_name() returned NULL; please report this.");
+ return FALSE;
+ }
+
+ note = key_binding(pk, key);
+
+ if (note < 0) {
+ /* Key was not bound. Maybe it's one of the keys handled in jack-keyboard.c. */
+ return FALSE;
+ }
+
+ note += pk->octave * 12;
+
+ assert(note >= 0);
+ assert(note < NNOTES);
+
+ if (event->type == GDK_KEY_PRESS) {
+ press_key(pk, note);
+
+ } else if (event->type == GDK_KEY_RELEASE) {
+ release_key(pk, note);
+ }
+
+ return TRUE;
+}
+
+static int
+get_note_for_xy(PianoKeyboard *pk, int x, int y)
+{
+ int height = GTK_WIDGET(pk)->allocation.height;
+ int note;
+
+ if (y <= height / 2) {
+ for (note = 0; note < NNOTES - 1; note++) {
+ if (pk->notes[note].white)
+ continue;
+
+ if (x >= pk->notes[note].x && x <= pk->notes[note].x + pk->notes[note].w)
+ return note;
+ }
+ }
+
+ for (note = 0; note < NNOTES - 1; note++) {
+ if (!pk->notes[note].white)
+ continue;
+
+ if (x >= pk->notes[note].x && x <= pk->notes[note].x + pk->notes[note].w)
+ return note;
+ }
+
+ return -1;
+}
+
+static gboolean
+mouse_button_event_handler(PianoKeyboard *pk, GdkEventButton *event, gpointer notused)
+{
+ int x = event->x;
+ int y = event->y;
+
+ int note = get_note_for_xy(pk, x, y);
+
+ if (event->button != 1)
+ return TRUE;
+
+ if (event->type == GDK_BUTTON_PRESS) {
+ /* This is possible when you make the window a little wider and then click
+ on the grey area. */
+ if (note < 0) {
+ return TRUE;
+ }
+
+ if (pk->note_being_pressed_using_mouse >= 0)
+ release_key(pk, pk->note_being_pressed_using_mouse);
+
+ press_key(pk, note);
+ pk->note_being_pressed_using_mouse = note;
+
+ } else if (event->type == GDK_BUTTON_RELEASE) {
+ if (note >= 0) {
+ release_key(pk, note);
+
+ } else {
+ if (pk->note_being_pressed_using_mouse >= 0)
+ release_key(pk, pk->note_being_pressed_using_mouse);
+ }
+
+ pk->note_being_pressed_using_mouse = -1;
+
+ }
+
+ return TRUE;
+}
+
+static gboolean
+mouse_motion_event_handler(PianoKeyboard *pk, GdkEventMotion *event, gpointer notused)
+{
+ int note;
+
+ if ((event->state & GDK_BUTTON1_MASK) == 0)
+ return TRUE;
+
+ note = get_note_for_xy(pk, event->x, event->y);
+
+ if (note != pk->note_being_pressed_using_mouse && note >= 0) {
+
+ if (pk->note_being_pressed_using_mouse >= 0)
+ release_key(pk, pk->note_being_pressed_using_mouse);
+ press_key(pk, note);
+ pk->note_being_pressed_using_mouse = note;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+piano_keyboard_expose(GtkWidget *widget, GdkEventExpose *event)
+{
+ int i;
+ PianoKeyboard *pk = PIANO_KEYBOARD(widget);
+
+ for (i = 0; i < NNOTES; i++)
+ draw_note(pk, i);
+
+ return TRUE;
+}
+
+static void
+piano_keyboard_size_request(GtkWidget *widget, GtkRequisition *requisition)
+{
+ requisition->width = PIANO_KEYBOARD_DEFAULT_WIDTH;
+ requisition->height = PIANO_KEYBOARD_DEFAULT_HEIGHT;
+}
+
+static void
+recompute_dimensions(PianoKeyboard *pk)
+{
+ int number_of_white_keys = (NNOTES - 1) * (7.0 / 12.0);
+
+ int key_width;
+ int black_key_width;
+ int useful_width;
+
+ int note;
+ int white_key = 0;
+ int note_in_octave;
+
+ int width = GTK_WIDGET(pk)->allocation.width;
+ int height = GTK_WIDGET(pk)->allocation.height;
+
+ key_width = width / number_of_white_keys;
+ black_key_width = key_width * 0.8;
+ useful_width = number_of_white_keys * key_width;
+ pk->widget_margin = (width - useful_width) / 2;
+
+ for (note = 0, white_key = 0; note < NNOTES - 2; note++) {
+ note_in_octave = note % 12;
+
+ if (note_in_octave == 1 || note_in_octave == 3 || note_in_octave == 6 ||
+ note_in_octave == 8 || note_in_octave == 10) {
+
+ /* This note is black key. */
+ pk->notes[note].x = pk->widget_margin + white_key * key_width - black_key_width / 2;
+ pk->notes[note].w = black_key_width;
+ pk->notes[note].h = height / 2;
+ pk->notes[note].white = 0;
+
+ continue;
+ }
+
+ /* This note is white key. */
+ pk->notes[note].x = pk->widget_margin + white_key * key_width;
+ pk->notes[note].w = key_width;
+ pk->notes[note].h = height;
+ pk->notes[note].white = 1;
+
+ white_key++;
+ }
+}
+
+static void
+piano_keyboard_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
+{
+ /* XXX: Are these two needed? */
+ g_return_if_fail(widget != NULL);
+ g_return_if_fail(allocation != NULL);
+
+ widget->allocation = *allocation;
+
+ recompute_dimensions(PIANO_KEYBOARD(widget));
+
+ if (GTK_WIDGET_REALIZED(widget)) {
+ gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height);
+ }
+}
+
+static void
+piano_keyboard_class_init(PianoKeyboardClass *klass)
+{
+ GtkWidgetClass *widget_klass;
+
+ /* Set up signals. */
+ piano_keyboard_signals[NOTE_ON_SIGNAL] = g_signal_new ("note-on",
+ G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+ piano_keyboard_signals[NOTE_OFF_SIGNAL] = g_signal_new ("note-off",
+ G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+ widget_klass = (GtkWidgetClass*) klass;
+
+ widget_klass->expose_event = piano_keyboard_expose;
+ widget_klass->size_request = piano_keyboard_size_request;
+ widget_klass->size_allocate = piano_keyboard_size_allocate;
+}
+
+static void
+piano_keyboard_init(GtkWidget *mk)
+{
+ gtk_widget_add_events(mk, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+
+ g_signal_connect(G_OBJECT(mk), "button-press-event", G_CALLBACK(mouse_button_event_handler), NULL);
+ g_signal_connect(G_OBJECT(mk), "button-release-event", G_CALLBACK(mouse_button_event_handler), NULL);
+ g_signal_connect(G_OBJECT(mk), "motion-notify-event", G_CALLBACK(mouse_motion_event_handler), NULL);
+ g_signal_connect(G_OBJECT(mk), "key-press-event", G_CALLBACK(keyboard_event_handler), NULL);
+ g_signal_connect(G_OBJECT(mk), "key-release-event", G_CALLBACK(keyboard_event_handler), NULL);
+}
+
+GType
+piano_keyboard_get_type(void)
+{
+ static GType mk_type = 0;
+
+ if (!mk_type) {
+ static const GTypeInfo mk_info = {
+ sizeof(PianoKeyboardClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) piano_keyboard_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (PianoKeyboard),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) piano_keyboard_init,
+ };
+
+ mk_type = g_type_register_static(GTK_TYPE_DRAWING_AREA, "PianoKeyboard", &mk_info, 0);
+ }
+
+ return mk_type;
+}
+
+GtkWidget *
+piano_keyboard_new(void)
+{
+ GtkWidget *widget = gtk_type_new(piano_keyboard_get_type());
+
+ PianoKeyboard *pk = PIANO_KEYBOARD(widget);
+
+ pk->maybe_stop_sustained_notes = 0;
+ pk->sustain_new_notes = 0;
+ pk->enable_keyboard_cue = 0;
+ pk->octave = 4;
+ pk->note_being_pressed_using_mouse = -1;
+ memset((void *)pk->notes, 0, sizeof(struct Note) * NNOTES);
+ pk->key_bindings = g_hash_table_new(g_str_hash, g_str_equal);
+ bind_keys_qwerty(pk);
+
+ return widget;
+}
+
+void
+piano_keyboard_set_keyboard_cue(PianoKeyboard *pk, int enabled)
+{
+ pk->enable_keyboard_cue = enabled;
+}
+
+void
+piano_keyboard_sustain_press(PianoKeyboard *pk)
+{
+ if (!pk->sustain_new_notes) {
+ pk->sustain_new_notes = 1;
+ pk->maybe_stop_sustained_notes = 1;
+ }
+}
+
+void
+piano_keyboard_sustain_release(PianoKeyboard *pk)
+{
+ if (pk->maybe_stop_sustained_notes)
+ stop_sustained_notes(pk);
+
+ pk->sustain_new_notes = 0;
+}
+
+void
+piano_keyboard_set_note_on(PianoKeyboard *pk, int note)
+{
+ if (pk->notes[note].pressed == 0) {
+ pk->notes[note].pressed = 1;
+ draw_note(pk, note);
+ }
+}
+
+void
+piano_keyboard_set_note_off(PianoKeyboard *pk, int note)
+{
+ if (pk->notes[note].pressed || pk->notes[note].sustained) {
+ pk->notes[note].pressed = 0;
+ pk->notes[note].sustained = 0;
+ draw_note(pk, note);
+ }
+}
+
+void
+piano_keyboard_set_octave(PianoKeyboard *pk, int octave)
+{
+ stop_unsustained_notes(pk);
+ pk->octave = octave;
+ gtk_widget_queue_draw(GTK_WIDGET(pk));
+}
+
+gboolean
+piano_keyboard_set_keyboard_layout(PianoKeyboard *pk, const char *layout)
+{
+ assert(layout);
+
+ if (!strcasecmp(layout, "QWERTY")) {
+ bind_keys_qwerty(pk);
+
+ } else if (!strcasecmp(layout, "QWERTZ")) {
+ bind_keys_qwertz(pk);
+
+ } else if (!strcasecmp(layout, "AZERTY")) {
+ bind_keys_azerty(pk);
+
+ } else {
+ /* Unknown layout name. */
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
diff --git a/gtk2_ardour/gtk_pianokeyboard.h b/gtk2_ardour/gtk_pianokeyboard.h
new file mode 100644
index 0000000000..27d9a8a5c2
--- /dev/null
+++ b/gtk2_ardour/gtk_pianokeyboard.h
@@ -0,0 +1,66 @@
+#ifndef __PIANO_KEYBOARD_H__
+#define __PIANO_KEYBOARD_H__
+
+#include <glib.h>
+#include <gtk/gtkdrawingarea.h>
+
+G_BEGIN_DECLS
+
+#define TYPE_PIANO_KEYBOARD (piano_keyboard_get_type ())
+#define PIANO_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PIANO_KEYBOARD, PianoKeyboard))
+#define PIANO_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PIANO_KEYBOARD, PianoKeyboardClass))
+#define IS_PIANO_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PIANO_KEYBOARD))
+#define IS_PIANO_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PIANO_KEYBOARD))
+#define PIANO_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PIANO_KEYBOARD, PianoKeyboardClass))
+
+typedef struct _PianoKeyboard PianoKeyboard;
+typedef struct _PianoKeyboardClass PianoKeyboardClass;
+
+#define NNOTES 127
+
+#define OCTAVE_MIN -1
+#define OCTAVE_MAX 7
+
+struct Note {
+ int pressed; /* 1 if key is in pressed down state. */
+ int sustained; /* 1 if note is sustained. */
+ int x; /* Distance between the left edge of the key
+ * and the left edge of the widget, in pixels. */
+ int w; /* Width of the key, in pixels. */
+ int h; /* Height of the key, in pixels. */
+ int white; /* 1 if key is white; 0 otherwise. */
+};
+
+struct _PianoKeyboard
+{
+ GtkDrawingArea da;
+ int maybe_stop_sustained_notes;
+ int sustain_new_notes;
+ int enable_keyboard_cue;
+ int octave;
+ int widget_margin;
+ int note_being_pressed_using_mouse;
+ volatile struct Note notes[NNOTES];
+ /* Table used to translate from PC keyboard character to MIDI note number. */
+ GHashTable *key_bindings;
+};
+
+struct _PianoKeyboardClass
+{
+ GtkDrawingAreaClass parent_class;
+};
+
+GType piano_keyboard_get_type (void) G_GNUC_CONST;
+GtkWidget* piano_keyboard_new (void);
+void piano_keyboard_sustain_press (PianoKeyboard *pk);
+void piano_keyboard_sustain_release (PianoKeyboard *pk);
+void piano_keyboard_set_note_on (PianoKeyboard *pk, int note);
+void piano_keyboard_set_note_off (PianoKeyboard *pk, int note);
+void piano_keyboard_set_keyboard_cue (PianoKeyboard *pk, int enabled);
+void piano_keyboard_set_octave (PianoKeyboard *pk, int octave);
+gboolean piano_keyboard_set_keyboard_layout (PianoKeyboard *pk, const char *layout);
+
+G_END_DECLS
+
+#endif /* __PIANO_KEYBOARD_H__ */
+
diff --git a/gtk2_ardour/icons/chord.png b/gtk2_ardour/icons/chord.png
new file mode 100644
index 0000000000..0b7053dc97
--- /dev/null
+++ b/gtk2_ardour/icons/chord.png
Binary files differ
diff --git a/gtk2_ardour/icons/eighthnote.png b/gtk2_ardour/icons/eighthnote.png
new file mode 100644
index 0000000000..b5c0675048
--- /dev/null
+++ b/gtk2_ardour/icons/eighthnote.png
Binary files differ
diff --git a/gtk2_ardour/icons/forte.png b/gtk2_ardour/icons/forte.png
new file mode 100644
index 0000000000..84ccc839df
--- /dev/null
+++ b/gtk2_ardour/icons/forte.png
Binary files differ
diff --git a/gtk2_ardour/icons/fortissimo.png b/gtk2_ardour/icons/fortissimo.png
new file mode 100644
index 0000000000..9ba6da1990
--- /dev/null
+++ b/gtk2_ardour/icons/fortissimo.png
Binary files differ
diff --git a/gtk2_ardour/icons/fortississimo.png b/gtk2_ardour/icons/fortississimo.png
new file mode 100644
index 0000000000..8c686554d5
--- /dev/null
+++ b/gtk2_ardour/icons/fortississimo.png
Binary files differ
diff --git a/gtk2_ardour/icons/halfnote.png b/gtk2_ardour/icons/halfnote.png
new file mode 100644
index 0000000000..3996c49a43
--- /dev/null
+++ b/gtk2_ardour/icons/halfnote.png
Binary files differ
diff --git a/gtk2_ardour/icons/mezzforte.png b/gtk2_ardour/icons/mezzforte.png
new file mode 100644
index 0000000000..bd4b7b0826
--- /dev/null
+++ b/gtk2_ardour/icons/mezzforte.png
Binary files differ
diff --git a/gtk2_ardour/icons/mezzoforte.png b/gtk2_ardour/icons/mezzoforte.png
new file mode 100644
index 0000000000..bd4b7b0826
--- /dev/null
+++ b/gtk2_ardour/icons/mezzoforte.png
Binary files differ
diff --git a/gtk2_ardour/icons/mezzopiano.png b/gtk2_ardour/icons/mezzopiano.png
new file mode 100644
index 0000000000..ba3b39fa14
--- /dev/null
+++ b/gtk2_ardour/icons/mezzopiano.png
Binary files differ
diff --git a/gtk2_ardour/icons/pianissimo.png b/gtk2_ardour/icons/pianissimo.png
new file mode 100644
index 0000000000..615803173e
--- /dev/null
+++ b/gtk2_ardour/icons/pianissimo.png
Binary files differ
diff --git a/gtk2_ardour/icons/pianississimo.png b/gtk2_ardour/icons/pianississimo.png
new file mode 100644
index 0000000000..926c3c4c75
--- /dev/null
+++ b/gtk2_ardour/icons/pianississimo.png
Binary files differ
diff --git a/gtk2_ardour/icons/piano.png b/gtk2_ardour/icons/piano.png
new file mode 100644
index 0000000000..fbb168ef3c
--- /dev/null
+++ b/gtk2_ardour/icons/piano.png
Binary files differ
diff --git a/gtk2_ardour/icons/quarternote.png b/gtk2_ardour/icons/quarternote.png
new file mode 100644
index 0000000000..bdd23e37fa
--- /dev/null
+++ b/gtk2_ardour/icons/quarternote.png
Binary files differ
diff --git a/gtk2_ardour/icons/sixteenthnote.png b/gtk2_ardour/icons/sixteenthnote.png
new file mode 100644
index 0000000000..af92d17e1c
--- /dev/null
+++ b/gtk2_ardour/icons/sixteenthnote.png
Binary files differ
diff --git a/gtk2_ardour/icons/sixtyfourthnote.png b/gtk2_ardour/icons/sixtyfourthnote.png
new file mode 100644
index 0000000000..1066b75f2e
--- /dev/null
+++ b/gtk2_ardour/icons/sixtyfourthnote.png
Binary files differ
diff --git a/gtk2_ardour/icons/thirtysecondnote.png b/gtk2_ardour/icons/thirtysecondnote.png
new file mode 100644
index 0000000000..21027d6d42
--- /dev/null
+++ b/gtk2_ardour/icons/thirtysecondnote.png
Binary files differ
diff --git a/gtk2_ardour/icons/wholenote.png b/gtk2_ardour/icons/wholenote.png
new file mode 100644
index 0000000000..cca075df8d
--- /dev/null
+++ b/gtk2_ardour/icons/wholenote.png
Binary files differ
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index b1d886a04b..89a138f8b9 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -81,6 +81,7 @@
#include "rgb_macros.h"
#include "selection.h"
#include "simplerect.h"
+#include "step_entry.h"
#include "utils.h"
#include "ardour/midi_track.h"
@@ -918,6 +919,11 @@ MidiTimeAxisView::start_step_editing ()
}
midi_track()->set_step_editing (true);
+
+ StepEntry* se = new StepEntry (*this);
+
+ se->set_position (WIN_POS_MOUSE);
+ se->present ();
}
void
@@ -951,37 +957,44 @@ MidiTimeAxisView::check_step_edit ()
incoming.read_contents (size, buf);
if ((buf[0] & 0xf0) == MIDI_CMD_NOTE_ON) {
+ step_add_note (buf[0] & 0xf, buf[1], buf[2], 0.0);
+ }
+ }
+}
- if (step_edit_region == 0) {
-
- step_edit_region = add_region (step_edit_insert_position);
- RegionView* rv = view()->find_view (step_edit_region);
- step_edit_region_view = dynamic_cast<MidiRegionView*>(rv);
- }
-
- if (step_edit_region && step_edit_region_view) {
+int
+MidiTimeAxisView::step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity, Evoral::MusicalTime beat_duration)
+{
+ if (step_edit_region == 0) {
+
+ step_edit_region = add_region (step_edit_insert_position);
+ RegionView* rv = view()->find_view (step_edit_region);
+ step_edit_region_view = dynamic_cast<MidiRegionView*>(rv);
+ }
+
+ if (step_edit_region && step_edit_region_view) {
+ if (step_edit_beat_pos < 0.0) {
+ framecnt_t frames_from_start = _editor.get_preferred_edit_position() - step_edit_region->position();
+ if (frames_from_start < 0) {
+ return 1;
+ }
+ step_edit_beat_pos = step_edit_region_view->frames_to_beats (frames_from_start);
+ }
+
+ if (beat_duration == 0.0) {
+ bool success;
+ beat_duration = _editor.get_grid_type_as_beats (success, step_edit_insert_position);
- if (step_edit_beat_pos < 0.0) {
- framecnt_t frames_from_start = _editor.get_preferred_edit_position() - step_edit_region->position();
- if (frames_from_start < 0) {
- continue;
- }
- step_edit_beat_pos = step_edit_region_view->frames_to_beats (frames_from_start);
- }
-
- bool success;
- Evoral::MusicalTime beats = _editor.get_grid_type_as_beats (success, step_edit_insert_position);
-
- if (!success) {
- continue;
- }
+ if (!success) {
+ return -1;
+ }
+ }
- step_edit_region_view->step_add_note (buf[0] & 0xf, buf[1], buf[2], step_edit_beat_pos, beats);
- step_edit_beat_pos += beats;
- }
- }
+ step_edit_region_view->step_add_note (channel, pitch, velocity, step_edit_beat_pos, beat_duration);
+ step_edit_beat_pos += beat_duration;
+ }
- }
+ return 0;
}
void
diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h
index 0ed44b96c0..2c0c8b2d44 100644
--- a/gtk2_ardour/midi_time_axis.h
+++ b/gtk2_ardour/midi_time_axis.h
@@ -91,6 +91,8 @@ class MidiTimeAxisView : public RouteTimeAxisView
void stop_step_editing ();
void check_step_edit ();
void step_edit_rest ();
+ int step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity,
+ Evoral::MusicalTime beat_duration);
const MidiMultipleChannelSelector& channel_selector() { return _channel_selector; }
diff --git a/gtk2_ardour/step_entry.cc b/gtk2_ardour/step_entry.cc
new file mode 100644
index 0000000000..aa81fead3d
--- /dev/null
+++ b/gtk2_ardour/step_entry.cc
@@ -0,0 +1,243 @@
+/*
+ Copyright (C) 2010 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "midi_time_axis.h"
+#include "step_entry.h"
+#include "utils.h"
+
+#include "i18n.h"
+
+using namespace Gtk;
+
+static void
+_note_off_event_handler (GtkWidget* widget, int note, gpointer arg)
+{
+ ((StepEntry*)arg)->note_off_event_handler (note);
+}
+
+
+StepEntry::StepEntry (MidiTimeAxisView& mtv)
+ : ArdourDialog (_("Step Entry Editor"))
+ , triplet_button ("3")
+ , sustain_button ("sustain")
+ , rest_button ("rest")
+ , channel_adjustment (0, 15, 0, 1, 4)
+ , channel_spinner (channel_adjustment)
+ , _piano (0)
+ , piano (0)
+ , _mtv (&mtv)
+{
+ RadioButtonGroup length_group = length_1_button.get_group();
+ length_2_button.set_group (length_group);
+ length_4_button.set_group (length_group);
+ length_8_button.set_group (length_group);
+ length_12_button.set_group (length_group);
+ length_16_button.set_group (length_group);
+ length_32_button.set_group (length_group);
+ length_64_button.set_group (length_group);
+
+ Widget* w;
+
+ w = manage (new Image (::get_icon (X_("wholenote"))));
+ w->show();
+ length_1_button.add (*w);
+ w = manage (new Image (::get_icon (X_("halfnote"))));
+ w->show();
+ length_2_button.add (*w);
+ w = manage (new Image (::get_icon (X_("quarternote"))));
+ w->show();
+ length_4_button.add (*w);
+ w = manage (new Image (::get_icon (X_("eighthnote"))));
+ w->show();
+ length_8_button.add (*w);
+ w = manage (new Image (::get_icon (X_("sixteenthnote"))));
+ w->show();
+ length_16_button.add (*w);
+ w = manage (new Image (::get_icon (X_("thirtysecondnote"))));
+ w->show();
+ length_32_button.add (*w);
+ w = manage (new Image (::get_icon (X_("sixtyfourthnote"))));
+ w->show();
+ length_64_button.add (*w);
+
+ length_1_button.property_draw_indicator() = false;
+ length_2_button.property_draw_indicator() = false;
+ length_4_button.property_draw_indicator() = false;
+ length_8_button.property_draw_indicator() = false;
+ length_16_button.property_draw_indicator() = false;
+ length_32_button.property_draw_indicator() = false;
+ length_64_button.property_draw_indicator() = false;
+
+ note_length_box.pack_start (length_1_button, false, false);
+ note_length_box.pack_start (length_2_button, false, false);
+ note_length_box.pack_start (length_4_button, false, false);
+ note_length_box.pack_start (length_8_button, false, false);
+ note_length_box.pack_start (length_16_button, false, false);
+ note_length_box.pack_start (length_32_button, false, false);
+ note_length_box.pack_start (length_64_button, false, false);
+
+ RadioButtonGroup velocity_group = velocity_ppp_button.get_group();
+ velocity_pp_button.set_group (velocity_group);
+ velocity_p_button.set_group (velocity_group);
+ velocity_mp_button.set_group (velocity_group);
+ velocity_mf_button.set_group (velocity_group);
+ velocity_f_button.set_group (velocity_group);
+ velocity_ff_button.set_group (velocity_group);
+ velocity_fff_button.set_group (velocity_group);
+
+ w = manage (new Image (::get_icon (X_("pianississimo"))));
+ w->show();
+ velocity_ppp_button.add (*w);
+ w = manage (new Image (::get_icon (X_("pianissimo"))));
+ w->show();
+ velocity_pp_button.add (*w);
+ w = manage (new Image (::get_icon (X_("piano"))));
+ w->show();
+ velocity_p_button.add (*w);
+ w = manage (new Image (::get_icon (X_("mezzopiano"))));
+ w->show();
+ velocity_mp_button.add (*w);
+ w = manage (new Image (::get_icon (X_("mezzoforte"))));
+ w->show();
+ velocity_mf_button.add (*w);
+ w = manage (new Image (::get_icon (X_("forte"))));
+ w->show();
+ velocity_f_button.add (*w);
+ w = manage (new Image (::get_icon (X_("fortissimo"))));
+ w->show();
+ velocity_ff_button.add (*w);
+ w = manage (new Image (::get_icon (X_("fortississimo"))));
+ w->show();
+ velocity_fff_button.add (*w);
+
+ velocity_ppp_button.property_draw_indicator() = false;
+ velocity_pp_button.property_draw_indicator() = false;
+ velocity_p_button.property_draw_indicator() = false;
+ velocity_mp_button.property_draw_indicator() = false;
+ velocity_mf_button.property_draw_indicator() = false;
+ velocity_f_button.property_draw_indicator() = false;
+ velocity_ff_button.property_draw_indicator() = false;
+ velocity_fff_button.property_draw_indicator() = false;
+
+ note_velocity_box.pack_start (velocity_ppp_button, false, false);
+ note_velocity_box.pack_start (velocity_pp_button, false, false);
+ note_velocity_box.pack_start (velocity_p_button, false, false);
+ note_velocity_box.pack_start (velocity_mp_button, false, false);
+ note_velocity_box.pack_start (velocity_mf_button, false, false);
+ note_velocity_box.pack_start (velocity_f_button, false, false);
+ note_velocity_box.pack_start (velocity_ff_button, false, false);
+ note_velocity_box.pack_start (velocity_fff_button, false, false);
+
+ Label* l = manage (new Label);
+ l->set_markup ("<b><big>.</big></b>");
+ l->show ();
+ dot_button.add (*l);
+
+ w = manage (new Image (::get_icon (X_("chord"))));
+ w->show();
+ chord_button.add (*w);
+
+ upper_box.set_spacing (6);
+ upper_box.pack_start (chord_button, false, false);
+ upper_box.pack_start (note_length_box, false, false, 12);
+ upper_box.pack_start (triplet_button, false, false);
+ upper_box.pack_start (dot_button, false, false);
+ upper_box.pack_start (sustain_button, false, false);
+ upper_box.pack_start (rest_button, false, false);
+ upper_box.pack_start (note_velocity_box, false, false, 12);
+ upper_box.pack_start (channel_spinner, false, false);
+
+ _piano = (PianoKeyboard*) piano_keyboard_new ();
+ piano = Glib::wrap ((GtkWidget*) _piano);
+
+ g_signal_connect(G_OBJECT(_piano), "note-off", G_CALLBACK(_note_off_event_handler), this);
+
+ rest_button.signal_clicked().connect (sigc::mem_fun (*this, &StepEntry::rest_click));
+
+ packer.set_spacing (6);
+ packer.pack_start (upper_box, false, false);
+ packer.pack_start (*piano, false, false);
+ packer.show_all ();
+
+ get_vbox()->add (packer);
+}
+
+StepEntry::~StepEntry()
+{
+}
+
+void
+StepEntry::note_off_event_handler (int note)
+{
+ Evoral::MusicalTime length = 1.0;
+ uint8_t velocity = 64;
+
+ if (length_64_button.get_active()) {
+ length = 1.0/64.0;
+ } else if (length_32_button.get_active()) {
+ length = 1.0/32.0;
+ } else if (length_16_button.get_active()) {
+ length = 1.0/16.0;
+ } else if (length_8_button.get_active()) {
+ length = 1.0/8.0;
+ } else if (length_4_button.get_active()) {
+ length = 1.0/4.0;
+ } else if (length_2_button.get_active()) {
+ length = 1.0/2.0;
+ } else if (length_1_button.get_active()) {
+ length = 1.0/1.0;
+ }
+
+ if (dot_button.get_active()) {
+ length *= 0.5;
+ }
+
+ if (velocity_ppp_button.get_active()) {
+ velocity = 16;
+ } else if (velocity_pp_button.get_active()) {
+ velocity = 32;
+ } else if (velocity_p_button.get_active()) {
+ velocity = 48;
+ } else if (velocity_mp_button.get_active()) {
+ velocity = 64;
+ } else if (velocity_mf_button.get_active()) {
+ velocity = 80;
+ } else if (velocity_f_button.get_active()) {
+ velocity = 96;
+ } else if (velocity_ff_button.get_active()) {
+ velocity = 112;
+ } else if (velocity_fff_button.get_active()) {
+ velocity = 127;
+ }
+
+ if (!triplet_button.get_active()) {
+ _mtv->step_add_note (channel_adjustment.get_value(), note, velocity, length);
+ } else {
+ length *= 2.0/3.0;
+ _mtv->step_add_note (channel_adjustment.get_value(), note, velocity, length);
+ _mtv->step_add_note (channel_adjustment.get_value(), note, velocity, length);
+ _mtv->step_add_note (channel_adjustment.get_value(), note, velocity, length);
+ }
+}
+
+void
+StepEntry::rest_click ()
+{
+ _mtv->step_edit_rest ();
+}
diff --git a/gtk2_ardour/step_entry.h b/gtk2_ardour/step_entry.h
new file mode 100644
index 0000000000..cabd9eba47
--- /dev/null
+++ b/gtk2_ardour/step_entry.h
@@ -0,0 +1,84 @@
+/*
+ Copyright (C) 2010 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __gtk2_ardour_step_entry_h__
+#define __gtk2_ardour_step_entry_h__
+
+#include <gtkmm/togglebutton.h>
+#include <gtkmm/radiobutton.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/box.h>
+#include <gtkmm/adjustment.h>
+
+#include "ardour_dialog.h"
+#include "gtk_pianokeyboard.h"
+
+class MidiTimeAxisView;
+
+class StepEntry : public ArdourDialog
+{
+ public:
+ StepEntry (MidiTimeAxisView&);
+ ~StepEntry ();
+
+ void note_off_event_handler (int note);
+
+ private:
+ Gtk::VBox packer;
+ Gtk::HBox upper_box;
+ Gtk::HBox note_length_box;
+ Gtk::HBox note_velocity_box;
+
+ Gtk::ToggleButton chord_button;
+ Gtk::ToggleButton triplet_button;
+ Gtk::ToggleButton dot_button;
+
+ Gtk::Button sustain_button;
+ Gtk::Button rest_button;
+
+ Gtk::RadioButton length_1_button;
+ Gtk::RadioButton length_2_button;
+ Gtk::RadioButton length_4_button;
+ Gtk::RadioButton length_8_button;
+ Gtk::RadioButton length_12_button;
+ Gtk::RadioButton length_16_button;
+ Gtk::RadioButton length_32_button;
+ Gtk::RadioButton length_64_button;
+
+ Gtk::RadioButton velocity_ppp_button;
+ Gtk::RadioButton velocity_pp_button;
+ Gtk::RadioButton velocity_p_button;
+ Gtk::RadioButton velocity_mp_button;
+ Gtk::RadioButton velocity_mf_button;
+ Gtk::RadioButton velocity_f_button;
+ Gtk::RadioButton velocity_ff_button;
+ Gtk::RadioButton velocity_fff_button;
+
+ Gtk::Adjustment channel_adjustment;
+ Gtk::SpinButton channel_spinner;
+
+ PianoKeyboard* _piano;
+ Gtk::Widget* piano;
+ MidiTimeAxisView* _mtv;
+
+ void rest_click ();
+ void sustain_click ();
+};
+
+#endif /* __gtk2_ardour_step_entry_h__ */
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 04a121d18d..e47ba21682 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -116,6 +116,7 @@ gtk2_ardour_sources = [
'group_tabs.cc',
'gtk-custom-hruler.c',
'gtk-custom-ruler.c',
+ 'gtk_pianokeyboard.c',
'interthread_progress_window.cc',
'io_selector.cc',
'keyboard.cc',
@@ -187,6 +188,7 @@ gtk2_ardour_sources = [
'simplerect.cc',
'splash.cc',
'startup.cc',
+ 'step_entry.cc',
'streamview.cc',
'strip_silence_dialog.cc',
'tape_region_view.cc',
diff --git a/icons/Music_dynamic_forte.svg b/icons/Music_dynamic_forte.svg
new file mode 100644
index 0000000000..31bb3aa8d3
--- /dev/null
+++ b/icons/Music_dynamic_forte.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="93.925705"
+ height="112.74568"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-328.00046,-476.66)"
+ id="layer1">
+ <path
+ d="M 389.33969,518.30794 L 399.62098,518.30794 C 401.0513,518.27167 402.24206,517.77794 403.19329,516.82674 C 404.14439,515.87561 404.63813,514.68484 404.67449,513.25443 C 404.63813,511.82409 404.14439,510.63332 403.19329,509.68211 C 402.24206,508.73099 401.0513,508.23726 399.62098,508.20091 L 392.30209,508.20091 C 393.48192,502.95504 395.08656,498.11209 397.116,493.67205 C 399.14534,489.23214 402.36187,486.87238 406.7656,486.59277 L 407.98542,486.59277 C 408.98371,486.56744 409.86227,486.66183 410.62108,486.87595 C 411.37977,487.09021 411.77911,487.57668 411.81912,488.33537 C 411.54314,490.77143 410.4395,492.39059 408.50819,493.19284 C 406.57676,493.99522 405.47312,495.57081 405.19727,497.91962 C 405.2553,500.06887 406.01042,501.86955 407.46264,503.32165 C 408.91473,504.77387 410.71541,505.52899 412.86467,505.58702 C 415.91051,505.44186 418.18313,504.03326 419.68256,501.36124 C 421.18184,498.68932 421.9297,495.62527 421.92615,492.16907 C 421.81716,487.78724 420.33596,484.13507 417.48254,481.21252 C 414.62897,478.29013 411.05666,476.77262 406.7656,476.66 C 398.67338,476.96141 391.33272,480.19246 384.7436,486.35317 C 378.15439,492.51403 373.29692,499.7966 370.17118,508.20091 L 360.93544,508.20091 C 359.50505,508.23726 358.31428,508.73099 357.36313,509.68211 C 356.41195,510.63332 355.91822,511.82409 355.88193,513.25443 C 355.91822,514.68484 356.41195,515.87561 357.36313,516.82674 C 358.31428,517.77794 359.50505,518.27167 360.93544,518.30794 L 367.38303,518.30794 L 355.88193,564.1381 C 354.97069,568.06255 353.52579,571.58403 351.54723,574.70256 C 349.56866,577.82105 346.77326,579.46925 343.16101,579.64716 L 342.11545,579.64716 C 341.0336,579.67619 340.10422,579.57453 339.32731,579.34221 C 338.55041,579.10984 338.1438,578.57254 338.10749,577.73031 C 338.38341,575.38143 339.48705,573.80583 341.41842,573.00353 C 343.34979,572.2012 344.45343,570.58204 344.72934,568.14606 C 344.68215,566.00411 343.94881,564.23248 342.52932,562.83115 C 341.10984,561.42981 339.28738,560.70373 337.06194,560.65292 C 334.09228,560.78724 331.84144,562.17405 330.30939,564.81335 C 328.77738,567.45264 328.00774,570.53848 328.00046,574.07087 C 328.10939,578.44548 329.59059,582.06861 332.44407,584.94028 C 335.29757,587.8119 338.86988,589.30036 343.16101,589.40568 C 348.90941,589.17653 354.3351,586.61428 359.4381,581.71891 C 364.54108,576.8235 368.98576,570.96969 372.77215,564.15746 C 376.5585,557.34522 379.35094,550.94927 381.14951,544.96959 L 389.33969,518.30794 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_fortissimo.svg b/icons/Music_dynamic_fortissimo.svg
new file mode 100644
index 0000000000..49e93f0599
--- /dev/null
+++ b/icons/Music_dynamic_fortissimo.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="150.08417"
+ height="112.74568"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-299.92123,-476.66)"
+ id="layer1">
+ <path
+ d="M 361.26046,518.30794 L 371.54175,518.30794 C 372.97207,518.27167 374.16283,517.77794 375.11406,516.82674 C 376.06516,515.87561 376.5589,514.68484 376.59526,513.25443 C 376.5589,511.82409 376.06516,510.63332 375.11406,509.68211 C 374.16283,508.73099 372.97207,508.23726 371.54175,508.20091 L 364.22286,508.20091 C 365.40269,502.95504 367.00733,498.11209 369.03677,493.67205 C 371.06611,489.23214 374.28264,486.87238 378.68637,486.59277 L 379.90619,486.59277 C 380.90448,486.56744 381.78304,486.66183 382.54185,486.87595 C 383.30054,487.09021 383.69988,487.57668 383.73989,488.33537 C 383.46391,490.77143 382.36027,492.39059 380.42896,493.19284 C 378.49753,493.99522 377.39389,495.57081 377.11804,497.91962 C 377.17607,500.06887 377.93119,501.86955 379.38341,503.32165 C 380.8355,504.77387 382.63618,505.52899 384.78544,505.58702 C 387.83128,505.44186 390.1039,504.03326 391.60333,501.36124 C 393.10261,498.68932 393.85047,495.62527 393.84692,492.16907 C 393.73793,487.78724 392.25673,484.13507 389.40331,481.21252 C 386.54974,478.29013 382.97744,476.77262 378.68637,476.66 C 370.59416,476.96141 363.25349,480.19246 356.66437,486.35317 C 350.07516,492.51403 345.21769,499.7966 342.09195,508.20091 L 332.85621,508.20091 C 331.42582,508.23726 330.23505,508.73099 329.2839,509.68211 C 328.33272,510.63332 327.83899,511.82409 327.8027,513.25443 C 327.83899,514.68484 328.33272,515.87561 329.2839,516.82674 C 330.23505,517.77794 331.42582,518.27167 332.85621,518.30794 L 339.3038,518.30794 L 327.8027,564.1381 C 326.89146,568.06255 325.44656,571.58403 323.468,574.70256 C 321.48943,577.82105 318.69403,579.46925 315.08178,579.64716 L 314.03623,579.64716 C 312.95437,579.67619 312.02499,579.57453 311.24808,579.34221 C 310.47118,579.10984 310.06457,578.57254 310.02826,577.73031 C 310.30418,575.38143 311.40782,573.80583 313.33919,573.00353 C 315.27056,572.2012 316.3742,570.58204 316.65011,568.14606 C 316.60292,566.00411 315.86958,564.23248 314.45009,562.83115 C 313.03061,561.42981 311.20815,560.70373 308.98271,560.65292 C 306.01306,560.78724 303.76221,562.17405 302.23016,564.81335 C 300.69815,567.45264 299.92851,570.53848 299.92123,574.07087 C 300.03016,578.44548 301.51136,582.06861 304.36484,584.94028 C 307.21834,587.8119 310.79065,589.30036 315.08178,589.40568 C 320.83018,589.17653 326.25587,586.61428 331.35888,581.71891 C 336.46185,576.8235 340.90653,570.96969 344.69293,564.15746 C 348.47927,557.34522 351.27171,550.94927 353.07028,544.96959 L 361.26046,518.30794 z M 417.41891,518.30794 L 427.70021,518.30794 C 429.13052,518.27167 430.32129,517.77794 431.27252,516.82674 C 432.22362,515.87561 432.71736,514.68484 432.75372,513.25443 C 432.71736,511.82409 432.22362,510.63332 431.27252,509.68211 C 430.32129,508.73099 429.13052,508.23726 427.70021,508.20091 L 420.38132,508.20091 C 421.56115,502.95504 423.16579,498.11209 425.19523,493.67205 C 427.22457,489.23214 430.4411,486.87238 434.84483,486.59277 L 436.06464,486.59277 C 437.06294,486.56744 437.9415,486.66183 438.70031,486.87595 C 439.459,487.09021 439.85834,487.57668 439.89835,488.33537 C 439.62237,490.77143 438.51873,492.39059 436.58742,493.19284 C 434.65599,493.99522 433.55235,495.57081 433.2765,497.91962 C 433.33452,500.06887 434.08965,501.86955 435.54187,503.32165 C 436.99396,504.77387 438.79464,505.52899 440.9439,505.58702 C 443.98974,505.44186 446.26236,504.03326 447.76179,501.36124 C 449.26107,498.68932 450.00893,495.62527 450.00538,492.16907 C 449.89639,487.78724 448.41519,484.13507 445.56177,481.21252 C 442.7082,478.29013 439.13589,476.77262 434.84483,476.66 C 426.75261,476.96141 419.41195,480.19246 412.82283,486.35317 C 406.23362,492.51403 401.37615,499.7966 398.25041,508.20091 L 389.01467,508.20091 C 387.58428,508.23726 386.39351,508.73099 385.44236,509.68211 C 384.49118,510.63332 383.99745,511.82409 383.96116,513.25443 C 383.99745,514.68484 384.49118,515.87561 385.44236,516.82674 C 386.39351,517.77794 387.58428,518.27167 389.01467,518.30794 L 395.46226,518.30794 L 383.96116,564.1381 C 383.04992,568.06255 381.60502,571.58403 379.62646,574.70256 C 377.64789,577.82105 374.85249,579.46925 371.24024,579.64716 L 370.19468,579.64716 C 369.11283,579.67619 368.18345,579.57453 367.40654,579.34221 C 366.62964,579.10984 366.22303,578.57254 366.18672,577.73031 C 366.46264,575.38143 367.56628,573.80583 369.49765,573.00353 C 371.42902,572.2012 372.53266,570.58204 372.80857,568.14606 C 372.76138,566.00411 372.02804,564.23248 370.60855,562.83115 C 369.18906,561.42981 367.36661,560.70373 365.14117,560.65292 C 362.17151,560.78724 359.92067,562.17405 358.38862,564.81335 C 356.85661,567.45264 356.08697,570.53848 356.07969,574.07087 C 356.18862,578.44548 357.66982,582.06861 360.5233,584.94028 C 363.3768,587.8119 366.94911,589.30036 371.24024,589.40568 C 376.98864,589.17653 382.41433,586.61428 387.51733,581.71891 C 392.62031,576.8235 397.06499,570.96969 400.85138,564.15746 C 404.63773,557.34522 407.43017,550.94927 409.22873,544.96959 L 417.41891,518.30794 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_fortississimo.svg b/icons/Music_dynamic_fortississimo.svg
new file mode 100644
index 0000000000..adbf682f6d
--- /dev/null
+++ b/icons/Music_dynamic_fortississimo.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="206.24805"
+ height="112.74567"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-271.842,-476.66)"
+ id="layer1">
+ <path
+ d="M 333.18123,518.30794 L 343.46252,518.30794 C 344.89284,518.27167 346.08361,517.77794 347.03483,516.82674 C 347.98593,515.87561 348.47967,514.68484 348.51603,513.25443 C 348.47967,511.82409 347.98593,510.63332 347.03483,509.68211 C 346.08361,508.73099 344.89284,508.23726 343.46252,508.20091 L 336.14363,508.20091 C 337.32347,502.95504 338.9281,498.11209 340.95754,493.67205 C 342.98688,489.23214 346.20341,486.87238 350.60714,486.59277 L 351.82696,486.59277 C 352.82525,486.56744 353.70381,486.66183 354.46262,486.87595 C 355.22131,487.09021 355.62065,487.57668 355.66066,488.33537 C 355.38468,490.77143 354.28104,492.39059 352.34973,493.19284 C 350.4183,493.99522 349.31466,495.57081 349.03881,497.91962 C 349.09684,500.06887 349.85196,501.86955 351.30418,503.32165 C 352.75628,504.77387 354.55695,505.52899 356.70621,505.58702 C 359.75205,505.44186 362.02467,504.03326 363.5241,501.36124 C 365.02338,498.68932 365.77124,495.62527 365.76769,492.16907 C 365.6587,487.78724 364.1775,484.13507 361.32408,481.21252 C 358.47051,478.29013 354.89821,476.77262 350.60714,476.66 C 342.51493,476.96141 335.17427,480.19246 328.58514,486.35317 C 321.99593,492.51403 317.13846,499.7966 314.01272,508.20091 L 304.77698,508.20091 C 303.34659,508.23726 302.15582,508.73099 301.20467,509.68211 C 300.25349,510.63332 299.75976,511.82409 299.72347,513.25443 C 299.75976,514.68484 300.25349,515.87561 301.20467,516.82674 C 302.15582,517.77794 303.34659,518.27167 304.77698,518.30794 L 311.22457,518.30794 L 299.72347,564.1381 C 298.81223,568.06255 297.36733,571.58403 295.38877,574.70256 C 293.4102,577.82105 290.6148,579.46925 287.00255,579.64716 L 285.957,579.64716 C 284.87514,579.67619 283.94576,579.57453 283.16885,579.34221 C 282.39195,579.10984 281.98534,578.57254 281.94904,577.73031 C 282.22495,575.38143 283.32859,573.80583 285.25996,573.00353 C 287.19133,572.2012 288.29497,570.58204 288.57088,568.14606 C 288.52369,566.00411 287.79035,564.23248 286.37086,562.83115 C 284.95138,561.42981 283.12892,560.70373 280.90348,560.65292 C 277.93383,560.78724 275.68298,562.17405 274.15094,564.81335 C 272.61892,567.45264 271.84928,570.53848 271.842,574.07087 C 271.95093,578.44548 273.43214,582.06861 276.28561,584.94028 C 279.13911,587.8119 282.71142,589.30036 287.00255,589.40568 C 292.75095,589.17653 298.17664,586.61428 303.27965,581.71891 C 308.38262,576.8235 312.8273,570.96969 316.6137,564.15746 C 320.40004,557.34522 323.19249,550.94927 324.99105,544.96959 L 333.18123,518.30794 z M 389.33969,518.30794 L 399.62098,518.30794 C 401.0513,518.27167 402.24206,517.77794 403.19329,516.82674 C 404.14439,515.87561 404.63813,514.68484 404.67449,513.25443 C 404.63813,511.82409 404.14439,510.63332 403.19329,509.68211 C 402.24206,508.73099 401.0513,508.23726 399.62098,508.20091 L 392.30209,508.20091 C 393.48192,502.95504 395.08656,498.11209 397.116,493.67205 C 399.14534,489.23214 402.36187,486.87238 406.7656,486.59277 L 407.98542,486.59277 C 408.98371,486.56744 409.86227,486.66183 410.62108,486.87595 C 411.37977,487.09021 411.77911,487.57668 411.81912,488.33537 C 411.54314,490.77143 410.4395,492.39059 408.50819,493.19284 C 406.57676,493.99522 405.47312,495.57081 405.19727,497.91962 C 405.2553,500.06887 406.01042,501.86955 407.46264,503.32165 C 408.91473,504.77387 410.71541,505.52899 412.86467,505.58702 C 415.91051,505.44186 418.18313,504.03326 419.68256,501.36124 C 421.18184,498.68932 421.9297,495.62527 421.92615,492.16907 C 421.81716,487.78724 420.33596,484.13507 417.48254,481.21252 C 414.62897,478.29013 411.05666,476.77262 406.7656,476.66 C 398.67338,476.96141 391.33272,480.19246 384.7436,486.35317 C 378.15439,492.51403 373.29692,499.7966 370.17118,508.20091 L 360.93544,508.20091 C 359.50505,508.23726 358.31428,508.73099 357.36313,509.68211 C 356.41195,510.63332 355.91822,511.82409 355.88193,513.25443 C 355.91822,514.68484 356.41195,515.87561 357.36313,516.82674 C 358.31428,517.77794 359.50505,518.27167 360.93544,518.30794 L 367.38303,518.30794 L 355.88193,564.1381 C 354.97069,568.06255 353.52579,571.58403 351.54723,574.70256 C 349.56866,577.82105 346.77326,579.46925 343.16101,579.64716 L 342.11545,579.64716 C 341.0336,579.67619 340.10422,579.57453 339.32731,579.34221 C 338.55041,579.10984 338.1438,578.57254 338.10749,577.73031 C 338.38341,575.38143 339.48705,573.80583 341.41842,573.00353 C 343.34979,572.2012 344.45343,570.58204 344.72934,568.14606 C 344.68215,566.00411 343.94881,564.23248 342.52932,562.83115 C 341.10984,561.42981 339.28738,560.70373 337.06194,560.65292 C 334.09228,560.78724 331.84144,562.17405 330.30939,564.81335 C 328.77738,567.45264 328.00774,570.53848 328.00046,574.07087 C 328.10939,578.44548 329.59059,582.06861 332.44407,584.94028 C 335.29757,587.8119 338.86988,589.30036 343.16101,589.40568 C 348.90941,589.17653 354.3351,586.61428 359.4381,581.71891 C 364.54108,576.8235 368.98576,570.96969 372.77216,564.15746 C 376.5585,557.34522 379.35094,550.94927 381.14951,544.96959 L 389.33969,518.30794 z M 445.49814,518.30794 L 455.77943,518.30794 C 457.20975,518.27167 458.40052,517.77794 459.35174,516.82674 C 460.30285,515.87561 460.79659,514.68484 460.83295,513.25443 C 460.79659,511.82409 460.30285,510.63332 459.35174,509.68211 C 458.40052,508.73099 457.20975,508.23726 455.77943,508.20091 L 448.46055,508.20091 C 449.64038,502.95504 451.24502,498.11209 453.27446,493.67205 C 455.3038,489.23214 458.52033,486.87238 462.92406,486.59277 L 464.14387,486.59277 C 465.14217,486.56744 466.02073,486.66183 466.77954,486.87595 C 467.53823,487.09021 467.93757,487.57668 467.97758,488.33537 C 467.7016,490.77143 466.59796,492.39059 464.66665,493.19284 C 462.73522,493.99522 461.63158,495.57081 461.35573,497.91962 C 461.41375,500.06887 462.16888,501.86955 463.6211,503.32165 C 465.07319,504.77387 466.87387,505.52899 469.02313,505.58702 C 472.06897,505.44186 474.34159,504.03326 475.84102,501.36124 C 477.3403,498.68932 478.08816,495.62527 478.08461,492.16907 C 477.97562,487.78724 476.49442,484.13507 473.641,481.21252 C 470.78743,478.29013 467.21512,476.77262 462.92406,476.66 C 454.83184,476.96141 447.49118,480.19246 440.90206,486.35317 C 434.31285,492.51403 429.45538,499.7966 426.32964,508.20091 L 417.0939,508.20091 C 415.66351,508.23726 414.47274,508.73099 413.52159,509.68211 C 412.57041,510.63332 412.07668,511.82409 412.04039,513.25443 C 412.07668,514.68484 412.57041,515.87561 413.52159,516.82674 C 414.47274,517.77794 415.66351,518.27167 417.0939,518.30794 L 423.54149,518.30794 L 412.04039,564.1381 C 411.12914,568.06255 409.68425,571.58403 407.70569,574.70256 C 405.72712,577.82105 402.93172,579.46925 399.31947,579.64716 L 398.27391,579.64716 C 397.19206,579.67619 396.26268,579.57453 395.48577,579.34221 C 394.70887,579.10984 394.30226,578.57254 394.26595,577.73031 C 394.54187,575.38143 395.64551,573.80583 397.57688,573.00353 C 399.50825,572.2012 400.61189,570.58204 400.8878,568.14606 C 400.84061,566.00411 400.10727,564.23248 398.68778,562.83115 C 397.26829,561.42981 395.44584,560.70373 393.2204,560.65292 C 390.25074,560.78724 387.9999,562.17405 386.46785,564.81335 C 384.93584,567.45264 384.1662,570.53848 384.15892,574.07087 C 384.26785,578.44548 385.74905,582.06861 388.60253,584.94028 C 391.45603,587.8119 395.02834,589.30036 399.31947,589.40568 C 405.06787,589.17653 410.49356,586.61428 415.59656,581.71891 C 420.69954,576.8235 425.14422,570.96969 428.93061,564.15746 C 432.71696,557.34522 435.5094,550.94927 437.30796,544.96959 L 445.49814,518.30794 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_mezzo_forte.svg b/icons/Music_dynamic_mezzo_forte.svg
new file mode 100644
index 0000000000..7633a497ae
--- /dev/null
+++ b/icons/Music_dynamic_mezzo_forte.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="163.19196"
+ height="112.74567"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-297.02949,-476.66)"
+ id="layer1">
+ <path
+ d="M 297.02949,532.94571 C 297.05128,533.90053 297.35623,534.60482 297.94435,535.0586 C 298.53248,535.51242 299.27309,535.73751 300.16615,535.73386 C 301.33878,535.73751 302.47872,535.38173 303.58599,534.66651 C 304.69327,533.95135 305.52826,532.85497 306.09097,531.37738 C 307.09296,528.15361 308.61772,524.88625 310.66527,521.57529 C 312.71281,518.26441 315.02174,516.47825 317.59207,516.21683 C 318.37259,516.2314 318.9462,516.50731 319.31288,517.04456 C 319.67953,517.5819 319.86105,518.29346 319.85744,519.17924 C 319.82838,520.05057 319.71221,520.92186 319.50892,521.79312 L 309.05337,552.11422 C 308.90815,552.637 308.85007,553.15978 308.87911,553.68255 C 308.88637,554.57563 309.1768,555.31623 309.75041,555.90435 C 310.32401,556.49248 311.13722,556.79743 312.19004,556.81921 L 316.02374,556.81921 C 317.3815,556.78654 318.67392,556.32911 319.901,555.44692 C 321.12807,554.56474 321.98484,553.45384 322.47133,552.11422 L 332.75262,521.79312 C 333.33345,520.341 334.3064,519.0631 335.67146,517.95942 C 337.03646,516.85582 338.44505,516.27496 339.89724,516.21683 C 340.67774,516.23502 341.25135,516.50367 341.61805,517.02278 C 341.98468,517.54197 342.1662,518.2027 342.16261,519.00498 C 342.16258,519.44792 342.11901,519.91261 342.03192,520.39905 C 341.94475,520.88556 341.81406,521.35025 341.63983,521.79312 L 333.10113,552.11422 C 333.01035,552.36835 332.93048,552.60069 332.86152,552.81125 C 332.79252,553.02182 332.75622,553.25417 332.75262,553.50829 C 332.76348,554.48487 333.09022,555.27629 333.73283,555.88257 C 334.37538,556.48884 335.26846,556.80106 336.41206,556.81921 L 340.24576,556.81921 C 341.59986,556.78654 342.85598,556.32911 344.01411,555.44692 C 345.17217,554.56474 345.94908,553.45384 346.34483,552.11422 L 355.05779,521.79312 C 355.55873,520.341 356.47359,519.0631 357.80237,517.95942 C 359.13105,516.85582 360.48155,516.27496 361.8539,516.21683 C 362.71788,516.23865 363.3423,516.54361 363.72718,517.13169 C 364.11195,517.71986 364.30073,518.46046 364.29352,519.3535 C 364.26442,520.07961 364.14825,520.89282 363.945,521.79312 L 357.1489,550.54588 C 356.94554,551.21389 356.82937,551.96901 356.80038,552.81125 C 356.80396,554.49939 357.27591,555.87168 358.21624,556.92812 C 359.15646,557.98457 360.54327,558.52913 362.37667,558.56181 C 368.80968,558.12979 374.71996,555.98785 380.10754,552.136 C 385.49497,548.28416 388.35573,545.31449 388.6898,543.227 C 388.67157,542.43196 388.40292,541.80027 387.88385,541.33193 C 387.36463,540.86362 386.7039,540.62402 385.90166,540.61311 C 384.20981,540.90356 382.32201,542.06529 380.23823,544.0983 C 378.15431,546.13133 376.09225,547.29306 374.05204,547.58348 C 373.69619,547.57986 373.40576,547.45642 373.18074,547.21317 C 372.95559,546.96995 372.83942,546.62869 372.83222,546.18941 C 372.80311,545.98611 372.8612,545.69568 373.00648,545.31811 L 379.10555,519.3535 C 379.19624,518.91063 379.2761,518.44594 379.34515,517.95942 C 379.41406,517.47299 379.45037,517.0083 379.45407,516.56535 C 379.39228,513.38153 378.4266,510.55708 376.55701,508.09199 C 374.68728,505.627 372.28396,504.32732 369.34704,504.19295 C 366.79481,504.21841 364.27531,504.82106 361.78854,506.00089 C 359.30167,507.18081 357,508.78545 354.88353,510.8148 C 354.35707,508.86169 353.49304,507.27883 352.29142,506.06623 C 351.08972,504.85373 349.57221,504.2293 347.7389,504.19295 C 345.18669,504.21479 342.6672,504.78113 340.18041,505.89198 C 337.69355,507.00293 335.39189,508.5277 333.27539,510.46628 C 332.75259,508.60393 331.92486,507.10095 330.7922,505.95732 C 329.65949,504.8138 328.22185,504.22568 326.47929,504.19295 C 320.5749,504.47053 315.42243,506.64554 311.02185,510.71798 C 306.62127,514.79053 303.19848,519.09537 300.75347,523.63252 C 298.30847,528.16974 297.06715,531.27413 297.02949,532.94571 L 297.02949,532.94571 z M 427.62955,518.30794 L 437.91084,518.30794 C 439.34116,518.27167 440.53193,517.77794 441.48315,516.82674 C 442.43425,515.87561 442.92799,514.68484 442.96435,513.25443 C 442.92799,511.82409 442.43425,510.63332 441.48315,509.68211 C 440.53193,508.73099 439.34116,508.23726 437.91084,508.20091 L 430.59195,508.20091 C 431.77179,502.95504 433.37642,498.11209 435.40586,493.67205 C 437.4352,489.23214 440.65173,486.87238 445.05546,486.59277 L 446.27528,486.59277 C 447.27357,486.56744 448.15213,486.66183 448.91094,486.87595 C 449.66963,487.09021 450.06897,487.57668 450.10898,488.33537 C 449.833,490.77143 448.72936,492.39059 446.79805,493.19284 C 444.86662,493.99522 443.76298,495.57081 443.48713,497.91962 C 443.54516,500.06887 444.30028,501.86955 445.7525,503.32165 C 447.2046,504.77387 449.00527,505.52899 451.15453,505.58702 C 454.20037,505.44186 456.47299,504.03326 457.97242,501.36124 C 459.4717,498.68932 460.21956,495.62527 460.21601,492.16907 C 460.10702,487.78724 458.62582,484.13507 455.7724,481.21252 C 452.91883,478.29013 449.34653,476.77262 445.05546,476.66 C 436.96325,476.96141 429.62259,480.19246 423.03346,486.35317 C 416.44425,492.51403 411.58678,499.7966 408.46104,508.20091 L 399.2253,508.20091 C 397.79491,508.23726 396.60414,508.73099 395.65299,509.68211 C 394.70181,510.63332 394.20808,511.82409 394.17179,513.25443 C 394.20808,514.68484 394.70181,515.87561 395.65299,516.82674 C 396.60414,517.77794 397.79491,518.27167 399.2253,518.30794 L 405.67289,518.30794 L 394.17179,564.1381 C 393.26055,568.06255 391.81565,571.58403 389.83709,574.70256 C 387.85852,577.82105 385.06312,579.46925 381.45087,579.64716 L 380.40532,579.64716 C 379.32346,579.67619 378.39408,579.57453 377.61717,579.34221 C 376.84027,579.10984 376.43366,578.57254 376.39736,577.73031 C 376.67327,575.38143 377.77691,573.80583 379.70828,573.00353 C 381.63965,572.2012 382.74329,570.58204 383.0192,568.14606 C 382.97201,566.00411 382.23867,564.23248 380.81918,562.83115 C 379.3997,561.42981 377.57724,560.70373 375.3518,560.65292 C 372.38215,560.78724 370.1313,562.17405 368.59926,564.81335 C 367.06724,567.45264 366.2976,570.53848 366.29032,574.07087 C 366.39925,578.44548 367.88046,582.06861 370.73393,584.94028 C 373.58743,587.8119 377.15974,589.30036 381.45087,589.40568 C 387.19927,589.17653 392.62496,586.61428 397.72797,581.71891 C 402.83094,576.8235 407.27562,570.96969 411.06202,564.15746 C 414.84836,557.34522 417.64081,550.94927 419.43937,544.96959 L 427.62955,518.30794 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_pianissimo.svg b/icons/Music_dynamic_pianissimo.svg
new file mode 100644
index 0000000000..36a261d7ef
--- /dev/null
+++ b/icons/Music_dynamic_pianissimo.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="148.51047"
+ height="76.325508"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-287.55418,-505.93554)"
+ id="layer1">
+ <path
+ d="M 338.08934,552.11422 C 336.11074,552.07792 334.70941,551.45349 333.88533,550.24093 C 333.06121,549.02838 332.66187,547.44553 332.6873,545.49237 C 332.71095,542.47619 333.47683,538.55644 334.98494,533.7331 C 336.49301,528.90981 338.60133,524.55118 341.3099,520.65721 C 344.01842,516.76331 347.1852,514.70232 350.81026,514.47424 C 352.36402,514.51785 353.48218,515.08419 354.16474,516.17327 C 354.84721,517.26243 355.18121,518.61293 355.16674,520.22479 C 355.17852,521.49627 354.59336,524.6652 353.41123,529.73159 C 352.22902,534.79804 350.37886,539.70956 347.86075,544.46617 C 345.34257,549.22281 342.08543,551.77216 338.08934,552.11422 L 338.08934,552.11422 z M 301.1464,532.77145 C 301.17908,533.81703 301.54938,534.60119 302.2573,535.12395 C 302.96523,535.64674 303.81475,535.90813 304.80584,535.90812 C 307.92422,535.64352 310.2068,533.79121 311.65358,530.35119 C 313.10036,526.91121 314.51809,523.47121 315.90679,520.03117 C 317.29548,516.5912 319.46189,514.7389 322.40601,514.47424 C 322.92151,514.47428 323.28455,514.60498 323.49513,514.86632 C 323.70568,515.12775 323.80733,515.51984 323.80009,516.04257 C 323.79281,516.58354 323.67664,517.24427 323.45157,518.02477 C 323.22647,518.80534 322.93604,519.59677 322.58027,520.39905 L 306.54843,567.79754 C 305.05217,571.46127 302.81693,573.54377 299.84268,574.04505 C 296.86845,574.5463 294.11688,574.83458 291.58795,574.90989 C 289.05907,574.98517 287.71448,576.21574 287.55418,578.60161 C 287.55784,579.51644 287.85553,580.34417 288.44726,581.0848 C 289.03904,581.82538 289.90307,582.21746 291.03937,582.26105 C 291.34071,582.22472 293.26481,582.0795 296.8117,581.8254 C 300.35861,581.57125 304.76591,581.42603 310.03361,581.38975 C 315.13069,581.42603 319.4436,581.57125 322.97235,581.8254 C 326.50109,582.0795 328.4615,582.22472 328.8536,582.26105 C 329.9899,582.21746 330.85393,581.82538 331.44571,581.0848 C 332.03744,580.34418 332.33513,579.51645 332.33879,578.60161 C 332.22905,576.46638 331.46102,575.33477 330.03469,575.20678 C 328.60833,575.07875 327.18199,574.8249 325.75566,574.4452 C 324.3293,574.06547 323.56127,572.43045 323.45157,569.54013 C 323.45882,568.85034 323.53142,568.18235 323.66939,567.53615 C 323.80733,566.88993 323.96707,566.22193 324.14861,565.53217 L 327.11101,556.64495 C 327.82618,554.90963 329.53246,554.76441 332.22987,556.2093 C 334.92723,557.6542 339.02958,558.55454 344.53693,558.91032 C 350.0442,558.79415 355.9327,555.8027 362.20244,549.93597 C 368.47209,544.06926 371.8774,536.02431 372.41839,525.80108 C 372.39292,520.01789 370.78828,515.29112 367.60448,511.62074 C 364.42057,507.95046 359.80996,506.05539 353.77266,505.93554 C 350.66137,505.97553 347.51744,506.81052 344.34088,508.44051 C 341.16425,510.07061 338.32528,512.25611 335.82397,514.99702 C 335.21403,512.40859 334.03778,510.26665 332.29522,508.57121 C 330.55261,506.87586 328.24368,505.99731 325.36842,505.93554 C 320.5709,506.22817 316.36072,508.39243 312.73786,512.4283 C 309.11499,516.46427 306.28597,520.61637 304.25079,524.88461 C 302.21562,529.15291 301.18082,531.78185 301.1464,532.77145 L 301.1464,532.77145 z M 401.73559,552.11422 C 399.75699,552.07792 398.35566,551.45349 397.53159,550.24093 C 396.70746,549.02838 396.30812,547.44553 396.33356,545.49237 C 396.3572,542.47619 397.12308,538.55644 398.6312,533.7331 C 400.13926,528.90981 402.24758,524.55118 404.95616,520.65721 C 407.66467,516.76331 410.83145,514.70232 414.45651,514.47424 C 416.01027,514.51785 417.12843,515.08419 417.81099,516.17327 C 418.49347,517.26243 418.82746,518.61293 418.81299,520.22479 C 418.82478,521.49627 418.23961,524.6652 417.05748,529.73159 C 415.87527,534.79804 414.02512,539.70956 411.50701,544.46617 C 408.98882,549.22281 405.73168,551.77216 401.73559,552.11422 L 401.73559,552.11422 z M 364.79265,532.77145 C 364.82533,533.81703 365.19563,534.60119 365.90355,535.12395 C 366.61148,535.64674 367.461,535.90813 368.45209,535.90812 C 371.57047,535.64352 373.85305,533.79121 375.29983,530.35119 C 376.74661,526.91121 378.16434,523.47121 379.55304,520.03117 C 380.94173,516.5912 383.10814,514.7389 386.05227,514.47424 C 386.56777,514.47428 386.93081,514.60498 387.14138,514.86632 C 387.35193,515.12775 387.45359,515.51984 387.44634,516.04257 C 387.43906,516.58354 387.32289,517.24427 387.09782,518.02477 C 386.87272,518.80534 386.58229,519.59677 386.22652,520.39905 L 370.19468,567.79754 C 368.69843,571.46127 366.46318,573.54377 363.48893,574.04505 C 360.5147,574.5463 357.76313,574.83458 355.23421,574.90989 C 352.70532,574.98517 351.36073,576.21574 351.20043,578.60161 C 351.20409,579.51644 351.50178,580.34417 352.09351,581.0848 C 352.68529,581.82538 353.54932,582.21746 354.68562,582.26105 C 354.98696,582.22472 356.91107,582.0795 360.45795,581.8254 C 364.00486,581.57125 368.41216,581.42603 373.67987,581.38975 C 378.77694,581.42603 383.08985,581.57125 386.61861,581.8254 C 390.14734,582.0795 392.10775,582.22472 392.49985,582.26105 C 393.63615,582.21746 394.50018,581.82538 395.09196,581.0848 C 395.68369,580.34418 395.98138,579.51645 395.98504,578.60161 C 395.8753,576.46638 395.10727,575.33477 393.68095,575.20678 C 392.25458,575.07875 390.82824,574.8249 389.40191,574.4452 C 387.97555,574.06547 387.20752,572.43045 387.09782,569.54013 C 387.10507,568.85034 387.17768,568.18235 387.31564,567.53615 C 387.45359,566.88993 387.61332,566.22193 387.79486,565.53217 L 390.75726,556.64495 C 391.47243,554.90963 393.17872,554.76441 395.87612,556.2093 C 398.57348,557.6542 402.67583,558.55454 408.18318,558.91032 C 413.69045,558.79415 419.57895,555.8027 425.8487,549.93597 C 432.11834,544.06926 435.52365,536.02431 436.06464,525.80108 C 436.03917,520.01789 434.43453,515.29112 431.25073,511.62074 C 428.06682,507.95046 423.45622,506.05539 417.41891,505.93554 C 414.30762,505.97553 411.16369,506.81052 407.98713,508.44051 C 404.8105,510.07061 401.97153,512.25611 399.47022,514.99702 C 398.86028,512.40859 397.68403,510.26665 395.94147,508.57121 C 394.19886,506.87586 391.88993,505.99731 389.01467,505.93554 C 384.21716,506.22817 380.00697,508.39243 376.38411,512.4283 C 372.76124,516.46427 369.93222,520.61637 367.89704,524.88461 C 365.86187,529.15291 364.82708,531.78185 364.79265,532.77145 L 364.79265,532.77145 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_pianississimo.svg b/icons/Music_dynamic_pianississimo.svg
new file mode 100644
index 0000000000..aa0e7b5072
--- /dev/null
+++ b/icons/Music_dynamic_pianississimo.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="212.15671"
+ height="76.325508"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-255.73106,-505.93554)"
+ id="layer1">
+ <path
+ d="M 306.26621,552.11422 C 304.28762,552.07792 302.88628,551.45349 302.06221,550.24093 C 301.23809,549.02838 300.83874,547.44553 300.86418,545.49237 C 300.88782,542.47619 301.6537,538.55644 303.16182,533.7331 C 304.66988,528.90981 306.7782,524.55118 309.48678,520.65721 C 312.19529,516.76331 315.36207,514.70232 318.98713,514.47424 C 320.5409,514.51785 321.65906,515.08419 322.34162,516.17327 C 323.02409,517.26243 323.35808,518.61293 323.34361,520.22479 C 323.3554,521.49627 322.77023,524.6652 321.58811,529.73159 C 320.4059,534.79804 318.55574,539.70956 316.03763,544.46617 C 313.51944,549.22281 310.26231,551.77216 306.26621,552.11422 L 306.26621,552.11422 z M 269.32327,532.77145 C 269.35595,533.81703 269.72625,534.60119 270.43417,535.12395 C 271.14211,535.64674 271.99162,535.90813 272.98271,535.90812 C 276.1011,535.64352 278.38367,533.79121 279.83045,530.35119 C 281.27723,526.91121 282.69497,523.47121 284.08367,520.03117 C 285.47236,516.5912 287.63876,514.7389 290.58289,514.47424 C 291.09839,514.47428 291.46143,514.60498 291.672,514.86632 C 291.88256,515.12775 291.98421,515.51984 291.97696,516.04257 C 291.96969,516.58354 291.85351,517.24427 291.62844,518.02477 C 291.40334,518.80534 291.11291,519.59677 290.75715,520.39905 L 274.7253,567.79754 C 273.22905,571.46127 270.9938,573.54377 268.01955,574.04505 C 265.04533,574.5463 262.29375,574.83458 259.76483,574.90989 C 257.23594,574.98517 255.89135,576.21574 255.73106,578.60161 C 255.73471,579.51644 256.0324,580.34417 256.62414,581.0848 C 257.21591,581.82538 258.07995,582.21746 259.21624,582.26105 C 259.51758,582.22472 261.44169,582.0795 264.98857,581.8254 C 268.53548,581.57125 272.94278,581.42603 278.21049,581.38975 C 283.30756,581.42603 287.62047,581.57125 291.14923,581.8254 C 294.67796,582.0795 296.63837,582.22472 297.03048,582.26105 C 298.16677,582.21746 299.0308,581.82538 299.62258,581.0848 C 300.21431,580.34418 300.51201,579.51645 300.51566,578.60161 C 300.40592,576.46638 299.63789,575.33477 298.21157,575.20678 C 296.7852,575.07875 295.35886,574.8249 293.93253,574.4452 C 292.50617,574.06547 291.73814,572.43045 291.62844,569.54013 C 291.63569,568.85034 291.7083,568.18235 291.84627,567.53615 C 291.98421,566.88993 292.14395,566.22193 292.32548,565.53217 L 295.28788,556.64495 C 296.00305,554.90963 297.70934,554.76441 300.40674,556.2093 C 303.10411,557.6542 307.20645,558.55454 312.7138,558.91032 C 318.22107,558.79415 324.10957,555.8027 330.37932,549.93597 C 336.64896,544.06926 340.05427,536.02431 340.59526,525.80108 C 340.56979,520.01789 338.96515,515.29112 335.78135,511.62074 C 332.59744,507.95046 327.98684,506.05539 321.94954,505.93554 C 318.83824,505.97553 315.69432,506.81052 312.51775,508.44051 C 309.34112,510.07061 306.50215,512.25611 304.00084,514.99702 C 303.39091,512.40859 302.21466,510.26665 300.47209,508.57121 C 298.72948,506.87586 296.42055,505.99731 293.54529,505.93554 C 288.74778,506.22817 284.53759,508.39243 280.91473,512.4283 C 277.29186,516.46427 274.46284,520.61637 272.42766,524.88461 C 270.39249,529.15291 269.3577,531.78185 269.32327,532.77145 L 269.32327,532.77145 z M 369.91246,552.11422 C 367.93387,552.07792 366.53254,551.45349 365.70846,550.24093 C 364.88434,549.02838 364.48499,547.44553 364.51043,545.49237 C 364.53407,542.47619 365.29995,538.55644 366.80807,533.7331 C 368.31614,528.90981 370.42445,524.55118 373.13303,520.65721 C 375.84154,516.76331 379.00832,514.70232 382.63338,514.47424 C 384.18715,514.51785 385.30531,515.08419 385.98787,516.17327 C 386.67034,517.26243 387.00434,518.61293 386.98986,520.22479 C 387.00165,521.49627 386.41648,524.6652 385.23436,529.73159 C 384.05215,534.79804 382.20199,539.70956 379.68388,544.46617 C 377.16569,549.22281 373.90856,551.77216 369.91246,552.11422 L 369.91246,552.11422 z M 332.96952,532.77145 C 333.0022,533.81703 333.3725,534.60119 334.08042,535.12395 C 334.78836,535.64674 335.63787,535.90813 336.62896,535.90812 C 339.74735,535.64352 342.02993,533.79121 343.4767,530.35119 C 344.92348,526.91121 346.34122,523.47121 347.72992,520.03117 C 349.11861,516.5912 351.28501,514.7389 354.22914,514.47424 C 354.74464,514.47428 355.10768,514.60498 355.31826,514.86632 C 355.52881,515.12775 355.63046,515.51984 355.62321,516.04257 C 355.61594,516.58354 355.49977,517.24427 355.27469,518.02477 C 355.0496,518.80534 354.75916,519.59677 354.4034,520.39905 L 338.37156,567.79754 C 336.8753,571.46127 334.64005,573.54377 331.6658,574.04505 C 328.69158,574.5463 325.94001,574.83458 323.41108,574.90989 C 320.88219,574.98517 319.5376,576.21574 319.37731,578.60161 C 319.38096,579.51644 319.67866,580.34417 320.27039,581.0848 C 320.86216,581.82538 321.7262,582.21746 322.86249,582.26105 C 323.16383,582.22472 325.08794,582.0795 328.63482,581.8254 C 332.18174,581.57125 336.58904,581.42603 341.85674,581.38975 C 346.95381,581.42603 351.26672,581.57125 354.79548,581.8254 C 358.32421,582.0795 360.28463,582.22472 360.67673,582.26105 C 361.81302,582.21746 362.67706,581.82538 363.26883,581.0848 C 363.86056,580.34418 364.15826,579.51645 364.16191,578.60161 C 364.05217,576.46638 363.28414,575.33477 361.85782,575.20678 C 360.43146,575.07875 359.00511,574.8249 357.57879,574.4452 C 356.15243,574.06547 355.3844,572.43045 355.27469,569.54013 C 355.28194,568.85034 355.35455,568.18235 355.49252,567.53615 C 355.63046,566.88993 355.7902,566.22193 355.97173,565.53217 L 358.93414,556.64495 C 359.6493,554.90963 361.35559,554.76441 364.053,556.2093 C 366.75036,557.6542 370.85271,558.55454 376.36005,558.91032 C 381.86732,558.79415 387.75582,555.8027 394.02557,549.93597 C 400.29521,544.06926 403.70052,536.02431 404.24152,525.80108 C 404.21604,520.01789 402.61141,515.29112 399.42761,511.62074 C 396.24369,507.95046 391.63309,506.05539 385.59579,505.93554 C 382.48449,505.97553 379.34057,506.81052 376.164,508.44051 C 372.98737,510.07061 370.14841,512.25611 367.64709,514.99702 C 367.03716,512.40859 365.86091,510.26665 364.11834,508.57121 C 362.37573,506.87586 360.0668,505.99731 357.19154,505.93554 C 352.39403,506.22817 348.18385,508.39243 344.56098,512.4283 C 340.93812,516.46427 338.1091,520.61637 336.07392,524.88461 C 334.03875,529.15291 333.00395,531.78185 332.96952,532.77145 L 332.96952,532.77145 z M 433.55871,552.11422 C 431.58012,552.07792 430.17879,551.45349 429.35471,550.24093 C 428.53059,549.02838 428.13125,547.44553 428.15668,545.49237 C 428.18033,542.47619 428.94621,538.55644 430.45432,533.7331 C 431.96239,528.90981 434.07071,524.55118 436.77928,520.65721 C 439.48779,516.76331 442.65458,514.70232 446.27963,514.47424 C 447.8334,514.51785 448.95156,515.08419 449.63412,516.17327 C 450.31659,517.26243 450.65059,518.61293 450.63611,520.22479 C 450.6479,521.49627 450.06273,524.6652 448.88061,529.73159 C 447.6984,534.79804 445.84824,539.70956 443.33013,544.46617 C 440.81194,549.22281 437.55481,551.77216 433.55871,552.11422 L 433.55871,552.11422 z M 396.61577,532.77145 C 396.64846,533.81703 397.01876,534.60119 397.72667,535.12395 C 398.43461,535.64674 399.28412,535.90813 400.27522,535.90812 C 403.3936,535.64352 405.67618,533.79121 407.12296,530.35119 C 408.56973,526.91121 409.98747,523.47121 411.37617,520.03117 C 412.76486,516.5912 414.93126,514.7389 417.87539,514.47424 C 418.39089,514.47428 418.75393,514.60498 418.96451,514.86632 C 419.17506,515.12775 419.27671,515.51984 419.26946,516.04257 C 419.26219,516.58354 419.14602,517.24427 418.92095,518.02477 C 418.69585,518.80534 418.40542,519.59677 418.04965,520.39905 L 402.01781,567.79754 C 400.52155,571.46127 398.2863,573.54377 395.31206,574.04505 C 392.33783,574.5463 389.58626,574.83458 387.05733,574.90989 C 384.52844,574.98517 383.18385,576.21574 383.02356,578.60161 C 383.02721,579.51644 383.32491,580.34417 383.91664,581.0848 C 384.50841,581.82538 385.37245,582.21746 386.50874,582.26105 C 386.81008,582.22472 388.73419,582.0795 392.28108,581.8254 C 395.82799,581.57125 400.23529,581.42603 405.50299,581.38975 C 410.60006,581.42603 414.91297,581.57125 418.44173,581.8254 C 421.97046,582.0795 423.93088,582.22472 424.32298,582.26105 C 425.45927,582.21746 426.32331,581.82538 426.91508,581.0848 C 427.50682,580.34418 427.80451,579.51645 427.80816,578.60161 C 427.69842,576.46638 426.9304,575.33477 425.50407,575.20678 C 424.07771,575.07875 422.65136,574.8249 421.22504,574.4452 C 419.79868,574.06547 419.03065,572.43045 418.92095,569.54013 C 418.92819,568.85034 419.0008,568.18235 419.13877,567.53615 C 419.27671,566.88993 419.43645,566.22193 419.61798,565.53217 L 422.58039,556.64495 C 423.29556,554.90963 425.00184,554.76441 427.69925,556.2093 C 430.39661,557.6542 434.49896,558.55454 440.0063,558.91032 C 445.51357,558.79415 451.40207,555.8027 457.67182,549.93597 C 463.94146,544.06926 467.34678,536.02431 467.88777,525.80108 C 467.86229,520.01789 466.25766,515.29112 463.07386,511.62074 C 459.88994,507.95046 455.27934,506.05539 449.24204,505.93554 C 446.13074,505.97553 442.98682,506.81052 439.81026,508.44051 C 436.63362,510.07061 433.79466,512.25611 431.29335,514.99702 C 430.68341,512.40859 429.50716,510.26665 427.76459,508.57121 C 426.02198,506.87586 423.71305,505.99731 420.8378,505.93554 C 416.04028,506.22817 411.8301,508.39243 408.20724,512.4283 C 404.58437,516.46427 401.75535,520.61637 399.72017,524.88461 C 397.685,529.15291 396.6502,531.78185 396.61577,532.77145 L 396.61577,532.77145 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/Music_dynamic_piano.svg b/icons/Music_dynamic_piano.svg
new file mode 100644
index 0000000000..e689d39596
--- /dev/null
+++ b/icons/Music_dynamic_piano.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="84.864212"
+ height="76.325508"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <g
+ transform="translate(-319.37731,-505.93554)"
+ id="layer1">
+ <path
+ d="M 369.91246,552.11422 C 367.93387,552.07792 366.53254,551.45349 365.70846,550.24093 C 364.88434,549.02838 364.485,547.44553 364.51043,545.49237 C 364.53408,542.47619 365.29996,538.55644 366.80807,533.7331 C 368.31614,528.90981 370.42446,524.55118 373.13303,520.65721 C 375.84154,516.76331 379.00833,514.70232 382.63338,514.47424 C 384.18715,514.51785 385.30531,515.08419 385.98787,516.17327 C 386.67034,517.26243 387.00434,518.61293 386.98986,520.22479 C 387.00165,521.49627 386.41648,524.6652 385.23436,529.73159 C 384.05215,534.79804 382.20199,539.70956 379.68388,544.46617 C 377.16569,549.22281 373.90856,551.77216 369.91246,552.11422 L 369.91246,552.11422 z M 332.96952,532.77145 C 333.00221,533.81703 333.37251,534.60119 334.08042,535.12395 C 334.78836,535.64674 335.63787,535.90813 336.62897,535.90812 C 339.74735,535.64352 342.02993,533.79121 343.47671,530.35119 C 344.92348,526.91121 346.34122,523.47121 347.72992,520.03117 C 349.11861,516.5912 351.28501,514.7389 354.22914,514.47424 C 354.74464,514.47428 355.10768,514.60498 355.31826,514.86632 C 355.52881,515.12775 355.63046,515.51984 355.62321,516.04257 C 355.61594,516.58354 355.49977,517.24427 355.2747,518.02477 C 355.0496,518.80534 354.75917,519.59677 354.4034,520.39905 L 338.37156,567.79754 C 336.8753,571.46127 334.64005,573.54377 331.6658,574.04505 C 328.69158,574.5463 325.94001,574.83458 323.41108,574.90989 C 320.88219,574.98517 319.5376,576.21574 319.37731,578.60161 C 319.38096,579.51644 319.67866,580.34417 320.27039,581.0848 C 320.86216,581.82538 321.7262,582.21746 322.86249,582.26105 C 323.16383,582.22472 325.08794,582.0795 328.63483,581.8254 C 332.18174,581.57125 336.58904,581.42603 341.85674,581.38975 C 346.95381,581.42603 351.26672,581.57125 354.79548,581.8254 C 358.32421,582.0795 360.28463,582.22472 360.67673,582.26105 C 361.81302,582.21746 362.67706,581.82538 363.26883,581.0848 C 363.86057,580.34418 364.15826,579.51645 364.16191,578.60161 C 364.05217,576.46638 363.28414,575.33477 361.85782,575.20678 C 360.43146,575.07875 359.00511,574.8249 357.57879,574.4452 C 356.15243,574.06547 355.3844,572.43045 355.2747,569.54013 C 355.28194,568.85034 355.35455,568.18235 355.49252,567.53615 C 355.63046,566.88993 355.7902,566.22193 355.97173,565.53217 L 358.93414,556.64495 C 359.64931,554.90963 361.35559,554.76441 364.053,556.2093 C 366.75036,557.6542 370.85271,558.55454 376.36005,558.91032 C 381.86732,558.79415 387.75582,555.8027 394.02557,549.93597 C 400.29521,544.06926 403.70053,536.02431 404.24152,525.80108 C 404.21604,520.01789 402.61141,515.29112 399.42761,511.62074 C 396.24369,507.95046 391.63309,506.05539 385.59579,505.93554 C 382.48449,505.97553 379.34057,506.81052 376.164,508.44051 C 372.98737,510.07061 370.14841,512.25611 367.6471,514.99702 C 367.03716,512.40859 365.86091,510.26665 364.11834,508.57121 C 362.37573,506.87586 360.0668,505.99731 357.19155,505.93554 C 352.39403,506.22817 348.18385,508.39243 344.56098,512.4283 C 340.93812,516.46427 338.1091,520.61637 336.07392,524.88461 C 334.03875,529.15291 333.00395,531.78185 332.96952,532.77145 L 332.96952,532.77145 z"
+ id="text2502"
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Emmentaler;-inkscape-font-specification:Emmentaler" />
+ </g>
+</svg>
diff --git a/icons/chord.svg b/icons/chord.svg
new file mode 100644
index 0000000000..d96749bee3
--- /dev/null
+++ b/icons/chord.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="103.64716"
+ height="282.17834"
+ style="fill-rule:evenodd"
+ viewBox="0 0 941.057 9801.2191"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="chord.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="745"
+ inkscape:window-width="1030"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1.0051986"
+ inkscape:cx="73.669444"
+ inkscape:cy="88.293688"
+ inkscape:window-x="198"
+ inkscape:window-y="198"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:showpageshadow="false"
+ borderlayer="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 141.08917 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="103.64716 : 141.08917 : 1"
+ inkscape:persp3d-origin="51.823582 : 94.059448 : 1"
+ id="perspective8" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ d="m 544.61291,9796.4848 -149.7909,0 0,-3490.7799 0,-1786.6368 0,-1745.39 0,-331.0596 c -128.3162,103.5445 -287.7921,157.389 -472.16711,157.389 -181.8057,0 -369.9636,-47.5917 -561.1733,-145.4492 -191.2096,-94.7005 -354.5038,-224.3408 -483.0214,-385.3317 -128.5181,-160.991 -196.7084,-334.6679 -202.9776,-517.7556 12.5383,-167.3046 78.4363,-297.1436 197.5503,-391.8444 119.1141,-91.5439 266.2382,-137.8511 441.7748,-137.8511 184.9401,0 372.2564,43.9369 566.6004,129.1675 191.20971,85.2306 351.12561,207.9595 476.50891,365.7938 13.0683,16.1219 25.1985,33.3319 36.905,49.9303 l 0,-538.379 c 0,-195.71463 62.3981,-372.84693 187.7814,-527.52453 125.3834,-157.8344 285.2994,-280.5632 476.50839,-365.7938 194.345,-85.230604 382.746,-130.2530039 567.686,-130.2530039 175.537,0 322.661,47.3925999 441.775,138.9365039 119.114,94.7009 185.012,224.5398 197.55,391.8444 -6.269,183.0878 -75.545,356.7646 -204.063,517.75563 -128.518,160.991 -291.811,290.6312 -483.021,385.3317 -191.21,97.8575 -379.367,145.4492 -561.173,145.4492 -184.94099,0 -344.73499,-54.3037 -473.25289,-158.4745 l 0,569.8568 c 0.8823,16.1622 2.1709,32.4139 2.1709,48.8449 l -2.1709,5.4272 0,246.3953 c 11.9374,-16.9812 24.6289,-33.4473 37.9905,-49.9304 125.3834,-157.8343 285.2994,-280.5631 476.50839,-365.7938 194.345,-85.2306 382.746,-130.2529 567.686,-130.2529 175.537,0 322.661,47.3926 441.775,138.9365 119.114,94.7008 185.012,224.5398 197.55,391.8444 -6.269,183.0877 -75.545,356.7646 -204.063,517.7556 -128.518,160.9909 -291.811,290.6312 -483.021,385.3317 -191.21,97.8575 -379.367,144.3637 -561.173,144.3637 -184.94099,0 -344.73499,-53.2182 -473.25289,-157.389 l 0,870.5241 c 11.9374,-16.9811 24.6289,-33.4472 37.9905,-49.9303 125.3834,-157.8343 285.2994,-280.5632 476.50839,-365.7938 194.345,-85.2306 382.746,-130.253 567.686,-130.253 175.537,0 322.661,47.3927 441.775,138.9366 119.114,94.7008 185.012,224.5398 197.55,391.8444 -6.269,183.0877 -75.545,356.7646 -204.063,517.7556 -128.518,160.9909 -291.811,290.6312 -483.021,385.3317 -191.21,97.8575 -379.367,144.3637 -561.173,144.3637 -184.94099,0 -344.73499,-53.2182 -473.25289,-157.389 l 0,1389.3652 0,3490.7799 z"
+ id="path23"
+ inkscape:connector-curvature="0" /></svg> \ No newline at end of file
diff --git a/icons/eighthnote.svg b/icons/eighthnote.svg
new file mode 100644
index 0000000000..8f838513fc
--- /dev/null
+++ b/icons/eighthnote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path25"
+ d="m 4431.786,2945.0013 150.4601,0 c 37.615,239.9083 84.6338,441.9363 147.3255,606.0841 59.5571,160.9911 131.6525,299.8854 210.0172,416.6828 81.4992,116.7975 203.748,265.1618 366.7464,448.2497 162.9984,183.0879 291.5164,337.7657 391.8231,467.1899 300.9202,388.2726 451.3803,795.4853 451.3803,1218.4815 0,435.623 -181.806,965.9466 -551.687,1590.9708 l -100.3067,0 c 47.0188,-110.4841 103.4413,-236.7516 166.133,-378.8026 59.5571,-145.2076 112.8451,-274.6318 156.7292,-391.4293 40.7496,-116.7974 75.2301,-233.5949 100.3068,-350.3924 21.9421,-116.7974 34.4804,-230.4382 34.4804,-344.079 0,-179.9312 -34.4804,-359.8624 -106.5759,-539.7936 -72.0954,-183.0879 -175.5368,-350.3924 -304.0547,-505.0701 -131.6526,-154.6777 -278.9781,-277.7885 -445.1111,-375.6459 -166.133,-94.7006 -338.5352,-148.3643 -517.2065,-157.8344 l 0,3573.3709 c 0,202.028 -59.5572,385.1159 -184.9406,542.9503 -122.2488,157.8344 -282.1126,280.9452 -476.4569,366.1758 -191.2097,85.2306 -382.4193,126.2675 -573.629,126.2675 -181.806,0 -335.4006,-47.3503 -457.6494,-138.8942 -119.1143,-91.544 -181.806,-227.2816 -181.806,-404.0561 0,-186.2446 62.6917,-359.8624 184.9406,-520.8535 122.2488,-157.8344 278.978,-284.1019 467.0531,-375.6459 188.0751,-91.544 369.881,-138.8943 545.4178,-138.8943 244.4976,0 420.0344,47.3503 526.6103,145.2077 l 0,-3226.1352 0,-1654.1045 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/halfnote.svg b/icons/halfnote.svg
new file mode 100644
index 0000000000..73cb4790f9
--- /dev/null
+++ b/icons/halfnote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path19"
+ d="m -3039.4604,7768.4206 0,-4810.7925 150.4601,0 0,5366.3696 c -3.1346,170.4611 -68.9609,331.4522 -197.4789,486.1299 -128.5179,154.6777 -282.1126,280.9453 -467.0531,375.6459 -181.8059,91.544 -354.2081,142.051 -514.072,148.3643 -166.133,0 -297.7855,-22.0968 -398.0923,-63.1337 -97.1721,-41.037 -169.2675,-110.4841 -216.2863,-211.4981 -43.8842,-101.014 -68.9609,-243.065 -68.9609,-422.9962 6.2692,-192.558 72.0955,-366.1758 200.6135,-520.8535 131.6525,-151.5211 294.6509,-271.4752 488.9952,-359.8625 194.3443,-85.2305 385.554,-126.2675 570.4945,-126.2675 178.6713,0 329.1314,44.1937 451.3802,138.8943 z m -1122.1814,580.8306 c -65.8263,41.0369 -150.4601,123.1108 -253.9014,246.2216 -103.4413,123.1109 -159.8638,227.2816 -166.133,315.6688 12.5383,88.3873 68.9609,142.051 162.9984,164.1478 94.0376,0 216.2864,-31.5669 366.7465,-94.7006 147.3255,-59.9771 291.5164,-145.2077 429.4381,-252.5351 90.903,-59.977 206.8826,-167.3044 344.8044,-318.8254 137.9217,-151.5211 206.8826,-274.6319 206.8826,-369.3325 0,-88.3873 -43.8842,-142.051 -137.9218,-164.1478 -228.8247,0 -545.4178,157.8344 -952.9138,473.5032 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/mezzopiano.svg b/icons/mezzopiano.svg
new file mode 100644
index 0000000000..1eac80b766
--- /dev/null
+++ b/icons/mezzopiano.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="158.25"
+ height="78.0625"
+ id="svg2"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Music_dynamic_mezzo_piano_edit.svg"
+ inkscape:export-filename="/tmp/mezzopiano.png"
+ inkscape:export-xdpi="19.290001"
+ inkscape:export-ydpi="19.290001">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="721"
+ inkscape:window-height="826"
+ id="namedview6"
+ showgrid="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="3.4841854"
+ inkscape:cx="94.325401"
+ inkscape:cy="71.498003"
+ inkscape:window-x="628"
+ inkscape:window-y="89"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 39.03125 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="158.25 : 39.03125 : 1"
+ inkscape:persp3d-origin="79.125 : 26.020833 : 1"
+ id="perspective2819" />
+ </defs>
+ <path
+ style="font-size:174.26139832px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Emmentaler;-inkscape-font-specification:Emmentaler"
+ d="M 29.4375,0 C 23.53311,0.27758 18.40058,2.45881 14,6.53125 9.59942,10.6038 6.16376,14.90035 3.71875,19.4375 1.27375,23.97472 0.03766,27.07842 0,28.75 c 0.0218,0.95482 0.31814,1.67122 0.90625,2.125 0.58814,0.45382 1.32568,0.6599 2.21875,0.65625 1.17262,0.004 2.33024,-0.34728 3.4375,-1.0625 1.10728,-0.71516 1.93729,-1.80366 2.5,-3.28125 1.00199,-3.22377 2.51495,-6.50154 4.5625,-9.8125 2.04754,-3.31088 4.36717,-5.08233 6.9375,-5.34375 0.78053,0.0146 1.35207,0.27525 1.71875,0.8125 0.36666,0.53734 0.53487,1.27047 0.53125,2.15625 -0.029,0.87133 -0.14045,1.72249 -0.34375,2.59375 l -10.4375,30.3125 c -0.14522,0.52278 -0.21654,1.07098 -0.1875,1.59375 0.007,0.89308 0.3014,1.63063 0.875,2.21875 0.5736,0.58813 1.38468,0.88447 2.4375,0.90625 l 3.84375,0 c 1.35776,-0.0327 2.64791,-0.49281 3.875,-1.375 1.22706,-0.88218 2.07601,-2.00413 2.5625,-3.34375 l 10.28125,-30.3125 c 0.58084,-1.45212 1.57244,-2.70882 2.9375,-3.8125 1.365,-1.1036 2.76656,-1.69187 4.21875,-1.75 0.78051,0.0182 1.35205,0.29339 1.71875,0.8125 0.36664,0.51919 0.53485,1.16647 0.53125,1.96875 -3e-5,0.44294 -0.03791,0.91981 -0.125,1.40625 -0.0872,0.48651 -0.20078,0.93213 -0.375,1.375 l -8.5625,30.3125 c -0.0908,0.25413 -0.1498,0.50819 -0.21875,0.71875 -0.069,0.21057 -0.1214,0.43338 -0.125,0.6875 0.0109,0.97658 0.35739,1.76872 1,2.375 0.64256,0.60627 1.51265,0.91935 2.65625,0.9375 l 3.84375,0 C 44.57285,52.5923 45.84187,52.13219 47,51.25 c 1.15806,-0.88218 1.91675,-2.00413 2.3125,-3.34375 l 8.71875,-30.3125 c 0.50095,-1.45212 1.42123,-2.70882 2.75,-3.8125 1.32868,-1.1036 2.65891,-1.69187 4.03125,-1.75 0.86398,0.0218 1.49013,0.31817 1.875,0.90625 0.38477,0.58817 0.5697,1.32571 0.5625,2.21875 -0.0291,0.72611 -0.1405,1.5372 -0.34375,2.4375 l -6.78125,28.75 c -0.20335,0.66801 -0.31476,1.43901 -0.34375,2.28125 0.004,1.68814 0.46593,3.06856 1.40625,4.125 0.94022,1.05645 2.32284,1.59232 4.15625,1.625 6.433,-0.43202 12.525475,-2.327445 17.71875,-6.4375 13.159087,-10.444013 12.810304,-20.869283 18.55478,-32.195224 1.78864,-3.52652 3.65734,-5.196366 6.60147,-5.461026 0.5155,4e-5 0.88317,0.14491 1.09375,0.40625 0.21055,0.26143 0.31974,0.63352 0.3125,1.15625 -0.007,0.54097 -0.11868,1.2195 -0.34375,2 -0.2251,0.78057 -0.51923,1.57272 -0.875,2.375 L 92.375,63.59375 c -1.49626,3.66373 -3.74451,5.74872 -6.71875,6.25 -2.97423,0.50125 -5.72107,0.79969 -8.25,0.875 -2.52889,0.0753 -3.87095,1.30163 -4.03125,3.6875 0.004,0.91483 0.31452,1.75937 0.90625,2.5 0.59178,0.74058 1.45746,1.11266 2.59375,1.15625 0.30134,-0.0363 2.20311,-0.1834 5.75,-0.4375 3.54691,-0.25415 7.9823,-0.40122 13.25,-0.4375 5.09707,0.0363 9.40874,0.18335 12.9375,0.4375 3.52873,0.2541 5.4829,0.40117 5.875,0.4375 1.1363,-0.0436 2.00198,-0.41567 2.59375,-1.15625 0.59174,-0.74062 0.87135,-1.58516 0.875,-2.5 C 118.04652,72.27102 117.30133,71.12799 115.875,71 c -1.42636,-0.12803 -2.85492,-0.3703 -4.28125,-0.75 -1.42636,-0.37973 -2.2028,-2.01593 -2.3125,-4.90625 0.007,-0.68979 0.0808,-1.3538 0.21875,-2 0.13794,-0.64622 0.28722,-1.31024 0.46875,-2 l 2.96875,-8.90625 c 0.71517,-1.73532 2.42759,-1.85114 5.125,-0.40625 2.69736,1.4449 6.80516,2.33172 12.3125,2.6875 5.50728,-0.11617 11.38651,-3.10202 17.65625,-8.96875 C 154.3009,39.88329 157.70901,31.81698 158.25,21.59375 158.2245,15.81056 156.6213,11.10788 153.4375,7.4375 150.25358,3.76722 145.63105,1.86985 139.59375,1.75 c -3.1113,0.04 -6.26094,0.87001 -9.4375,2.5 -3.17663,1.6301 -5.99869,3.82159 -8.5,6.5625 C 121.04631,8.22407 119.86757,6.07044 118.125,4.375 116.38239,2.67965 114.06275,1.81177 111.1875,1.75 106.38998,2.04263 102.14908,4.1818543 98.5625,8.25 93.618378,13.85797 93.202903,28.579746 86.364436,37.141836 83.157329,41.157289 79.07146,43.08458 77.03125,43.375 76.6754,43.371 76.38127,43.2745 76.15625,43.03125 75.9311,42.78803 75.8197,42.43928 75.8125,42 75.7834,41.7967 75.82349,41.50257 75.96875,41.125 L 82.0625,15.15625 c 0.0907,-0.44287 0.18095,-0.88848 0.25,-1.375 0.0689,-0.48643 0.1213,-0.9633 0.125,-1.40625 C 82.3757,9.19118 81.40084,6.37134 79.53125,3.90625 77.66153,1.44126 75.24943,0.13437 72.3125,0 69.76027,0.0255 67.23676,0.63267 64.75,1.8125 62.26312,2.99242 59.96022,4.59565 57.84375,6.625 57.3173,4.67189 56.45161,3.0876 55.25,1.875 54.04829,0.6625 52.55206,0.03635 50.71875,0 48.16654,0.0218 45.64304,0.57665 43.15625,1.6875 40.6694,2.79845 38.36649,4.34267 36.25,6.28125 35.72719,4.4189 34.88266,2.89363 33.75,1.75 32.61729,0.60648 31.18007,0.03273 29.4375,0 z M 136.625,10.28125 c 1.55377,0.0436 2.69244,0.59842 3.375,1.6875 0.68247,1.08916 1.01448,2.45064 1,4.0625 0.0118,1.27148 -0.56787,4.43361 -1.75,9.5 -1.18221,5.06645 -3.04439,9.99339 -5.5625,14.75 -2.51818,4.75664 -5.78516,7.28294 -9.78125,7.625 -1.9786,-0.0363 -3.36342,-0.63119 -4.1875,-1.84375 -0.82412,-1.21255 -1.24418,-2.79684 -1.21875,-4.75 0.0236,-3.01618 0.80439,-6.95791 2.3125,-11.78125 1.50807,-4.82329 3.60393,-9.16853 6.3125,-13.0625 2.70852,-3.8939 5.87495,-5.95942 9.5,-6.1875 z"
+ id="text2502"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csscccccsccccccsccscccccccccccccccccscccccccccsccccccsscccccccccccccccscscccccccsscccccccccscccccccccccscccssc" />
+</svg>
diff --git a/icons/quarternote.svg b/icons/quarternote.svg
new file mode 100644
index 0000000000..2140b5a871
--- /dev/null
+++ b/icons/quarternote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path23"
+ d="m 830.14782,2957.6281 0,5277.9823 c 0,195.7147 -62.6917,372.4892 -188.0751,527.1669 -125.3834,157.8344 -285.24723,280.9452 -476.45692,366.1758 -194.34427,85.2306 -382.41937,129.4242 -567.35989,129.4242 -175.53676,0 -322.86225,-47.3503 -441.97648,-138.8942 -119.11423,-94.7007 -184.94053,-224.1249 -197.47883,-391.4294 6.2691,-183.0879 75.23001,-356.7057 203.748,-517.6968 128.51798,-160.9911 291.51641,-290.4153 482.72609,-385.1159 191.20969,-97.8574 379.284785,-145.2077 561.09071,-145.2077 184.94052,0 344.80435,53.6637 473.32234,157.8344 l 0,-4880.2396 150.46008,0 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/sixteenthnote.svg b/icons/sixteenthnote.svg
new file mode 100644
index 0000000000..cb5a2c4468
--- /dev/null
+++ b/icons/sixteenthnote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path27"
+ d="m 8183.8842,7837.8677 0,-4880.2396 162.9985,0 c 21.942,243.065 75.23,432.4662 162.9984,561.8904 84.6338,129.4243 225.6901,284.102 426.3035,457.7198 197.4789,176.7745 351.0736,337.7656 463.9186,482.9733 162.9984,205.1847 285.2472,404.056 373.0156,593.4573 84.6338,189.4013 128.518,407.2128 128.518,656.5911 0,192.558 -28.2113,391.4293 -87.7684,599.7707 109.7105,148.3644 162.9985,381.9593 162.9985,694.4714 0,202.028 -25.0767,400.8994 -78.3647,599.7707 -56.4225,198.8714 -134.7871,372.4892 -238.2284,517.6968 l -103.4413,0 c 197.4788,-385.1159 294.651,-722.8815 294.651,-1010.1401 0,-549.2637 -316.5931,-984.8867 -952.9139,-1306.8688 -47.0188,-25.2535 -112.8451,-66.2905 -197.4788,-126.2676 -87.7684,-56.8203 -156.7293,-104.1707 -200.6135,-132.5809 -47.0188,-28.4102 -97.1721,-56.8203 -153.5946,-75.7605 l 0,2777.8855 c 0,189.4012 -62.6917,363.0191 -184.9406,517.6968 -125.3834,154.6777 -282.1126,274.6319 -473.3223,363.0191 -191.2097,85.2306 -379.2848,129.4242 -564.2253,129.4242 -178.6713,0 -325.9968,-41.0369 -441.9765,-123.1108 -119.1142,-82.0739 -184.9405,-205.1847 -197.4788,-369.3325 0,-186.2446 62.6917,-363.0191 191.2096,-530.3236 128.518,-167.3044 291.5164,-299.8853 485.8607,-397.7427 197.4789,-97.8573 385.554,-145.2076 570.4945,-145.2076 191.2097,0 341.6698,47.3503 451.3802,145.2076 z M 8384.4977,4131.916 c 0,277.7886 72.0954,517.6968 216.2863,719.7249 147.3255,202.028 354.2081,432.4662 626.917,694.4713 269.5743,262.0051 438.8419,457.7198 507.8028,590.3007 15.6729,-82.0739 21.9421,-170.4612 21.9421,-265.1618 0,-208.3414 -40.7496,-404.0561 -125.3834,-580.8306 -84.6338,-179.9312 -194.3443,-340.9223 -325.9968,-479.8166 -131.6526,-138.8942 -275.8435,-262.0051 -429.4382,-372.4891 -156.7292,-110.4841 -319.7277,-211.4981 -492.1298,-306.1988 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/sixyfourthnote.svg b/icons/sixyfourthnote.svg
new file mode 100644
index 0000000000..02f099608c
--- /dev/null
+++ b/icons/sixyfourthnote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path31"
+ d="m 15678.677,7799.9875 0,-6212.362 0,-972.25992 150.46,0 c 0,246.22167 56.423,448.24972 172.402,602.92742 115.98,151.521 300.92,350.3924 561.091,593.4573 260.17,243.065 457.649,476.6599 589.302,700.7848 131.652,227.2815 197.479,514.5401 197.479,861.7758 0,167.3045 -21.942,366.1758 -62.692,593.4573 75.23,145.2077 112.845,331.4523 112.845,555.5771 0,214.6548 -37.615,416.6828 -112.845,606.0841 81.499,189.4013 125.383,391.4293 125.383,599.7707 0,205.1848 -43.884,391.4294 -125.383,555.5771 97.172,148.3644 147.326,359.8625 147.326,631.3376 0,385.116 -94.038,776.5453 -282.113,1180.6013 l -112.845,0 c 172.402,-492.4433 257.036,-874.4025 257.036,-1142.721 0,-205.1847 -37.615,-369.3325 -112.845,-498.7567 -78.365,-129.4242 -166.133,-230.4382 -263.305,-299.8854 -97.173,-69.4471 -266.44,-176.7745 -507.803,-321.9822 -241.363,-145.2076 -429.438,-274.6318 -570.495,-388.2726 l -12.538,2765.2587 c 0,208.3414 -62.692,391.4293 -184.94,552.4204 -125.384,160.9911 -282.113,280.9452 -473.323,366.1758 -191.209,85.2306 -379.285,129.4242 -564.225,129.4242 -188.075,0 -341.67,-44.1936 -467.053,-135.7376 -122.249,-91.5439 -184.941,-220.9681 -184.941,-394.586 0,-183.0879 65.826,-356.7057 197.479,-514.5401 128.518,-160.9911 297.786,-287.2586 498.399,-381.9592 200.614,-94.7007 398.092,-138.8943 589.302,-138.8943 184.941,0 329.131,34.7235 438.842,107.3274 z m 162.998,-4854.9862 c 0,217.8115 43.885,397.7427 128.518,542.9504 84.634,145.2076 231.96,309.3554 438.842,495.6 206.883,186.2446 369.881,337.7656 485.861,460.8764 115.98,123.1109 222.555,287.2586 319.728,495.6 18.807,-78.9172 25.076,-164.1477 25.076,-258.8484 0,-243.0649 -65.826,-473.5032 -203.748,-691.3146 -134.787,-220.9682 -307.189,-416.6829 -520.341,-587.144 -210.017,-173.6179 -435.707,-325.1389 -673.936,-457.7198 z m -12.538,1161.6612 c 0,211.4981 53.288,410.3695 156.729,590.3007 103.442,179.9312 241.363,356.7057 410.631,530.3236 172.402,170.4611 335.401,334.6089 492.13,486.1299 153.594,154.6777 260.17,293.572 313.458,413.5261 21.942,-104.1707 31.346,-195.7146 31.346,-271.4751 0,-372.4892 -141.056,-710.2548 -426.303,-1016.4536 -285.248,-303.042 -611.245,-546.107 -977.991,-732.3516 z m 12.538,-2335.9491 c 0,208.3414 40.75,385.1159 119.115,527.1669 78.364,142.0509 222.555,309.3554 426.303,501.9134 206.883,192.5579 363.612,347.2357 476.457,464.0331 109.711,116.7975 222.556,287.2586 338.535,508.2268 12.539,-82.0739 18.808,-157.8344 18.808,-233.5949 0,-293.572 -72.096,-549.2637 -216.287,-770.2319 -144.19,-224.1248 -310.323,-404.0561 -492.129,-542.9503 -181.806,-138.8943 -404.362,-290.4153 -670.802,-454.5631 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/thirtysecondnote.svg b/icons/thirtysecondnote.svg
new file mode 100644
index 0000000000..5e788e0d73
--- /dev/null
+++ b/icons/thirtysecondnote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path29"
+ d="m 11904.637,7837.8677 0,-5795.6791 153.594,0 c 18.808,211.4981 59.557,378.8025 122.249,495.6 62.692,116.7974 153.595,236.7516 282.113,356.7057 125.383,119.9542 304.054,287.2586 532.879,505.0701 410.631,397.7427 614.379,864.9325 614.379,1407.8828 0,186.2446 -25.077,369.3325 -75.23,555.5771 50.153,157.8344 75.23,328.2956 75.23,505.0701 0,138.8943 -18.808,299.8854 -62.692,479.8166 100.307,129.4242 150.46,334.6089 150.46,618.7108 0,195.7147 -25.076,397.7427 -81.499,599.7708 -53.288,202.028 -131.653,381.9592 -238.228,542.9503 l -100.307,0 c 188.075,-394.586 282.113,-735.5083 282.113,-1022.7669 0,-183.0879 -34.481,-350.3924 -106.576,-498.7567 -72.096,-151.521 -172.403,-287.2586 -300.921,-410.3695 -128.518,-119.9541 -266.439,-233.5949 -416.899,-337.7656 -150.46,-101.014 -376.151,-249.3783 -677.071,-438.7796 l 0,2847.3326 c 0,186.2446 -62.691,356.7057 -188.075,511.3834 -125.383,154.6777 -282.112,277.7886 -473.322,366.1758 -191.21,88.3873 -379.285,132.5809 -564.225,132.5809 -188.076,0 -341.67,-47.3503 -460.784,-138.8942 -119.115,-94.7007 -178.672,-233.595 -178.672,-416.6829 0,-179.9312 65.827,-347.2356 194.344,-501.9134 125.384,-154.6777 288.382,-277.7885 482.727,-372.4891 194.344,-91.544 376.15,-135.7376 548.552,-135.7376 203.748,0 366.746,47.3503 485.861,145.2076 z m 175.536,-4646.6447 c 0,186.2446 43.885,347.2357 125.384,476.6599 81.499,132.5809 225.69,293.572 429.438,482.9732 203.748,189.4013 363.612,344.079 479.591,470.3466 115.98,126.2675 225.691,296.7286 325.997,508.2267 12.539,-75.7605 18.808,-148.3643 18.808,-214.6548 0,-258.8484 -68.961,-492.4433 -210.017,-703.9414 -141.057,-214.6548 -297.786,-388.2726 -476.457,-527.1669 -175.537,-138.8943 -407.496,-303.042 -692.744,-492.4433 z m -12.538,1098.5274 c 12.538,198.8714 68.961,375.6459 169.268,533.4803 100.306,157.8344 225.69,309.3554 379.284,457.7197 153.595,145.2077 313.459,293.572 476.457,448.2497 162.999,154.6778 278.978,296.7287 347.939,422.9962 6.269,-34.7235 6.269,-85.2305 6.269,-151.521 0,-637.651 -457.649,-1209.0115 -1379.217,-1710.9249 z"
+ class="fil1 str1" /></svg> \ No newline at end of file
diff --git a/icons/wholenote.svg b/icons/wholenote.svg
new file mode 100644
index 0000000000..4bc9e8b2ac
--- /dev/null
+++ b/icons/wholenote.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xml:space="preserve"
+ width="257mm"
+ height="95mm"
+ style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd"
+ viewBox="0 0 8268 11692"
+ id="svg2"
+ sodipodi:version="0.34"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Notes.svg"
+ version="1.1"><metadata
+ id="metadata34"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ inkscape:window-height="1155"
+ inkscape:window-width="1643"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.0103972"
+ inkscape:cx="534.71016"
+ inkscape:cy="281.79409"
+ inkscape:window-x="82"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-maximized="0" /><defs
+ id="defs4"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 168.30708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="910.62994 : 168.30708 : 1"
+ inkscape:persp3d-origin="455.31497 : 112.20472 : 1"
+ id="perspective20" /><style
+ type="text/css"
+ id="style6">
+
+ .str1 {stroke:#131516;stroke-width:3}
+ .str0 {stroke:#131516;stroke-width:42}
+ .fil0 {fill:none}
+ .fil1 {fill:#131516}
+
+ </style></defs><path
+ style="fill:none;stroke:#131516;stroke-width:132.11592102"
+ id="path17"
+ d="m -11065.602,11076.63 30399.205,0"
+ class="fil0 str0" /><path
+ style="fill:#131516;stroke:#131516;stroke-width:9.4368515"
+ id="path21"
+ d="m -8448.2238,8323.9977 c 12.5384,233.5949 81.4992,429.3095 206.8826,580.8306 125.3834,151.521 275.8435,227.2815 451.3803,227.2815 134.7871,-15.7834 228.8247,-59.9771 282.1126,-135.7376 50.1534,-75.7605 75.2301,-208.3414 75.2301,-394.586 -18.8075,-239.9083 -87.7684,-435.6229 -213.1518,-583.9873 -125.3834,-148.3643 -275.8435,-224.1248 -457.6494,-224.1248 -125.3834,22.0968 -213.1518,66.2904 -266.4398,138.8943 -53.2879,69.4471 -78.3646,202.028 -78.3646,391.4293 z m -783.6462,132.5809 c 0,-192.558 68.9608,-347.2357 210.0172,-464.0332 141.0563,-119.9541 310.3239,-202.028 507.8027,-252.535 194.3443,-47.3503 376.1502,-72.6038 542.2832,-72.6038 181.806,0 373.0157,25.2535 570.4945,72.6038 200.6135,47.3503 373.0156,132.5809 520.3411,249.3784 147.3255,116.7974 225.6901,274.6318 231.9593,467.1898 0,192.5579 -68.9609,350.3923 -210.0172,470.3465 -141.0563,119.9541 -310.3239,205.1847 -504.6682,255.6917 -197.4788,50.507 -382.4193,75.7605 -557.9561,75.7605 -188.0751,0 -379.2848,-25.2535 -579.8982,-72.6038 -197.4789,-50.507 -366.7465,-132.5809 -510.9374,-252.535 -141.0563,-119.9542 -216.2863,-277.7886 -219.4209,-476.6599 z"
+ class="fil1 str1" /></svg> \ No newline at end of file