[SCM] ardour/master: Imported Upstream version 4.1~dfsg
umlaeute at users.alioth.debian.org
umlaeute at users.alioth.debian.org
Thu Sep 10 21:38:27 UTC 2015
The following commit has been merged in the master branch:
commit 6a4376519b615a470b69049808fc0ab2f52788dc
Author: IOhannes m zmölnig <zmoelnig at umlautQ.umlaeute.mur.at>
Date: Thu Sep 10 21:26:45 2015 +0200
Imported Upstream version 4.1~dfsg
diff --git a/MSVCMixbus3/MSVCMixbus3.vsprops.in b/MSVCMixbus3/MSVCMixbus3.vsprops.in
deleted file mode 100644
index c468868..0000000
--- a/MSVCMixbus3/MSVCMixbus3.vsprops.in
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="MSVCMixbus3"
- >
- <UserMacro
- Name="GlibApiVersion"
- Value="@GLIB_API_VERSION@"
- />
- <UserMacro
- Name="GdkPixbufApiVersion"
- Value="@GDK_PIXBUF_API_VERSION@"
- />
- <UserMacro
- Name="DllPrefix"
- Value="lib"
- />
- <UserMacro
- Name="DllSuffix"
- Value="@DLL_SUFFIX@"
- />
- <UserMacro
- Name="GlibDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="AtkDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="CairoDllSuffix"
- Value="-2"
- />
- <UserMacro
- Name="PangoDllSuffix"
- Value="-1.0-0"
- />
- <UserMacro
- Name="GtkDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="GdkPixbufDllSuffix"
- Value="- at GDK_PIXBUF_API_VERSION@- at LT_CURRENT_MINUS_AGE@"
- />
- <UserMacro
- Name="GlibmmDllSuffix"
- Value="-2.4-0"
- />
- <UserMacro
- Name="AtkmmDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="CairommDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="PangommDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="GtkmmDllSuffix"
- Value="-2.0-0"
- />
- <UserMacro
- Name="GtkBuildProjectFolder"
- Value="@GtkBuildProjectFolder@"
- />
- <UserMacro
- Name="GlibBuildRootFolder"
- Value="@GlibBuildRootFolder@"
- />
- <UserMacro
- Name="GdkPixbufBuildRootFolder"
- Value="@GdkPixbufBuildRootFolder@"
- />
- <UserMacro
- Name="JackBuildRootFolder"
- Value="@JackBuildRootFolder@"
- />
- <UserMacro
- Name="GenericIncludeFolder"
- Value="@GenericIncludeFolder@"
- />
- <UserMacro
- Name="GenericLibraryFolder"
- Value="@GenericLibraryFolder@"
- />
- <UserMacro
- Name="GenericWin32LibraryFolder"
- Value="@GenericWin32LibraryFolder@"
- />
- <UserMacro
- Name="GenericWin32BinaryFolder"
- Value="@GenericWin32BinaryFolder@"
- />
- <UserMacro
- Name="PackagerFolderLocal"
- Value="@PackagerFolderLocal@"
- />
- <UserMacro
- Name="Debug32TestSuiteFolder"
- Value="@Debug32TestSuiteFolder@"
- />
- <UserMacro
- Name="Release32TestSuiteFolder"
- Value="@Release32TestSuiteFolder@"
- />
- <UserMacro
- Name="Debug32TargetFolder"
- Value="@Debug32TargetFolder@"
- />
- <UserMacro
- Name="Release32TargetFolder"
- Value="@Release32TargetFolder@"
- />
- <UserMacro
- Name="Debug32PixbufLoadersFolder"
- Value="@Debug32PixbufLoadersFolder@"
- />
- <UserMacro
- Name="Release32PixbufLoadersFolder"
- Value="@Release32PixbufLoadersFolder@"
- />
- <UserMacro
- Name="TargetSxSFolder"
- Value="@TargetSxSFolder@"
- />
- <UserMacro
- Name="LibardourFolder"
- Value="mixbus3"
- />
-</VisualStudioPropertySheet>
diff --git a/cfgtool/cfgtool.cc b/cfgtool/cfgtool.cc
index 23f7369..3492f8b 100644
--- a/cfgtool/cfgtool.cc
+++ b/cfgtool/cfgtool.cc
@@ -37,6 +37,9 @@ int main (int argc, char **argv) {
cfg->remove_nodes_and_delete ("name", "updates-url");
cfg->remove_nodes_and_delete ("name", "freesound-download-dir"); // user specific
+ XMLNode* meta = state.child ("Metadata");
+ meta->remove_nodes ("user_name");
+
XMLTree tree;
tree.set_root (&state);
diff --git a/doc/monitor_modes.pdf b/doc/monitor_modes.pdf
index 97c46bb..64f2b10 100644
Binary files a/doc/monitor_modes.pdf and b/doc/monitor_modes.pdf differ
diff --git a/foo.cc b/foo.cc
new file mode 100644
index 0000000..3c2b0b8
--- /dev/null
+++ b/foo.cc
@@ -0,0 +1,6 @@
+namespace {
+int main () {
+ int i;
+ return 2 + 24 -1 ;
+}
+}
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index b081b58..086d2b8 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -10,8 +10,9 @@
<menuitem action='SaveAs'/>
#ifndef WINDOWS // can't move open files.
<menuitem action='Rename'/>
+ <menuitem action='SnapshotStay'/>
+ <menuitem action='SnapshotSwitch'/>
#endif
- <menuitem action='Snapshot'/>
<menuitem action='SaveTemplate'/>
<menu name='Metadata' action='Metadata'>
<menuitem action='EditMetadata'/>
@@ -69,6 +70,7 @@
<separator/>
<menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-punch-from-edit-range'/>
+ <menuitem action='set-session-from-edit-range'/>
<separator/>
<menuitem action='Forward'/>
@@ -128,6 +130,9 @@
<menuitem action='goto-mark-7'/>
<menuitem action='goto-mark-8'/>
<menuitem action='goto-mark-9'/>
+ <separator/>
+ <menuitem action='set-session-start-from-playhead'/>
+ <menuitem action='set-session-end-from-playhead'/>
</menu>
<separator/>
@@ -141,6 +146,7 @@
<menuitem action='ToggleAutoReturn'/>
<menuitem action='ToggleClick'/>
<menuitem action='toggle-follow-playhead'/>
+ <menuitem action='toggle-stationary-playhead'/>
<menuitem action='ToggleFollowEdits'/>
<menuitem action='panic'/>
<separator/>
@@ -162,7 +168,12 @@
<menuitem action='select-all-tracks'/>
<menuitem action='deselect-all'/>
<menuitem action='invert-selection'/>
- <menuitem action='select-all-after-edit-cursor'/>
+ <separator/>
+ <menuitem action='select-loop-range'/>
+ <menuitem action='select-punch-range'/>
+ <menuitem action='select-from-regions'/>
+ <separator/>
+ <menuitem action='select-all-after-edit-cursor'/>
<menuitem action='select-all-before-edit-cursor'/>
<menuitem action='select-all-between-cursors'/>
<menuitem action='select-all-within-cursors'/>
@@ -199,6 +210,7 @@
<menuitem action='align-regions-sync-relative'/>
</menu>
<menu action="FadeMenu">
+ <menuitem action='editor-fade-range'/>
<menuitem action='set-fade-in-length'/>
<menuitem action='toggle-region-fade-in'/>
<menuitem action='set-fade-out-length'/>
@@ -363,6 +375,7 @@
<menuitem action='track-mute-toggle'/>
<separator/>
<menuitem action='insert-time'/>
+ <menuitem action='remove-time'/>
<menuitem action="move-selected-tracks-up"/>
<menuitem action="move-selected-tracks-down"/>
<menu action='TrackHeightMenu'>
diff --git a/gtk2_ardour/ardour.sh.in b/gtk2_ardour/ardour.sh.in
index 16061f5..288c51f 100644
--- a/gtk2_ardour/ardour.sh.in
+++ b/gtk2_ardour/ardour.sh.in
@@ -48,6 +48,12 @@ export ARDOUR_CONFIG_PATH=@CONFDIR@
export ARDOUR_DLL_PATH=@LIBDIR@
#
+# NSM needs a path to this script
+#
+
+export ARDOUR_SELF="$0"
+
+#
# VAMP has its own lookup path
#
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc
index 1cb0942..c06c362 100644
--- a/gtk2_ardour/ardour_button.cc
+++ b/gtk2_ardour/ardour_button.cc
@@ -59,7 +59,7 @@ ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::El
ArdourButton::ArdourButton (Element e)
: _elements (e)
- , _icon (ArdourButton::NoIcon)
+ , _icon (Gtkmm2ext::ArdourIcon::NoIcon)
, _tweaks (Tweaks (0))
, _char_pixel_width (0)
, _char_pixel_height (0)
@@ -193,12 +193,24 @@ ArdourButton::set_alignment (const float xa, const float ya)
_yalign = ya;
}
+
+/* TODO make this a dedicated function elsewhere.
+ *
+ * Option 1:
+ * virtual ArdourButton::render_vector_icon()
+ * ArdourIconButton::render_vector_icon
+ *
+ * Option 2:
+ * ARDOUR_UI_UTILS::render_vector_icon()
+ */
void
ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
{
uint32_t text_color;
uint32_t led_color;
+ const float corner_radius = std::max(2.f, _corner_radius * ARDOUR_UI::ui_scale);
+
if (_update_colors) {
set_colors ();
}
@@ -239,14 +251,14 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
// draw edge (filling a rect underneath, rather than stroking a border on top, allows the corners to be lighter-weight.
if ((_elements & (Body|Edge)) == (Body|Edge)) {
- rounded_function (cr, 0, 0, get_width(), get_height(), _corner_radius + 1.5);
+ rounded_function (cr, 0, 0, get_width(), get_height(), corner_radius + 1.5);
cairo_set_source_rgba (cr, 0, 0, 0, 1);
cairo_fill(cr);
}
// background fill
if ((_elements & Body)==Body) {
- rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius);
+ rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, corner_radius);
if (active_state() == Gtkmm2ext::ImplicitActive && !((_elements & Indicator)==Indicator)) {
ArdourCanvas::set_source_rgba (cr, fill_inactive_color);
cairo_fill (cr);
@@ -265,7 +277,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
if ((_elements & Body)==Body) {
if (active_state() == Gtkmm2ext::ImplicitActive && !((_elements & Indicator)==Indicator)) {
cairo_set_line_width (cr, 2.0);
- rounded_function (cr, 2, 2, get_width() - 4, get_height() - 4, _corner_radius-0.5);
+ rounded_function (cr, 2, 2, get_width() - 4, get_height() - 4, corner_radius-0.5);
ArdourCanvas::set_source_rgba (cr, fill_active_color);
cairo_stroke (cr);
}
@@ -276,22 +288,15 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
if ( active_state() == Gtkmm2ext::ExplicitActive && ( !((_elements & Indicator)==Indicator) || use_custom_led_color) ) {
//concave
cairo_set_source (cr, concave_pattern);
- Gtkmm2ext::rounded_rectangle (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius);
+ Gtkmm2ext::rounded_rectangle (cr, 1, 1, get_width() - 2, get_height() - 2, corner_radius);
cairo_fill (cr);
} else {
cairo_set_source (cr, convex_pattern);
- Gtkmm2ext::rounded_rectangle (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius);
+ Gtkmm2ext::rounded_rectangle (cr, 1, 1, get_width() - 2, get_height() - 2, corner_radius);
cairo_fill (cr);
}
}
-#define VECTORICONSTROKEFILL(fillalpha) \
- cairo_set_line_width(cr, 1.5); \
- cairo_set_source_rgba (cr, 0, 0, 0, 1.0); \
- cairo_stroke_preserve(cr); \
- cairo_set_source_rgba (cr, 1, 1, 1, (fillalpha)); \
- cairo_fill(cr);
-
//Pixbuf, if any
if (_pixbuf) {
double x = rint((get_width() - _pixbuf->get_width()) * .5);
@@ -314,310 +319,9 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
cairo_fill (cr);
}
else /* VectorIcons are exclusive to Pixbuf Icons */
- /* TODO separate these into dedicated class
- * it may also be efficient to render them only once for every size (image-surface) */
- if ((_elements & VectorIcon) && _icon == RecTapeMode) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double r = std::min(10., std::min(x, y) * .6); // TODO we need a better way to limit max. radius.
- const double slit = .11 * M_PI;
- cairo_save(cr);
- cairo_translate(cr, x, y);
-
- cairo_arc (cr, 0, 0, r, 0, 2 * M_PI);
- if (active_state() == Gtkmm2ext::ExplicitActive) {
- cairo_set_source_rgba (cr, .95, .1, .1, 1.);
- } else {
- cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f
- }
- cairo_fill_preserve(cr);
- cairo_set_source_rgba (cr, .0, .0, .0, .5);
- cairo_set_line_width(cr, 1);
- cairo_stroke(cr);
-
- cairo_save(cr);
- cairo_set_source_rgba (cr, .15, .07, .07, 1.0);
-
- cairo_rotate (cr, -.5 * M_PI);
- cairo_move_to(cr, 0, 0);
- cairo_arc (cr, 0, 0, r *.85, -slit, slit);
- cairo_line_to(cr, 0, 0);
- cairo_close_path(cr);
-
- cairo_fill(cr);
- cairo_rotate (cr, 2. * M_PI / 3.);
-
- cairo_move_to(cr, 0, 0);
- cairo_arc (cr, 0, 0, r *.85, -slit, slit);
- cairo_line_to(cr, 0, 0);
- cairo_close_path(cr);
- cairo_fill(cr);
-
- cairo_rotate (cr, 2. * M_PI / 3.);
- cairo_move_to(cr, 0, 0);
- cairo_arc (cr, 0, 0, r *.85, -slit, slit);
- cairo_line_to(cr, 0, 0);
- cairo_close_path(cr);
- cairo_fill(cr);
-
- cairo_restore(cr);
-
- cairo_arc (cr, 0, 0, r * .3, 0, 2 * M_PI);
- if (active_state() == Gtkmm2ext::ExplicitActive)
- cairo_set_source_rgba (cr, .95, .1, .1, 1.);
- else
- cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f
- cairo_fill(cr);
- cairo_set_source_rgba (cr, .0, .0, .0, 1.0);
- cairo_arc (cr, 0, 0, r *.15, 0, 2 * M_PI); // hole in the middle
- cairo_fill(cr);
-
- cairo_restore(cr);
- }
- else if ((_elements & VectorIcon) && _icon == RecButton) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double r = std::min(10., std::min(x, y) * .55); // TODO we need a better way to limit max. radius.
- cairo_arc (cr, x, y, r, 0, 2 * M_PI);
- if (active_state() == Gtkmm2ext::ExplicitActive)
- cairo_set_source_rgba (cr, .95, .1, .1, 1.);
- else
- cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f
- cairo_fill_preserve(cr);
- cairo_set_source_rgba (cr, .0, .0, .0, .8);
- cairo_set_line_width(cr, 1);
- cairo_stroke(cr);
- }
- else if ((_elements & VectorIcon) && _icon == CloseCross) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double o = .5 + std::min(x, y) * .4;
- ArdourCanvas::set_source_rgba (cr, text_color);
- cairo_set_line_width(cr, 1);
- cairo_move_to(cr, x-o, y-o);
- cairo_line_to(cr, x+o, y+o);
- cairo_move_to(cr, x+o, y-o);
- cairo_line_to(cr, x-o, y+o);
- cairo_stroke(cr);
- }
- else if ((_elements & VectorIcon) && _icon == StripWidth) {
- const double x0 = get_width() * .2;
- const double x1 = get_width() * .8;
-
- const double y0 = get_height() * .25;
- const double y1= get_height() * .75;
-
- const double ym= get_height() * .5;
-
- // arrow
- const double xa0= get_height() * .39;
- const double xa1= get_height() * .61;
- const double ya0= get_height() * .35;
- const double ya1= get_height() * .65;
-
- ArdourCanvas::set_source_rgba (cr, text_color);
- cairo_set_line_width(cr, 1);
-
- // left + right
- cairo_move_to(cr, x0, y0);
- cairo_line_to(cr, x0, y1);
- cairo_move_to(cr, x1, y0);
- cairo_line_to(cr, x1, y1);
-
- // horiz center line
- cairo_move_to(cr, x0, ym);
- cairo_line_to(cr, x1, ym);
-
- // arrow left
- cairo_move_to(cr, x0, ym);
- cairo_line_to(cr, xa0, ya0);
- cairo_move_to(cr, x0, ym);
- cairo_line_to(cr, xa0, ya1);
-
- // arrow right
- cairo_move_to(cr, x1, ym);
- cairo_line_to(cr, xa1, ya0);
- cairo_move_to(cr, x1, ym);
- cairo_line_to(cr, xa1, ya1);
- cairo_stroke(cr);
- }
- else if ((_elements & VectorIcon) && _icon == DinMidi) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double r = std::min(x, y) * .75;
- ArdourCanvas::set_source_rgba (cr, text_color);
- cairo_set_line_width(cr, 1);
- cairo_arc (cr, x, y, r, 0, 2 * M_PI);
- cairo_stroke(cr);
-
- // pins equally spaced 45deg
- cairo_arc (cr, x, y * 0.5, r * .15, 0, 2 * M_PI);
- cairo_fill(cr);
- cairo_arc (cr, x * 0.5, y, r * .15, 0, 2 * M_PI);
- cairo_fill(cr);
- cairo_arc (cr, x * 1.5, y, r * .15, 0, 2 * M_PI);
- cairo_fill(cr);
- // .5 + .5 * .5 * sin(45deg), 1.5 - .5 * .5 * cos(45deg)
- cairo_arc (cr, x * 0.677, y * .677, r * .15, 0, 2 * M_PI);
- cairo_fill(cr);
- cairo_arc (cr, x * 1.323, y * .677, r * .15, 0, 2 * M_PI);
- cairo_fill(cr);
-
- // bottom notch
- cairo_arc (cr, x, y+r, r * .28, 1.05 * M_PI, 1.95 * M_PI);
- cairo_stroke(cr);
- }
- else if ((_elements & VectorIcon) && _icon == TransportStop) {
- const int wh = std::min (get_width(), get_height());
- cairo_rectangle (cr,
- (get_width() - wh) * .5 + wh * .25,
- (get_height() - wh) * .5 + wh * .25,
- wh * .5, wh * .5);
-
- VECTORICONSTROKEFILL(0.8);
- }
- else if ((_elements & VectorIcon) && _icon == TransportPlay) {
- const int wh = std::min (get_width(), get_height()) * .5;
- const double y = get_height() * .5;
- const double x = get_width() - wh;
-
- const float tri = ceil(.577 * wh); // 1/sqrt(3)
-
- cairo_move_to (cr, x + wh * .5, y);
- cairo_line_to (cr, x - wh * .5, y - tri);
- cairo_line_to (cr, x - wh * .5, y + tri);
- cairo_close_path (cr);
-
- VECTORICONSTROKEFILL(0.8);
- }
- else if ((_elements & VectorIcon) && _icon == TransportPanic) {
- const int wh = std::min (get_width(), get_height()) * .1;
- const double xc = get_width() * .5;
- const double yh = get_height();
- cairo_rectangle (cr,
- xc - wh, yh *.2,
- wh * 2, yh *.4);
- VECTORICONSTROKEFILL(0.8);
-
- cairo_arc (cr, xc, yh *.75, wh, 0, 2 * M_PI);
- VECTORICONSTROKEFILL(0.8);
- }
- else if ((_elements & VectorIcon) && (_icon == TransportStart || _icon == TransportEnd || _icon == TransportRange)) {
- // small play triangle
- int wh = std::min (get_width(), get_height());
- const double y = get_height() * .5;
- const double x = get_width() - wh * .5;
- wh *= .18;
- const float tri = ceil(.577 * wh * 2); // 1/sqrt(3)
-
- const float ln = std::min (get_width(), get_height()) * .07;
-
- if (_icon == TransportStart || _icon == TransportRange) {
- cairo_rectangle (cr,
- x - wh - ln, y - tri * 1.7,
- ln * 2, tri * 3.4);
-
- VECTORICONSTROKEFILL(1.0);
- }
-
- if (_icon == TransportEnd || _icon == TransportRange) {
- cairo_rectangle (cr,
- x + wh - ln, y - tri * 1.7,
- ln * 2, tri * 3.4);
-
- VECTORICONSTROKEFILL(1.0);
- }
-
- if (_icon == TransportStart) {
- cairo_move_to (cr, x - wh, y);
- cairo_line_to (cr, x + wh, y - tri);
- cairo_line_to (cr, x + wh, y + tri);
- } else {
- cairo_move_to (cr, x + wh, y);
- cairo_line_to (cr, x - wh, y - tri);
- cairo_line_to (cr, x - wh, y + tri);
- }
-
- cairo_close_path (cr);
- VECTORICONSTROKEFILL(1.0);
- }
- else if ((_elements & VectorIcon) && _icon == TransportLoop) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double r = std::min(x, y);
-
- cairo_arc (cr, x, y, r * .6, 0, 2 * M_PI);
- cairo_arc_negative (cr, x, y, r * .3, 2 * M_PI, 0);
-
- VECTORICONSTROKEFILL(1.0);
-#define ARCARROW(rad, ang) \
- x + (rad) * sin((ang) * 2.0 * M_PI), y + (rad) * cos((ang) * 2.0 * M_PI)
-
- cairo_move_to (cr, ARCARROW(r * .30, .72));
- cairo_line_to (cr, ARCARROW(r * .08, .72));
- cairo_line_to (cr, ARCARROW(r * .54, .60));
- cairo_line_to (cr, ARCARROW(r * .73, .72));
- cairo_line_to (cr, ARCARROW(r * .60, .72));
-
- cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
- cairo_stroke_preserve(cr);
- cairo_close_path (cr);
- cairo_set_source_rgba (cr, 1, 1, 1, 1.0);
- cairo_fill(cr);
-#undef ARCARROW
- }
- else if ((_elements & VectorIcon) && _icon == TransportMetronom) {
- const double x = get_width() * .5;
- const double y = get_height() * .5;
- const double wh = std::min(x, y);
- const double h = wh * .8;
- const double w = wh * .5;
- const double lw = w * .25;
-
- cairo_rectangle (cr,
- x - w * .7, y + h * .25,
- w * 1.4, lw);
-
- VECTORICONSTROKEFILL(1.0);
-
- cairo_move_to (cr, x - w, y + h);
- cairo_line_to (cr, x + w, y + h);
- cairo_line_to (cr, x + w * .35, y - h);
- cairo_line_to (cr, x - w * .35, y - h);
- cairo_line_to (cr, x - w, y + h);
-
- cairo_move_to (cr, x - w + lw, y + h -lw);
- cairo_line_to (cr, x - w * .35 + lw, y - h + lw);
- cairo_line_to (cr, x + w * .35 - lw, y - h + lw);
- cairo_line_to (cr, x + w - lw, y + h -lw);
- cairo_line_to (cr, x - w + lw, y + h -lw);
-
- VECTORICONSTROKEFILL(1.0);
-
- // ddx = .70 w = .75 * .5 wh = .375 wh
- // ddy = .75 h - lw = .75 * .8 wh - wh .5 * .2 = .5 wh
- // ang = (ddx/ddy):
- // -> angle = atan (ang) = atan (375 / .5) ~= 36deg
- const double dx = lw * .2; // 1 - cos(tan^-1(ang))
- const double dy = lw * .4; // 1 - sin(tan^-1(ang))
- cairo_move_to (cr, x - w * .3 , y + h * .25 + lw * .5);
- cairo_line_to (cr, x - w + dx , y - h + lw + dy);
- cairo_line_to (cr, x - w + lw , y - h + lw);
- cairo_line_to (cr, x - w * .3 + lw, y + h * .25 + lw * .5);
- cairo_close_path (cr);
-
- VECTORICONSTROKEFILL(1.0);
-
- cairo_rectangle (cr,
- x - w * .7, y + h * .25,
- w * 1.4, lw);
- cairo_fill(cr);
- }
- else if (_elements & VectorIcon) {
- // missing icon
- assert(0);
+ if (_elements & VectorIcon) {
+ Gtkmm2ext::ArdourIcon::render (cr, _icon, get_width(), get_height(), active_state(), text_color);
}
-#undef VECTORICONSTROKEFILL
const int text_margin = char_pixel_width();
// Text, if any
@@ -737,12 +441,12 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
//black ring
cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_arc (cr, 0, 0, _diameter * .5 - 1, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter * .5 - 1 * ARDOUR_UI::ui_scale, 0, 2 * M_PI);
cairo_fill(cr);
//led color
ArdourCanvas::set_source_rgba (cr, led_color);
- cairo_arc (cr, 0, 0, _diameter * .5 - 3, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter * .5 - 3 * ARDOUR_UI::ui_scale, 0, 2 * M_PI);
cairo_fill(cr);
cairo_restore (cr);
@@ -750,7 +454,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
// a transparent overlay to indicate insensitivity
if ((visual_state() & Gtkmm2ext::Insensitive)) {
- rounded_function (cr, 0, 0, get_width(), get_height(), _corner_radius);
+ rounded_function (cr, 0, 0, get_width(), get_height(), corner_radius);
uint32_t ins_color = ARDOUR_UI::config()->color ("gtk_background");
ArdourCanvas::set_source_rgb_a (cr, ins_color, 0.6);
cairo_fill (cr);
@@ -760,7 +464,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
if (ARDOUR_UI::config()->get_widget_prelight()
&& !((visual_state() & Gtkmm2ext::Insensitive))) {
if (_hovering) {
- rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius);
+ rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, corner_radius);
cairo_set_source_rgba (cr, 0.905, 0.917, 0.925, 0.2);
cairo_fill (cr);
}
@@ -768,7 +472,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
//user is currently pressing the button. dark outline helps to indicate this
if (_grabbed && !(_elements & (Inactive|Menu))) {
- rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius);
+ rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, corner_radius);
cairo_set_line_width(cr, 2);
cairo_set_source_rgba (cr, 0.1, 0.1, 0.1, .5);
cairo_stroke (cr);
@@ -778,7 +482,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
if (visual_state() & Gtkmm2ext::Selected) {
cairo_set_line_width(cr, 1);
cairo_set_source_rgba (cr, 1, 0, 0, 0.8);
- rounded_function (cr, 0.5, 0.5, get_width() - 1, get_height() - 1, _corner_radius);
+ rounded_function (cr, 0.5, 0.5, get_width() - 1, get_height() - 1, corner_radius);
cairo_stroke (cr);
}
@@ -788,7 +492,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
// (the editor is always the first receiver for KeyDown).
// It's needed for eg. the engine-dialog at startup or after closing a sesion.
if (_focused) {
- rounded_function (cr, 1.5, 1.5, get_width() - 3, get_height() - 3, _corner_radius);
+ rounded_function (cr, 1.5, 1.5, get_width() - 3, get_height() - 3, corner_radius);
cairo_set_source_rgba (cr, 0.905, 0.917, 0.925, 0.8);
double dashes = 1;
cairo_set_dash (cr, &dashes, 1, 0);
@@ -824,7 +528,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
CairoWidget::on_size_request (req);
if (_diameter == 0) {
- const float newdia = rint (ARDOUR_UI::config()->get_font_scale () / 9600.0); // 11px with 100% font-scaling
+ const float newdia = rintf (11.f * ARDOUR_UI::ui_scale);
if (_diameter != newdia) {
_pattern_height = 0;
_diameter = newdia;
@@ -858,7 +562,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
if (_elements & VectorIcon) {
assert(!(_elements & Text));
- const int wh = std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.));
+ const int wh = std::max (6., std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.)));
req->width += wh;
req->height = std::max(req->height, wh);
}
@@ -1425,9 +1129,10 @@ ArdourButton::add_elements (Element e)
}
void
-ArdourButton::set_icon (Icon i)
+ArdourButton::set_icon (Gtkmm2ext::ArdourIcon::Icon i)
{
_icon = i;
+ _elements = (ArdourButton::Element) ((_elements | ArdourButton::VectorIcon) & ~ArdourButton::Text);
CairoWidget::set_dirty ();
}
diff --git a/gtk2_ardour/ardour_button.h b/gtk2_ardour/ardour_button.h
index 8f24d43..9df1089 100644
--- a/gtk2_ardour/ardour_button.h
+++ b/gtk2_ardour/ardour_button.h
@@ -25,6 +25,7 @@
#include <gtkmm/action.h>
#include "pbd/signals.h"
+#include "gtkmm2ext/ardour_icon.h"
#include "gtkmm2ext/binding_proxy.h"
#include "gtkmm2ext/activatable.h"
#include "gtkmm2ext/cairo_widget.h"
@@ -43,23 +44,6 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
VectorIcon = 0x80, // tentative, see commit message
};
- enum Icon {
- NoIcon,
- RecButton,
- RecTapeMode,
- CloseCross,
- StripWidth,
- DinMidi,
- TransportStop,
- TransportPlay,
- TransportLoop,
- TransportRange,
- TransportStart,
- TransportEnd,
- TransportPanic,
- TransportMetronom,
- };
-
static Element default_elements;
static Element led_default_elements;
static Element just_led_default_elements;
@@ -88,8 +72,8 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
void set_elements (Element);
void add_elements (Element);
- Icon icon() const { return _icon; }
- void set_icon (Icon);
+ Gtkmm2ext::ArdourIcon::Icon icon() const { return _icon; }
+ void set_icon (Gtkmm2ext::ArdourIcon::Icon);
void set_corner_radius (float);
@@ -149,7 +133,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
Glib::RefPtr<Gdk::Pixbuf> _pixbuf;
std::string _text;
Element _elements;
- Icon _icon;
+ Gtkmm2ext::ArdourIcon::Icon _icon;
Tweaks _tweaks;
BindingProxy binding_proxy;
diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc
index cd1bfef..6ad1f7c 100644
--- a/gtk2_ardour/ardour_dropdown.cc
+++ b/gtk2_ardour/ardour_dropdown.cc
@@ -63,9 +63,68 @@ ArdourDropdown::~ArdourDropdown ()
}
bool
-ArdourDropdown::on_button_press_event (GdkEventButton*)
+ArdourDropdown::on_button_press_event (GdkEventButton* ev)
{
- _menu.popup (1, gtk_get_current_event_time());
+ if (ev->type == GDK_BUTTON_PRESS) {
+ _menu.popup (1, gtk_get_current_event_time());
+ }
+ return true;
+}
+
+bool
+ArdourDropdown::on_scroll_event (GdkEventScroll* ev)
+{
+ using namespace Menu_Helpers;
+
+ const MenuItem * current_active = _menu.get_active();
+ const MenuList& items = _menu.items ();
+ int c = 0;
+
+ if (!current_active) {
+ return true;
+ }
+
+ /* work around another gtkmm API clusterfuck
+ * const MenuItem* get_active () const
+ * void set_active (guint index)
+ *
+ * also MenuList.activate_item does not actually
+ * set it as active in the menu.
+ *
+ */
+
+ switch (ev->direction) {
+ case GDK_SCROLL_UP:
+
+ for (MenuList::const_reverse_iterator i = items.rbegin(); i != items.rend(); ++i, ++c) {
+ if ( &(*i) != current_active) {
+ continue;
+ }
+ if (++i != items.rend()) {
+ c = items.size() - 2 - c;
+ assert(c >= 0);
+ _menu.set_active(c);
+ _menu.activate_item(*i);
+ }
+ break;
+ }
+ break;
+ case GDK_SCROLL_DOWN:
+ for (MenuList::const_iterator i = items.begin(); i != items.end(); ++i, ++c) {
+ if ( &(*i) != current_active) {
+ continue;
+ }
+ if (++i != items.end()) {
+ assert(c + 1 < (int) items.size());
+ _menu.set_active(c + 1);
+ _menu.activate_item(*i);
+ }
+ break;
+ }
+ break;
+ default:
+ break;
+ }
return true;
}
diff --git a/gtk2_ardour/ardour_dropdown.h b/gtk2_ardour/ardour_dropdown.h
index b27b930..c1cf119 100644
--- a/gtk2_ardour/ardour_dropdown.h
+++ b/gtk2_ardour/ardour_dropdown.h
@@ -37,6 +37,7 @@ class ArdourDropdown : public ArdourButton
virtual ~ArdourDropdown ();
bool on_button_press_event (GdkEventButton*);
+ bool on_scroll_event (GdkEventScroll*);
void clear_items ();
void AddMenuElem (Gtk::Menu_Helpers::MenuElem e);
diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc
index 1cad9f4..0397b85 100644
--- a/gtk2_ardour/ardour_knob.cc
+++ b/gtk2_ardour/ardour_knob.cc
@@ -37,6 +37,7 @@
#include "ardour_knob.h"
#include "ardour_ui.h"
#include "global_signals.h"
+#include "timers.h"
#include "canvas/colors.h"
#include "canvas/utils.h"
@@ -54,11 +55,21 @@ using namespace std;
ArdourKnob::Element ArdourKnob::default_elements = ArdourKnob::Element (ArdourKnob::Arc);
-ArdourKnob::ArdourKnob (Element e)
+ArdourKnob::ArdourKnob (Element e, Flags flags)
: _elements (e)
, _hovering (false)
+ , _grabbed_x (0)
+ , _grabbed_y (0)
+ , _val (0)
+ , _normal (0)
+ , _dead_zone_delta (0)
+ , _flags (flags)
+ , _tooltip (this)
{
ARDOUR_UI_UTILS::ColorsChanged.connect (sigc::mem_fun (*this, &ArdourKnob::color_handler));
+
+ // watch automation :(
+ Timers::rapid_connect (sigc::mem_fun (*this, &ArdourKnob::controllable_changed));
}
ArdourKnob::~ArdourKnob()
@@ -76,9 +87,16 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
const float scale = min(width, height);
const float pointer_thickness = 3.0 * (scale/80); //(if the knob is 80 pixels wide, we want a 3-pix line on it)
- float start_angle = ((180 - 65) * G_PI) / 180;
- float end_angle = ((360 + 65) * G_PI) / 180;
- float value_angle = start_angle + (_val * (end_angle - start_angle));
+ const float start_angle = ((180 - 65) * G_PI) / 180;
+ const float end_angle = ((360 + 65) * G_PI) / 180;
+
+ float zero = 0;
+ if (_flags & ArcToZero) {
+ zero = _normal;
+ }
+
+ const float value_angle = start_angle + (_val * (end_angle - start_angle));
+ const float zero_angle = start_angle + (zero * (end_angle - start_angle));
float value_x = cos (value_angle);
float value_y = sin (value_angle);
@@ -99,18 +117,13 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
bool flat = _flat_buttons;
if ( arc ) {
- center_radius = scale*0.30;
+ center_radius = scale*0.33;
- float inner_progress_radius = scale*0.30;
+ float inner_progress_radius = scale*0.38;
float outer_progress_radius = scale*0.48;
float progress_width = (outer_progress_radius-inner_progress_radius);
float progress_radius = inner_progress_radius + progress_width/2.0;
- float start_angle_x = cos (start_angle);
- float start_angle_y = sin (start_angle);
- float end_angle_x = cos (end_angle);
- float end_angle_y = sin (end_angle);
-
//dark arc background
cairo_set_source_rgb (cr, 0.3, 0.3, 0.3 );
cairo_set_line_width (cr, progress_width);
@@ -126,14 +139,20 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
ArdourCanvas::color_to_rgba( arc_end_color, red_end, green_end, blue_end, unused );
//vary the arc color over the travel of the knob
- float r = (1.0-_val) * red_end + _val * red_start;
- float g = (1.0-_val) * green_end + _val * green_start;
- float b = (1.0-_val) * blue_end + _val * blue_start;
+ float intensity = fabsf (_val - zero) / std::max(zero, (1.f - zero));
+ const float intensity_inv = 1.0 - intensity;
+ float r = intensity_inv * red_end + intensity * red_start;
+ float g = intensity_inv * green_end + intensity * green_start;
+ float b = intensity_inv * blue_end + intensity * blue_start;
//draw the arc
cairo_set_source_rgb (cr, r,g,b);
cairo_set_line_width (cr, progress_width);
- cairo_arc (cr, 0, 0, progress_radius, start_angle, value_angle);
+ if (zero_angle > value_angle) {
+ cairo_arc (cr, 0, 0, progress_radius, value_angle, zero_angle);
+ } else {
+ cairo_arc (cr, 0, 0, progress_radius, zero_angle, value_angle);
+ }
cairo_stroke (cr);
//shade the arc
@@ -147,8 +166,13 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
cairo_fill (cr);
cairo_pattern_destroy (shade_pattern);
}
-
- //black border
+
+#if 0 //black border
+ const float start_angle_x = cos (start_angle);
+ const float start_angle_y = sin (start_angle);
+ const float end_angle_x = cos (end_angle);
+ const float end_angle_y = sin (end_angle);
+
cairo_set_source_rgb (cr, 0, 0, 0 );
cairo_set_line_width (cr, border_width);
cairo_move_to (cr, (outer_progress_radius * start_angle_x), (outer_progress_radius * start_angle_y));
@@ -159,6 +183,7 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
cairo_stroke (cr);
cairo_arc (cr, 0, 0, outer_progress_radius, start_angle, end_angle);
cairo_stroke (cr);
+#endif
}
if (!flat) {
@@ -239,7 +264,7 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
cairo_stroke (cr);
//highlight if grabbed or if mouse is hovering over me
- if ( _grabbed || (_hovering && ARDOUR_UI::config()->get_widget_prelight() ) ) {
+ if (_tooltip.dragging() || (_hovering && ARDOUR_UI::config()->get_widget_prelight() ) ) {
cairo_set_source_rgba (cr, 1,1,1, 0.12 );
cairo_arc (cr, 0, 0, center_radius, 0, 2.0*G_PI);
cairo_fill (cr);
@@ -251,9 +276,16 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
void
ArdourKnob::on_size_request (Gtk::Requisition* req)
{
- CairoWidget::on_size_request (req);
-
- //perhaps render the knob base into a cached image here?
+ // see ardour-button VectorIcon size, use font scaling as default
+ CairoWidget::on_size_request (req); // allow to override
+
+ // we're square
+ if (req->width < req->height) {
+ req->width = req->height;
+ }
+ if (req->height < req->width) {
+ req->height = req->width;
+ }
}
bool
@@ -275,7 +307,7 @@ ArdourKnob::on_scroll_event (GdkEventScroll* ev)
float val = c->get_interface();
if ( ev->direction == GDK_SCROLL_UP )
- val += scale;
+ val += scale;
else
val -= scale;
@@ -286,10 +318,22 @@ ArdourKnob::on_scroll_event (GdkEventScroll* ev)
}
bool
-ArdourKnob::on_motion_notify_event (GdkEventMotion *ev)
+ArdourKnob::on_motion_notify_event (GdkEventMotion *ev)
{
- //scale the adjustment based on keyboard modifiers
- float scale = 0.0025;
+ if (!(ev->state & Gdk::BUTTON1_MASK)) {
+ return true;
+ }
+
+ boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable();
+ if (!c) {
+ return true;
+ }
+
+
+ //scale the adjustment based on keyboard modifiers & GUI size
+ const float ui_scale = max (1.f, ARDOUR_UI::ui_scale);
+ float scale = 0.0025 / ui_scale;
+
if (ev->state & Keyboard::GainFineScaleModifier) {
if (ev->state & Keyboard::GainExtraFineScaleModifier) {
scale *= 0.01;
@@ -299,53 +343,100 @@ ArdourKnob::on_motion_notify_event (GdkEventMotion *ev)
}
//calculate the travel of the mouse
- int y_delta = 0;
- if (ev->state & Gdk::BUTTON1_MASK) {
- y_delta = _grabbed_y - ev->y;
- _grabbed_y = ev->y;
- if (y_delta == 0) return TRUE;
+ int delta = (_grabbed_y - ev->y) - (_grabbed_x - ev->x);
+ if (delta == 0) {
+ return true;
}
- //step the value of the controllable
- boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable();
- if (c) {
- float val = c->get_interface();
- val += y_delta * scale;
- c->set_interface(val);
+ _grabbed_x = ev->x;
+ _grabbed_y = ev->y;
+ float val = c->get_interface();
+
+ if (_flags & Detent) {
+ const float px_deadzone = 42.f * ui_scale;
+
+ if ((val - _normal) * (val - _normal + delta * scale) < 0) {
+ /* detent */
+ const int tozero = (_normal - val) * scale;
+ int remain = delta - tozero;
+ if (abs (remain) > px_deadzone) {
+ /* slow down passing the default value */
+ remain += (remain > 0) ? px_deadzone * -.5 : px_deadzone * .5;
+ delta = tozero + remain;
+ _dead_zone_delta = 0;
+ } else {
+ c->set_value (c->normal());
+ _dead_zone_delta = remain / px_deadzone;
+ return true;
+ }
+ }
+
+ if (fabsf (rintf((val - _normal) / scale) + _dead_zone_delta) < 1) {
+ c->set_value (c->normal());
+ _dead_zone_delta += delta / px_deadzone;
+ return true;
+ }
+
+ _dead_zone_delta = 0;
}
+ val += delta * scale;
+ c->set_interface(val);
+
return true;
}
bool
ArdourKnob::on_button_press_event (GdkEventButton *ev)
{
+ _grabbed_x = ev->x;
_grabbed_y = ev->y;
- _grabbed = true;
-
- set_active_state (Gtkmm2ext::ExplicitActive);
+ _dead_zone_delta = 0;
+
+ if (ev->type != GDK_BUTTON_PRESS) {
+ if (_grabbed) {
+ remove_modal_grab();
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ }
+ return true;
+ }
if (binding_proxy.button_press_handler (ev)) {
return true;
}
- return false;
+ if (ev->button != 1 && ev->button != 2) {
+ return false;
+ }
+
+ set_active_state (Gtkmm2ext::ExplicitActive);
+ _tooltip.start_drag();
+ add_modal_grab();
+ _grabbed = true;
+ gdk_pointer_grab(ev->window,false,
+ GdkEventMask( Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK |Gdk::BUTTON_RELEASE_MASK),
+ NULL,NULL,ev->time);
+ return true;
}
bool
ArdourKnob::on_button_release_event (GdkEventButton *ev)
{
- if ( (_grabbed_y == ev->y) && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { //no move, shift-click sets to default
+ _tooltip.stop_drag();
+ _grabbed = false;
+ remove_modal_grab();
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+
+ if ( (_grabbed_y == ev->y && _grabbed_x == ev->x) && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { //no move, shift-click sets to default
boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable();
if (!c) return false;
c->set_value (c->normal());
- return true;
+ return true;
}
- _grabbed = false;
unset_active_state ();
- return false;
+ return true;
}
void
@@ -363,7 +454,7 @@ ArdourKnob::on_size_allocate (Allocation& alloc)
void
ArdourKnob::set_controllable (boost::shared_ptr<Controllable> c)
{
- watch_connection.disconnect (); //stop watching the old controllable
+ watch_connection.disconnect (); //stop watching the old controllable
if (!c) return;
@@ -371,16 +462,28 @@ ArdourKnob::set_controllable (boost::shared_ptr<Controllable> c)
c->Changed.connect (watch_connection, invalidator(*this), boost::bind (&ArdourKnob::controllable_changed, this), gui_context());
+ _normal = c->internal_to_interface(c->normal());
+
controllable_changed();
}
void
ArdourKnob::controllable_changed ()
{
- _val = binding_proxy.get_controllable()->get_interface(); //% of knob travel
+ boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable();
+ if (!c) return;
+
+ float val = c->get_interface();
+ val = min( max(0.0f, val), 1.0f); // clamp
- _val = min( max(0.0f, _val), 1.0f); //range check
+ if (val == _val) {
+ return;
+ }
+ _val = val;
+ if (!_tooltip_prefix.empty()) {
+ _tooltip.set_tip (_tooltip_prefix + c->get_user_string());
+ }
set_dirty();
}
@@ -457,3 +560,28 @@ ArdourKnob::add_elements (Element e)
{
_elements = (ArdourKnob::Element) (_elements | e);
}
+
+
+KnobPersistentTooltip::KnobPersistentTooltip (Gtk::Widget* w)
+ : PersistentTooltip (w, 3)
+ , _dragging (false)
+{
+}
+
+void
+KnobPersistentTooltip::start_drag ()
+{
+ _dragging = true;
+}
+
+void
+KnobPersistentTooltip::stop_drag ()
+{
+ _dragging = false;
+}
+
+bool
+KnobPersistentTooltip::dragging () const
+{
+ return _dragging;
+}
diff --git a/gtk2_ardour/ardour_knob.h b/gtk2_ardour/ardour_knob.h
index 3a9c2bd..29cfb5e 100644
--- a/gtk2_ardour/ardour_knob.h
+++ b/gtk2_ardour/ardour_knob.h
@@ -28,6 +28,21 @@
#include "gtkmm2ext/binding_proxy.h"
#include "gtkmm2ext/activatable.h"
#include "gtkmm2ext/cairo_widget.h"
+#include "gtkmm2ext/persistent_tooltip.h"
+
+class KnobPersistentTooltip : public Gtkmm2ext::PersistentTooltip
+{
+public:
+ KnobPersistentTooltip (Gtk::Widget* w);
+
+ void start_drag ();
+ void stop_drag ();
+ bool dragging () const;
+
+private:
+ bool _dragging;
+};
+
class ArdourKnob : public CairoWidget , public Gtkmm2ext::Activatable
{
@@ -42,7 +57,13 @@ public:
unused5 = 0x20,
};
- ArdourKnob (Element e = default_elements);
+ enum Flags {
+ NoFlags = 0,
+ Detent = 0x1,
+ ArcToZero = 0x2,
+ };
+
+ ArdourKnob (Element e = default_elements, Flags flags = NoFlags);
virtual ~ArdourKnob ();
void set_active_state (Gtkmm2ext::ActiveState);
@@ -53,6 +74,8 @@ public:
void add_elements (Element);
static Element default_elements;
+ void set_tooltip_prefix (std::string pfx) { _tooltip_prefix = pfx; }
+
boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
void set_controllable (boost::shared_ptr<PBD::Controllable> c);
@@ -84,13 +107,21 @@ public:
BindingProxy binding_proxy;
bool _hovering;
+ float _grabbed_x;
float _grabbed_y;
- float _val; //percent of knob travel
+ float _val; // current value [0..1]
+ float _normal; // default value, arc
+ float _dead_zone_delta;
+
+ Flags _flags;
void action_sensitivity_changed ();
void action_visibility_changed ();
void action_tooltip_changed ();
+
+ std::string _tooltip_prefix;
+ KnobPersistentTooltip _tooltip;
};
#endif /* __gtk2_ardour_ardour_knob_h__ */
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 0b978a9..e371d58 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -97,6 +97,7 @@
typedef uint64_t microseconds_t;
#include "about.h"
+#include "editing.h"
#include "actions.h"
#include "add_route_dialog.h"
#include "ambiguous_file_dialog.h"
@@ -128,6 +129,7 @@ typedef uint64_t microseconds_t;
#include "rc_option_editor.h"
#include "route_time_axis.h"
#include "route_params_ui.h"
+#include "save_as_dialog.h"
#include "session_dialog.h"
#include "session_metadata_dialog.h"
#include "session_option_editor.h"
@@ -151,12 +153,14 @@ using namespace PBD;
using namespace Gtkmm2ext;
using namespace Gtk;
using namespace std;
+using namespace Editing;
ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
sigc::signal<void, framepos_t, bool, framepos_t> ARDOUR_UI::Clock;
sigc::signal<void> ARDOUR_UI::CloseAllDialogs;
+float ARDOUR_UI::ui_scale = 1.0;
static bool
ask_about_configuration_copy (string const & old_dir, string const & new_dir, int version)
@@ -177,30 +181,23 @@ ask_about_configuration_copy (string const & old_dir, string const & new_dir, in
return (msg.run() == Gtk::RESPONSE_YES);
}
-ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
+ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfiguration* uic)
: Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp)
- , ui_config (new UIConfiguration)
+ , ui_config (uic->post_gui_init ())
+ , session_loaded (false)
, gui_object_state (new GUIObjectState)
-
- , primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true))
- , secondary_clock (new MainClock (X_("secondary"), false, X_("secondary"), true, true, false, false, true))
-
- /* big clock */
-
+ , primary_clock (new MainClock (X_("primary"), X_("transport"), true ))
+ , secondary_clock (new MainClock (X_("secondary"), X_("secondary"), false))
, big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false))
, video_timeline(0)
-
- /* start of private members */
+ , ignore_dual_punch (false)
, editor (0)
, mixer (0)
, nsm (0)
, _was_dirty (false)
, _mixer_on_top (false)
, first_time_engine_run (true)
-
- /* transport */
-
, roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll))
, stop_controllable (new TransportControllable ("transport stop", *this, TransportControllable::Stop))
, goto_start_controllable (new TransportControllable ("transport goto start", *this, TransportControllable::GotoStart))
@@ -208,19 +205,21 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, auto_loop_controllable (new TransportControllable ("transport auto loop", *this, TransportControllable::AutoLoop))
, play_selection_controllable (new TransportControllable ("transport play selection", *this, TransportControllable::PlaySelection))
, rec_controllable (new TransportControllable ("transport rec-enable", *this, TransportControllable::RecordEnable))
-
, auto_return_button (ArdourButton::led_default_elements)
, follow_edits_button (ArdourButton::led_default_elements)
, auto_input_button (ArdourButton::led_default_elements)
-
, auditioning_alert_button (_("Audition"))
, solo_alert_button (_("Solo"))
, feedback_alert_button (_("Feedback"))
, error_alert_button ( ArdourButton::just_led_default_elements )
-
, editor_meter(0)
, editor_meter_peak_display()
-
+ , open_session_selector (0)
+ , _numpad_locate_happening (false)
+ , _session_is_new (false)
+ , last_key_press_time (0)
+ , save_as_dialog (0)
+ , meterbridge (0)
, speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
, key_editor (X_("key-editor"), _("Key Bindings"))
, rc_option_editor (X_("rc-options-editor"), _("Preferences"))
@@ -236,12 +235,17 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, big_clock_window (X_("big-clock"), _("Big Clock"), boost::bind (&ARDOUR_UI::create_big_clock_window, this))
, audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO))
, midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI))
-
+ , video_server_process (0)
+ , splash (0)
+ , have_configure_timeout (false)
+ , last_configure_time (0)
+ , last_peak_grab (0)
+ , have_disk_speed_dialog_displayed (false)
, _status_bar_visibility (X_("status-bar"))
, _feedback_exists (false)
, _log_not_acknowledged (LogLevelNone)
{
- Gtkmm2ext::init(localedir);
+ Gtkmm2ext::init (localedir);
if (ARDOUR::handle_old_configuration_files (boost::bind (ask_about_configuration_copy, _1, _2, _3))) {
MessageDialog msg (string_compose (_("Your configuration files were copied. You can now restart %1."), PROGRAM_NAME), true);
@@ -249,12 +253,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
/* configuration was modified, exit immediately */
_exit (0);
}
-
- splash = 0;
-
- _numpad_locate_happening = false;
-
if (theArdourUI == 0) {
theArdourUI = this;
}
@@ -263,20 +262,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
ui_config->map_parameters (pc);
- editor = 0;
- mixer = 0;
- meterbridge = 0;
- editor = 0;
- _session_is_new = false;
- session_selector_window = 0;
- last_key_press_time = 0;
- video_server_process = 0;
- open_session_selector = 0;
- have_configure_timeout = false;
- have_disk_speed_dialog_displayed = false;
- session_loaded = false;
- ignore_dual_punch = false;
-
roll_button.set_controllable (roll_controllable);
stop_button.set_controllable (stop_controllable);
goto_start_button.set_controllable (goto_start_controllable);
@@ -294,9 +279,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
rec_button.set_name ("transport recenable button");
midi_panic_button.set_name ("transport button");
- last_configure_time= 0;
- last_peak_grab = 0;
-
ARDOUR::Diskstream::DiskOverrun.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::disk_overrun_handler, this), gui_context());
ARDOUR::Diskstream::DiskUnderrun.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::disk_underrun_handler, this), gui_context());
@@ -452,8 +434,12 @@ ARDOUR_UI::engine_running ()
first_time_engine_run = false;
}
+ if (_session) {
+ _session->reset_xrun_count ();
+ }
update_disk_space ();
update_cpu_load ();
+ update_xrun_count ();
update_sample_rate (AudioEngine::instance()->sample_rate());
update_timecode_format ();
}
@@ -817,7 +803,16 @@ ARDOUR_UI::starting ()
if ((nsm_url = g_getenv ("NSM_URL")) != 0) {
nsm = new NSM_Client;
if (!nsm->init (nsm_url)) {
- nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3");
+ /* the ardour executable may have different names:
+ *
+ * waf's obj.target for distro versions: eg ardour4, ardourvst4
+ * Ardour4, Mixbus3 for bundled versions + full path on OSX & windows
+ * argv[0] does not apply since we need the wrapper-script (not the binary itself)
+ *
+ * The wrapper startup script should set the environment variable 'ARDOUR_SELF'
+ */
+ const char *process_name = g_getenv ("ARDOUR_SELF");
+ nsm->announce (PROGRAM_NAME, ":dirty:", process_name ? process_name : "ardour4");
unsigned int i = 0;
// wait for announce reply from nsm server
@@ -1191,6 +1186,7 @@ void
ARDOUR_UI::every_second ()
{
update_cpu_load ();
+ update_xrun_count ();
update_buffer_load ();
update_disk_space ();
update_timecode_format ();
@@ -1352,6 +1348,29 @@ ARDOUR_UI::update_format ()
}
void
+ARDOUR_UI::update_xrun_count ()
+{
+ char buf[64];
+
+ /* If this text is changed, the set_size_request_to_display_given_text call in ARDOUR_UI::resize_text_widgets
+ should also be changed.
+ */
+
+ if (_session) {
+ const unsigned int x = _session->get_xrun_count ();
+ if (x > 9999) {
+ snprintf (buf, sizeof (buf), _("X: <span foreground=\"%s\">>10K</span>"), X_("red"));
+ } else {
+ snprintf (buf, sizeof (buf), _("X: <span foreground=\"%s\">%u</span>"), x > 0 ? X_("red") : X_("green"), x);
+ }
+ } else {
+ snprintf (buf, sizeof (buf), _("X: <span foreground=\"%s\">?</span>"), X_("yellow"));
+ }
+ xrun_label.set_markup (buf);
+ set_tip (xrun_label, _("Audio dropouts. Shift+click to reset"));
+}
+
+void
ARDOUR_UI::update_cpu_load ()
{
char buf[64];
@@ -2084,7 +2103,6 @@ ARDOUR_UI::get_smart_mode() const
void
ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
{
-
if (!_session) {
return;
}
@@ -2347,7 +2365,7 @@ ARDOUR_UI::update_clocks ()
if (!_session) return;
if (editor && !editor->dragging_playhead()) {
- Clock (_session->audible_frame(), false, editor->get_preferred_edit_position()); /* EMIT_SIGNAL */
+ Clock (_session->audible_frame(), false, editor->get_preferred_edit_position (EDIT_IGNORE_PHEAD)); /* EMIT_SIGNAL */
}
}
@@ -2367,6 +2385,103 @@ ARDOUR_UI::stop_clocking ()
clock_signal_connection.disconnect ();
}
+bool
+ARDOUR_UI::save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar)
+{
+ char buf[256];
+
+ snprintf (buf, sizeof (buf), _("Copied %" PRId64 " of %" PRId64), cnt, total);
+
+ label->set_text (buf);
+ bar->set_fraction (fraction);
+
+ /* process events, redraws, etc. */
+
+ while (gtk_events_pending()) {
+ gtk_main_iteration ();
+ }
+
+ return true; /* continue with save-as */
+}
+
+void
+ARDOUR_UI::save_session_as ()
+{
+ if (!_session) {
+ return;
+ }
+
+ if (!save_as_dialog) {
+ save_as_dialog = new SaveAsDialog;
+ } else {
+ save_as_dialog->clear_name ();
+ }
+
+ int response = save_as_dialog->run ();
+
+ save_as_dialog->hide ();
+
+ switch (response) {
+ case Gtk::RESPONSE_OK:
+ break;
+ default:
+ return;
+ }
+
+
+ Session::SaveAs sa;
+
+ sa.new_parent_folder = save_as_dialog->new_parent_folder ();
+ sa.new_name = save_as_dialog->new_name ();
+ sa.switch_to = save_as_dialog->switch_to();
+ sa.copy_media = save_as_dialog->copy_media();
+ sa.copy_external = save_as_dialog->copy_external();
+ sa.include_media = save_as_dialog->include_media ();
+
+ /* Only bother with a progress dialog if we're going to copy
+ media into the save-as target. Without that choice, this
+ will be very fast because we're only talking about a few kB's to
+ perhaps a couple of MB's of data.
+ */
+
+ ArdourDialog progress_dialog (_("Save As"), true);
+
+ if (sa.include_media && sa.copy_media) {
+
+ Gtk::Label label;
+ Gtk::ProgressBar progress_bar;
+
+ progress_dialog.get_vbox()->pack_start (label);
+ progress_dialog.get_vbox()->pack_start (progress_bar);
+ label.show ();
+ progress_bar.show ();
+
+ /* this signal will be emitted from within this, the calling thread,
+ * after every file is copied. It provides information on percentage
+ * complete (in terms of total data to copy), the number of files
+ * copied so far, and the total number to copy.
+ */
+
+ ScopedConnection c;
+
+ sa.Progress.connect_same_thread (c, boost::bind (&ARDOUR_UI::save_as_progress_update, this, _1, _2, _3, &label, &progress_bar));
+
+ progress_dialog.show_all ();
+ progress_dialog.present ();
+ }
+
+ if (_session->save_as (sa)) {
+ /* ERROR MESSAGE */
+ MessageDialog msg (string_compose (_("Save As failed: %1"), sa.failure_message));
+ msg.run ();
+ }
+
+ if (!sa.include_media) {
+ unload_session (false);
+ load_session (sa.final_session_folder_name, sa.new_name);
+ }
+}
+
/** Ask the user for the name of a new snapshot and then take it.
*/
@@ -4001,7 +4116,10 @@ ARDOUR_UI::keyboard_settings () const
void
ARDOUR_UI::create_xrun_marker (framepos_t where)
{
- editor->mouse_add_new_marker (where, false, true);
+ if (_session) {
+ Location *location = new Location (*_session, where, where, _("xrun"), Location::IsMark);
+ _session->locations()->add (location);
+ }
}
void
@@ -4323,13 +4441,13 @@ void
ARDOUR_UI::update_transport_clocks (framepos_t pos)
{
if (ui_config->get_primary_clock_delta_edit_cursor()) {
- primary_clock->set (pos, false, editor->get_preferred_edit_position());
+ primary_clock->set (pos, false, editor->get_preferred_edit_position (EDIT_IGNORE_PHEAD));
} else {
primary_clock->set (pos);
}
if (ui_config->get_secondary_clock_delta_edit_cursor()) {
- secondary_clock->set (pos, false, editor->get_preferred_edit_position());
+ secondary_clock->set (pos, false, editor->get_preferred_edit_position (EDIT_IGNORE_PHEAD));
} else {
secondary_clock->set (pos);
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index e80761c..9a3e7e9 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -102,6 +102,7 @@ class Mixer_UI;
class PublicEditor;
class RCOptionEditor;
class RouteParams_UI;
+class SaveAsDialog;
class SessionDialog;
class SessionOptionEditor;
class ShuttleControl;
@@ -126,6 +127,10 @@ namespace Gtkmm2ext {
class TearOff;
}
+namespace Gtk {
+ class ProgressBar;
+}
+
class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
{
private:
@@ -135,7 +140,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
UIConfiguration* ui_config;
public:
- ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
+ ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfiguration*);
~ARDOUR_UI();
bool run_startup (bool should_be_new, std::string load_template);
@@ -181,8 +186,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
static ARDOUR_UI *instance () { return theArdourUI; }
static UIConfiguration *config () { return theArdourUI->ui_config; }
+ static float ui_scale;
- PublicEditor& the_editor(){return *editor;}
+ PublicEditor& the_editor() { return *editor;}
Mixer_UI* the_mixer() { return mixer; }
void new_midi_tracer_window ();
@@ -192,8 +198,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
Gtk::Tooltips& tooltips() { return _tooltips; }
- Gtk::HBox& editor_transport_box() { return _editor_transport_box; }
-
static PublicEditor* _instance;
/** Emitted frequently with the audible frame, false, and the edit point as
@@ -389,7 +393,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
Gtkmm2ext::TearOff* transport_tearoff;
Gtk::Frame transport_frame;
Gtk::HBox transport_tearoff_hbox;
- Gtk::HBox _editor_transport_box;
Gtk::HBox transport_hbox;
Gtk::Fixed transport_base;
Gtk::Fixed transport_button_base;
@@ -546,6 +549,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
Gtk::Label cpu_load_label;
void update_cpu_load ();
+ Gtk::Label xrun_label;
+ void update_xrun_count ();
+
Gtk::Label buffer_load_label;
void update_buffer_load ();
@@ -612,6 +618,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
guint32 last_key_press_time;
void snapshot_session (bool switch_to_it);
+
+ SaveAsDialog* save_as_dialog;
+
+ bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
+ void save_session_as ();
void rename_session ();
void setup_order_hint (AddRouteDialog::InsertAt);
@@ -783,6 +794,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void resize_text_widgets ();
+ bool xrun_button_release (GdkEventButton* ev);
+
std::string _announce_string;
void check_announcements ();
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 17c3524..c7fb167 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -216,13 +216,15 @@ ARDOUR_UI::tearoff_settings (const char* name) const
return 0;
}
+#define PX_SCALE(px) std::max((float)px, rintf((float)px * ARDOUR_UI::ui_scale))
+
void
ARDOUR_UI::setup_transport ()
{
RefPtr<Action> act;
- transport_tearoff_hbox.set_border_width (3);
- transport_tearoff_hbox.set_spacing (3);
+ transport_tearoff_hbox.set_border_width (PX_SCALE(3));
+ transport_tearoff_hbox.set_spacing (PX_SCALE(3));
transport_tearoff = manage (new TearOff (transport_tearoff_hbox));
transport_tearoff->set_name ("TransportBase");
@@ -256,8 +258,7 @@ ARDOUR_UI::setup_transport ()
// auto_input_button.set_text (_("Auto Input"));
- click_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- click_button.set_icon (ArdourButton::TransportMetronom);
+ click_button.set_icon (ArdourIcon::TransportMetronom);
act = ActionManager::get_action ("Transport", "ToggleClick");
click_button.set_related_action (act);
@@ -274,28 +275,15 @@ ARDOUR_UI::setup_transport ()
stop_button.set_active (true);
- goto_start_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- goto_start_button.set_icon (ArdourButton::TransportStart);
- goto_end_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- goto_end_button.set_icon (ArdourButton::TransportEnd);
- roll_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- roll_button.set_icon (ArdourButton::TransportPlay);
- stop_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- stop_button.set_icon (ArdourButton::TransportStop);
- play_selection_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- play_selection_button.set_icon (ArdourButton::TransportRange);
- auto_loop_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- auto_loop_button.set_icon (ArdourButton::TransportLoop);
-
- rec_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- rec_button.set_icon (ArdourButton::RecButton);
-
- midi_panic_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- midi_panic_button.set_icon (ArdourButton::TransportPanic);
+ goto_start_button.set_icon (ArdourIcon::TransportStart);
+ goto_end_button.set_icon (ArdourIcon::TransportEnd);
+ roll_button.set_icon (ArdourIcon::TransportPlay);
+ stop_button.set_icon (ArdourIcon::TransportStop);
+ play_selection_button.set_icon (ArdourIcon::TransportRange);
+ auto_loop_button.set_icon (ArdourIcon::TransportLoop);
+ rec_button.set_icon (ArdourIcon::RecButton);
+ midi_panic_button.set_icon (ArdourIcon::TransportPanic);
- /* the icon for this has an odd aspect ratio, so fatten up the button */
- midi_panic_button.set_size_request (25, -1);
-
act = ActionManager::get_action (X_("Transport"), X_("Stop"));
stop_button.set_related_action (act);
act = ActionManager::get_action (X_("Transport"), X_("Roll"));
@@ -348,7 +336,7 @@ ARDOUR_UI::setup_transport ()
error_alert_button.set_fallthrough_to_parent(true);
alert_box.set_homogeneous (true);
- alert_box.set_spacing (2);
+ alert_box.set_spacing (PX_SCALE(2));
alert_box.pack_start (solo_alert_button, true, true);
alert_box.pack_start (auditioning_alert_button, true, true);
alert_box.pack_start (feedback_alert_button, true, true);
@@ -366,8 +354,11 @@ ARDOUR_UI::setup_transport ()
transport_button_size_group->add_widget (roll_button);
transport_button_size_group->add_widget (stop_button);
- goto_start_button.set_size_request (28, 44);
- click_button.set_size_request (32, 44);
+ /* the icon for this has an odd aspect ratio, so fatten up the button */
+ midi_panic_button.set_size_request (PX_SCALE(25), -1);
+ goto_start_button.set_size_request (PX_SCALE(28), PX_SCALE(44));
+ click_button.set_size_request (PX_SCALE(32), PX_SCALE(44));
+
HBox* tbox1 = manage (new HBox);
HBox* tbox2 = manage (new HBox);
@@ -379,9 +370,9 @@ ARDOUR_UI::setup_transport ()
Alignment* a1 = manage (new Alignment);
Alignment* a2 = manage (new Alignment);
- tbox1->set_spacing (2);
- tbox2->set_spacing (2);
- tbox->set_spacing (2);
+ tbox1->set_spacing (PX_SCALE(2));
+ tbox2->set_spacing (PX_SCALE(2));
+ tbox->set_spacing (PX_SCALE(2));
if (!Profile->get_trx()) {
tbox1->pack_start (midi_panic_button, true, true, 5);
@@ -416,7 +407,7 @@ ARDOUR_UI::setup_transport ()
if (!ARDOUR::Profile->get_small_screen() && !ARDOUR::Profile->get_trx()) {
clock_box->pack_start (*secondary_clock, false, false);
}
- clock_box->set_spacing (3);
+ clock_box->set_spacing (PX_SCALE(3));
shuttle_box = manage (new ShuttleControl);
shuttle_box->show ();
@@ -424,7 +415,7 @@ ARDOUR_UI::setup_transport ()
VBox* transport_vbox = manage (new VBox);
transport_vbox->set_name ("TransportBase");
transport_vbox->set_border_width (0);
- transport_vbox->set_spacing (3);
+ transport_vbox->set_spacing (PX_SCALE(3));
transport_vbox->pack_start (*tbox, true, true, 0);
if (!Profile->get_trx()) {
@@ -443,7 +434,7 @@ ARDOUR_UI::setup_transport ()
VBox* auto_box = manage (new VBox);
auto_box->set_homogeneous (true);
- auto_box->set_spacing (2);
+ auto_box->set_spacing (PX_SCALE(2));
auto_box->pack_start (sync_button, true, true);
if (!ARDOUR::Profile->get_trx()) {
auto_box->pack_start (follow_edits_button, true, true);
@@ -463,10 +454,6 @@ ARDOUR_UI::setup_transport ()
transport_tearoff_hbox.pack_start (*time_info_box, false, false);
}
- if (ARDOUR::Profile->get_small_screen()) {
- transport_tearoff_hbox.pack_start (_editor_transport_box, false, false);
- }
-
if (!ARDOUR::Profile->get_trx()) {
transport_tearoff_hbox.pack_start (alert_box, false, false);
transport_tearoff_hbox.pack_start (meter_box, false, false);
@@ -487,6 +474,7 @@ ARDOUR_UI::setup_transport ()
transport_tearoff->set_state (*tnode);
}
}
+#undef PX_SCALE
void
ARDOUR_UI::detach_tearoff (Box* b, Widget* w)
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index e382406..0fbb33a 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -223,8 +223,8 @@ ARDOUR_UI::set_session (Session *s)
editor_meter_peak_display.set_name ("meterbridge peakindicator");
editor_meter_peak_display.unset_flags (Gtk::CAN_FOCUS);
- editor_meter_peak_display.set_size_request(8, -1);
- editor_meter_peak_display.set_corner_radius(3);
+ editor_meter_peak_display.set_size_request (std::max(9.f, rintf(8.f * ui_scale)), -1);
+ editor_meter_peak_display.set_corner_radius (3.0);
editor_meter_max_peak = -INFINITY;
editor_meter_peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &ARDOUR_UI::editor_meter_peak_button_release), false);
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index ccd048d..3f0bb44 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -141,11 +141,15 @@ ARDOUR_UI::install_actions ()
hide_return (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::export_video), false)));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::snapshot_session), false));
+ act = ActionManager::register_action (main_actions, X_("SnapshotStay"), _("Snapshot (& keep working on current version) ..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::snapshot_session), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
- act = ActionManager::register_action (main_actions, X_("SaveAs"), _("Save As..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::snapshot_session), true));
+ act = ActionManager::register_action (main_actions, X_("SnapshotSwitch"), _("Snapshot (& switch to new version) ..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::snapshot_session), true));
+ ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::write_sensitive_actions.push_back (act);
+
+ act = ActionManager::register_action (main_actions, X_("SaveAs"), _("Save As..."), sigc::mem_fun(*this, &ARDOUR_UI::save_session_as));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
@@ -303,19 +307,19 @@ if (Profile->get_mixbus())
act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
+ act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Go to Zero"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_start));
+ act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Go to Start"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_start));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("alternate-GotoStart"), _("Goto Start"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_start));
+ act = ActionManager::register_action (transport_actions, X_("alternate-GotoStart"), _("Go to Start"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_start));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_end));
+ act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Go to End"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_end));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("GotoWallClock"), _("Goto Wall Clock"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_wallclock));
+ act = ActionManager::register_action (transport_actions, X_("GotoWallClock"), _("Go to Wall Clock"), sigc::mem_fun(*this, &ARDOUR_UI::transport_goto_wallclock));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
@@ -412,7 +416,7 @@ if (Profile->get_mixbus())
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time Master"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_time_master));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_toggle_action (transport_actions, X_("ToggleExternalSync"), "", sigc::mem_fun(*this, &ARDOUR_UI::toggle_external_sync));
+ act = ActionManager::register_toggle_action (transport_actions, X_("ToggleExternalSync"), _("Use External Positional Sync Source"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_external_sync));
ActionManager::session_sensitive_actions.push_back (act);
for (int i = 1; i <= 32; ++i) {
@@ -491,6 +495,8 @@ ARDOUR_UI::build_menu_bar ()
timecode_format_label.set_use_markup ();
cpu_load_label.set_name ("CPULoad");
cpu_load_label.set_use_markup ();
+ xrun_label.set_name ("XrunLabel");
+ xrun_label.set_use_markup ();
buffer_load_label.set_name ("BufferLoad");
buffer_load_label.set_use_markup ();
sample_rate_label.set_name ("SampleRate");
@@ -519,6 +525,7 @@ ARDOUR_UI::build_menu_bar ()
hbox->pack_end (wall_clock_label, false, false, 2);
hbox->pack_end (disk_space_label, false, false, 4);
+ hbox->pack_end (xrun_label, false, false, 4);
hbox->pack_end (cpu_load_label, false, false, 4);
hbox->pack_end (buffer_load_label, false, false, 4);
hbox->pack_end (sample_rate_label, false, false, 4);
@@ -535,12 +542,14 @@ ARDOUR_UI::build_menu_bar ()
#endif
_status_bar_visibility.add (&disk_space_label, X_("Disk"), _("Disk Space"), disk_space);
_status_bar_visibility.add (&cpu_load_label, X_("DSP"), _("DSP"), true);
+ _status_bar_visibility.add (&xrun_label, X_("XRun"), _("X-run"), false);
_status_bar_visibility.add (&buffer_load_label, X_("Buffers"), _("Buffers"), true);
_status_bar_visibility.add (&sample_rate_label, X_("Audio"), _("Audio"), true);
_status_bar_visibility.add (&timecode_format_label, X_("TCFormat"), _("Timecode Format"), true);
_status_bar_visibility.add (&format_label, X_("Format"), _("File Format"), true);
ev->signal_button_press_event().connect (sigc::mem_fun (_status_bar_visibility, &VisibilityGroup::button_press_event));
+ ev->signal_button_release_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::xrun_button_release));
}
void
@@ -656,6 +665,7 @@ ARDOUR_UI::resize_text_widgets ()
{
set_size_request_to_display_given_text (cpu_load_label, "DSP: 100.0%", 2, 2);
set_size_request_to_display_given_text (buffer_load_label, "Buffers: p:100% c:100%", 2, 2);
+ set_size_request_to_display_given_text (xrun_label, "X: 9999", 2, 2);
}
void
@@ -666,3 +676,17 @@ ARDOUR_UI::focus_on_clock ()
primary_clock->focus ();
}
}
+
+bool
+ARDOUR_UI::xrun_button_release (GdkEventButton* ev)
+{
+ if (ev->button != 1 || !Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
+ return false;
+ }
+
+ if (_session) {
+ _session->reset_xrun_count ();
+ update_xrun_count ();
+ }
+ return true;
+}
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index a354d47..0c59a66 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -423,6 +423,11 @@ ARDOUR_UI::parameter_changed (std::string p)
? ArdourCanvas::WaveView::Rectified : ArdourCanvas::WaveView::Normal);
} else if (p == "show-waveform-clipping") {
ArdourCanvas::WaveView::set_global_show_waveform_clipping (ARDOUR_UI::config()->get_show_waveform_clipping());
+ } else if (p == "font-scale") {
+ ui_scale = config()->get_font_scale () / 102400.;
+ } else if (p == "waveform-cache-size") {
+ /* GUI option has units of megabytes; image cache uses units of bytes */
+ ArdourCanvas::WaveView::set_image_cache_size (ARDOUR_UI::config()->get_waveform_cache_size() * 1048576);
}
}
diff --git a/gtk2_ardour/au_pluginui.mm b/gtk2_ardour/au_pluginui.mm
index 2a4ab74..3682788 100644
--- a/gtk2_ardour/au_pluginui.mm
+++ b/gtk2_ardour/au_pluginui.mm
@@ -167,6 +167,7 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
smaller_hbox->pack_start (automation_mode_label, false, false);
smaller_hbox->pack_start (automation_mode_selector, false, false);
#endif
+ smaller_hbox->pack_start (reset_button, false, false);
smaller_hbox->pack_start (bypass_button, false, true);
VBox* v1_box = manage (new VBox);
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index a90946f..b64e54e 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -55,7 +55,7 @@ using Gtkmm2ext::Keyboard;
sigc::signal<void> AudioClock::ModeChanged;
vector<AudioClock*> AudioClock::clocks;
-const double AudioClock::info_font_scale_factor = 0.60;
+const double AudioClock::info_font_scale_factor = 0.68;
const double AudioClock::separator_height = 0.0;
const double AudioClock::x_leading_padding = 6.0;
@@ -65,13 +65,15 @@ const double AudioClock::x_leading_padding = 6.0;
#define TXTSPAN "<span font-family=\"Sans\" foreground=\"white\">"
AudioClock::AudioClock (const string& clock_name, bool transient, const string& widget_name,
- bool allow_edit, bool follows_playhead, bool duration, bool with_info)
+ bool allow_edit, bool follows_playhead, bool duration, bool with_info,
+ bool accept_on_focus_out)
: ops_menu (0)
, _name (clock_name)
, is_transient (transient)
, is_duration (duration)
, editable (allow_edit)
, _follows_playhead (follows_playhead)
+ , _accept_on_focus_out (accept_on_focus_out)
, _off (false)
, em_width (0)
, _edit_by_click_field (false)
@@ -334,7 +336,7 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
if (mode_based_info_ratio != 1.0) {
- double left_rect_width = round (((get_width() - separator_height) * mode_based_info_ratio) + 0.5);
+ double left_rect_width = get_left_rect_width();
if (_need_bg) {
if (corner_radius) {
@@ -470,7 +472,10 @@ AudioClock::set_clock_dimensions (Gtk::Requisition& req)
tmp->set_font_description (font);
/* this string is the longest thing we will ever display */
- tmp->set_text (" 88:88:88,888");
+ if (_mode == MinSec)
+ tmp->set_text (" 88:88:88,888 ");
+ else
+ tmp->set_text (" 88:88:88,88 ");
tmp->get_pixel_size (req.width, req.height);
layout_height = req.height;
@@ -1685,7 +1690,7 @@ AudioClock::on_focus_out_event (GdkEventFocus* ev)
bool ret = CairoWidget::on_focus_out_event (ev);
if (editing) {
- end_edit (false);
+ end_edit (_accept_on_focus_out);
}
return ret;
@@ -2155,6 +2160,9 @@ AudioClock::set_mode (Mode m)
_layout->set_text ("");
+ Gtk::Requisition req;
+ set_clock_dimensions (req);
+
if (_left_layout) {
_left_layout->set_attributes (info_attributes);
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
index 5ab75c2..2a49d3a 100644
--- a/gtk2_ardour/audio_clock.h
+++ b/gtk2_ardour/audio_clock.h
@@ -50,7 +50,8 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
};
AudioClock (const std::string& clock_name, bool is_transient, const std::string& widget_name,
- bool editable, bool follows_playhead, bool duration = false, bool with_info = false);
+ bool editable, bool follows_playhead, bool duration = false, bool with_info = false,
+ bool accept_on_focus_out = false);
~AudioClock ();
Mode mode() const { return _mode; }
@@ -98,10 +99,22 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
protected:
void render (cairo_t*, cairo_rectangle_t*);
+ bool get_is_duration () const { return is_duration; } ;
virtual void build_ops_menu ();
Gtk::Menu *ops_menu;
+ bool on_button_press_event (GdkEventButton *ev);
+ bool on_button_release_event(GdkEventButton *ev);
+ bool is_lower_layout_click(int y) const {
+ return y > upper_height + separator_height;
+ }
+ bool is_right_layout_click(int x) const {
+ return x > x_leading_padding + get_left_rect_width() + separator_height;
+ }
+ double get_left_rect_width() const {
+ return round (((get_width() - separator_height) * mode_based_info_ratio) + 0.5);
+ }
private:
Mode _mode;
std::string _name;
@@ -110,6 +123,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
bool editable;
/** true if this clock follows the playhead, meaning that certain operations are redundant */
bool _follows_playhead;
+ bool _accept_on_focus_out;
bool _off;
int em_width;
bool _edit_by_click_field;
@@ -187,8 +201,6 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
bool on_key_press_event (GdkEventKey *);
bool on_key_release_event (GdkEventKey *);
bool on_scroll_event (GdkEventScroll *ev);
- bool on_button_press_event (GdkEventButton *ev);
- bool on_button_release_event(GdkEventButton *ev);
void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
void on_size_request (Gtk::Requisition* req);
bool on_motion_notify_event (GdkEventMotion *ev);
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index cb7b201..a511ff7 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -477,19 +477,23 @@ AudioRegionView::set_height (gdouble height)
uint32_t wcnt = waves.size();
- for (uint32_t n = 0; n < wcnt; ++n) {
- gdouble ht;
+ if (wcnt > 0) {
- if (height < NAME_HIGHLIGHT_THRESH) {
- ht = ((height - 2 * wcnt) / (double) wcnt);
+ gdouble ht;
+
+ if (!ARDOUR_UI::config()->get_show_name_highlight() || (height < NAME_HIGHLIGHT_THRESH)) {
+ ht = height / (double) wcnt;
} else {
- ht = (((height - 2 * wcnt) - NAME_HIGHLIGHT_SIZE) / (double) wcnt);
+ ht = (height - NAME_HIGHLIGHT_SIZE) / (double) wcnt;
+ }
+
+ for (uint32_t n = 0; n < wcnt; ++n) {
+
+ gdouble yoff = floor (ht * n);
+
+ waves[n]->set_height (ht);
+ waves[n]->set_y_position (yoff);
}
-
- gdouble yoff = n * (ht + 1);
-
- waves[n]->set_height (ht);
- waves[n]->set_y_position (yoff + 2);
}
if (gain_line) {
@@ -554,7 +558,7 @@ AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, f
width = std::max ((framecnt_t) 64, width);
/* round here to prevent little visual glitches with sub-pixel placement */
- double const pwidth = rint (width / samples_per_pixel);
+ double const pwidth = floor (width / samples_per_pixel);
double const handle_left = pwidth;
/* Put the fade in handle so that its left side is at the end-of-fade line */
@@ -600,8 +604,8 @@ AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, f
points.assign (list->size(), Duple());
for (x = list->begin(), pi = 0; x != list->end(); ++x, ++pi) {
- points[pi].x = 1.0 + (pwidth * ((*x)->when/length));
- points[pi].y = effective_height - ((*x)->value * effective_height);
+ points[pi].x = (pwidth * ((*x)->when/length));
+ points[pi].y = effective_height - ((*x)->value * (effective_height - 1.));
}
/* draw the line */
@@ -633,7 +637,7 @@ AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar,
width = std::max ((framecnt_t) 64, width);
- double const pwidth = rint(trackview.editor().sample_to_pixel (width));
+ double const pwidth = floor(trackview.editor().sample_to_pixel (width));
/* the right edge should be right on the region frame is the pixel
* width is zero. Hence the additional + 1.0 at the end.
@@ -669,7 +673,7 @@ AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar,
double effective_height;
- effective_height = _height - 1.0;
+ effective_height = _height;
if (ARDOUR_UI::config()->get_show_name_highlight() && effective_height >= NAME_HIGHLIGHT_THRESH) {
effective_height -= NAME_HIGHLIGHT_SIZE;
@@ -687,7 +691,7 @@ AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar,
for (x = list->begin(), pi = 0; x != list->end(); ++x, ++pi) {
points[pi].x = _pixel_width - pwidth + (pwidth * ((*x)->when/length));
- points[pi].y = 1.0 + effective_height - ((*x)->value * effective_height);
+ points[pi].y = effective_height - ((*x)->value * (effective_height - 1.));
}
/* draw the line */
@@ -772,7 +776,7 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr<AudioRegion> ar, frame
for (Points::size_type i = 0, pci = 0; i < npoints; ++i, ++pci) {
ArdourCanvas::Duple &p (ipoints[pci]);
/* leave x-axis alone but invert with respect to y-axis */
- p.y = 1.0 + effective_height - points[pci].y;
+ p.y = effective_height - points[pci].y;
}
} else {
@@ -792,7 +796,7 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr<AudioRegion> ar, frame
for (x = inverse->begin(), pi = 0; x != inverse->end(); ++x, ++pi) {
ArdourCanvas::Duple& p (ipoints[pi]);
p.x = (rect_width * ((*x)->when/length));
- p.y = 1.0 + effective_height - ((*x)->value * effective_height);
+ p.y = effective_height - ((*x)->value * (effective_height));
}
}
@@ -879,14 +883,13 @@ AudioRegionView::redraw_end_xfade_to (boost::shared_ptr<AudioRegion> ar, framecn
const double rend = trackview.editor().sample_to_pixel (_region->length() - width);
Evoral::ControlList::const_iterator x;
- Points::size_type i;
Points::size_type pi;
double length = inverse->length();
- for (x = inverse->begin(), i = 0, pi = 0; x != inverse->end(); ++x, ++pi, ++i) {
+ for (x = inverse->begin(), pi = 0; x != inverse->end(); ++x, ++pi) {
ArdourCanvas::Duple& p (ipoints[pi]);
p.x = (rect_width * ((*x)->when/length)) + rend;
- p.y = 1.0 + effective_height - ((*x)->value * effective_height);
+ p.y = effective_height - ((*x)->value * (effective_height));
}
}
@@ -1050,10 +1053,12 @@ AudioRegionView::update_envelope_visibility ()
return;
}
- if (ARDOUR_UI::config()->get_show_region_gain() || trackview.editor().current_mouse_mode() == Editing::MouseDraw || trackview.editor().current_mouse_mode() == Editing::MouseRange ) {
+ if (trackview.editor().current_mouse_mode() == Editing::MouseDraw || trackview.editor().current_mouse_mode() == Editing::MouseContent ) {
gain_line->set_visibility (AutomationLine::VisibleAspects(AutomationLine::ControlPoints|AutomationLine::Line));
gain_line->canvas_group().raise_to_top ();
-
+ } else if (ARDOUR_UI::config()->get_show_region_gain() || trackview.editor().current_mouse_mode() == Editing::MouseRange ) {
+ gain_line->set_visibility (AutomationLine::VisibleAspects(AutomationLine::Line));
+ gain_line->canvas_group().raise_to_top ();
} else {
gain_line->set_visibility (AutomationLine::VisibleAspects(0));
}
@@ -1125,12 +1130,18 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/)
uint32_t nwaves = std::min (nchans, audio_region()->n_channels());
gdouble ht;
+ /* reduce waveview height by 2.0 to account for our frame */
+
if (trackview.current_height() < NAME_HIGHLIGHT_THRESH) {
- ht = ((trackview.current_height()) / (double) nchans);
+ ht = ((trackview.current_height() - 2.0) / (double) nchans);
} else {
- ht = ((trackview.current_height() - NAME_HIGHLIGHT_SIZE) / (double) nchans);
+ ht = ((trackview.current_height() - NAME_HIGHLIGHT_SIZE - 2.0) / (double) nchans);
}
+ /* first waveview starts at 1.0, not 0.0 since that will overlap the
+ * frame
+ */
+
gdouble yoff = which * ht;
WaveView *wave = new WaveView (group, audio_region ());
@@ -1341,6 +1352,13 @@ AudioRegionView::entered ()
fade_out_trim_handle->hide ();
}
}
+ } else { //this happens when we switch tools; if we switch away from Grab mode, hide all the fade handles
+ if (fade_in_handle) { fade_in_handle->hide(); }
+ if (fade_out_handle) { fade_out_handle->hide(); }
+ if (fade_in_trim_handle) { fade_in_trim_handle->hide(); }
+ if (fade_out_trim_handle) { fade_out_trim_handle->hide(); }
+ if (start_xfade_rect) { start_xfade_rect->set_outline (false); }
+ if (end_xfade_rect) { end_xfade_rect->set_outline (false); }
}
}
@@ -1350,9 +1368,9 @@ AudioRegionView::exited ()
trackview.editor().set_current_trimmable (boost::shared_ptr<Trimmable>());
trackview.editor().set_current_movable (boost::shared_ptr<Movable>());
- if (gain_line) {
- gain_line->remove_visibility (AutomationLine::ControlPoints);
- }
+// if (gain_line) {
+// gain_line->remove_visibility (AutomationLine::ControlPoints);
+// }
if (fade_in_handle) { fade_in_handle->hide(); }
if (fade_out_handle) { fade_out_handle->hide(); }
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 01eda95..40c35d7 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -106,6 +106,10 @@ AudioTimeAxisView::set_route (boost::shared_ptr<Route> rt)
create_automation_child (GainAutomation, false);
}
+ if (automation_child (TrimAutomation) == 0) {
+ create_automation_child (TrimAutomation, false);
+ }
+
/* if set_state above didn't create a mute automation child, we need to make one */
if (automation_child (MuteAutomation) == 0) {
create_automation_child (MuteAutomation, false);
@@ -199,6 +203,10 @@ AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool
create_gain_automation_child (param, show);
+ } else if (param.type() == TrimAutomation) {
+
+ create_trim_automation_child (param, show);
+
} else if (param.type() == PanWidthAutomation ||
param.type() == PanElevationAutomation ||
param.type() == PanAzimuthAutomation) {
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index 43245f5..069a823 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -119,6 +119,7 @@ AutomationLine::AutomationLine (const string& name,
trackview.session()->register_with_memento_command_factory(alist->id(), this);
if (alist->parameter().type() == GainAutomation ||
+ alist->parameter().type() == TrimAutomation ||
alist->parameter().type() == EnvelopeAutomation ||
desc.unit == ParameterDescriptor::DB) {
set_uses_gain_mapping (true);
@@ -375,10 +376,16 @@ AutomationLine::fraction_to_string (double fraction) const
{
if (_uses_gain_mapping) {
char buf[32];
- if (fraction == 0.0) {
- snprintf (buf, sizeof (buf), "-inf");
+ if (_desc.type == GainAutomation || _desc.type == EnvelopeAutomation || _desc.lower == 0) {
+ if (fraction == 0.0) {
+ snprintf (buf, sizeof (buf), "-inf");
+ } else {
+ snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain_with_max (fraction, _desc.upper)));
+ }
} else {
- snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain_with_max (fraction, Config->get_max_gain())));
+ const double lower_db = accurate_coefficient_to_dB (_desc.lower);
+ const double range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
+ snprintf (buf, sizeof (buf), "%.1f", lower_db + fraction * range_db);
}
return buf;
} else {
@@ -1185,12 +1192,22 @@ AutomationLine::view_to_model_coord (double& x, double& y) const
void
AutomationLine::view_to_model_coord_y (double& y) const
{
- /* TODO: This should be more generic (use ParameterDescriptor) */
- if (alist->parameter().type() == GainAutomation ||
- alist->parameter().type() == EnvelopeAutomation) {
- y = slider_position_to_gain_with_max (y, Config->get_max_gain());
+ /* TODO: This should be more generic (use ParameterDescriptor)
+ * or better yet: Controllable -> set_interface();
+ */
+ if ( alist->parameter().type() == GainAutomation
+ || alist->parameter().type() == EnvelopeAutomation
+ || (_desc.unit == ParameterDescriptor::DB && _desc.lower == 0.)) {
+ y = slider_position_to_gain_with_max (y, _desc.upper);
+ y = max ((double)_desc.lower, y);
+ y = min ((double)_desc.upper, y);
+ } else if (alist->parameter().type() == TrimAutomation
+ || (_desc.unit == ParameterDescriptor::DB && _desc.lower > 0 && _desc.upper > _desc.lower)) {
+ const double lower_db = accurate_coefficient_to_dB (_desc.lower);
+ const double range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
y = max (0.0, y);
- y = min (2.0, y);
+ y = min (1.0, y);
+ y = dB_to_coefficient (lower_db + y * range_db);
} else if (alist->parameter().type() == PanAzimuthAutomation ||
alist->parameter().type() == PanElevationAutomation) {
y = 1.0 - y;
@@ -1210,9 +1227,15 @@ void
AutomationLine::model_to_view_coord_y (double& y) const
{
/* TODO: This should be more generic (use ParameterDescriptor) */
- if (alist->parameter().type() == GainAutomation ||
- alist->parameter().type() == EnvelopeAutomation) {
+ if ( alist->parameter().type() == GainAutomation
+ || alist->parameter().type() == EnvelopeAutomation
+ || (_desc.unit == ParameterDescriptor::DB && _desc.lower == 0.)) {
y = gain_to_slider_position_with_max (y, Config->get_max_gain());
+ } else if (alist->parameter().type() == TrimAutomation
+ || (_desc.unit == ParameterDescriptor::DB && _desc.lower > 0 && _desc.upper > _desc.lower)) {
+ const double lower_db = accurate_coefficient_to_dB (_desc.lower);
+ const double range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
+ y = (accurate_coefficient_to_dB (y) - lower_db) / range_db;
} else if (alist->parameter().type() == PanAzimuthAutomation ||
alist->parameter().type() == PanElevationAutomation) {
y = 1.0 - y;
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 56bf61d..01f2ebb 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -149,8 +149,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
_base_rect->lower_to_bottom();
}
- hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- hide_button.set_icon (ArdourButton::CloseCross);
+ hide_button.set_icon (ArdourIcon::CloseCross);
hide_button.set_tweaks(ArdourButton::TrackHeader);
auto_button.set_name ("route button");
diff --git a/gtk2_ardour/bundle_env_mingw.cc b/gtk2_ardour/bundle_env_mingw.cc
index f53c461..0d977ca 100644
--- a/gtk2_ardour/bundle_env_mingw.cc
+++ b/gtk2_ardour/bundle_env_mingw.cc
@@ -123,6 +123,15 @@ fixup_bundle_environment (int, char* [], string & localedir)
Glib::setenv ("VAMP_PATH", path, true);
Glib::setenv ("SUIL_MODULE_DIR", Glib::build_filename(ardour_dll_directory(), "suil"), true);
+
+ /* XXX this should really be PRODUCT_EXE see tools/x-win/package.sh
+ * ardour on windows does not have a startup wrapper script.
+ *
+ * then again, there's probably nobody using NSM on windows.
+ * because neither nsmd nor the GUI is currently available for windows.
+ * furthermore it'll be even less common for derived products.
+ */
+ Glib::setenv ("ARDOUR_SELF", Glib::build_filename(ardour_dll_directory(), "ardour.exe"), true);
}
static __cdecl void
diff --git a/gtk2_ardour/clearlooks.rc.in b/gtk2_ardour/clearlooks.rc.in
index 081629f..67c9a9a 100644
--- a/gtk2_ardour/clearlooks.rc.in
+++ b/gtk2_ardour/clearlooks.rc.in
@@ -235,7 +235,7 @@ style "small_text"
style "small_clock"
{
- font_name = "@CLOCKFONT@ @FONT_SMALLER@"
+ font_name = "@CLOCKFONT@ @FONT_NORMAL@"
}
style "small_italic_text"
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index 976ca8f..2f77df5 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -30,6 +30,7 @@
#include "ardour/automation_list.h"
#include "evoral/Curve.hpp"
#include "ardour/crossfade.h"
+#include "ardour/dB.h"
#include "ardour/session.h"
#include "ardour/auditioner.h"
#include "ardour/audioplaylist.h"
@@ -884,87 +885,86 @@ CrossfadeEditor::build_presets ()
/* FADE IN */
p = new Preset ("Linear (-6dB)", "fadein-linear");
- p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (0.000000, 0.000000));
+ p->push_back (PresetPoint (0.000000, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.166667, 0.166366));
p->push_back (PresetPoint (0.333333, 0.332853));
p->push_back (PresetPoint (0.500000, 0.499459));
p->push_back (PresetPoint (0.666667, 0.666186));
p->push_back (PresetPoint (0.833333, 0.833033));
- p->push_back (PresetPoint (1.000000, 1.000000));
+ p->push_back (PresetPoint (1.000000, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("S(1)-curve", "fadein-S1");
- p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.1, 0.01));
p->push_back (PresetPoint (0.2, 0.03));
p->push_back (PresetPoint (0.8, 0.97));
p->push_back (PresetPoint (0.9, 0.99));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (1, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("S(2)-curve", "fadein-S2");
- p->push_back (PresetPoint (0.0, 0.0));
+ p->push_back (PresetPoint (0.0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.055, 0.222));
p->push_back (PresetPoint (0.163, 0.35));
p->push_back (PresetPoint (0.837, 0.678));
p->push_back (PresetPoint (0.945, 0.783));
- p->push_back (PresetPoint (1.0, 1.0));
+ p->push_back (PresetPoint (1.0, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("Constant power (-3dB)", "fadein-constant-power");
- p->push_back (PresetPoint (0.000000, 0.000000));
+ p->push_back (PresetPoint (0.000000, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.166667, 0.282192));
p->push_back (PresetPoint (0.333333, 0.518174));
p->push_back (PresetPoint (0.500000, 0.707946));
p->push_back (PresetPoint (0.666667, 0.851507));
p->push_back (PresetPoint (0.833333, 0.948859));
- p->push_back (PresetPoint (1.000000, 1.000000));
+ p->push_back (PresetPoint (1.000000, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
if (!Profile->get_sae()) {
p = new Preset ("Short cut", "fadein-short-cut");
- p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.389401, 0.0333333));
p->push_back (PresetPoint (0.629032, 0.0861111));
p->push_back (PresetPoint (0.829493, 0.233333));
p->push_back (PresetPoint (0.9447, 0.483333));
p->push_back (PresetPoint (0.976959, 0.697222));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (1, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("Slow cut", "fadein-slow-cut");
- p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.304147, 0.0694444));
p->push_back (PresetPoint (0.529954, 0.152778));
p->push_back (PresetPoint (0.725806, 0.333333));
p->push_back (PresetPoint (0.847926, 0.558333));
p->push_back (PresetPoint (0.919355, 0.730556));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (1, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("Fast cut", "fadein-fast-cut");
- p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.0737327, 0.308333));
p->push_back (PresetPoint (0.246544, 0.658333));
p->push_back (PresetPoint (0.470046, 0.886111));
p->push_back (PresetPoint (0.652074, 0.972222));
p->push_back (PresetPoint (0.771889, 0.988889));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (1, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
p = new Preset ("Long cut", "fadein-long-cut");
- p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0, GAIN_COEFF_SMALL));
p->push_back (PresetPoint (0.0207373, 0.197222));
p->push_back (PresetPoint (0.0645161, 0.525));
p->push_back (PresetPoint (0.152074, 0.802778));
p->push_back (PresetPoint (0.276498, 0.919444));
p->push_back (PresetPoint (0.481567, 0.980556));
p->push_back (PresetPoint (0.767281, 1));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (1, GAIN_COEFF_UNITY));
fade_in_presets->push_back (p);
}
@@ -972,85 +972,84 @@ CrossfadeEditor::build_presets ()
// p = new Preset ("regout.xpm");
p = new Preset ("Linear (-6dB cut)", "fadeout-linear");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.000000, 1.000000));
+ p->push_back (PresetPoint (0.000000, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.166667, 0.833033));
p->push_back (PresetPoint (0.333333, 0.666186));
p->push_back (PresetPoint (0.500000, 0.499459));
p->push_back (PresetPoint (0.666667, 0.332853));
p->push_back (PresetPoint (0.833333, 0.166366));
- p->push_back (PresetPoint (1.000000, 0.000000));
+ p->push_back (PresetPoint (1.000000, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
p = new Preset ("S(1)-Curve", "fadeout-S1");
- p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.1, 0.99));
p->push_back (PresetPoint (0.2, 0.97));
p->push_back (PresetPoint (0.8, 0.03));
p->push_back (PresetPoint (0.9, 0.01));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (1, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
p = new Preset ("S(2)-Curve", "fadeout-S2");
- p->push_back (PresetPoint (0.0, 1.0));
+ p->push_back (PresetPoint (0.0, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.163, 0.678));
p->push_back (PresetPoint (0.055, 0.783));
p->push_back (PresetPoint (0.837, 0.35));
p->push_back (PresetPoint (0.945, 0.222));
- p->push_back (PresetPoint (1.0, 0.0));
+ p->push_back (PresetPoint (1.0, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
// p = new Preset ("linout.xpm");
p = new Preset ("Constant power (-3dB cut)", "fadeout-constant-power");
- p->push_back (PresetPoint (0.000000, 1.000000));
+ p->push_back (PresetPoint (0.000000, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.166667, 0.948859));
p->push_back (PresetPoint (0.333333, 0.851507));
p->push_back (PresetPoint (0.500000, 0.707946));
p->push_back (PresetPoint (0.666667, 0.518174));
p->push_back (PresetPoint (0.833333, 0.282192));
- p->push_back (PresetPoint (1.000000, 0.000000));
+ p->push_back (PresetPoint (1.000000, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
if (!Profile->get_sae()) {
// p = new Preset ("hiout.xpm");
p = new Preset ("Short cut", "fadeout-short-cut");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.305556, 1));
+ p->push_back (PresetPoint (0, GAIN_COEFF_UNITY));
+ p->push_back (PresetPoint (0.305556, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.548611, 0.991736));
p->push_back (PresetPoint (0.759259, 0.931129));
p->push_back (PresetPoint (0.918981, 0.68595));
p->push_back (PresetPoint (0.976852, 0.22865));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (1, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
p = new Preset ("Slow cut", "fadeout-slow-cut");
- p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.228111, 0.988889));
p->push_back (PresetPoint (0.347926, 0.972222));
p->push_back (PresetPoint (0.529954, 0.886111));
p->push_back (PresetPoint (0.753456, 0.658333));
p->push_back (PresetPoint (0.9262673, 0.308333));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (1, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
p = new Preset ("Fast cut", "fadeout-fast-cut");
- p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.080645, 0.730556));
p->push_back (PresetPoint (0.277778, 0.289256));
p->push_back (PresetPoint (0.470046, 0.152778));
p->push_back (PresetPoint (0.695853, 0.0694444));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (1, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
// p = new Preset ("loout.xpm");
p = new Preset ("Long cut", "fadeout-long-cut");
- p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0, GAIN_COEFF_UNITY));
p->push_back (PresetPoint (0.023041, 0.697222));
p->push_back (PresetPoint (0.0553, 0.483333));
p->push_back (PresetPoint (0.170507, 0.233333));
p->push_back (PresetPoint (0.370968, 0.0861111));
p->push_back (PresetPoint (0.610599, 0.0333333));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (1, GAIN_COEFF_SMALL));
fade_out_presets->push_back (p);
}
diff --git a/gtk2_ardour/dark.colors b/gtk2_ardour/dark.colors
index 05d875f..13151ae 100644
--- a/gtk2_ardour/dark.colors
+++ b/gtk2_ardour/dark.colors
@@ -464,6 +464,9 @@
<ColorAlias name="transport recenable button: led active" alias="color 4"/>
<ColorAlias name="trim handle" alias="color 18"/>
<ColorAlias name="trim handle locked" alias="color 86"/>
+ <ColorAlias name="trim knob" alias="color 60"/>
+ <ColorAlias name="trim knob: arc end" alias="color 81"/>
+ <ColorAlias name="trim knob: arc start" alias="color 82"/>
<ColorAlias name="verbose canvas cursor" alias="color 32"/>
<ColorAlias name="vestigial frame" alias="color 4"/>
<ColorAlias name="video timeline bar" alias="color 46"/>
diff --git a/gtk2_ardour/debug.cc b/gtk2_ardour/debug.cc
index a75a102..7065e6a 100644
--- a/gtk2_ardour/debug.cc
+++ b/gtk2_ardour/debug.cc
@@ -25,7 +25,7 @@
using namespace std;
-uint64_t PBD::DEBUG::Drags = PBD::new_debug_bit ("drags");
-uint64_t PBD::DEBUG::CutNPaste = PBD::new_debug_bit ("cutnpaste");
-uint64_t PBD::DEBUG::Accelerators = PBD::new_debug_bit ("accelerators");
-uint64_t PBD::DEBUG::GUITiming = PBD::new_debug_bit ("guitiming");
+PBD::DebugBits PBD::DEBUG::Drags = PBD::new_debug_bit ("drags");
+PBD::DebugBits PBD::DEBUG::CutNPaste = PBD::new_debug_bit ("cutnpaste");
+PBD::DebugBits PBD::DEBUG::Accelerators = PBD::new_debug_bit ("accelerators");
+PBD::DebugBits PBD::DEBUG::GUITiming = PBD::new_debug_bit ("guitiming");
diff --git a/gtk2_ardour/debug.h b/gtk2_ardour/debug.h
index db0b3c1..660e674 100644
--- a/gtk2_ardour/debug.h
+++ b/gtk2_ardour/debug.h
@@ -26,10 +26,10 @@
namespace PBD {
namespace DEBUG {
- extern uint64_t Drags;
- extern uint64_t CutNPaste;
- extern uint64_t Accelerators;
- extern uint64_t GUITiming;
+ extern DebugBits Drags;
+ extern DebugBits CutNPaste;
+ extern DebugBits Accelerators;
+ extern DebugBits GUITiming;
}
}
diff --git a/gtk2_ardour/editing.h b/gtk2_ardour/editing.h
index 6ce6b74..8dd6f2e 100644
--- a/gtk2_ardour/editing.h
+++ b/gtk2_ardour/editing.h
@@ -208,6 +208,13 @@ enum XFadeType {
At
};
+enum EditIgnoreOption {
+ EDIT_IGNORE_NONE,
+ EDIT_IGNORE_PHEAD,
+ EDIT_IGNORE_MOUSE,
+ EDIT_IGNORE_MARKER
+};
+
} // namespace Editing
#endif // __gtk_ardour_editing_h__
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 8ea9dd2..534dd26 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -410,7 +410,7 @@ Editor::Editor ()
samples_per_pixel = 2048; /* too early to use reset_zoom () */
- timebar_height = std::max(12., ceil (15. * ARDOUR_UI::config()->get_font_scale() / 102400.));
+ timebar_height = std::max(12., ceil (15. * ARDOUR_UI::ui_scale));
TimeAxisView::setup_sizes ();
Marker::setup_sizes (timebar_height);
@@ -695,10 +695,10 @@ Editor::Editor ()
/* nudge stuff */
nudge_forward_button.set_name ("nudge button");
- nudge_forward_button.set_image(::get_icon("nudge_right"));
+ nudge_forward_button.set_icon(ArdourIcon::NudgeRight);
nudge_backward_button.set_name ("nudge button");
- nudge_backward_button.set_image(::get_icon("nudge_left"));
+ nudge_backward_button.set_icon(ArdourIcon::NudgeLeft);
fade_context_menu.set_name ("ArdourContextMenu");
@@ -1796,10 +1796,18 @@ Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, boost::sha
_popup_region_menu_item->set_label (menu_item_name);
}
- const framepos_t position = get_preferred_edit_position (false, true);
+ /* No latering allowed in later is higher layering model */
+ RefPtr<Action> act = ActionManager::get_action (X_("EditorMenu"), X_("RegionMenuLayering"));
+ if (act && Config->get_layer_model() == LaterHigher) {
+ act->set_sensitive (false);
+ } else if (act) {
+ act->set_sensitive (true);
+ }
+
+ const framepos_t position = get_preferred_edit_position (EDIT_IGNORE_NONE, true);
edit_items.push_back (*_popup_region_menu_item);
- if (track->playlist()->count_regions_at (position) > 1 && (layering_order_editor == 0 || !layering_order_editor->is_visible ())) {
+ if (Config->get_layer_model() == Manual && track->playlist()->count_regions_at (position) > 1 && (layering_order_editor == 0 || !layering_order_editor->is_visible ())) {
edit_items.push_back (*manage (_region_actions->get_action ("choose-top-region-context-menu")->create_menu_item ()));
}
edit_items.push_back (SeparatorElem());
@@ -1916,6 +1924,7 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items)
select_items.push_back (SeparatorElem());
select_items.push_back (MenuElem (_("Set Range to Loop Range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop)));
select_items.push_back (MenuElem (_("Set Range to Punch Range"), sigc::mem_fun(*this, &Editor::set_selection_from_punch)));
+ select_items.push_back (MenuElem (_("Set Range to Selected Regions"), sigc::mem_fun(*this, &Editor::set_selection_from_region)));
select_items.push_back (SeparatorElem());
select_items.push_back (MenuElem (_("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true)));
select_items.push_back (MenuElem (_("Select All Before Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false)));
@@ -2124,6 +2133,7 @@ Editor::set_snap_mode (SnapMode mode)
instant_save ();
}
+
void
Editor::set_edit_point_preference (EditPoint ep, bool force)
{
@@ -2587,25 +2597,28 @@ Editor::snap_to_with_modifier (framepos_t& start, GdkEvent const * event, RoundM
return;
}
- if (Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
+ if (ArdourKeyboard::indicates_snap (event->button.state)) {
if (_snap_mode == SnapOff) {
snap_to_internal (start, direction, for_mark);
}
} else {
if (_snap_mode != SnapOff) {
snap_to_internal (start, direction, for_mark);
+ } else if (ArdourKeyboard::indicates_snap_delta (event->button.state)) {
+ /* SnapOff, but we pressed the snap_delta modifier */
+ snap_to_internal (start, direction, for_mark);
}
}
}
void
-Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark)
+Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark, bool ensure_snap)
{
- if (!_session || _snap_mode == SnapOff) {
+ if (!_session || (_snap_mode == SnapOff && !ensure_snap)) {
return;
}
- snap_to_internal (start, direction, for_mark);
+ snap_to_internal (start, direction, for_mark, ensure_snap);
}
void
@@ -2675,7 +2688,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, RoundMode direction, bool
}
void
-Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark)
+Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark, bool ensure_snap)
{
const framepos_t one_second = _session->frame_rate();
const framepos_t one_minute = _session->frame_rate() * 60;
@@ -2845,6 +2858,10 @@ Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark)
case SnapMagnetic:
+ if (ensure_snap) {
+ return;
+ }
+
if (presnap > start) {
if (presnap > (start + pixel_to_sample(snap_threshold))) {
start = presnap;
@@ -2969,17 +2986,17 @@ Editor::setup_toolbar ()
zoom_preset_selector.set_size_request (42, -1);
zoom_in_button.set_name ("zoom button");
- zoom_in_button.set_image(::get_icon ("zoom_in"));
+ zoom_in_button.set_icon (ArdourIcon::ZoomIn);
act = ActionManager::get_action (X_("Editor"), X_("temporal-zoom-in"));
zoom_in_button.set_related_action (act);
zoom_out_button.set_name ("zoom button");
- zoom_out_button.set_image(::get_icon ("zoom_out"));
+ zoom_out_button.set_icon (ArdourIcon::ZoomOut);
act = ActionManager::get_action (X_("Editor"), X_("temporal-zoom-out"));
zoom_out_button.set_related_action (act);
zoom_out_full_button.set_name ("zoom button");
- zoom_out_full_button.set_image(::get_icon ("zoom_full"));
+ zoom_out_full_button.set_icon (ArdourIcon::ZoomFull);
act = ActionManager::get_action (X_("Editor"), X_("zoom-to-session"));
zoom_out_full_button.set_related_action (act);
@@ -3007,12 +3024,12 @@ Editor::setup_toolbar ()
}
tav_expand_button.set_name ("zoom button");
- tav_expand_button.set_image(::get_icon ("tav_exp"));
+ tav_expand_button.set_icon (ArdourIcon::TimeAxisExpand);
act = ActionManager::get_action (X_("Editor"), X_("expand-tracks"));
tav_expand_button.set_related_action (act);
tav_shrink_button.set_name ("zoom button");
- tav_shrink_button.set_image(::get_icon ("tav_shrink"));
+ tav_shrink_button.set_icon (ArdourIcon::TimeAxisShrink);
act = ActionManager::get_action (X_("Editor"), X_("shrink-tracks"));
tav_shrink_button.set_related_action (act);
@@ -3104,11 +3121,7 @@ Editor::setup_toolbar ()
if (!ARDOUR::Profile->get_trx()) {
hbox->pack_start (snap_box, false, false);
- if ( !Profile->get_small_screen() || Profile->get_mixbus() ) {
- hbox->pack_start (*nudge_box, false, false);
- } else {
- ARDOUR_UI::instance()->editor_transport_box().pack_start (*nudge_box, false, false);
- }
+ hbox->pack_start (*nudge_box, false, false);
}
hbox->pack_start (panic_box, false, false);
@@ -3214,7 +3227,7 @@ Editor::setup_tooltips ()
ARDOUR_UI::instance()->set_tip (mouse_draw_button, _("Draw Mode (draw and edit gain/notes/automation)"));
ARDOUR_UI::instance()->set_tip (mouse_timefx_button, _("Stretch Mode (time-stretch audio and midi regions, preserving pitch)"));
ARDOUR_UI::instance()->set_tip (mouse_audition_button, _("Audition Mode (listen to regions)"));
- ARDOUR_UI::instance()->set_tip (mouse_content_button, _("Internal Edit Mode (edit notes and gain curves inside regions)"));
+ ARDOUR_UI::instance()->set_tip (mouse_content_button, _("Internal Edit Mode (edit notes and automation points)"));
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Later"));
ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Earlier"));
@@ -4655,15 +4668,15 @@ Editor::sort_track_selection (TrackViewList& sel)
}
framepos_t
-Editor::get_preferred_edit_position (bool ignore_playhead, bool from_context_menu, bool from_outside_canvas)
+Editor::get_preferred_edit_position (EditIgnoreOption ignore, bool from_context_menu, bool from_outside_canvas)
{
bool ignored;
framepos_t where = 0;
EditPoint ep = _edit_point;
- if(Profile->get_mixbus())
+ if (Profile->get_mixbus())
if (ep == EditAtSelectedMarker)
- ep=EditAtPlayhead;
+ ep = EditAtPlayhead;
if (from_outside_canvas && (ep == EditAtMouse)) {
ep = EditAtPlayhead;
@@ -4676,10 +4689,14 @@ Editor::get_preferred_edit_position (bool ignore_playhead, bool from_context_men
return entered_marker->position();
}
- if (ignore_playhead && ep == EditAtPlayhead) {
+ if ( (ignore==EDIT_IGNORE_PHEAD) && ep == EditAtPlayhead) {
ep = EditAtSelectedMarker;
}
+ if ( (ignore==EDIT_IGNORE_MOUSE) && ep == EditAtMouse) {
+ ep = EditAtPlayhead;
+ }
+
switch (ep) {
case EditAtPlayhead:
if (_dragging_playhead) {
@@ -4687,8 +4704,9 @@ Editor::get_preferred_edit_position (bool ignore_playhead, bool from_context_men
/* XXX not right but what can we do ? */
return 0;
}
- } else
+ } else {
where = _session->audible_frame();
+ }
DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use playhead @ %1\n", where));
break;
@@ -5226,6 +5244,7 @@ void
Editor::resume_route_redisplay ()
{
if (_routes) {
+ _routes->redisplay(); // queue redisplay
_routes->resume_redisplay();
}
}
@@ -5665,24 +5684,15 @@ Editor::super_rapid_screen_update ()
} else {
- /* don't do continuous scroll till the new position is in the rightmost quarter of the
- editor canvas
- */
-#if 0
- // FIXME DO SOMETHING THAT WORKS HERE - this is 2.X code
- double target = ((double)frame - (double)current_page_samples()/2.0) / samples_per_pixel;
- if (target <= 0.0) {
- target = 0.0;
- }
- if (fabs(target - current) < current_page_samples() / samples_per_pixel) {
- target = (target * 0.15) + (current * 0.85);
- } else {
- /* relax */
+ if (!_dragging_playhead && _follow_playhead && _session->requested_return_frame() < 0 && !pending_visual_change.being_handled) {
+ framepos_t const frame = playhead_cursor->current_frame ();
+ double target = ((double)frame - (double)current_page_samples()/3.0);
+ if (target <= 0.0) {
+ target = 0.0;
+ }
+ reset_x_origin (target);
}
- current = target;
- set_horizontal_position (current);
-#endif
}
}
@@ -5772,7 +5782,7 @@ Editor::show_editor_list (bool yn)
void
Editor::change_region_layering_order (bool from_context_menu)
{
- const framepos_t position = get_preferred_edit_position (false, from_context_menu);
+ const framepos_t position = get_preferred_edit_position (EDIT_IGNORE_NONE, from_context_menu);
if (!clicked_routeview) {
if (layering_order_editor) {
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 7cfc6ff..d5645a1 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -288,9 +288,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void set_zoom_focus (Editing::ZoomFocus);
Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
framecnt_t get_current_zoom () const { return samples_per_pixel; }
- void cycle_zoom_focus ();
+ void cycle_zoom_focus ();
void temporal_zoom_step (bool coarser);
- void ensure_time_axis_view_is_visible (TimeAxisView const & tav, bool at_top);
+ void ensure_time_axis_view_is_visible (TimeAxisView const & tav, bool at_top);
void tav_zoom_step (bool coarser);
void tav_zoom_smooth (bool coarser, bool force_all);
@@ -365,8 +365,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void scroll_tracks_down_line ();
void scroll_tracks_up_line ();
- bool scroll_up_one_track (bool skip_child_views = false);
- bool scroll_down_one_track (bool skip_child_views = false);
+
+ bool scroll_up_one_track (bool skip_child_views = false);
+ bool scroll_down_one_track (bool skip_child_views = false);
void prepare_for_cleanup ();
void finish_cleanup ();
@@ -384,7 +385,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void reset_zoom (framecnt_t);
void reposition_and_zoom (framepos_t, double);
- framepos_t get_preferred_edit_position (bool ignore_playhead = false,
+ framepos_t get_preferred_edit_position (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE,
bool use_context_click = false,
bool from_outside_canvas = false);
@@ -421,7 +422,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
framepos_t& pos,
boost::shared_ptr<ARDOUR::PluginInfo> instrument = boost::shared_ptr<ARDOUR::PluginInfo>());
- void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions, bool src_comparison);
+ void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions, bool src_comparison);
void get_regionviews_by_id (PBD::ID const id, RegionSelection & regions) const;
void get_per_region_note_selection (std::list<std::pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > >&) const;
@@ -435,7 +436,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void snap_to (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ bool for_mark = false,
+ bool ensure_snap = false);
void snap_to_with_modifier (framepos_t& first,
GdkEvent const * ev,
@@ -461,8 +463,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
return _drags;
}
- void maybe_autoscroll (bool, bool, bool);
- bool autoscroll_active() const;
+ void maybe_autoscroll (bool, bool, bool);
+ bool autoscroll_active() const;
Gdk::Cursor* get_canvas_cursor () const;
@@ -521,11 +523,16 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>&, gdouble, gdouble, gint);
/* editing operations that need to be public */
- void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false);
+ void mouse_add_new_marker (framepos_t where, bool is_cd=false);
void split_regions_at (framepos_t, RegionSelection&);
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
RegionSelection get_regions_from_selection_and_mouse (framepos_t);
+ void mouse_add_new_tempo_event (framepos_t where);
+ void mouse_add_new_meter_event (framepos_t where);
+ void edit_tempo_section (ARDOUR::TempoSection*);
+ void edit_meter_section (ARDOUR::MeterSection*);
+
protected:
void map_transport_state ();
void map_position_change (framepos_t);
@@ -572,7 +579,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void cancel_visual_state_op (uint32_t n);
framepos_t leftmost_frame;
- framecnt_t samples_per_pixel;
+ framecnt_t samples_per_pixel;
Editing::ZoomFocus zoom_focus;
void set_samples_per_pixel (framecnt_t);
@@ -841,11 +848,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
*/
ArdourCanvas::Container* _drag_motion_group;
- /* a rect that sits at the bottom of all tracks to act as a drag-no-drop/clickable
+ /* a rect that sits at the bottom of all tracks to act as a drag-no-drop/clickable
* target area.
*/
- ArdourCanvas::Rectangle* _canvas_drop_zone;
- bool canvas_drop_zone_event (GdkEvent* event);
+ ArdourCanvas::Rectangle* _canvas_drop_zone;
+ bool canvas_drop_zone_event (GdkEvent* event);
enum RulerType {
ruler_metric_timecode = 0,
@@ -882,7 +889,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void update_just_timecode ();
void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers
void update_fixed_rulers ();
- void update_tempo_based_rulers (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
+ void update_tempo_based_rulers (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
ARDOUR::TempoMap::BBTPointList::const_iterator& end);
void popup_ruler_menu (framepos_t where = 0, ItemType type = RegionItem);
void update_ruler_visibility ();
@@ -946,7 +953,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
gint bbt_nmarks;
uint32_t bbt_bar_helper_on;
uint32_t bbt_accent_modulo;
- void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper,
+ void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper,
ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin,
ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end);
@@ -1044,9 +1051,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/** the adjustment that controls the overall editor vertical scroll position */
Gtk::Adjustment vertical_adjustment;
- Gtk::Adjustment horizontal_adjustment;
+ Gtk::Adjustment horizontal_adjustment;
- Gtk::Adjustment unused_adjustment; // yes, really; Gtk::Layout constructor requires refs
+ Gtk::Adjustment unused_adjustment; // yes, really; Gtk::Layout constructor requires refs
Gtk::Layout controls_layout;
bool control_layout_scroll (GdkEventScroll* ev);
void reset_controls_layout_width ();
@@ -1122,7 +1129,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
static int _idle_visual_changer (void *arg);
int idle_visual_changer ();
- void visual_changer (const VisualChange&);
+ void visual_changer (const VisualChange&);
void ensure_visual_change_idle_handler ();
/* track views */
@@ -1170,9 +1177,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void register_actions ();
void register_region_actions ();
- void load_bindings ();
- Gtkmm2ext::ActionMap editor_action_map;
- Gtkmm2ext::Bindings key_bindings;
+ void load_bindings ();
+ Gtkmm2ext::ActionMap editor_action_map;
+ Gtkmm2ext::Bindings key_bindings;
/* CUT/COPY/PASTE */
@@ -1255,6 +1262,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void do_insert_time ();
void insert_time (framepos_t, framecnt_t, Editing::InsertTimeOption, bool, bool, bool, bool, bool, bool);
+ void do_remove_time ();
+ void remove_time (framepos_t pos, framecnt_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too,
+ bool glued_markers_too, bool locked_markers_too, bool tempo_too);
+
void tab_to_transient (bool forward);
void set_tempo_from_region ();
@@ -1366,7 +1377,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
boost::shared_ptr<ARDOUR::AudioTrack> get_nth_selected_audio_track (int nth) const;
boost::shared_ptr<ARDOUR::MidiTrack> get_nth_selected_midi_track (int nth) const;
- void toggle_midi_input_active (bool flip_others);
+ void toggle_midi_input_active (bool flip_others);
ARDOUR::InterThreadInfo* current_interthread_info;
@@ -1432,6 +1443,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void set_punch_from_selection ();
void set_punch_from_region ();
+ void set_session_start_from_playhead ();
+ void set_session_end_from_playhead ();
void set_session_extents_from_selection ();
void set_loop_from_region (bool play);
@@ -1609,21 +1622,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
ArdourCanvas::Container* time_line_group;
void hide_measures ();
- void draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
+ void draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
ARDOUR::TempoMap::BBTPointList::const_iterator& end);
void new_tempo_section ();
- void mouse_add_new_tempo_event (framepos_t where);
- void mouse_add_new_meter_event (framepos_t where);
void remove_tempo_marker (ArdourCanvas::Item*);
void remove_meter_marker (ArdourCanvas::Item*);
gint real_remove_tempo_marker (ARDOUR::TempoSection*);
gint real_remove_meter_marker (ARDOUR::MeterSection*);
- void edit_tempo_section (ARDOUR::TempoSection*);
- void edit_meter_section (ARDOUR::MeterSection*);
void edit_tempo_marker (TempoMarker&);
void edit_meter_marker (MeterMarker&);
void edit_control_point (ArdourCanvas::Item*);
@@ -1675,7 +1684,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void remove_metric_marks ();
void draw_metric_marks (const ARDOUR::Metrics& metrics);
- void compute_current_bbt_points (framepos_t left, framepos_t right,
+ void compute_current_bbt_points (framepos_t left, framepos_t right,
ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
ARDOUR::TempoMap::BBTPointList::const_iterator& end);
@@ -1700,11 +1709,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
ArdourDropdown visible_tracks_selector;
ArdourDropdown zoom_preset_selector;
- int32_t _visible_track_count;
- void build_track_count_menu ();
- void set_visible_track_count (int32_t);
-
- void set_zoom_preset(int64_t);
+ int32_t _visible_track_count;
+ void build_track_count_menu ();
+ void set_visible_track_count (int32_t);
+
+ void set_zoom_preset(int64_t);
Gtk::VBox toolbar_clock_vbox;
Gtk::VBox toolbar_selection_clock_vbox;
@@ -1796,7 +1805,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
SelectionMemento* _selection_memento;
void time_selection_changed ();
- void update_time_selection_display ();
+ void update_time_selection_display ();
void track_selection_changed ();
void region_selection_changed ();
sigc::connection editor_regions_selection_changed_connection;
@@ -1869,15 +1878,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/* autoscrolling */
- sigc::connection autoscroll_connection;
- bool autoscroll_horizontal_allowed;
- bool autoscroll_vertical_allowed;
- uint32_t autoscroll_cnt;
- Gtk::Widget* autoscroll_widget;
- ArdourCanvas::Rect autoscroll_boundary;
+ sigc::connection autoscroll_connection;
+ bool autoscroll_horizontal_allowed;
+ bool autoscroll_vertical_allowed;
+ uint32_t autoscroll_cnt;
+ Gtk::Widget* autoscroll_widget;
+ ArdourCanvas::Rect autoscroll_boundary;
bool autoscroll_canvas ();
- void start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect& boundary);
+ void start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect& boundary);
void stop_canvas_autoscroll ();
/* trimming */
@@ -1900,45 +1909,45 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/* Drag-n-Drop */
int convert_drop_to_paths (
- std::vector<std::string>& paths,
- const Glib::RefPtr<Gdk::DragContext>& context,
- gint x,
- gint y,
- const Gtk::SelectionData& data,
- guint info,
- guint time);
+ std::vector<std::string>& paths,
+ const Glib::RefPtr<Gdk::DragContext>& context,
+ gint x,
+ gint y,
+ const Gtk::SelectionData& data,
+ guint info,
+ guint time);
void track_canvas_drag_data_received (
- const Glib::RefPtr<Gdk::DragContext>& context,
- gint x,
- gint y,
- const Gtk::SelectionData& data,
- guint info,
- guint time);
+ const Glib::RefPtr<Gdk::DragContext>& context,
+ gint x,
+ gint y,
+ const Gtk::SelectionData& data,
+ guint info,
+ guint time);
void drop_paths (
- const Glib::RefPtr<Gdk::DragContext>& context,
- gint x,
- gint y,
- const Gtk::SelectionData& data,
- guint info,
- guint time);
+ const Glib::RefPtr<Gdk::DragContext>& context,
+ gint x,
+ gint y,
+ const Gtk::SelectionData& data,
+ guint info,
+ guint time);
void drop_regions (
- const Glib::RefPtr<Gdk::DragContext>& context,
- gint x,
- gint y,
- const Gtk::SelectionData& data,
- guint info,
- guint time);
+ const Glib::RefPtr<Gdk::DragContext>& context,
+ gint x,
+ gint y,
+ const Gtk::SelectionData& data,
+ guint info,
+ guint time);
void drop_routes (
- const Glib::RefPtr<Gdk::DragContext>& context,
- gint x,
- gint y,
- const Gtk::SelectionData& data,
- guint info,
- guint time);
+ const Glib::RefPtr<Gdk::DragContext>& context,
+ gint x,
+ gint y,
+ const Gtk::SelectionData& data,
+ guint info,
+ guint time);
/* audio export */
@@ -1979,12 +1988,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void duplicate_range (bool with_dialog);
- /** computes the timeline frame (sample) of an event whose coordinates
+ /** computes the timeline frame (sample) of an event whose coordinates
* are in canvas units (pixels, scroll offset included).
*/
framepos_t canvas_event_sample (GdkEvent const *, double* px = 0, double* py = 0) const;
- /** computes the timeline frame (sample) of an event whose coordinates
+ /** computes the timeline frame (sample) of an event whose coordinates
* are in window units (pixels, no scroll offset).
*/
framepos_t window_event_sample (GdkEvent const *, double* px = 0, double* py = 0) const;
@@ -2124,7 +2133,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void snap_to_internal (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ bool for_mark = false,
+ bool ensure_snap = false);
void timecode_snap_to_internal (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
@@ -2205,7 +2215,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
bool _following_mixer_selection;
int time_fx (ARDOUR::RegionList&, float val, bool pitching);
- void note_edit_done (int, EditNoteDialog*);
+ void note_edit_done (int, EditNoteDialog*);
void toggle_sound_midi_notes ();
/** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 322a823..71ce594 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -196,6 +196,10 @@ Editor::register_actions ()
reg_sens (editor_actions, "deselect-all", _("Deselect All"), sigc::mem_fun(*this, &Editor::deselect_all));
reg_sens (editor_actions, "invert-selection", _("Invert Selection"), sigc::mem_fun(*this, &Editor::invert_selection));
+ reg_sens (editor_actions, "select-loop-range", _("Set Range in Loop Range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop));
+ reg_sens (editor_actions, "select-punch-range", _("Set Range to Punch Range"), sigc::mem_fun(*this, &Editor::set_selection_from_punch));
+ reg_sens (editor_actions, "select-from-regions", _("Set Range to Selected Regions"), sigc::mem_fun(*this, &Editor::set_selection_from_region));
+
reg_sens (editor_actions, "select-all-after-edit-cursor", _("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true));
reg_sens (editor_actions, "alternate-select-all-after-edit-cursor", _("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true));
reg_sens (editor_actions, "select-all-before-edit-cursor", _("Select All Before Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false));
@@ -229,7 +233,7 @@ Editor::register_actions ()
for (int i = 1; i <= 12; ++i) {
string const a = string_compose (X_("goto-visual-state-%1"), i);
- string const n = string_compose (_("Goto View %1"), i);
+ string const n = string_compose (_("Go to View %1"), i);
reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::cancel_visual_state_op), i - 1));
}
@@ -244,6 +248,9 @@ Editor::register_actions ()
reg_sens (editor_actions, "jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
reg_sens (editor_actions, "alternate-jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
+ reg_sens (editor_actions, "set-session-start-from-playhead", _("Set Session Start from Playhead"), sigc::mem_fun(*this, &Editor::set_session_start_from_playhead));
+ reg_sens (editor_actions, "set-session-end-from-playhead", _("Set Session End from Playhead"), sigc::mem_fun(*this, &Editor::set_session_end_from_playhead));
+
reg_sens (editor_actions, "add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
reg_sens (editor_actions, "alternate-add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
@@ -398,6 +405,10 @@ Editor::register_actions ()
act = reg_sens (editor_actions, "insert-time", _("Insert Time"), (sigc::mem_fun(*this, &Editor::do_insert_time)));
ActionManager::track_selection_sensitive_actions.push_back (act);
+ act = ActionManager::register_action (editor_actions, "remove-time", _("Remove Time"), (mem_fun(*this, &Editor::do_remove_time)));
+ ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::track_selection_sensitive_actions.push_back (act);
+
act = reg_sens (editor_actions, "toggle-track-active", _("Toggle Active"), (sigc::mem_fun(*this, &Editor::toggle_tracks_active)));
ActionManager::track_selection_sensitive_actions.push_back (act);
@@ -450,38 +461,38 @@ Editor::register_actions ()
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
mouse_move_button.set_related_action (act);
- mouse_move_button.set_image (::get_icon("tool_object"));
+ mouse_move_button.set_icon (Gtkmm2ext::ArdourIcon::ToolGrab);
mouse_move_button.set_name ("mouse mode button");
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));
mouse_select_button.set_related_action (act);
- mouse_select_button.set_image (::get_icon("tool_range"));
+ mouse_select_button.set_icon (Gtkmm2ext::ArdourIcon::ToolRange);
mouse_select_button.set_name ("mouse mode button");
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));
mouse_draw_button.set_related_action (act);
- mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
+ mouse_draw_button.set_icon (Gtkmm2ext::ArdourIcon::ToolDraw);
mouse_draw_button.set_name ("mouse mode button");
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));
mouse_audition_button.set_related_action (act);
- mouse_audition_button.set_image (::get_icon("tool_audition"));
+ mouse_audition_button.set_icon (Gtkmm2ext::ArdourIcon::ToolAudition);
mouse_audition_button.set_name ("mouse mode button");
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));
mouse_timefx_button.set_related_action (act);
- mouse_timefx_button.set_image (::get_icon("tool_stretch"));
+ mouse_timefx_button.set_icon (Gtkmm2ext::ArdourIcon::ToolStretch);
mouse_timefx_button.set_name ("mouse mode button");
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Content Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseContent));
mouse_content_button.set_related_action (act);
- mouse_content_button.set_image (::get_icon("tool_content"));
+ mouse_content_button.set_icon (Gtkmm2ext::ArdourIcon::ToolContent);
mouse_content_button.set_name ("mouse mode button");
if(!Profile->get_mixbus()) {
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-cut", _("Cut Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseCut));
mouse_cut_button.set_related_action (act);
- mouse_cut_button.set_image (::get_icon("tool_cut"));
+ mouse_cut_button.set_icon (Gtkmm2ext::ArdourIcon::ToolCut);
mouse_cut_button.set_name ("mouse mode button");
}
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index c1929bd..6641792 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -1256,12 +1256,16 @@ Editor::which_canvas_cursor(ItemType type) const
cursor = _cursors->cross_hair;
break;
case LeftFrameHandle:
- if ( effective_mouse_mode() == MouseObject ) // (smart mode): if the user is in the top half, override the trim cursor, since they are in the range zone
- cursor = which_trim_cursor (true); //alternatively, one could argue that we _should_ allow trims here, and disallow range selection
+ if ( effective_mouse_mode() == MouseObject ) // (smart mode): if the user is in the btm half, show the trim cursor
+ cursor = which_trim_cursor (true);
+ else
+ cursor = _cursors->selector; // (smart mode): in the top half, just show the selection (range) cursor
break;
case RightFrameHandle:
if ( effective_mouse_mode() == MouseObject ) //see above
cursor = which_trim_cursor (false);
+ else
+ cursor = _cursors->selector;
break;
case StartCrossFadeItem:
cursor = _cursors->fade_in;
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 9fbf2ef..b079972 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -218,6 +218,8 @@ Drag::Drag (Editor* e, ArdourCanvas::Item* i, bool trackview_only)
: _editor (e)
, _item (i)
, _pointer_frame_offset (0)
+ , _x_constrained (false)
+ , _y_constrained (false)
, _trackview_only (trackview_only)
, _move_threshold_passed (false)
, _starting_point_passed (false)
@@ -226,6 +228,7 @@ Drag::Drag (Editor* e, ArdourCanvas::Item* i, bool trackview_only)
, _raw_grab_frame (0)
, _grab_frame (0)
, _last_pointer_frame (0)
+ , _snap_delta (0)
{
}
@@ -248,22 +251,11 @@ Drag::swap_grab (ArdourCanvas::Item* new_item, Gdk::Cursor* cursor, uint32_t /*t
void
Drag::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
{
- // if dragging with button2, the motion is x constrained, with Alt-button2 it is y constrained
- if (Keyboard::is_button2_event (&event->button)) {
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::SecondaryModifier)) {
- _y_constrained = true;
- _x_constrained = false;
- } else {
- _y_constrained = false;
- _x_constrained = true;
- }
- } else {
- _x_constrained = false;
- _y_constrained = false;
- }
+ /* we set up x/y dragging constraints on first move */
_raw_grab_frame = _editor->canvas_event_sample (event, &_grab_x, &_grab_y);
+
setup_pointer_frame_offset ();
_grab_frame = adjusted_frame (_raw_grab_frame, event);
_last_pointer_frame = _grab_frame;
@@ -343,6 +335,16 @@ Drag::adjusted_current_frame (GdkEvent const * event, bool snap) const
return adjusted_frame (_drags->current_pointer_frame (), event, snap);
}
+frameoffset_t
+Drag::snap_delta (guint state) const
+{
+ if (ArdourKeyboard::indicates_snap_delta (state)) {
+ return _snap_delta;
+ }
+
+ return 0;
+}
+
double
Drag::current_pointer_x() const
{
@@ -359,6 +361,14 @@ Drag::current_pointer_y () const
return _drags->current_pointer_y () - _editor->get_trackview_group()->canvas_origin().y;
}
+void
+Drag::setup_snap_delta (framepos_t pos)
+{
+ framepos_t temp = pos;
+ _editor->snap_to (temp, ARDOUR::RoundNearest, false, true);
+ _snap_delta = temp - pos;
+}
+
bool
Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
{
@@ -394,6 +404,39 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
} else {
_initially_vertical = false;
}
+ /** check constraints for this drag.
+ * Note that the current convention is to use "contains" for
+ * key modifiers during motion and "equals" when initiating a drag.
+ * In this case we haven't moved yet, so "equals" applies here.
+ */
+ if (Config->get_edit_mode() != Lock) {
+ if (event->motion.state & Gdk::BUTTON2_MASK) {
+ // if dragging with button2, the motion is x constrained, with constraint modifier it is y constrained
+ if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::constraint_modifier ())) {
+ _x_constrained = false;
+ _y_constrained = true;
+ } else {
+ _x_constrained = true;
+ _y_constrained = false;
+ }
+ } else if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::constraint_modifier ())) {
+ // if dragging normally, the motion is constrained to the first direction of movement.
+ if (_initially_vertical) {
+ _x_constrained = true;
+ _y_constrained = false;
+ } else {
+ _x_constrained = false;
+ _y_constrained = true;
+ }
+ }
+ } else {
+ if (event->button.state & Gdk::BUTTON2_MASK) {
+ _x_constrained = false;
+ } else {
+ _x_constrained = true;
+ }
+ _y_constrained = false;
+ }
}
if (!from_autoscroll) {
@@ -555,7 +598,6 @@ RegionMotionDrag::RegionMotionDrag (Editor* e, ArdourCanvas::Item* i, RegionView
, _total_x_delta (0)
, _last_pointer_time_axis_view (0)
, _last_pointer_layer (0)
- , _single_axis (false)
, _ndropzone (0)
, _pdropzone (0)
, _ddropzone (0)
@@ -567,10 +609,7 @@ void
RegionMotionDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
{
Drag::start_grab (event, cursor);
-
- if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)) {
- _single_axis = true;
- }
+ setup_snap_delta (_last_frame_position);
show_verbose_cursor_time (_last_frame_position);
@@ -588,7 +627,7 @@ RegionMotionDrag::compute_x_delta (GdkEvent const * event, framepos_t* pending_r
/* compute the amount of pointer motion in frames, and where
the region would be if we moved it by that much.
*/
- *pending_region_position = adjusted_current_frame (event);
+ *pending_region_position = adjusted_frame (_drags->current_pointer_frame () + snap_delta (event->button.state), event, true);
framepos_t sync_frame;
framecnt_t sync_offset;
@@ -600,11 +639,11 @@ RegionMotionDrag::compute_x_delta (GdkEvent const * event, framepos_t* pending_r
*/
if (sync_dir >= 0 || (sync_dir < 0 && *pending_region_position >= sync_offset)) {
- sync_frame = *pending_region_position + (sync_dir*sync_offset);
+ sync_frame = *pending_region_position + (sync_dir * sync_offset);
_editor->snap_to_with_modifier (sync_frame, event);
- *pending_region_position = _primary->region()->adjust_to_sync (sync_frame);
+ *pending_region_position = _primary->region()->adjust_to_sync (sync_frame) - snap_delta (event->button.state);
} else {
*pending_region_position = _last_frame_position;
@@ -616,8 +655,7 @@ RegionMotionDrag::compute_x_delta (GdkEvent const * event, framepos_t* pending_r
double dx = 0;
- /* in locked edit mode, reverse the usual meaning of _x_constrained */
- bool const x_move_allowed = Config->get_edit_mode() == Lock ? _x_constrained : !_x_constrained;
+ bool const x_move_allowed = !_x_constrained;
if ((*pending_region_position != _last_frame_position) && x_move_allowed) {
@@ -750,18 +788,6 @@ RegionMotionDrag::motion (GdkEvent* event, bool first_move)
assert (!_views.empty ());
- if (first_move) {
- if (_single_axis) {
- if (initially_vertical()) {
- _y_constrained = false;
- _x_constrained = true;
- } else {
- _y_constrained = true;
- _x_constrained = false;
- }
- }
- }
-
/* Note: time axis views in this method are often expressed as an index into the _time_axis_views vector */
/* Find the TimeAxisView that the pointer is now over */
@@ -1304,14 +1330,6 @@ RegionMoveDrag::finished (GdkEvent* ev, bool movement_occurred)
return;
}
- /* reverse this here so that we have the correct logic to finalize
- the drag.
- */
-
- if (Config->get_edit_mode() == Lock) {
- _x_constrained = !_x_constrained;
- }
-
assert (!_views.empty ());
/* We might have hidden region views so that they weren't visible during the drag
@@ -2318,6 +2336,7 @@ RegionCreateDrag::aborted (bool)
NoteResizeDrag::NoteResizeDrag (Editor* e, ArdourCanvas::Item* i)
: Drag (e, i)
, region (0)
+ , _snap_delta (0)
{
DEBUG_TRACE (DEBUG::Drags, "New NoteResizeDrag\n");
}
@@ -2342,9 +2361,13 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
region = &cnote->region_view();
+ double temp;
+ temp = region->snap_to_pixel (cnote->x0 (), true);
+ _snap_delta = temp - cnote->x0 ();
+
_item->grab ();
- if (event->motion.state & Keyboard::PrimaryModifier) {
+ if (event->motion.state & ArdourKeyboard::note_size_relative_modifier ()) {
relative = false;
} else {
relative = true;
@@ -2377,7 +2400,7 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
}
void
-NoteResizeDrag::motion (GdkEvent* /*event*/, bool /*first_move*/)
+NoteResizeDrag::motion (GdkEvent* event, bool /*first_move*/)
{
MidiRegionSelection& ms (_editor->get_selection().midi_regions);
for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
@@ -2385,21 +2408,62 @@ NoteResizeDrag::motion (GdkEvent* /*event*/, bool /*first_move*/)
assert (nb);
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
if (mrv) {
- mrv->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ double sd = 0.0;
+ bool snap = true;
+ bool apply_snap_delta = ArdourKeyboard::indicates_snap_delta (event->button.state);
+
+ if (ArdourKeyboard::indicates_snap (event->button.state)) {
+ if (_editor->snap_mode () != SnapOff) {
+ snap = false;
+ }
+ } else {
+ if (_editor->snap_mode () == SnapOff) {
+ snap = false;
+ /* inverted logic here - we;re in snapoff but we've pressed the snap delta modifier */
+ if (apply_snap_delta) {
+ snap = true;
+ }
+ }
+ }
+
+ if (apply_snap_delta) {
+ sd = _snap_delta;
+ }
+
+ mrv->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative, sd, snap);
}
}
}
void
-NoteResizeDrag::finished (GdkEvent*, bool /*movement_occurred*/)
+NoteResizeDrag::finished (GdkEvent* event, bool /*movement_occurred*/)
{
MidiRegionSelection& ms (_editor->get_selection().midi_regions);
for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase"));
assert (nb);
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+ double sd = 0.0;
+ bool snap = true;
+ bool apply_snap_delta = ArdourKeyboard::indicates_snap_delta (event->button.state);
if (mrv) {
- mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative);
+ if (ArdourKeyboard::indicates_snap (event->button.state)) {
+ if (_editor->snap_mode () != SnapOff) {
+ snap = false;
+ }
+ } else {
+ if (_editor->snap_mode () == SnapOff) {
+ snap = false;
+ /* inverted logic here - we;re in snapoff but we've pressed the snap delta modifier */
+ if (apply_snap_delta) {
+ snap = true;
+ }
+ }
+ }
+ if (apply_snap_delta) {
+ sd = _snap_delta;
+ }
+ mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative, sd, snap);
}
}
@@ -2597,8 +2661,9 @@ TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
framecnt_t const region_length = (framecnt_t) (_primary->region()->length() / speed);
framepos_t const pf = adjusted_current_frame (event);
+ setup_snap_delta (region_start);
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::trim_contents_modifier ())) {
/* Move the contents of the region around without changing the region bounds */
_operation = ContentsTrim;
Drag::start_grab (event, _editor->cursors()->trimmer);
@@ -2607,8 +2672,7 @@ TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
if (pf < (region_start + region_length/2)) {
/* closer to front */
_operation = StartTrim;
-
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::trim_anchored_modifier ())) {
Drag::start_grab (event, _editor->cursors()->anchored_left_side_trim);
} else {
Drag::start_grab (event, _editor->cursors()->left_side_trim);
@@ -2616,17 +2680,18 @@ TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
} else {
/* closer to end */
_operation = EndTrim;
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::trim_anchored_modifier ())) {
Drag::start_grab (event, _editor->cursors()->anchored_right_side_trim);
} else {
Drag::start_grab (event, _editor->cursors()->right_side_trim);
}
}
}
-
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ /* jump trim disabled for now
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::trim_jump_modifier ())) {
_jump_position_when_done = true;
}
+ */
switch (_operation) {
case StartTrim:
@@ -2636,7 +2701,7 @@ TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
}
break;
case EndTrim:
- show_verbose_cursor_time (region_end);
+ show_verbose_cursor_duration (region_start, region_end);
break;
case ContentsTrim:
show_verbose_cursor_time (pf);
@@ -2662,8 +2727,8 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
if (tv && tv->is_track()) {
speed = tv->track()->speed();
}
-
- framecnt_t dt = adjusted_current_frame (event) - raw_grab_frame () + _pointer_frame_offset;
+ framecnt_t adj_frame = adjusted_frame (_drags->current_pointer_frame () + snap_delta (event->button.state), event, true);
+ framecnt_t dt = adj_frame - raw_grab_frame () + _pointer_frame_offset - snap_delta (event->button.state);
if (first_move) {
@@ -2709,7 +2774,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
bool non_overlap_trim = false;
- if (event && Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (event && Keyboard::modifier_state_contains (event->button.state, ArdourKeyboard::trim_overlap_modifier ())) {
non_overlap_trim = true;
}
@@ -2795,7 +2860,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
show_verbose_cursor_time ((framepos_t) (rv->region()->position() / speed));
break;
case EndTrim:
- show_verbose_cursor_time ((framepos_t) (rv->region()->last_frame() / speed));
+ show_verbose_cursor_duration ((framepos_t) rv->region()->position() / speed, (framepos_t) rv->region()->last_frame() / speed);
break;
case ContentsTrim:
// show_verbose_cursor_time (frame_delta);
@@ -2803,7 +2868,6 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
}
}
-
void
TrimDrag::finished (GdkEvent* event, bool movement_occurred)
{
@@ -3247,10 +3311,11 @@ void
CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c)
{
Drag::start_grab (event, c);
+ setup_snap_delta (_editor->playhead_cursor->current_frame ());
_grab_zoom = _editor->samples_per_pixel;
- framepos_t where = _editor->canvas_event_sample (event);
+ framepos_t where = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
_editor->snap_to_with_modifier (where, event);
@@ -3288,15 +3353,16 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c)
}
}
- fake_locate (where);
+ fake_locate (where - snap_delta (event->button.state));
}
void
CursorDrag::motion (GdkEvent* event, bool)
{
- framepos_t const adjusted_frame = adjusted_current_frame (event);
- if (adjusted_frame != last_pointer_frame()) {
- fake_locate (adjusted_frame);
+ framepos_t where = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (where, event);
+ if (where != last_pointer_frame()) {
+ fake_locate (where - snap_delta (event->button.state));
}
}
@@ -3347,6 +3413,7 @@ FadeInDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (_primary);
boost::shared_ptr<AudioRegion> const r = arv->audio_region ();
+ setup_snap_delta (r->position ());
show_verbose_cursor_duration (r->position(), r->position() + r->fade_in()->back()->when, 32);
}
@@ -3363,7 +3430,11 @@ void
FadeInDrag::motion (GdkEvent* event, bool)
{
framecnt_t fade_length;
- framepos_t const pos = adjusted_current_frame (event);
+
+ framepos_t pos = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (pos, event);
+ pos -= snap_delta (event->button.state);
+
boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (_primary->region ());
if (pos < (region->position() + 64)) {
@@ -3396,8 +3467,9 @@ FadeInDrag::finished (GdkEvent* event, bool movement_occurred)
}
framecnt_t fade_length;
-
- framepos_t const pos = adjusted_current_frame (event);
+ framepos_t pos = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (pos, event);
+ pos -= snap_delta (event->button.state);
boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (_primary->region ());
@@ -3459,6 +3531,7 @@ FadeOutDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (_primary);
boost::shared_ptr<AudioRegion> r = arv->audio_region ();
+ setup_snap_delta (r->last_frame ());
show_verbose_cursor_duration (r->last_frame() - r->fade_out()->back()->when, r->last_frame());
}
@@ -3476,7 +3549,9 @@ FadeOutDrag::motion (GdkEvent* event, bool)
{
framecnt_t fade_length;
- framepos_t const pos = adjusted_current_frame (event);
+ framepos_t pos = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (pos, event);
+ pos -= snap_delta (event->button.state);
boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (_primary->region ());
@@ -3511,7 +3586,9 @@ FadeOutDrag::finished (GdkEvent* event, bool movement_occurred)
framecnt_t fade_length;
- framepos_t const pos = adjusted_current_frame (event);
+ framepos_t pos = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (pos, event);
+ pos -= snap_delta (event->button.state);
boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (_primary->region ());
@@ -3707,7 +3784,7 @@ MarkerDrag::motion (GdkEvent* event, bool)
framepos_t const newframe = adjusted_current_frame (event);
framepos_t next = newframe;
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ if (Keyboard::modifier_state_contains (event->button.state, ArdourKeyboard::push_points_modifier ())) {
move_both = true;
}
@@ -3965,13 +4042,16 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
_fixed_grab_x = _point->get_x();
_fixed_grab_y = _point->get_y();
+ framepos_t pos = _editor->pixel_to_sample (_fixed_grab_x);
+ setup_snap_delta (pos);
+
float const fraction = 1 - (_point->get_y() / _point->line().height());
_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
- _pushing = Keyboard::modifier_state_contains (event->button.state, Keyboard::PrimaryModifier);
+ _pushing = Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::push_points_modifier ());
if (!_point->can_slide ()) {
_x_constrained = true;
@@ -3984,7 +4064,7 @@ ControlPointDrag::motion (GdkEvent* event, bool)
double dx = _drags->current_pointer_x() - last_pointer_x();
double dy = current_pointer_y() - last_pointer_y();
- if (event->button.state & Keyboard::SecondaryModifier) {
+ if (event->button.state & ArdourKeyboard::fine_adjust_modifier ()) {
dx *= 0.1;
dy *= 0.1;
}
@@ -4017,12 +4097,13 @@ ControlPointDrag::motion (GdkEvent* event, bool)
cy = max (0.0, cy);
cy = min ((double) _point->line().height(), cy);
- framepos_t cx_frames = _editor->pixel_to_sample (cx);
+ framepos_t cx_frames = _editor->pixel_to_sample (cx) + snap_delta (event->button.state);
if (!_x_constrained) {
_editor->snap_to_with_modifier (cx_frames, event);
}
+ cx_frames -= snap_delta (event->button.state);
cx_frames = min (cx_frames, _point->line().maximum_time());
float const fraction = 1.0 - (cy / _point->line().height());
@@ -4038,8 +4119,7 @@ ControlPointDrag::finished (GdkEvent* event, bool movement_occurred)
if (!movement_occurred) {
/* just a click */
-
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask (Keyboard::TertiaryModifier))) {
_editor->reset_point_selection ();
}
@@ -4070,9 +4150,9 @@ ControlPointDrag::active (Editing::MouseMode m)
}
LineDrag::LineDrag (Editor* e, ArdourCanvas::Item* i)
- : Drag (e, i),
- _line (0),
- _cumulative_y_drag (0)
+ : Drag (e, i)
+ , _line (0)
+ , _cumulative_y_drag (0)
{
DEBUG_TRACE (DEBUG::Drags, "New LineDrag\n");
}
@@ -4123,7 +4203,7 @@ LineDrag::motion (GdkEvent* event, bool)
{
double dy = current_pointer_y() - last_pointer_y();
- if (event->button.state & Keyboard::SecondaryModifier) {
+ if (event->button.state & ArdourKeyboard::fine_adjust_modifier ()) {
dy *= 0.1;
}
@@ -4432,7 +4512,12 @@ TimeFXDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
{
Drag::start_grab (event, cursor);
- show_verbose_cursor_time (adjusted_current_frame (event));
+ _editor->get_selection().add (_primary);
+
+ framepos_t where = _primary->region()->position();
+ setup_snap_delta (where);
+
+ show_verbose_cursor_duration (where, adjusted_current_frame (event), 0);
}
void
@@ -4444,14 +4529,15 @@ TimeFXDrag::motion (GdkEvent* event, bool)
pair<TimeAxisView*, double> const tv = _editor->trackview_by_y_position (grab_y());
int layer = tv.first->layer_display() == Overlaid ? 0 : tv.second;
int layers = tv.first->layer_display() == Overlaid ? 1 : cv->layers();
-
- framepos_t const pf = adjusted_current_frame (event);
+ framepos_t pf = _editor->canvas_event_sample (event) + snap_delta (event->button.state);
+ _editor->snap_to_with_modifier (pf, event);
+ pf -= snap_delta (event->button.state);
if (pf > rv->region()->position()) {
rv->get_time_axis_view().show_timestretch (rv->region()->position(), pf, layers, layer);
}
- show_verbose_cursor_time (pf);
+ show_verbose_cursor_duration (_primary->region()->position(), pf, 0);
}
void
@@ -4909,7 +4995,7 @@ RangeMarkerBarDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
case CreateTransportMarker:
case CreateCDMarker:
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::CopyModifier)) {
_copy = true;
} else {
_copy = false;
@@ -5130,6 +5216,7 @@ void
NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
{
Drag::start_grab (event);
+ setup_snap_delta (_region->source_beats_to_absolute_frames (_primary->note()->time ()));
if (!(_was_selected = _primary->selected())) {
@@ -5157,7 +5244,7 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
/** @return Current total drag x change in frames */
frameoffset_t
-NoteDrag::total_dx () const
+NoteDrag::total_dx (const guint state) const
{
/* dx in frames */
frameoffset_t const dx = _editor->pixel_to_sample (_drags->current_pointer_x() - grab_x());
@@ -5166,15 +5253,38 @@ NoteDrag::total_dx () const
frameoffset_t const n = _region->source_beats_to_absolute_frames (_primary->note()->time ());
/* new time of the primary note in session frames */
- frameoffset_t st = n + dx;
+ frameoffset_t st = n + dx + snap_delta (state);
framepos_t const rp = _region->region()->position ();
/* prevent the note being dragged earlier than the region's position */
st = max (st, rp);
- /* snap and return corresponding delta */
- return _region->snap_frame_to_frame (st - rp) + rp - n;
+ /* possibly snap and return corresponding delta */
+
+ bool snap = true;
+
+ if (ArdourKeyboard::indicates_snap (state)) {
+ if (_editor->snap_mode () != SnapOff) {
+ snap = false;
+ }
+ } else {
+ if (_editor->snap_mode () == SnapOff) {
+ snap = false;
+ /* inverted logic here - we;re in snapoff but we've pressed the snap delta modifier */
+ if (ArdourKeyboard::indicates_snap_delta (state)) {
+ snap = true;
+ }
+ }
+ }
+
+ frameoffset_t ret;
+ if (snap) {
+ ret = _region->snap_frame_to_frame (st - rp) + rp - n - snap_delta (state);
+ } else {
+ ret = st - n - snap_delta (state);
+ }
+ return ret;
}
/** @return Current total drag y change in note number */
@@ -5193,10 +5303,10 @@ NoteDrag::total_dy () const
}
void
-NoteDrag::motion (GdkEvent *, bool)
+NoteDrag::motion (GdkEvent * event, bool)
{
/* Total change in x and y since the start of the drag */
- frameoffset_t const dx = total_dx ();
+ frameoffset_t const dx = total_dx (event->button.state);
int8_t const dy = total_dy ();
/* Now work out what we have to do to the note canvas items to set this new drag delta */
@@ -5265,7 +5375,7 @@ NoteDrag::finished (GdkEvent* ev, bool moved)
}
}
} else {
- _region->note_dropped (_primary, total_dx(), total_dy());
+ _region->note_dropped (_primary, total_dx (ev->button.state), total_dy());
}
}
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h
index e6f800c..6fcd927 100644
--- a/gtk2_ardour/editor_drag.h
+++ b/gtk2_ardour/editor_drag.h
@@ -213,13 +213,18 @@ protected:
return _last_pointer_y;
}
- double last_pointer_frame () const {
+ ARDOUR::framepos_t last_pointer_frame () const {
return _last_pointer_frame;
}
+ ARDOUR::frameoffset_t snap_delta (guint const) const;
+
double current_pointer_x () const;
double current_pointer_y () const;
+ /* sets snap delta from unsnapped pos */
+ void setup_snap_delta (framepos_t pos);
+
boost::shared_ptr<ARDOUR::Region> add_midi_region (MidiTimeAxisView*);
void show_verbose_cursor_time (framepos_t);
@@ -248,6 +253,11 @@ private:
ARDOUR::framepos_t _raw_grab_frame; ///< unsnapped frame that the mouse was at when start_grab was called, or 0
ARDOUR::framepos_t _grab_frame; ///< adjusted_frame that the mouse was at when start_grab was called, or 0
ARDOUR::framepos_t _last_pointer_frame; ///< adjusted_frame the last time a motion occurred
+
+ /* difference between some key position's snapped and unsnapped
+ * framepos. used for relative snap.
+ */
+ ARDOUR::frameoffset_t _snap_delta;
CursorContext::Handle _cursor_ctx; ///< cursor change context
};
@@ -335,8 +345,6 @@ protected:
double _total_x_delta;
int _last_pointer_time_axis_view;
double _last_pointer_layer;
- bool _single_axis;
-
private:
uint32_t _ndropzone;
uint32_t _pdropzone;
@@ -503,6 +511,7 @@ private:
MidiRegionView* region;
bool relative;
bool at_front;
+ double _snap_delta;
};
/** Drags to move MIDI notes */
@@ -518,7 +527,7 @@ class NoteDrag : public Drag
private:
- ARDOUR::frameoffset_t total_dx () const;
+ ARDOUR::frameoffset_t total_dx (const guint) const;
int8_t total_dy () const;
MidiRegionView* _region;
@@ -541,7 +550,7 @@ public:
void aborted (bool);
bool active (Editing::MouseMode mode) {
- return mode == Editing::MouseDraw;
+ return mode == Editing::MouseDraw || mode == Editing::MouseContent;
}
bool y_movement_matters () const {
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 78f8063..392b3bb 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -636,21 +636,14 @@ Editor::LocationMarkers::setup_lines ()
}
void
-Editor::mouse_add_new_marker (framepos_t where, bool is_cd, bool is_xrun)
+Editor::mouse_add_new_marker (framepos_t where, bool is_cd)
{
- string markername, markerprefix;
+ string markername;
int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark);
- if (is_xrun) {
- markerprefix = "xrun";
- flags = Location::IsMark;
- } else {
- markerprefix = "mark";
- }
-
if (_session) {
- _session->locations()->next_available_name(markername, markerprefix);
- if (!is_xrun && !choose_new_marker_name(markername)) {
+ _session->locations()->next_available_name(markername, _("mark"));
+ if (!choose_new_marker_name(markername)) {
return;
}
Location *location = new Location (*_session, where, where, markername, (Location::Flags) flags);
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index def38da..5c10678 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1659,6 +1659,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case SelectionItem:
break;
+ case WaveItem:
+ {
+ if (entered_regionview) {
+ entered_regionview->entered();
+ }
+ }
+ break;
+
default:
break;
}
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 116bc45..2c44508 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -76,7 +76,7 @@
#include "editor_regions.h"
#include "editor_routes.h"
#include "gui_thread.h"
-#include "insert_time_dialog.h"
+#include "insert_remove_time_dialog.h"
#include "interthread_progress_window.h"
#include "item_counts.h"
#include "keyboard.h"
@@ -2115,6 +2115,54 @@ Editor::add_location_mark (framepos_t where)
}
void
+Editor::set_session_start_from_playhead ()
+{
+ if (!_session)
+ return;
+
+ Location* loc;
+ if ((loc = _session->locations()->session_range_location()) == 0) { //should never happen
+ _session->set_session_extents ( _session->audible_frame(), _session->audible_frame() );
+ } else {
+ XMLNode &before = loc->get_state();
+
+ _session->set_session_extents ( _session->audible_frame(), loc->end() );
+
+ XMLNode &after = loc->get_state();
+
+ begin_reversible_command (_("Set session start"));
+
+ _session->add_command (new MementoCommand<Location>(*loc, &before, &after));
+
+ commit_reversible_command ();
+ }
+}
+
+void
+Editor::set_session_end_from_playhead ()
+{
+ if (!_session)
+ return;
+
+ Location* loc;
+ if ((loc = _session->locations()->session_range_location()) == 0) { //should never happen
+ _session->set_session_extents ( _session->audible_frame(), _session->audible_frame() );
+ } else {
+ XMLNode &before = loc->get_state();
+
+ _session->set_session_extents ( loc->start(), _session->audible_frame() );
+
+ XMLNode &after = loc->get_state();
+
+ begin_reversible_command (_("Set session start"));
+
+ _session->add_command (new MementoCommand<Location>(*loc, &before, &after));
+
+ commit_reversible_command ();
+ }
+}
+
+void
Editor::add_location_from_playhead_cursor ()
{
add_location_mark (_session->audible_frame());
@@ -2435,7 +2483,7 @@ Editor::play_from_edit_point_and_return ()
framepos_t start_frame;
framepos_t return_frame;
- start_frame = get_preferred_edit_position (true);
+ start_frame = get_preferred_edit_position ( EDIT_IGNORE_PHEAD );
if (_session->transport_rolling()) {
_session->request_locate (start_frame, false);
@@ -4533,7 +4581,7 @@ Editor::paste (float times, bool from_context)
{
DEBUG_TRACE (DEBUG::CutNPaste, "paste to preferred edit pos\n");
- paste_internal (get_preferred_edit_position (false, from_context), times);
+ paste_internal (get_preferred_edit_position (EDIT_IGNORE_NONE, from_context), times);
}
void
@@ -5204,7 +5252,7 @@ Editor::insert_patch_change (bool from_context)
return;
}
- const framepos_t p = get_preferred_edit_position (false, from_context);
+ const framepos_t p = get_preferred_edit_position (EDIT_IGNORE_NONE, from_context);
/* XXX: bit of a hack; use the MIDNAM from the first selected region;
there may be more than one, but the PatchChangeDialog can only offer
@@ -6038,8 +6086,6 @@ Editor::set_session_extents_from_selection ()
if (!get_selection_extents ( start, end))
return;
- begin_reversible_command (_("set session start/end from selection"));
-
Location* loc;
if ((loc = _session->locations()->session_range_location()) == 0) {
_session->set_session_extents ( start, end ); // this will create a new session range; no need for UNDO
@@ -6050,6 +6096,8 @@ Editor::set_session_extents_from_selection ()
XMLNode &after = loc->get_state();
+ begin_reversible_command (_("set session start/end from selection"));
+
_session->add_command (new MementoCommand<Location>(*loc, &before, &after));
commit_reversible_command ();
@@ -6878,7 +6926,7 @@ Editor::do_insert_time ()
return;
}
- InsertTimeDialog d (*this);
+ InsertRemoveTimeDialog d (*this);
int response = d.run ();
if (response != RESPONSE_OK) {
@@ -6982,25 +7030,24 @@ Editor::insert_time (
Locations::LocationList::const_iterator tmp;
- bool const was_locked = (*i)->locked ();
- if (locked_markers_too) {
- (*i)->unlock ();
- }
-
if ((*i)->position_lock_style() == AudioTime || glued_markers_too) {
+ bool const was_locked = (*i)->locked ();
+ if (locked_markers_too) {
+ (*i)->unlock ();
+ }
if ((*i)->start() >= pos) {
- (*i)->set_start ((*i)->start() + frames);
+ // move end first, in case we're moving by more than the length of the range
if (!(*i)->is_mark()) {
(*i)->set_end ((*i)->end() + frames);
}
+ (*i)->set_start ((*i)->start() + frames);
moved = true;
}
- }
-
- if (was_locked) {
- (*i)->lock ();
+ if (was_locked) {
+ (*i)->lock ();
+ }
}
}
@@ -7020,6 +7067,167 @@ Editor::insert_time (
}
void
+Editor::do_remove_time ()
+{
+ if (selection->tracks.empty()) {
+ return;
+ }
+
+ framepos_t pos = get_preferred_edit_position (EDIT_IGNORE_MOUSE);
+ InsertRemoveTimeDialog d (*this, true);
+
+ int response = d.run ();
+
+ if (response != RESPONSE_OK) {
+ return;
+ }
+
+ framecnt_t distance = d.distance();
+
+ if (distance == 0) {
+ return;
+ }
+
+ remove_time (
+ pos,
+ distance,
+ SplitIntersected,
+ d.move_glued(),
+ d.move_markers(),
+ d.move_glued_markers(),
+ d.move_locked_markers(),
+ d.move_tempos()
+ );
+}
+
+void
+Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt,
+ bool ignore_music_glue, bool markers_too, bool glued_markers_too, bool locked_markers_too, bool tempo_too)
+{
+ bool commit = false;
+
+ if (Config->get_edit_mode() == Lock) {
+ error << (_("Cannot insert or delete time when in Lock edit.")) << endmsg;
+ return;
+ }
+
+ begin_reversible_command (_("cut time"));
+
+ for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
+ /* regions */
+ boost::shared_ptr<Playlist> pl = (*x)->playlist();
+
+ if (pl) {
+
+ XMLNode &before = pl->get_state();
+
+ std::list<AudioRange> rl;
+ AudioRange ar(pos, pos+frames, 0);
+ rl.push_back(ar);
+ pl->cut (rl);
+ pl->shift (pos, -frames, true, ignore_music_glue);
+
+ XMLNode &after = pl->get_state();
+
+ _session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
+ commit = true;
+ }
+
+ /* automation */
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
+ if (rtav) {
+ rtav->route ()->shift (pos, -frames);
+ commit = true;
+ }
+ }
+
+ std::list<Location*> loc_kill_list;
+
+ /* markers */
+ if (markers_too) {
+ bool moved = false;
+ XMLNode& before (_session->locations()->get_state());
+ Locations::LocationList copy (_session->locations()->list());
+
+ for (Locations::LocationList::iterator i = copy.begin(); i != copy.end(); ++i) {
+ if ((*i)->position_lock_style() == AudioTime || glued_markers_too) {
+
+ bool const was_locked = (*i)->locked ();
+ if (locked_markers_too) {
+ (*i)->unlock ();
+ }
+
+ if (!(*i)->is_mark()) { // it's a range; have to handle both start and end
+ if ((*i)->end() >= pos
+ && (*i)->end() < pos+frames
+ && (*i)->start() >= pos
+ && (*i)->end() < pos+frames) { // range is completely enclosed; kill it
+ moved = true;
+ loc_kill_list.push_back(*i);
+ } else { // only start or end is included, try to do the right thing
+ // move start before moving end, to avoid trying to move the end to before the start
+ // if we're removing more time than the length of the range
+ if ((*i)->start() >= pos && (*i)->start() < pos+frames) {
+ // start is within cut
+ (*i)->set_start (pos); // bring the start marker to the beginning of the cut
+ moved = true;
+ } else if ((*i)->start() >= pos+frames) {
+ // start (and thus entire range) lies beyond end of cut
+ (*i)->set_start ((*i)->start() - frames); // slip the start marker back
+ moved = true;
+ }
+ if ((*i)->end() >= pos && (*i)->end() < pos+frames) {
+ // end is inside cut
+ (*i)->set_end (pos); // bring the end to the cut
+ moved = true;
+ } else if ((*i)->end() >= pos+frames) {
+ // end is beyond end of cut
+ (*i)->set_end ((*i)->end() - frames); // slip the end marker back
+ moved = true;
+ }
+
+ }
+ } else if ((*i)->start() >= pos && (*i)->start() < pos+frames ) {
+ loc_kill_list.push_back(*i);
+ moved = true;
+ } else if ((*i)->start() >= pos) {
+ (*i)->set_start ((*i)->start() -frames);
+ moved = true;
+ }
+
+ if (was_locked) {
+ (*i)->lock ();
+ }
+ }
+ }
+
+ for (list<Location*>::iterator i = loc_kill_list.begin(); i != loc_kill_list.end(); ++i) {
+ _session->locations()->remove( *i );
+ }
+
+ if (moved) {
+ XMLNode& after (_session->locations()->get_state());
+ _session->add_command (new MementoCommand<Locations>(*_session->locations(), &before, &after));
+ commit = true;
+ }
+ }
+
+ if (tempo_too) {
+ XMLNode& before (_session->tempo_map().get_state());
+
+ if (_session->tempo_map().cut_time (pos, frames) ) {
+ XMLNode& after (_session->tempo_map().get_state());
+ _session->add_command (new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
+ commit = true;
+ }
+ }
+
+ if (commit) {
+ commit_reversible_command ();
+ }
+}
+
+void
Editor::fit_selection ()
{
if (!selection->tracks.empty()) {
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 1d6ac8c..d029e3f 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -690,6 +690,12 @@ EditorRegions::format_position (framepos_t pos, char* buf, size_t bufsize, bool
Timecode::BBT_Time bbt;
Timecode::Time timecode;
+ if (pos < 0) {
+ error << string_compose (_("EditorRegions::format_position: negative timecode position: %1"), pos) << endmsg;
+ snprintf (buf, bufsize, "invalid");
+ return;
+ }
+
switch (ARDOUR_UI::instance()->secondary_clock->mode ()) {
case AudioClock::BBT:
_session->tempo_map().bbt_time (pos, bbt);
@@ -816,10 +822,12 @@ EditorRegions::populate_row_end (boost::shared_ptr<Region> region, TreeModel::Ro
row[_columns.end] = "";
} else if (used > 1) {
row[_columns.end] = _("Mult.");
- } else {
+ } else if (region->last_frame() >= region->first_frame()) {
char buf[16];
format_position (region->last_frame(), buf, sizeof (buf));
row[_columns.end] = buf;
+ } else {
+ row[_columns.end] = "empty";
}
}
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index 327841f..b249c0a 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -72,12 +72,13 @@ EditorRoutes::EditorRoutes (Editor* e)
, _no_redisplay (false)
, _adding_routes (false)
, _route_deletion_in_progress (false)
+ , _redisplay_on_resume (false)
, _redisplay_active (0)
, _queue_tv_update (0)
, _menu (0)
, old_focus (0)
, selection_countdown (0)
- , name_editable (0)
+ , name_editable (0)
{
static const int column_width = 22;
@@ -360,6 +361,13 @@ EditorRoutes::set_session (Session* s)
if (_session) {
_session->SoloChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::solo_changed_so_update_mute, this), gui_context());
_session->RecordStateChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context());
+
+ /* TODO: check if these needs to be tied in with DisplaySuspender
+ * Given that the UI is single-threaded and DisplaySuspender is only used
+ * in loops in the UI thread all should be fine.
+ */
+ _session->BatchUpdateStart.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::suspend_redisplay, this), gui_context());
+ _session->BatchUpdateEnd.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::resume_redisplay, this), gui_context());
}
}
@@ -549,7 +557,12 @@ EditorRoutes::redisplay_real ()
void
EditorRoutes::redisplay ()
{
- if (_no_redisplay || !_session || _session->deletion_in_progress()) {
+ if (!_session || _session->deletion_in_progress()) {
+ return;
+ }
+
+ if (_no_redisplay) {
+ _redisplay_on_resume = true;
return;
}
diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h
index 8213e65..94a2186 100644
--- a/gtk2_ardour/editor_routes.h
+++ b/gtk2_ardour/editor_routes.h
@@ -38,13 +38,19 @@ public:
void move_selected_tracks (bool);
void show_track_in_display (TimeAxisView &);
+
void suspend_redisplay () {
- _no_redisplay = true;
+ if (!_no_redisplay) {
+ _no_redisplay = true;
+ _redisplay_on_resume = false;
+ }
}
void resume_redisplay () {
_no_redisplay = false;
- redisplay ();
+ if (_redisplay_on_resume) {
+ redisplay ();
+ }
}
void redisplay ();
@@ -155,6 +161,7 @@ private:
bool _no_redisplay;
bool _adding_routes;
bool _route_deletion_in_progress;
+ bool _redisplay_on_resume;
volatile gint _redisplay_active;
volatile gint _queue_tv_update;
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 0fc49f5..a5b5a62 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -208,7 +208,7 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
switch (t) {
case MarkerBarItem:
- ruler_items.push_back (MenuElem (_("New location marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, false, false)));
+ ruler_items.push_back (MenuElem (_("New location marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, false)));
ruler_items.push_back (MenuElem (_("Clear all locations"), sigc::mem_fun(*this, &Editor::clear_markers)));
ruler_items.push_back (MenuElem (_("Unhide locations"), sigc::mem_fun(*this, &Editor::unhide_markers)));
ruler_items.push_back (SeparatorElem ());
@@ -221,13 +221,13 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
break;
case TransportMarkerBarItem:
- ruler_items.push_back (MenuElem (_("Make Loop range"), sigc::bind (sigc::mem_fun (*this, &Editor::mouse_add_new_loop), where)));
- ruler_items.push_back (MenuElem (_("Make Punch range"), sigc::bind (sigc::mem_fun (*this, &Editor::mouse_add_new_punch), where)));
+ ruler_items.push_back (MenuElem (_("New Loop range"), sigc::bind (sigc::mem_fun (*this, &Editor::mouse_add_new_loop), where)));
+ ruler_items.push_back (MenuElem (_("New Punch range"), sigc::bind (sigc::mem_fun (*this, &Editor::mouse_add_new_punch), where)));
break;
case CdMarkerBarItem:
// TODO
- ruler_items.push_back (MenuElem (_("New CD track marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, true, false)));
+ ruler_items.push_back (MenuElem (_("New CD track marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, true)));
break;
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index ca48cd6..b071ed6 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -1544,12 +1544,24 @@ Editor::set_selection_from_region ()
return;
}
+ /* find all the tracks that have selected regions */
+
+ set<TimeAxisView*> tracks;
+
+ for (RegionSelection::const_iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) {
+ tracks.insert (&(*r)->get_time_axis_view());
+ }
+
+ TrackViewList tvl;
+ tvl.insert (tvl.end(), tracks.begin(), tracks.end());
+
+ /* select range (this will clear the region selection) */
+
selection->set (selection->regions.start(), selection->regions.end_frame());
+
+ /* and select the tracks */
- //we must now select tracks, because otherwise set_selection_from_region would appear to do nothing
- //perhaps too drastic; perhaps the user really only wants the region's track selected
- //but I can't think of any use-case for that (why wouldn't you just select the region?)
- select_all_tracks();
+ selection->set (tvl);
if (!Profile->get_sae()) {
set_mouse_mode (Editing::MouseRange, false);
@@ -1751,10 +1763,10 @@ Editor::select_all_selectables_using_edit (bool after)
list<Selectable *> touched;
if (after) {
- start = get_preferred_edit_position(false, true);
+ start = get_preferred_edit_position(EDIT_IGNORE_NONE, true);
end = _session->current_end_frame();
} else {
- if ((end = get_preferred_edit_position(false, true)) > 1) {
+ if ((end = get_preferred_edit_position(EDIT_IGNORE_NONE, true)) > 1) {
start = 0;
end -= 1;
} else {
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 7650305..2025ec7 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -76,6 +76,7 @@ Editor::time_stretch (RegionSelection& regions, float fraction)
}
if ((aret = time_fx (audio, fraction, false)) != 0) {
+ commit_reversible_command ();
return aret;
}
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index 7a9431a..78a082c 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -309,6 +309,9 @@ EngineControl::EngineControl ()
device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::device_changed));
midi_option_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::midi_option_changed));
+ input_device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::input_device_changed));
+ output_device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::output_device_changed));
+
input_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
output_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
input_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
@@ -330,6 +333,8 @@ EngineControl::on_show ()
backend_changed ();
}
device_changed ();
+ input_device_changed ();
+ output_device_changed ();
ok_button->grab_focus();
}
@@ -436,10 +441,26 @@ EngineControl::build_full_control_notebook ()
row++;
}
- label = manage (left_aligned_label (_("Device:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- row++;
+ if (backend->use_separate_input_and_output_devices()) {
+ label = manage (left_aligned_label (_("Input Device:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (input_device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+ label = manage (left_aligned_label (_("Output Device:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (output_device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+ // reset so it isn't used in state comparisons
+ device_combo.set_active_text ("");
+ } else {
+ label = manage (left_aligned_label (_("Device:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+ // reset these so they don't get used in state comparisons
+ input_device_combo.set_active_text ("");
+ output_device_combo.set_active_text ("");
+ }
label = manage (left_aligned_label (_("Sample rate:")));
basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
@@ -532,7 +553,7 @@ EngineControl::build_no_control_notebook ()
vector<string> strings;
AttachOptions xopt = AttachOptions (FILL|EXPAND);
int row = 1; // row zero == backend combo
- const string msg = string_compose (_("The %1 audio backend was configured and started externally.\nThis limits your control over it."), backend->name());
+ const string msg = string_compose (_("%1 is already running. %2 will connect to it and use the existing settings."), backend->name(), PROGRAM_NAME);
label = manage (new Label);
label->set_markup (string_compose ("<span weight=\"bold\" foreground=\"red\">%1</span>", msg));
@@ -830,14 +851,11 @@ EngineControl::print_channel_count (Gtk::SpinButton* sb)
return true;
}
-void
-EngineControl::list_devices ()
+// @return true if there are devices available
+bool
+EngineControl::set_device_popdown_strings ()
{
boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
-
- /* now fill out devices, mark sample rates, buffer sizes insensitive */
-
vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_devices ();
/* NOTE: Ardour currently does not display the "available" field of the
@@ -855,8 +873,8 @@ EngineControl::list_devices ()
available_devices.push_back (i->name);
}
- if (!available_devices.empty()) {
+ if (!available_devices.empty()) {
update_sensitivity ();
{
@@ -884,7 +902,124 @@ EngineControl::list_devices ()
}
device_changed ();
+ return true;
+ }
+ return false;
+}
+
+// @return true if there are input devices available
+bool
+EngineControl::set_input_device_popdown_strings ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_input_devices ();
+
+ vector<string> available_devices;
+
+ for (vector<ARDOUR::AudioBackend::DeviceStatus>::const_iterator i = all_devices.begin(); i != all_devices.end(); ++i) {
+ available_devices.push_back (i->name);
+ }
+
+ if (!available_devices.empty()) {
+ update_sensitivity ();
+
+ {
+ string current_device, found_device;
+ current_device = input_device_combo.get_active_text ();
+ if (current_device == "") {
+ current_device = backend->input_device_name ();
+ }
+
+ // Make sure that the active text is still relevant for this
+ // device (it might only be relevant to the previous device!!)
+ for (vector<string>::const_iterator i = available_devices.begin(); i != available_devices.end(); ++i) {
+ if (*i == current_device)
+ found_device = current_device;
+ }
+ if (found_device == "")
+ // device has never been set (or was not relevant
+ // for this backend) Let's make sure it's not blank
+ current_device = available_devices.front ();
+
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+ set_popdown_strings (input_device_combo, available_devices);
+
+ input_device_combo.set_active_text (current_device);
+ }
+
+ input_device_changed ();
+ return true;
+ }
+
+ return false;
+}
+
+// @return true if there are output devices available
+bool
+EngineControl::set_output_device_popdown_strings ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_output_devices ();
+
+ vector<string> available_devices;
+
+ for (vector<ARDOUR::AudioBackend::DeviceStatus>::const_iterator i = all_devices.begin(); i != all_devices.end(); ++i) {
+ available_devices.push_back (i->name);
+ }
+
+ if (!available_devices.empty()) {
+ update_sensitivity ();
+
+ {
+ string current_device, found_device;
+ current_device = output_device_combo.get_active_text ();
+ if (current_device == "") {
+ current_device = backend->output_device_name ();
+ }
+
+ // Make sure that the active text is still relevant for this
+ // device (it might only be relevant to the previous device!!)
+ for (vector<string>::const_iterator i = available_devices.begin(); i != available_devices.end(); ++i) {
+ if (*i == current_device)
+ found_device = current_device;
+ }
+ if (found_device == "")
+ // device has never been set (or was not relevant
+ // for this backend) Let's make sure it's not blank
+ current_device = available_devices.front ();
+
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+ set_popdown_strings (output_device_combo, available_devices);
+
+ output_device_combo.set_active_text (current_device);
+ }
+
+ output_device_changed ();
+ return true;
+ }
+
+ return false;
+}
+void
+EngineControl::list_devices ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ /* now fill out devices, mark sample rates, buffer sizes insensitive */
+
+ bool devices_available = false;
+
+ if (backend->use_separate_input_and_output_devices ()) {
+ bool input_devices_available = set_input_device_popdown_strings ();
+ bool output_devices_available = set_output_device_popdown_strings ();
+ devices_available = input_devices_available || output_devices_available;
+ } else {
+ devices_available = set_device_popdown_strings ();
+ }
+
+ if (devices_available) {
input_latency.set_sensitive (true);
output_latency.set_sensitive (true);
input_channels.set_sensitive (true);
@@ -895,6 +1030,8 @@ EngineControl::list_devices ()
} else {
device_combo.clear();
+ input_device_combo.clear();
+ output_device_combo.clear();
sample_rate_combo.set_sensitive (false);
buffer_size_combo.set_sensitive (false);
input_latency.set_sensitive (false);
@@ -933,113 +1070,204 @@ EngineControl::driver_changed ()
}
void
-EngineControl::device_changed ()
+EngineControl::set_samplerate_popdown_strings (const std::string& device_name)
{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ string desired;
+ vector<float> sr;
+ vector<string> s;
+ if (_have_control) {
+ sr = backend->available_sample_rates (device_name);
+ } else {
+
+ sr.push_back (8000.0f);
+ sr.push_back (16000.0f);
+ sr.push_back (32000.0f);
+ sr.push_back (44100.0f);
+ sr.push_back (48000.0f);
+ sr.push_back (88200.0f);
+ sr.push_back (96000.0f);
+ sr.push_back (192000.0f);
+ sr.push_back (384000.0f);
+ }
+
+ for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) {
+ s.push_back (rate_as_string (*x));
+ if (*x == _desired_sample_rate) {
+ desired = s.back();
+ }
+ }
+
+ if (!s.empty()) {
+ sample_rate_combo.set_sensitive (true);
+ set_popdown_strings (sample_rate_combo, s);
+
+ if (desired.empty()) {
+ sample_rate_combo.set_active_text (rate_as_string (backend->default_sample_rate()));
+ } else {
+ sample_rate_combo.set_active_text (desired);
+ }
+
+ } else {
+ sample_rate_combo.set_sensitive (false);
+ }
+}
+
+void
+EngineControl::set_buffersize_popdown_strings (const std::string& device_name)
+{
boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
- string device_name = device_combo.get_active_text ();
+ vector<uint32_t> bs;
vector<string> s;
- if (device_name != backend->device_name()) {
- /* we set the backend-device to query various device related intormation.
- * This has the side effect that backend->device_name() will match
- * the device_name and 'change_device' will never be true.
- * so work around this by setting...
- */
- queue_device_changed = true;
+ if (_have_control) {
+ bs = backend->available_buffer_sizes (device_name);
+ } else if (backend->can_change_buffer_size_when_running()) {
+ bs.push_back (8);
+ bs.push_back (16);
+ bs.push_back (32);
+ bs.push_back (64);
+ bs.push_back (128);
+ bs.push_back (256);
+ bs.push_back (512);
+ bs.push_back (1024);
+ bs.push_back (2048);
+ bs.push_back (4096);
+ bs.push_back (8192);
+ }
+ s.clear ();
+ for (vector<uint32_t>::const_iterator x = bs.begin(); x != bs.end(); ++x) {
+ s.push_back (bufsize_as_string (*x));
+ }
+
+ if (!s.empty()) {
+ buffer_size_combo.set_sensitive (true);
+ set_popdown_strings (buffer_size_combo, s);
+
+ uint32_t period = backend->buffer_size();
+ if (0 == period) {
+ period = backend->default_buffer_size(device_name);
+ }
+ set_active_text_if_present (buffer_size_combo, bufsize_as_string (period));
+ show_buffer_duration ();
+ } else {
+ buffer_size_combo.set_sensitive (false);
+ }
+}
+
+void
+EngineControl::device_changed ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ string device_name_in;
+ string device_name_out; // only used if backend support separate I/O devices
+
+ if (backend->use_separate_input_and_output_devices()) {
+ device_name_in = get_input_device_name ();
+ device_name_out = get_output_device_name ();
+ } else {
+ device_name_in = get_device_name ();
+ }
+
+ /* we set the backend-device to query various device related intormation.
+ * This has the side effect that backend->device_name() will match
+ * the device_name and 'change_device' will never be true.
+ * so work around this by setting...
+ */
+ if (backend->use_separate_input_and_output_devices()) {
+ if (device_name_in != backend->input_device_name() || device_name_out != backend->output_device_name ()) {
+ queue_device_changed = true;
+ }
+ } else {
+ if (device_name_in != backend->device_name()) {
+ queue_device_changed = true;
+ }
}
//the device name must be set FIRST so ASIO can populate buffersizes and the control panel button
- backend->set_device_name(device_name);
+ if (backend->use_separate_input_and_output_devices()) {
+ backend->set_input_device_name (device_name_in);
+ backend->set_output_device_name (device_name_out);
+ } else {
+ backend->set_device_name(device_name_in);
+ }
{
- PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-
/* don't allow programmatic change to combos to cause a
recursive call to this method.
*/
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
- /* sample rates */
+ /* backends that support separate devices, need to ignore
+ * the device-name - and use the devies set above
+ */
+ set_samplerate_popdown_strings (device_name_in);
+ set_buffersize_popdown_strings (device_name_in);
+ /* XXX theoretically need to set min + max channel counts here
+ */
- string desired;
+ manage_control_app_sensitivity ();
+ }
- vector<float> sr;
+ /* pick up any saved state for this device */
- if (_have_control) {
- sr = backend->available_sample_rates (device_name);
- } else {
+ if (!ignore_changes) {
+ maybe_display_saved_state ();
+ }
+}
- sr.push_back (8000.0f);
- sr.push_back (16000.0f);
- sr.push_back (32000.0f);
- sr.push_back (44100.0f);
- sr.push_back (48000.0f);
- sr.push_back (88200.0f);
- sr.push_back (96000.0f);
- sr.push_back (192000.0f);
- sr.push_back (384000.0f);
- }
+void
+EngineControl::input_device_changed ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+ string input_device_name = input_device_combo.get_active_text ();
- for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) {
- s.push_back (rate_as_string (*x));
- if (*x == _desired_sample_rate) {
- desired = s.back();
- }
- }
+ if (!ignore_changes && input_device_name != backend->input_device_name()) {
+ queue_device_changed = true;
+ }
- if (!s.empty()) {
- sample_rate_combo.set_sensitive (true);
- set_popdown_strings (sample_rate_combo, s);
+ backend->set_input_device_name(input_device_name);
- if (desired.empty()) {
- sample_rate_combo.set_active_text (rate_as_string (backend->default_sample_rate()));
- } else {
- sample_rate_combo.set_active_text (desired);
- }
+ {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
- } else {
- sample_rate_combo.set_sensitive (false);
- }
+ set_samplerate_popdown_strings (input_device_name);
+ set_buffersize_popdown_strings (input_device_name);
+ /* XXX theoretically need to set min + max channel counts here
+ */
- /* buffer sizes */
+ manage_control_app_sensitivity ();
+ }
- vector<uint32_t> bs;
+ /* pick up any saved state for this device */
- if (_have_control) {
- bs = backend->available_buffer_sizes (device_name);
- } else if (backend->can_change_buffer_size_when_running()) {
- bs.push_back (8);
- bs.push_back (16);
- bs.push_back (32);
- bs.push_back (64);
- bs.push_back (128);
- bs.push_back (256);
- bs.push_back (512);
- bs.push_back (1024);
- bs.push_back (2048);
- bs.push_back (4096);
- bs.push_back (8192);
- }
- s.clear ();
- for (vector<uint32_t>::const_iterator x = bs.begin(); x != bs.end(); ++x) {
- s.push_back (bufsize_as_string (*x));
- }
+ if (!ignore_changes) {
+ maybe_display_saved_state ();
+ }
+}
- if (!s.empty()) {
- buffer_size_combo.set_sensitive (true);
- set_popdown_strings (buffer_size_combo, s);
+void
+EngineControl::output_device_changed ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+ string output_device_name = output_device_combo.get_active_text ();
- uint32_t period = backend->buffer_size();
- if (0 == period) {
- period = backend->default_buffer_size(device_name);
- }
- set_active_text_if_present (buffer_size_combo, bufsize_as_string (period));
- show_buffer_duration ();
- } else {
- buffer_size_combo.set_sensitive (false);
- }
+ if (!ignore_changes && output_device_name != backend->output_device_name()) {
+ queue_device_changed = true;
+ }
+
+ backend->set_output_device_name(output_device_name);
+
+ {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+ set_samplerate_popdown_strings (output_device_name);
+ set_buffersize_popdown_strings (output_device_name);
/* XXX theoretically need to set min + max channel counts here
*/
@@ -1176,22 +1404,58 @@ EngineControl::get_matching_state (
}
EngineControl::State
+EngineControl::get_matching_state (
+ const string& backend,
+ const string& driver,
+ const string& input_device,
+ const string& output_device)
+{
+ for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
+ if ((*i)->backend == backend &&
+ (!_have_control || ((*i)->driver == driver && ((*i)->input_device == input_device) && (*i)->output_device == output_device)))
+ {
+ return (*i);
+ }
+ }
+ return State();
+}
+
+EngineControl::State
EngineControl::get_saved_state_for_currently_displayed_backend_and_device ()
{
boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
if (backend) {
- return get_matching_state (backend_combo.get_active_text(),
- (backend->requires_driver_selection() ? (std::string) driver_combo.get_active_text() : string()),
- device_combo.get_active_text());
+ if (backend->use_separate_input_and_output_devices ()) {
+ return get_matching_state (backend_combo.get_active_text(),
+ (backend->requires_driver_selection() ? (std::string) driver_combo.get_active_text() : string()),
+ input_device_combo.get_active_text(),
+ output_device_combo.get_active_text());
+ } else {
+ return get_matching_state (backend_combo.get_active_text(),
+ (backend->requires_driver_selection() ? (std::string) driver_combo.get_active_text() : string()),
+ device_combo.get_active_text());
+ }
}
-
return get_matching_state (backend_combo.get_active_text(),
string(),
device_combo.get_active_text());
}
+bool EngineControl::equivalent_states (const EngineControl::State& state1,
+ const EngineControl::State& state2)
+{
+ if (state1->backend == state2->backend &&
+ state1->driver == state2->driver &&
+ state1->device == state2->device &&
+ state1->input_device == state2->input_device &&
+ state1->output_device == state2->output_device) {
+ return true;
+ }
+ return false;
+}
+
EngineControl::State
EngineControl::save_state ()
{
@@ -1210,9 +1474,7 @@ EngineControl::save_state ()
}
for (StateList::iterator i = states.begin(); i != states.end();) {
- if ((*i)->backend == state->backend &&
- (*i)->driver == state->driver &&
- (*i)->device == state->device) {
+ if (equivalent_states (*i, state)) {
i = states.erase(i);
} else {
++i;
@@ -1230,6 +1492,8 @@ EngineControl::store_state (State state)
state->backend = get_backend ();
state->driver = get_driver ();
state->device = get_device_name ();
+ state->input_device = get_input_device_name ();
+ state->output_device = get_output_device_name ();
state->sample_rate = get_rate ();
state->buffer_size = get_buffer_size ();
state->input_latency = get_input_latency ();
@@ -1286,6 +1550,8 @@ EngineControl::get_state ()
node->add_property ("backend", (*i)->backend);
node->add_property ("driver", (*i)->driver);
node->add_property ("device", (*i)->device);
+ node->add_property ("input-device", (*i)->input_device);
+ node->add_property ("output-device", (*i)->output_device);
node->add_property ("sample-rate", (*i)->sample_rate);
node->add_property ("buffer-size", (*i)->buffer_size);
node->add_property ("input-latency", (*i)->input_latency);
@@ -1324,6 +1590,8 @@ EngineControl::set_state (const XMLNode& root)
XMLNode* grandchild;
XMLProperty* prop = NULL;
+ fprintf (stderr, "EngineControl::set_state\n");
+
if (root.name() != "AudioMIDISetup") {
return;
}
@@ -1366,6 +1634,16 @@ EngineControl::set_state (const XMLNode& root)
}
state->device = prop->value ();
+ if ((prop = grandchild->property ("input-device")) == 0) {
+ continue;
+ }
+ state->input_device = prop->value ();
+
+ if ((prop = grandchild->property ("output-device")) == 0) {
+ continue;
+ }
+ state->output_device = prop->value ();
+
if ((prop = grandchild->property ("sample-rate")) == 0) {
continue;
}
@@ -1472,6 +1750,10 @@ EngineControl::set_state (const XMLNode& root)
backend_combo.set_active_text ((*i)->backend);
driver_combo.set_active_text ((*i)->driver);
device_combo.set_active_text ((*i)->device);
+ fprintf (stderr, "setting input device to: %s ", (*i)->input_device.c_str());
+ input_device_combo.set_active_text ((*i)->input_device);
+ fprintf (stderr, "setting output device to: %s ", (*i)->output_device.c_str());
+ output_device_combo.set_active_text ((*i)->output_device);
sample_rate_combo.set_active_text (rate_as_string ((*i)->sample_rate));
set_active_text_if_present (buffer_size_combo, bufsize_as_string ((*i)->buffer_size));
input_latency.set_value ((*i)->input_latency);
@@ -1518,7 +1800,20 @@ EngineControl::push_state_to_backend (bool start)
}
}
- if (queue_device_changed || get_device_name() != backend->device_name()) {
+ if (backend->use_separate_input_and_output_devices()) {
+ if (get_input_device_name() != backend->input_device_name()) {
+ change_device = true;
+ }
+ if (get_output_device_name() != backend->output_device_name()) {
+ change_device = true;
+ }
+ } else {
+ if (get_device_name() != backend->device_name()) {
+ change_device = true;
+ }
+ }
+
+ if (queue_device_changed) {
change_device = true;
}
@@ -1668,9 +1963,20 @@ EngineControl::push_state_to_backend (bool start)
error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg;
return -1;
}
- if (change_device && backend->set_device_name (get_device_name())) {
- error << string_compose (_("Cannot set device name to %1"), get_device_name()) << endmsg;
- return -1;
+ if (backend->use_separate_input_and_output_devices()) {
+ if (change_device && backend->set_input_device_name (get_input_device_name())) {
+ error << string_compose (_("Cannot set input device name to %1"), get_input_device_name()) << endmsg;
+ return -1;
+ }
+ if (change_device && backend->set_output_device_name (get_output_device_name())) {
+ error << string_compose (_("Cannot set output device name to %1"), get_output_device_name()) << endmsg;
+ return -1;
+ }
+ } else {
+ if (change_device && backend->set_device_name (get_device_name())) {
+ error << string_compose (_("Cannot set device name to %1"), get_device_name()) << endmsg;
+ return -1;
+ }
}
if (change_rate && backend->set_sample_rate (get_rate())) {
error << string_compose (_("Cannot set sample rate to %1"), get_rate()) << endmsg;
@@ -1863,6 +2169,18 @@ EngineControl::get_device_name () const
return device_combo.get_active_text ();
}
+string
+EngineControl::get_input_device_name () const
+{
+ return input_device_combo.get_active_text ();
+}
+
+string
+EngineControl::get_output_device_name () const
+{
+ return output_device_combo.get_active_text ();
+}
+
void
EngineControl::control_app_button_clicked ()
{
@@ -1898,6 +2216,8 @@ EngineControl::set_desired_sample_rate (uint32_t sr)
{
_desired_sample_rate = sr;
device_changed ();
+ input_device_changed ();
+ output_device_changed ();
}
void
diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h
index 75dc9de..1ca9937 100644
--- a/gtk2_ardour/engine_dialog.h
+++ b/gtk2_ardour/engine_dialog.h
@@ -64,6 +64,8 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
Gtk::ComboBoxText backend_combo;
Gtk::ComboBoxText driver_combo;
Gtk::ComboBoxText device_combo;
+ Gtk::ComboBoxText input_device_combo;
+ Gtk::ComboBoxText output_device_combo;
Gtk::ComboBoxText sample_rate_combo;
Gtk::ComboBoxText midi_option_combo;
Gtk::ComboBoxText buffer_size_combo;
@@ -141,11 +143,20 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
uint32_t get_input_latency() const;
uint32_t get_output_latency() const;
std::string get_device_name() const;
+ std::string get_input_device_name() const;
+ std::string get_output_device_name() const;
std::string get_driver() const;
std::string get_backend() const;
std::string get_midi_option () const;
void device_changed ();
+ void input_device_changed ();
+ void output_device_changed ();
+ bool set_device_popdown_strings ();
+ bool set_input_device_popdown_strings ();
+ bool set_output_device_popdown_strings ();
+ void set_samplerate_popdown_strings (const std::string& dev_name);
+ void set_buffersize_popdown_strings (const std::string& dev_name);
void list_devices ();
void show_buffer_duration ();
@@ -182,6 +193,8 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
std::string backend;
std::string driver;
std::string device;
+ std::string input_device;
+ std::string output_device;
float sample_rate;
uint32_t buffer_size;
uint32_t input_latency;
@@ -211,10 +224,15 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
State get_matching_state (const std::string& backend,
const std::string& driver,
const std::string& device);
+ State get_matching_state (const std::string& backend,
+ const std::string& driver,
+ const std::string& input_device,
+ const std::string& output_device);
State get_saved_state_for_currently_displayed_backend_and_device ();
void maybe_display_saved_state ();
State save_state ();
void store_state (State);
+ bool equivalent_states (const State&, const State&);
bool _have_control;
diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc
index 5fa4a0d..77cabad 100644
--- a/gtk2_ardour/export_channel_selector.cc
+++ b/gtk2_ardour/export_channel_selector.cc
@@ -154,7 +154,7 @@ PortExportChannelSelector::RouteCols::Channel &
PortExportChannelSelector::RouteCols::get_channel (uint32_t channel)
{
if (channel > n_channels) {
- std::cout << "Invalid channel cout for get_channel!" << std::endl;
+ std::cout << "Invalid channel count for get_channel!" << std::endl;
}
std::list<Channel>::iterator it = channels.begin();
@@ -541,12 +541,18 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
: ExportChannelSelector(session, manager)
, region_contents_button(source_group, _("Export region contents"))
, track_output_button(source_group, _("Export track output"))
+ , select_tracks_button (_("Select all tracks"))
+ , select_busses_button (_("Select all busses"))
+ , select_none_button (_("Deselect all"))
{
pack_start(main_layout);
// Options
options_box.pack_start(region_contents_button);
options_box.pack_start(track_output_button);
+ options_box.pack_start (select_tracks_button);
+ options_box.pack_start (select_busses_button);
+ options_box.pack_start (select_none_button);
main_layout.pack_start(options_box, false, false);
// Track scroller
@@ -578,6 +584,10 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
column->pack_start (*text_renderer, false);
column->add_attribute (text_renderer->property_text(), track_cols.label);
+ select_tracks_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_tracks));
+ select_busses_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_busses));
+ select_none_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_none));
+
fill_list();
show_all_children ();
@@ -591,6 +601,44 @@ TrackExportChannelSelector::sync_with_manager ()
}
void
+TrackExportChannelSelector::select_tracks ()
+{
+ for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+ Gtk::TreeModel::Row row = *it;
+ boost::shared_ptr<Route> route = row[track_cols.route];
+ if (boost::dynamic_pointer_cast<Track> (route)) {
+ // it's a track
+ row[track_cols.selected] = true;
+ }
+ }
+ update_config();
+}
+
+void
+TrackExportChannelSelector::select_busses ()
+{
+ for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+ Gtk::TreeModel::Row row = *it;
+ boost::shared_ptr<Route> route = row[track_cols.route];
+ if (!boost::dynamic_pointer_cast<Track> (route)) {
+ // it's not a track, must be a bus
+ row[track_cols.selected] = true;
+ }
+ }
+ update_config();
+}
+
+void
+TrackExportChannelSelector::select_none ()
+{
+ for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+ Gtk::TreeModel::Row row = *it;
+ row[track_cols.selected] = false;
+ }
+ update_config();
+}
+
+void
TrackExportChannelSelector::fill_list()
{
track_list->clear();
@@ -602,12 +650,21 @@ TrackExportChannelSelector::fill_list()
if ((*it)->is_master () || (*it)->is_monitor ()) {
continue;
}
+ if (!(*it)->active ()) {
+ // don't include inactive busses
+ continue;
+ }
+
// not monitor or master bus
add_track (*it);
}
}
for (RouteList::iterator it = routes.begin(); it != routes.end(); ++it) {
if (boost::dynamic_pointer_cast<AudioTrack>(*it)) {
+ if (!(*it)->active ()) {
+ // don't include inactive tracks
+ continue;
+ }
add_track (*it);
}
}
@@ -619,7 +676,7 @@ TrackExportChannelSelector::add_track (boost::shared_ptr<Route> route)
Gtk::TreeModel::iterator iter = track_list->append();
Gtk::TreeModel::Row row = *iter;
- row[track_cols.selected] = true;
+ row[track_cols.selected] = false;
row[track_cols.label] = route->name();
row[track_cols.route] = route;
row[track_cols.order_key] = route->order_key();
diff --git a/gtk2_ardour/export_channel_selector.h b/gtk2_ardour/export_channel_selector.h
index 2ed47b5..aa9999a 100644
--- a/gtk2_ardour/export_channel_selector.h
+++ b/gtk2_ardour/export_channel_selector.h
@@ -266,6 +266,12 @@ class TrackExportChannelSelector : public ExportChannelSelector
Gtk::RadioButton::Group source_group;
Gtk::RadioButton region_contents_button;
Gtk::RadioButton track_output_button;
+ Gtk::Button select_tracks_button;
+ Gtk::Button select_busses_button;
+ Gtk::Button select_none_button;
+ void select_tracks ();
+ void select_busses ();
+ void select_none ();
};
#endif /* __export_channel_selector_h__ */
diff --git a/gtk2_ardour/export_format_dialog.cc b/gtk2_ardour/export_format_dialog.cc
index c2c3909..f76effa 100644
--- a/gtk2_ardour/export_format_dialog.cc
+++ b/gtk2_ardour/export_format_dialog.cc
@@ -69,6 +69,7 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
with_cue (_("Create CUE file for disk-at-once CD/DVD creation")),
with_toc (_("Create TOC file for disk-at-once CD/DVD creation")),
+ with_mp4chaps (_("Create chapter mark file for MP4 chapter marks")),
tag_checkbox (_("Tag file with session's metadata"))
{
@@ -149,10 +150,12 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
with_cue.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_with_cue));
with_toc.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_with_toc));
+ with_mp4chaps.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_with_mp4chaps));
command_entry.signal_changed().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_command));
cue_toc_vbox.pack_start (with_cue, false, false);
cue_toc_vbox.pack_start (with_toc, false, false);
+ cue_toc_vbox.pack_start (with_mp4chaps, false, false);
/* Load state before hooking up the rest of the signals */
@@ -261,6 +264,7 @@ ExportFormatDialog::load_state (FormatPtr spec)
with_cue.set_active (spec->with_cue());
with_toc.set_active (spec->with_toc());
+ with_mp4chaps.set_active (spec->with_mp4chaps());
for (Gtk::ListStore::Children::iterator it = src_quality_list->children().begin(); it != src_quality_list->children().end(); ++it) {
if (it->get_value (src_quality_cols.id) == spec->src_quality()) {
@@ -726,6 +730,11 @@ ExportFormatDialog::update_with_toc ()
manager.select_with_toc (with_toc.get_active());
}
+void
+ExportFormatDialog::update_with_mp4chaps ()
+{
+ manager.select_with_mp4chaps (with_mp4chaps.get_active());
+}
void
ExportFormatDialog::update_command ()
diff --git a/gtk2_ardour/export_format_dialog.h b/gtk2_ardour/export_format_dialog.h
index 8a3211d..6a25d70 100644
--- a/gtk2_ardour/export_format_dialog.h
+++ b/gtk2_ardour/export_format_dialog.h
@@ -311,11 +311,13 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
Gtk::CheckButton with_cue;
Gtk::CheckButton with_toc;
+ Gtk::CheckButton with_mp4chaps;
Gtk::VBox cue_toc_vbox;
void update_with_toc ();
void update_with_cue ();
+ void update_with_mp4chaps();
void update_command ();
Gtk::TreeView sample_format_view;
diff --git a/gtk2_ardour/export_video_dialog.cc b/gtk2_ardour/export_video_dialog.cc
index e8b823d..13f1f8f 100644
--- a/gtk2_ardour/export_video_dialog.cc
+++ b/gtk2_ardour/export_video_dialog.cc
@@ -57,10 +57,6 @@
#include "utils_videotl.h"
#include "i18n.h"
-#ifdef COMPILER_MSVC
-#define rintf(x) round((x) + 0.5)
-#endif
-
using namespace Gtk;
using namespace std;
using namespace PBD;
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 619cb34..50592c7 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -63,7 +63,6 @@ using namespace std;
using Gtkmm2ext::Keyboard;
using namespace ArdourMeter;
-
static void
reset_cursor_to_default (Gtk::Entry* widget)
{
@@ -102,6 +101,9 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
next_release_selects = false;
_width = Wide;
+ fader_length = rint (fader_length * ARDOUR_UI::ui_scale);
+ fader_girth = rint (fader_girth * ARDOUR_UI::ui_scale);
+
if (horizontal) {
gain_slider = manage (new HSliderController (&gain_adjustment, boost::shared_ptr<PBD::Controllable>(), fader_length, fader_girth));
} else {
@@ -263,11 +265,11 @@ GainMeterBase::setup_gain_adjustment ()
if (_amp->output_streams().n_midi() <= _amp->output_streams().n_audio()) {
_data_type = DataType::AUDIO;
- gain_adjustment.set_lower (0.0);
- gain_adjustment.set_upper (1.0);
+ gain_adjustment.set_lower (GAIN_COEFF_ZERO);
+ gain_adjustment.set_upper (GAIN_COEFF_UNITY);
gain_adjustment.set_step_increment (dB_coeff_step(Config->get_max_gain()) / 10.0);
gain_adjustment.set_page_increment (dB_coeff_step(Config->get_max_gain()));
- gain_slider->set_default_value (gain_to_slider_position (1));
+ gain_slider->set_default_value (gain_to_slider_position (GAIN_COEFF_UNITY));
} else {
_data_type = DataType::MIDI;
gain_adjustment.set_lower (0.0);
@@ -542,7 +544,7 @@ GainMeterBase::gain_adjusted ()
void
GainMeterBase::effective_gain_display ()
{
- float value = 0.0;
+ float value = GAIN_COEFF_ZERO;
switch (_data_type) {
case DataType::AUDIO:
@@ -934,6 +936,8 @@ GainMeterBase::redraw_metrics()
meter_ticks2_area.queue_draw ();
}
+#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * ARDOUR_UI::ui_scale))
+
GainMeter::GainMeter (Session* s, int fader_length)
: GainMeterBase (s, false, fader_length, 24)
, gain_display_box(true, 0)
@@ -950,7 +954,7 @@ GainMeter::GainMeter (Session* s, int fader_length)
gain_display_box.pack_start (peak_display, true, true);
meter_metric_area.set_name ("AudioTrackMetrics");
- meter_metric_area.set_size_request(24, -1);
+ meter_metric_area.set_size_request(PX_SCALE(24, 24), -1);
gain_automation_style_button.set_name ("mixer strip button");
gain_automation_state_button.set_name ("mixer strip button");
@@ -961,8 +965,8 @@ GainMeter::GainMeter (Session* s, int fader_length)
gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS);
- gain_automation_state_button.set_size_request(15, 15);
- gain_automation_style_button.set_size_request(15, 15);
+ gain_automation_state_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15));
+ gain_automation_style_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15));
fader_vbox = manage (new Gtk::VBox());
fader_vbox->set_spacing (0);
@@ -973,7 +977,7 @@ GainMeter::GainMeter (Session* s, int fader_length)
hbox.pack_start (fader_alignment, true, true);
- set_spacing (2);
+ set_spacing (PX_SCALE(2, 2));
pack_start (gain_display_box, Gtk::PACK_SHRINK);
pack_start (hbox, Gtk::PACK_SHRINK);
@@ -984,8 +988,8 @@ GainMeter::GainMeter (Session* s, int fader_length)
meter_metric_area.signal_expose_event().connect (
sigc::mem_fun(*this, &GainMeter::meter_metrics_expose));
- meter_ticks1_area.set_size_request(3,-1);
- meter_ticks2_area.set_size_request(3,-1);
+ meter_ticks1_area.set_size_request (PX_SCALE(3, 3), -1);
+ meter_ticks2_area.set_size_request (PX_SCALE(3, 3), -1);
meter_ticks1_area.signal_expose_event().connect (
sigc::mem_fun(*this, &GainMeter::meter_ticks1_expose));
@@ -997,6 +1001,7 @@ GainMeter::GainMeter (Session* s, int fader_length)
meter_hbox.pack_start (meter_ticks2_area, false, false);
meter_hbox.pack_start (meter_metric_area, false, false);
}
+#undef PX_SCALE
GainMeter::~GainMeter () { }
@@ -1115,7 +1120,7 @@ GainMeterBase::get_controllable()
bool
GainMeterBase::level_meter_button_press (GdkEventButton* ev)
{
- return !!LevelMeterButtonPress (ev); /* EMIT SIGNAL */
+ return static_cast<bool>(LevelMeterButtonPress (ev)); /* EMIT SIGNAL */
}
void
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc
index 056aea9..15cc5cc 100644
--- a/gtk2_ardour/generic_pluginui.cc
+++ b/gtk2_ardour/generic_pluginui.cc
@@ -86,13 +86,14 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
latency_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::latency_button_clicked));
set_latency_label ();
- smaller_hbox->pack_start (latency_button, false, false, 10);
+ smaller_hbox->pack_start (latency_button, false, false, 4);
smaller_hbox->pack_start (_preset_combo, false, false);
smaller_hbox->pack_start (_preset_modified, false, false);
smaller_hbox->pack_start (add_button, false, false);
smaller_hbox->pack_start (save_button, false, false);
smaller_hbox->pack_start (delete_button, false, false);
- smaller_hbox->pack_start (bypass_button, false, true);
+ smaller_hbox->pack_start (reset_button, false, false, 4);
+ smaller_hbox->pack_start (bypass_button, false, true, 4);
automation_manual_all_button.set_text(_("Manual"));
automation_manual_all_button.set_name (X_("generic button"));
@@ -695,7 +696,7 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param,
Adjustment* adj = control_ui->controller->adjustment();
if (desc.integer_step) {
- control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox", desc.enumeration);
+ control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox", true);
Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
if (desc.unit == ParameterDescriptor::MIDI_NOTE) {
control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::midinote_printer), control_ui));
diff --git a/gtk2_ardour/insert_time_dialog.cc b/gtk2_ardour/insert_remove_time_dialog.cc
similarity index 67%
rename from gtk2_ardour/insert_time_dialog.cc
rename to gtk2_ardour/insert_remove_time_dialog.cc
index a63d885..851f57d 100644
--- a/gtk2_ardour/insert_time_dialog.cc
+++ b/gtk2_ardour/insert_remove_time_dialog.cc
@@ -21,21 +21,27 @@
#include <gtkmm/comboboxtext.h>
#include <gtkmm/stock.h>
#include <gtkmm/alignment.h>
-#include "insert_time_dialog.h"
+#include "insert_remove_time_dialog.h"
#include "audio_clock.h"
#include "i18n.h"
using namespace Gtk;
using namespace Editing;
-InsertTimeDialog::InsertTimeDialog (PublicEditor& e)
- : ArdourDialog (_("Insert Time"))
+InsertRemoveTimeDialog::InsertRemoveTimeDialog (PublicEditor& e, bool remove)
+ : ArdourDialog (remove ? _("Remove Time") : _("Insert Time"))
, _editor (e)
- , _clock ("insertTimeClock", true, "", true, false, true, false)
+ , _clock ("insertTimeClock", true, "",
+ true, // editable
+ false, // follows_playhead
+ true, // duration
+ false, // with_info
+ true // accept_on_focus_out
+ )
{
set_session (_editor.session ());
- framepos_t const pos = _editor.get_preferred_edit_position ();
+ framepos_t const pos = _editor.get_preferred_edit_position (EDIT_IGNORE_MOUSE);
get_vbox()->set_border_width (12);
get_vbox()->set_spacing (4);
@@ -43,7 +49,7 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e)
Table* table = manage (new Table (2, 2));
table->set_spacings (4);
- Label* time_label = manage (new Label (_("Time to insert:")));
+ Label* time_label = manage (new Label (remove ? _("Time to remove") : _("Time to insert:")));
time_label->set_alignment (1, 0.5);
table->attach (*time_label, 0, 1, 0, 1, FILL | EXPAND);
_clock.set (0);
@@ -51,25 +57,27 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e)
_clock.set_bbt_reference (pos);
table->attach (_clock, 1, 2, 0, 1);
- Label* intersected_label = manage (new Label (_("Intersected regions should:")));
- intersected_label->set_alignment (1, 0.5);
- table->attach (*intersected_label, 0, 1, 1, 2, FILL | EXPAND);
- _intersected_combo.append_text (_("stay in position"));
- _intersected_combo.append_text (_("move"));
- _intersected_combo.append_text (_("be split"));
- _intersected_combo.set_active (0);
- table->attach (_intersected_combo, 1, 2, 1, 2);
+ if (!remove) {
+ Label* intersected_label = manage (new Label (_("Intersected regions should:")));
+ intersected_label->set_alignment (1, 0.5);
+ table->attach (*intersected_label, 0, 1, 1, 2, FILL | EXPAND);
+ _intersected_combo.append_text (_("stay in position"));
+ _intersected_combo.append_text (_("move"));
+ _intersected_combo.append_text (_("be split"));
+ _intersected_combo.set_active (0);
+ table->attach (_intersected_combo, 1, 2, 1, 2);
+ }
get_vbox()->pack_start (*table);
- _all_playlists.set_label (_("Insert time on all the track's playlists"));
+ _all_playlists.set_label (_("Apply to all the track's playlists"));
get_vbox()->pack_start (_all_playlists);
_move_glued.set_label (_("Move glued regions"));
get_vbox()->pack_start (_move_glued);
_move_markers.set_label (_("Move markers"));
get_vbox()->pack_start (_move_markers);
- _move_markers.signal_toggled().connect (sigc::mem_fun (*this, &InsertTimeDialog::move_markers_toggled));
+ _move_markers.signal_toggled().connect (sigc::mem_fun (*this, &InsertRemoveTimeDialog::move_markers_toggled));
_move_glued_markers.set_label (_("Move glued markers"));
Alignment* indent = manage (new Alignment);
indent->set_padding (0, 0, 12, 0);
@@ -88,14 +96,14 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e)
get_vbox()->pack_start (*tempo_box);
add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- add_button (_("Insert time"), Gtk::RESPONSE_OK);
+ add_button (remove ? _("Remove time") : _("Insert time"), Gtk::RESPONSE_OK);
show_all ();
move_markers_toggled ();
}
InsertTimeOption
-InsertTimeDialog::intersected_region_action ()
+InsertRemoveTimeDialog::intersected_region_action ()
{
/* only setting this to keep GCC quiet */
InsertTimeOption opt = LeaveIntersected;
@@ -116,49 +124,49 @@ InsertTimeDialog::intersected_region_action ()
}
bool
-InsertTimeDialog::all_playlists () const
+InsertRemoveTimeDialog::all_playlists () const
{
return _all_playlists.get_active ();
}
bool
-InsertTimeDialog::move_glued () const
+InsertRemoveTimeDialog::move_glued () const
{
return _move_glued.get_active ();
}
bool
-InsertTimeDialog::move_tempos () const
+InsertRemoveTimeDialog::move_tempos () const
{
return _move_tempos.get_active ();
}
bool
-InsertTimeDialog::move_markers () const
+InsertRemoveTimeDialog::move_markers () const
{
return _move_markers.get_active ();
}
bool
-InsertTimeDialog::move_glued_markers () const
+InsertRemoveTimeDialog::move_glued_markers () const
{
return _move_glued_markers.get_active ();
}
bool
-InsertTimeDialog::move_locked_markers () const
+InsertRemoveTimeDialog::move_locked_markers () const
{
return _move_locked_markers.get_active ();
}
framepos_t
-InsertTimeDialog::distance () const
+InsertRemoveTimeDialog::distance () const
{
return _clock.current_duration (_editor.get_preferred_edit_position ());
}
void
-InsertTimeDialog::move_markers_toggled ()
+InsertRemoveTimeDialog::move_markers_toggled ()
{
_move_glued_markers.set_sensitive (_move_markers.get_active ());
_move_locked_markers.set_sensitive (_move_markers.get_active ());
diff --git a/gtk2_ardour/insert_time_dialog.h b/gtk2_ardour/insert_remove_time_dialog.h
similarity index 92%
rename from gtk2_ardour/insert_time_dialog.h
rename to gtk2_ardour/insert_remove_time_dialog.h
index 3c365c1..6fbb575 100644
--- a/gtk2_ardour/insert_time_dialog.h
+++ b/gtk2_ardour/insert_remove_time_dialog.h
@@ -22,10 +22,10 @@
#include "editing.h"
#include "audio_clock.h"
-class InsertTimeDialog : public ArdourDialog
+class InsertRemoveTimeDialog : public ArdourDialog
{
public:
- InsertTimeDialog (PublicEditor &);
+ InsertRemoveTimeDialog (PublicEditor &, bool remove = false);
Editing::InsertTimeOption intersected_region_action ();
bool all_playlists () const;
diff --git a/gtk2_ardour/keyboard.cc b/gtk2_ardour/keyboard.cc
index ca65a2b..96c73f6 100644
--- a/gtk2_ardour/keyboard.cc
+++ b/gtk2_ardour/keyboard.cc
@@ -48,6 +48,14 @@ accel_map_changed (GtkAccelMap* /*map*/,
me->ui.setup_tooltips ();
}
+guint ArdourKeyboard::constraint_mod = Keyboard::SecondaryModifier;
+guint ArdourKeyboard::trim_contents_mod = Keyboard::PrimaryModifier;
+guint ArdourKeyboard::trim_overlap_mod = Keyboard::TertiaryModifier;
+guint ArdourKeyboard::trim_anchored_mod = Keyboard::TertiaryModifier;
+guint ArdourKeyboard::fine_adjust_mod = Keyboard::SecondaryModifier;
+guint ArdourKeyboard::push_points_mod = Keyboard::PrimaryModifier;
+guint ArdourKeyboard::note_size_relative_mod = Keyboard::PrimaryModifier;
+
void
ArdourKeyboard::setup_keybindings ()
{
@@ -174,6 +182,145 @@ ArdourKeyboard::setup_keybindings ()
g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
}
+XMLNode&
+ArdourKeyboard::get_state (void)
+{
+ XMLNode* node = &Keyboard::get_state ();
+ char buf[32];
+
+ snprintf (buf, sizeof (buf), "%d", constraint_mod);
+ node->add_property ("constraint-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", trim_contents_mod);
+ node->add_property ("trim-contents-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", trim_overlap_mod);
+ node->add_property ("trim-overlap-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", trim_anchored_mod);
+ node->add_property ("trim-anchored-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", fine_adjust_mod);
+ node->add_property ("fine-adjust-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", push_points_mod);
+ node->add_property ("push-points-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", note_size_relative_mod);
+ node->add_property ("note-size-relative-modifier", buf);
+
+ return *node;
+}
+
+int
+ArdourKeyboard::set_state (const XMLNode& node, int version)
+{
+ const XMLProperty* prop;
+
+ if ((prop = node.property ("constraint-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &constraint_mod);
+ }
+
+ if ((prop = node.property ("trim-contents-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &trim_contents_mod);
+ }
+
+ if ((prop = node.property ("trim-overlap-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &trim_overlap_mod);
+ }
+
+ if ((prop = node.property ("trim-anchored-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &trim_anchored_mod);
+ }
+
+ if ((prop = node.property ("fine-adjust-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &fine_adjust_mod);
+ }
+
+ if ((prop = node.property ("push-points-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &push_points_mod);
+ }
+
+ if ((prop = node.property ("note-size-relative-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", ¬e_size_relative_mod);
+ }
+
+ return Keyboard::set_state (node, version);
+}
+
+/* Snap and snap delta modifiers may contain each other, so we use the
+ * following two methods to sort that out:
+ */
+bool
+ArdourKeyboard::indicates_snap (guint state)
+{
+ const bool contains_s = Keyboard::modifier_state_contains (state, Keyboard::snap_modifier());
+ const bool contains_d = Keyboard::modifier_state_contains (state, Keyboard::snap_delta_modifier());
+ const bool equals_d = Keyboard::modifier_state_equals (state, Keyboard::snap_delta_modifier());
+
+ return (contains_s && ((contains_d && !equals_d) || !contains_d));
+}
+
+bool
+ArdourKeyboard::indicates_snap_delta (guint state)
+{
+ const bool contains_d = Keyboard::modifier_state_contains (state, Keyboard::snap_delta_modifier());
+ const bool contains_s = Keyboard::modifier_state_contains (state, Keyboard::snap_modifier());
+ const bool equals_s = Keyboard::modifier_state_equals (state, Keyboard::snap_modifier());
+
+ return (contains_d && ((contains_s && !equals_s) || !contains_s));
+}
+
+void
+ArdourKeyboard::set_constraint_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~constraint_mod);
+ constraint_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | constraint_mod);
+}
+
+void
+ArdourKeyboard::set_trim_contents_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~trim_contents_mod);
+ trim_contents_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | trim_contents_mod);
+}
+
+void
+ArdourKeyboard::set_trim_overlap_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~trim_overlap_mod);
+ trim_overlap_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | trim_overlap_mod);
+}
+
+void
+ArdourKeyboard::set_trim_anchored_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~trim_anchored_mod);
+ trim_anchored_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | trim_anchored_mod);
+}
+
+void
+ArdourKeyboard::set_fine_adjust_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~fine_adjust_mod);
+ fine_adjust_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | fine_adjust_mod);
+}
+
+void
+ArdourKeyboard::set_push_points_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~push_points_mod);
+ push_points_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | push_points_mod);
+}
+
+void
+ArdourKeyboard::set_note_size_relative_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~note_size_relative_mod);
+ note_size_relative_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | note_size_relative_mod);
+}
+
Selection::Operation
ArdourKeyboard::selection_type (guint state)
{
@@ -187,5 +334,3 @@ ArdourKeyboard::selection_type (guint state)
return Selection::Set;
}
}
-
-
diff --git a/gtk2_ardour/keyboard.h b/gtk2_ardour/keyboard.h
index 6a68956..9ca6095 100644
--- a/gtk2_ardour/keyboard.h
+++ b/gtk2_ardour/keyboard.h
@@ -32,11 +32,67 @@ class ArdourKeyboard : public Gtkmm2ext::Keyboard
public:
ArdourKeyboard(ARDOUR_UI& ardour_ui) : ui(ardour_ui) {}
+ XMLNode& get_state (void);
+ int set_state (const XMLNode&, int version);
+
void setup_keybindings ();
static Selection::Operation selection_type (guint state);
ARDOUR_UI& ui;
+
+ /** @param state The button state from a GdkEvent.
+ * @return true if the modifier state indicates snap modifier
+ */
+ static bool indicates_snap (guint state);
+
+ /** @param state The button state from a GdkEvent.
+ * @return true if the modifier state indicates snap delta
+ */
+ static bool indicates_snap_delta (guint state);
+
+ static void set_constraint_modifier (guint);
+ /** @return Modifier mask to constrain drags in a particular direction;
+ */
+ static ModifierMask constraint_modifier () { return ModifierMask (constraint_mod); }
+
+ static void set_trim_contents_modifier (guint);
+ /** @return Modifier mask to move contents rather than region bounds during trim;
+ */
+ static ModifierMask trim_contents_modifier () { return ModifierMask (trim_contents_mod); }
+
+ static void set_trim_overlap_modifier (guint);
+ /** @return Modifier mask to remove region overlaps during trim;
+ */
+ static ModifierMask trim_overlap_modifier () { return ModifierMask (trim_overlap_mod); }
+
+ static void set_trim_anchored_modifier (guint);
+ /** @return Modifier mask to use anchored trim;
+ */
+ static ModifierMask trim_anchored_modifier () { return ModifierMask (trim_anchored_mod); }
+
+ static void set_fine_adjust_modifier (guint);
+ /** @return Modifier mask to fine adjust (control points only atm);
+ */
+ static ModifierMask fine_adjust_modifier () { return ModifierMask (fine_adjust_mod); }
+
+ static void set_push_points_modifier (guint);
+ /** @return Modifier mask to push proceeding points;
+ */
+ static ModifierMask push_points_modifier () { return ModifierMask (push_points_mod); }
+
+ static void set_note_size_relative_modifier (guint);
+ /** @return Modifier mask to resize notes relatively;
+ */
+ static ModifierMask note_size_relative_modifier () { return ModifierMask (note_size_relative_mod); }
+private:
+ static guint constraint_mod;
+ static guint trim_contents_mod;
+ static guint trim_overlap_mod;
+ static guint trim_anchored_mod;
+ static guint fine_adjust_mod;
+ static guint push_points_mod;
+ static guint note_size_relative_mod;
};
#endif /* __ardour_keyboard_h__ */
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index efa98bb..75cd5e6 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -51,6 +51,8 @@ LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord*
, thin_meter_width(2)
, max_peak (minus_infinity())
, meter_type (MeterPeak)
+ , visible_meter_type (MeterType(0))
+ , visible_meter_count (0)
, color_changed (false)
{
set_session (s);
@@ -78,7 +80,7 @@ LevelMeterBase::set_meter (PeakMeter* meter)
_meter_type_connection.disconnect();
_meter = meter;
- color_changed = true;
+ color_changed = true; // force update
if (_meter) {
_meter->ConfigurationChanged.connect (_configuration_connection, parent_invalidator, boost::bind (&LevelMeterBase::configuration_changed, this, _1, _2), gui_context());
@@ -150,6 +152,8 @@ LevelMeterBase::update_meters ()
const float peak = _meter->meter_level (n, meter_type);
if (meter_type == MeterPeak) {
(*i).meter->set (log_meter (peak));
+ } else if (meter_type == MeterPeak0dB) {
+ (*i).meter->set (log_meter0dB (peak));
} else if (meter_type == MeterIEC1NOR) {
(*i).meter->set (meter_deflect_nordic (peak + meter_lineup(0)));
} else if (meter_type == MeterIEC1DIN) {
@@ -207,7 +211,6 @@ LevelMeterBase::parameter_changed (string p)
void
LevelMeterBase::configuration_changed (ChanCount /*in*/, ChanCount /*out*/)
{
- color_changed = true;
setup_meters (meter_length, regular_meter_width, thin_meter_width);
}
@@ -215,7 +218,6 @@ void
LevelMeterBase::meter_type_changed (MeterType t)
{
meter_type = t;
- color_changed = true;
setup_meters (meter_length, regular_meter_width, thin_meter_width);
MeterTypeChanged(t);
}
@@ -234,9 +236,9 @@ LevelMeterBase::hide_all_meters ()
void
LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
{
- hide_all_meters ();
if (!_meter) {
+ hide_all_meters ();
return; /* do it later or never */
}
@@ -249,6 +251,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
guint16 width;
if (nmeters == 0) {
+ hide_all_meters ();
return;
}
@@ -258,6 +261,29 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
width = thin_meter_width;
}
+ width = rint (width * ARDOUR_UI::ui_scale);
+
+ if ( meters.size() > 0
+ && nmeters == visible_meter_count
+ && meters[0].width == width
+ && meters[0].length == len
+ && !color_changed
+ && meter_type == visible_meter_type) {
+ return;
+ }
+
+#if 0
+ printf("Meter redraw: %s %s %s %s %s %s\n",
+ (meters.size() > 0) ? "yes" : "no",
+ (meters.size() > 0 && meters[0].width == width) ? "yes" : "no",
+ (meters.size() > 0 && meters[0].length == len) ? "yes" : "no",
+ (nmeters == visible_meter_count) ? "yes" : "no",
+ (meter_type == visible_meter_type) ? "yes" : "no",
+ !color_changed ? "yes" : "no"
+ );
+#endif
+
+ hide_all_meters ();
while (meters.size() < nmeters) {
meters.push_back (MeterInfo());
}
@@ -372,8 +398,27 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
c[0] = c[2] = c[3] = c[4] = c[5] = c[1];
c[7] = c[8] = c[9] = c[6];
break;
+ case MeterPeak0dB:
+ stp[1] = 89.125; // 115.0 * log_meter0dB(-9);
+ stp[2] = 106.375; // 115.0 * log_meter0dB(-3);
+ stp[3] = 115.0; // 115.0 * log_meter0dB(0);
+ switch (ARDOUR_UI::config()->get_meter_line_up_level()) {
+ case MeteringLineUp24:
+ stp[0] = 115.0 * log_meter0dB(-24);
+ break;
+ case MeteringLineUp20:
+ stp[0] = 115.0 * log_meter0dB(-20);
+ break;
+ default:
+ case MeteringLineUp18:
+ stp[0] = 115.0 * log_meter0dB(-18);
+ break;
+ case MeteringLineUp15:
+ stp[0] = 115.0 * log_meter0dB(-15);
+ }
+ break;
default: // PEAK, RMS
- stp[1] = 77.5; // 115 * log_meter(-10)
+ stp[1] = 77.5; // 115 * log_meter(-9)
stp[2] = 92.5; // 115 * log_meter(-3)
stp[3] = 100.0; // 115 * log_meter(0)
switch (ARDOUR_UI::config()->get_meter_line_up_level()) {
@@ -420,6 +465,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
//show();
color_changed = false;
visible_meter_type = meter_type;
+ visible_meter_count = nmeters;
}
void
@@ -432,7 +478,7 @@ LevelMeterBase::set_type(MeterType t)
bool
LevelMeterBase::meter_button_press (GdkEventButton* ev)
{
- return !!ButtonPress (ev); /* EMIT SIGNAL */
+ return static_cast<bool>(ButtonPress (ev)); /* EMIT SIGNAL */
}
bool
diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h
index 5b8668e..a7a64d7 100644
--- a/gtk2_ardour/level_meter.h
+++ b/gtk2_ardour/level_meter.h
@@ -108,6 +108,7 @@ class LevelMeterBase : public ARDOUR::SessionHandlePtr, virtual public sigc::tra
float max_peak;
ARDOUR::MeterType meter_type;
ARDOUR::MeterType visible_meter_type;
+ uint32_t visible_meter_count;
PBD::ScopedConnection _configuration_connection;
PBD::ScopedConnection _meter_type_connection;
diff --git a/gtk2_ardour/linux_vst_gui_support.cc b/gtk2_ardour/linux_vst_gui_support.cc
index e438ed6..c54430c 100644
--- a/gtk2_ardour/linux_vst_gui_support.cc
+++ b/gtk2_ardour/linux_vst_gui_support.cc
@@ -348,11 +348,18 @@ void* gui_event_loop (void* ptr)
/*Look at the XEvent queue - if there are any XEvents we need to handle them,
including passing them to all the plugin (eventProcs) we are currently managing*/
+ bool may_sleep = true;
+
if(LXVST_XDisplay)
{
/*See if there are any events in the queue*/
int num_events = XPending(LXVST_XDisplay);
+
+ if (num_events > 0) {
+ // keep dispatching events as fast as possible
+ may_sleep = false;
+ }
/*process them if there are any*/
@@ -464,6 +471,10 @@ again:
clock1 = g_get_monotonic_time();
}
+
+ if (may_sleep && elapsed_time_ms + 1 < LXVST_sched_timer_interval) {
+ Glib::usleep(1000 * (LXVST_sched_timer_interval - elapsed_time_ms - 1));
+ }
}
/*Drop out to here if we set gui_quit to 1 */
diff --git a/gtk2_ardour/logmeter.h b/gtk2_ardour/logmeter.h
index a244fb4..ff0520a 100644
--- a/gtk2_ardour/logmeter.h
+++ b/gtk2_ardour/logmeter.h
@@ -76,6 +76,31 @@ log_meter (float db)
}
static inline float
+log_meter0dB (float db)
+{
+ gfloat def = 0.0f; /* Meter deflection %age */
+
+ if (db < -70.0f) {
+ def = 0.0f;
+ } else if (db < -60.0f) {
+ def = (db + 70.0f) * 0.25f;
+ } else if (db < -50.0f) {
+ def = (db + 60.0f) * 0.5f + 2.5f;
+ } else if (db < -40.0f) {
+ def = (db + 50.0f) * 0.75f + 7.5f;
+ } else if (db < -30.0f) {
+ def = (db + 40.0f) * 1.5f + 15.0f;
+ } else if (db < -20.0f) {
+ def = (db + 30.0f) * 2.0f + 30.0f;
+ } else if (db < 0.0f) {
+ def = (db + 20.0f) * 2.5f + 50.0f;
+ } else {
+ def = 100.0f;
+ }
+ return def/100.0f;
+}
+
+static inline float
meter_deflect_ppm (float db)
{
if (db < -30) {
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index eb22a74..d19c7e6 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -205,7 +205,8 @@ LV2PluginUI::LV2PluginUI(boost::shared_ptr<PluginInsert> pi,
_ardour_buttons_box.set_spacing (6);
_ardour_buttons_box.set_border_width (6);
_ardour_buttons_box.pack_end (focus_button, false, false);
- _ardour_buttons_box.pack_end (bypass_button, false, false, 10);
+ _ardour_buttons_box.pack_end (bypass_button, false, false, 4);
+ _ardour_buttons_box.pack_end (reset_button, false, false, 4);
_ardour_buttons_box.pack_end (delete_button, false, false);
_ardour_buttons_box.pack_end (save_button, false, false);
_ardour_buttons_box.pack_end (add_button, false, false);
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index abdfa35..f43d1bd 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -345,8 +345,15 @@ int main (int argc, char *argv[])
}
#endif
+ UIConfiguration* ui_config = new UIConfiguration;
+
+ if (ui_config->pre_gui_init ()) {
+ error << _("Could not complete pre-GUI initialization") << endmsg;
+ exit (1);
+ }
+
try {
- ui = new ARDOUR_UI (&argc, &argv, localedir.c_str());
+ ui = new ARDOUR_UI (&argc, &argv, localedir.c_str(), ui_config);
} catch (failed_constructor& err) {
error << string_compose (_("could not create %1 GUI"), PROGRAM_NAME) << endmsg;
exit (1);
diff --git a/gtk2_ardour/main_clock.cc b/gtk2_ardour/main_clock.cc
index 80dece0..f0cbd9b 100644
--- a/gtk2_ardour/main_clock.cc
+++ b/gtk2_ardour/main_clock.cc
@@ -19,22 +19,20 @@
#include "ardour_ui.h"
#include "main_clock.h"
+#include "public_editor.h"
#include "i18n.h"
+#include "ardour/tempo.h"
+
using namespace Gtk;
MainClock::MainClock (
const std::string& clock_name,
- bool is_transient,
const std::string& widget_name,
- bool editable,
- bool follows_playhead,
- bool primary,
- bool duration,
- bool with_info
+ bool primary
)
- : AudioClock (clock_name, is_transient, widget_name, editable, follows_playhead, duration, with_info)
+ : AudioClock (clock_name, false, widget_name, true, true, false, true)
, _primary (primary)
{
@@ -62,6 +60,23 @@ MainClock::build_ops_menu ()
c->set_active (true);
}
}
+
+ ops_items.push_back (SeparatorElem());
+ ops_items.push_back (MenuElem (_("Edit Tempo"), sigc::mem_fun(*this, &MainClock::edit_current_tempo)));
+ ops_items.push_back (MenuElem (_("Edit Meter"), sigc::mem_fun(*this, &MainClock::edit_current_meter)));
+ ops_items.push_back (MenuElem (_("Insert Tempo Change"), sigc::mem_fun(*this, &MainClock::insert_new_tempo)));
+ ops_items.push_back (MenuElem (_("Insert Meter Change"), sigc::mem_fun(*this, &MainClock::insert_new_meter)));
+}
+
+framepos_t
+MainClock::absolute_time () const
+{
+ if (get_is_duration ()) {
+ // delta to edit cursor
+ return current_time () + PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD);
+ } else {
+ return current_time ();
+ }
}
void
@@ -73,3 +88,51 @@ MainClock::display_delta_to_edit_cursor ()
ARDOUR_UI::config()->set_secondary_clock_delta_edit_cursor (!ARDOUR_UI::config()->get_secondary_clock_delta_edit_cursor ());
}
}
+
+void
+MainClock::edit_current_tempo ()
+{
+ ARDOUR::TempoSection ts = PublicEditor::instance().session()->tempo_map().tempo_section_at (absolute_time());
+ PublicEditor::instance().edit_tempo_section (&ts);
+}
+
+void
+MainClock::edit_current_meter ()
+{
+ ARDOUR::MeterSection ms = PublicEditor::instance().session()->tempo_map().meter_section_at (absolute_time());
+ PublicEditor::instance().edit_meter_section (&ms);
+}
+
+void
+MainClock::insert_new_tempo ()
+{
+ PublicEditor::instance().mouse_add_new_tempo_event (absolute_time ());
+}
+
+void
+MainClock::insert_new_meter ()
+{
+ PublicEditor::instance().mouse_add_new_meter_event (absolute_time ());
+}
+
+bool
+MainClock::on_button_press_event (GdkEventButton *ev)
+{
+ if (ev->button == 1) {
+ if (mode() == BBT) {
+ if (is_lower_layout_click(ev->y)) {
+ if (is_right_layout_click(ev->x)) {
+ // meter on the right
+ edit_current_meter();
+ } else {
+ // tempo on the left
+ edit_current_tempo();
+ }
+ return true;
+ }
+ }
+ }
+
+ return AudioClock::on_button_press_event (ev);
+}
+
diff --git a/gtk2_ardour/main_clock.h b/gtk2_ardour/main_clock.h
index 959a3f9..696b7e2 100644
--- a/gtk2_ardour/main_clock.h
+++ b/gtk2_ardour/main_clock.h
@@ -19,15 +19,26 @@
#include "audio_clock.h"
-/** A simple subclass of AudioClock that adds the `display delta to edit cursor' option to its context menu */
+/** A simple subclass of AudioClock that adds a few things to its context menu:
+ * `display delta to edit cursor' and edit/change tempo/meter
+ */
class MainClock : public AudioClock
{
public:
- MainClock (const std::string &, bool, const std::string &, bool, bool, bool primary, bool duration = false, bool with_info = false);
+ MainClock (const std::string& clock_name, const std::string& widget_name, bool primary);
private:
+ // Editor *_editor;
+
void build_ops_menu ();
void display_delta_to_edit_cursor ();
+ void edit_current_tempo ();
+ void edit_current_meter ();
+ void insert_new_tempo ();
+ void insert_new_meter ();
+ framepos_t absolute_time () const;
bool _primary;
+
+ bool on_button_press_event (GdkEventButton *ev);
};
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index 5ef7549..97664d3 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -77,6 +77,9 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
{
const double MH = marker_height - 1;
+ const double M3 = std::max(1.f, rintf(3.f * ARDOUR_UI::ui_scale));
+ const double M6 = std::max(2.f, rintf(6.f * ARDOUR_UI::ui_scale));
+
/* Shapes we use:
*
* Mark:
@@ -153,9 +156,9 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
points = new ArdourCanvas::Points ();
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
- points->push_back (ArdourCanvas::Duple (6.0, 0.0));
- points->push_back (ArdourCanvas::Duple (6.0, MH * .4));
- points->push_back (ArdourCanvas::Duple (3.0, MH));
+ points->push_back (ArdourCanvas::Duple ( M6, 0.0));
+ points->push_back (ArdourCanvas::Duple ( M6, MH * .4));
+ points->push_back (ArdourCanvas::Duple ( M3, MH));
points->push_back (ArdourCanvas::Duple (0.0, MH * .4));
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
@@ -166,12 +169,12 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
case Tempo:
case Meter:
points = new ArdourCanvas::Points ();
- points->push_back (ArdourCanvas::Duple (3.0, 0.0));
- points->push_back (ArdourCanvas::Duple (6.0, MH * .6));
- points->push_back (ArdourCanvas::Duple (6.0, MH));
+ points->push_back (ArdourCanvas::Duple ( M3, 0.0));
+ points->push_back (ArdourCanvas::Duple ( M6, MH * .6));
+ points->push_back (ArdourCanvas::Duple ( M6, MH));
points->push_back (ArdourCanvas::Duple (0.0, MH));
points->push_back (ArdourCanvas::Duple (0.0, MH * .6));
- points->push_back (ArdourCanvas::Duple (3.0, 0.0));
+ points->push_back (ArdourCanvas::Duple ( M3, 0.0));
_shift = 3;
_label_offset = 8.0;
@@ -180,10 +183,10 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
case SessionStart:
case RangeStart:
points = new ArdourCanvas::Points ();
- points->push_back (ArdourCanvas::Duple (0.0, 0.0));
- points->push_back (ArdourCanvas::Duple (6.5, MH * .5));
- points->push_back (ArdourCanvas::Duple (0.0, MH));
- points->push_back (ArdourCanvas::Duple (0.0, 0.0));
+ points->push_back (ArdourCanvas::Duple ( 0.0, 0.0));
+ points->push_back (ArdourCanvas::Duple (M6 + .5, MH * .5));
+ points->push_back (ArdourCanvas::Duple ( 0.0, MH));
+ points->push_back (ArdourCanvas::Duple ( 0.0, 0.0));
_shift = 0;
_label_offset = 8.0;
@@ -192,12 +195,12 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
case SessionEnd:
case RangeEnd:
points = new ArdourCanvas::Points ();
- points->push_back (ArdourCanvas::Duple (6.0, 0.0));
- points->push_back (ArdourCanvas::Duple (6.0, MH));
+ points->push_back (ArdourCanvas::Duple ( M6, 0.0));
+ points->push_back (ArdourCanvas::Duple ( M6, MH));
points->push_back (ArdourCanvas::Duple (0.0, MH * .5));
- points->push_back (ArdourCanvas::Duple (6.0, 0.0));
+ points->push_back (ArdourCanvas::Duple ( M6, 0.0));
- _shift = 6.0;
+ _shift = M6;
_label_offset = 0.0;
break;
@@ -400,8 +403,10 @@ Marker::setup_name_display ()
limit = _right_label_limit;
}
+ const float padding = std::max(2.f, rintf(2.f * ARDOUR_UI::ui_scale));
+
/* Work out how wide the name can be */
- int name_width = min ((double) pixel_width (_name, name_font) + 2, limit);
+ int name_width = min ((double) pixel_width (_name, name_font) + padding, limit);
if (name_width == 0) {
_name_item->hide ();
@@ -417,19 +422,19 @@ Marker::setup_name_display ()
if (label_on_left ()) {
/* adjust right edge of background to fit text */
- _name_background->set_x0 (_name_item->position().x - 2);
+ _name_background->set_x0 (_name_item->position().x - padding);
_name_background->set_x1 (_name_item->position().x + name_width + _shift);
} else {
/* right edge remains at zero (group-relative). Add
* arbitrary 2 pixels of extra padding at the end
*/
- _name_background->set_x1 (_name_item->position().x + name_width + 2.0);
+ _name_background->set_x1 (_name_item->position().x + name_width + padding);
}
}
_name_background->set_y0 (0);
/* unfortunate hard coding - this has to * match the marker bars height */
- _name_background->set_y1 (marker_height + 1.0);
+ _name_background->set_y1 (marker_height + 1.0);
}
void
diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc
index 25b709c..675e567 100644
--- a/gtk2_ardour/meter_patterns.cc
+++ b/gtk2_ardour/meter_patterns.cc
@@ -81,6 +81,9 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
case MeterPeak:
return _("Peak");
break;
+ case MeterPeak0dB:
+ return _("Peak 0dB");
+ break;
case MeterKrms:
return _("RMS + Peak");
break;
@@ -109,6 +112,7 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
return _("VU");
break;
default:
+ assert(0);
return _("???");
break;
}
@@ -141,6 +145,17 @@ static inline float mtr_col_and_fract(
cairo_set_source_rgb (cr, c->get_red_p(), c->get_green_p(), c->get_blue_p());
}
break;
+ case MeterPeak0dB:
+ fraction = log_meter0dB (val);
+ if (val >= 0 || val == -9) {
+ cairo_set_source_rgb (cr,
+ UINT_RGBA_R_FLT(peakcolor),
+ UINT_RGBA_G_FLT(peakcolor),
+ UINT_RGBA_B_FLT(peakcolor));
+ } else {
+ cairo_set_source_rgb (cr, c->get_red_p(), c->get_green_p(), c->get_blue_p());
+ }
+ break;
case MeterIEC2BBC:
case MeterIEC2EBU:
fraction = meter_deflect_ppm(val);
@@ -289,23 +304,27 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
float box_l=0;
float box_w=0;
+#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * ARDOUR_UI::ui_scale))
if (tickleft) {
if (w.get_name().substr(0, 3) == "Bar") {
- box_l = width-2; box_w = 2;
+ box_w = PX_SCALE(2, 2);
+ box_l = width - box_w;
} else if (w.get_name().substr(0, 4) == "Mark") {
- box_l = width-2; box_w = 2;
+ box_w = PX_SCALE(2, 2);
+ box_l = width - box_w;
background = false;
}
} else if (tickright) {
if (w.get_name().substr(0, 3) == "Bar") {
- box_l = 0; box_w = 2;
+ box_l = 0; box_w = PX_SCALE(2, 2);
} else if (w.get_name().substr(0, 4) == "Mark") {
- box_l = 0; box_w = 2;
+ box_l = 0; box_w = PX_SCALE(2, 2);
background = false;
}
} else {
- box_l = 0; box_w = 3;
+ box_l = 0; box_w = width;
}
+#undef PX_SCALE
cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
cairo_t* cr = cairo_create (surface);
@@ -487,6 +506,14 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
break;
default:
+ points.insert (std::pair<float,float>( 0, 1.0));
+ points.insert (std::pair<float,float>( 1, 0.5));
+ points.insert (std::pair<float,float>( 2, 0.5));
+ points.insert (std::pair<float,float>( 3, 1.0));
+ points.insert (std::pair<float,float>( 4, 0.5));
+ points.insert (std::pair<float,float>( 5, 0.5));
+ // no break
+ case MeterPeak0dB:
points.insert (std::pair<float,float>(-60, 0.5));
points.insert (std::pair<float,float>(-50, 1.0));
points.insert (std::pair<float,float>(-40, 1.0));
@@ -519,13 +546,6 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
points.insert (std::pair<float,float>( -3, 1.0));
points.insert (std::pair<float,float>( -2, 0.5));
points.insert (std::pair<float,float>( -1, 0.5));
-
- points.insert (std::pair<float,float>( 0, 1.0));
- points.insert (std::pair<float,float>( 1, 0.5));
- points.insert (std::pair<float,float>( 2, 0.5));
- points.insert (std::pair<float,float>( 3, 1.0));
- points.insert (std::pair<float,float>( 4, 0.5));
- points.insert (std::pair<float,float>( 5, 0.5));
break;
}
break;
@@ -557,7 +577,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
pos = height - (gint) floor (height * fraction);
pos = max (pos, 1);
cairo_move_to(cr, 0, pos + .5);
- cairo_line_to(cr, 3, pos + .5);
+ cairo_line_to(cr, width, pos + .5);
cairo_stroke (cr);
break;
case DataType::MIDI:
@@ -565,7 +585,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
pos = 1 + height - (gint) floor (height * fraction);
pos = min (pos, height);
cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- cairo_arc(cr, 1.5, pos + .5, 1.0, 0, 2 * M_PI);
+ cairo_arc(cr, width * .5, pos + .5, 1.0, 0, 2 * M_PI);
cairo_fill(cr);
break;
}
@@ -599,8 +619,14 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
tickright = true;
}
+#ifdef NO_OVERSAMPLE
cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
cairo_t* cr = cairo_create (surface);
+#else
+ cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width*2, height*2);
+ cairo_t* cr = cairo_create (surface);
+ cairo_scale(cr, 2.0, 2.0);
+#endif
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create(w.get_pango_context());
Pango::AttrList audio_font_attributes;
@@ -611,22 +637,27 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
Pango::FontDescription font;
font = Pango::FontDescription (ARDOUR_UI::config()->get_SmallMonospaceFont());
- double fixfontsize = 81920.0 / (double) ARDOUR_UI::config()->get_font_scale();
+#ifdef __APPLE__
+ const double fixfontsize = 1.0;
+#else
+ // counter-act global font-scaling.
+ const double fixfontsize = std::min(1.0, 0.9 / sqrtf(ARDOUR_UI::ui_scale));
+#endif
font.set_weight (Pango::WEIGHT_NORMAL);
- font.set_size (9.0 * PANGO_SCALE * fixfontsize);
+ font.set_size (8.0 * fixfontsize * PANGO_SCALE);
font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
audio_font_attributes.change (*font_attr);
delete font_attr;
font.set_weight (Pango::WEIGHT_ULTRALIGHT);
font.set_stretch (Pango::STRETCH_ULTRA_CONDENSED);
- font.set_size (8.0 * PANGO_SCALE * fixfontsize);
+ font.set_size (7.0 * fixfontsize * PANGO_SCALE);
font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
midi_font_attributes.change (*font_attr);
delete font_attr;
- font.set_size (6.0 * PANGO_SCALE * fixfontsize);
+ font.set_size (6.0 * fixfontsize * PANGO_SCALE);
font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
unit_font_attributes.change (*font_attr);
delete font_attr;
@@ -669,6 +700,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
switch (*i) {
case DataType::AUDIO:
layout->set_attributes (audio_font_attributes);
+ if (type == MeterPeak0dB) {
+ overlay_midi = 4;
+ }
switch (type) {
case MeterK12:
overlay_midi = 0;
@@ -716,6 +750,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
default:
case MeterPeak:
case MeterKrms:
+ points.insert (std::pair<float,string>( 3.0f, "+3"));
+ // no break
+ case MeterPeak0dB:
points.insert (std::pair<float,string>(-50.0f, "-50"));
points.insert (std::pair<float,string>(-40.0f, "-40"));
points.insert (std::pair<float,string>(-30.0f, "-30"));
@@ -733,7 +770,6 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
points.insert (std::pair<float,string>( -5.0f, "-5"));
points.insert (std::pair<float,string>( -3.0f, "-3"));
points.insert (std::pair<float,string>( 0.0f, "+0"));
- points.insert (std::pair<float,string>( 3.0f, "+3"));
break;
case MeterIEC2EBU:
@@ -823,6 +859,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
points.insert (std::pair<float,string>( 96, "96"));
points.insert (std::pair<float,string>(100, "100"));
points.insert (std::pair<float,string>(112, "112"));
+ points.insert (std::pair<float,string>(127, "127"));
} else {
switch (overlay_midi) {
case 1:
@@ -850,6 +887,13 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
points.insert (std::pair<float,string>( 72, "72"));
points.insert (std::pair<float,string>(112, "112"));
points.insert (std::pair<float,string>(127, "127"));
+ case 4:
+ /* labels that don't overlay with 0dBFS*/
+ points.insert (std::pair<float,string>( 0, "0"));
+ points.insert (std::pair<float,string>( 16, "16"));
+ points.insert (std::pair<float,string>( 48, "48"));
+ points.insert (std::pair<float,string>( 84, "84"));
+ points.insert (std::pair<float,string>(100, "100"));
default:
break;
}
@@ -878,20 +922,11 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
cairo_stroke (cr);
}
break;
-
case DataType::MIDI:
align_center = false; // don't bleed into legend
fraction = (j->first) / 127.0;
pos = 1 + height - (gint) lrintf (height * fraction);
pos = min (pos, height);
- cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- if (tickleft) {
- cairo_arc(cr, width - 2.0, pos + .5, 1.0, 0, 2 * M_PI);
- cairo_fill(cr);
- } else if (tickright) {
- cairo_arc(cr, 3, pos + .5, 1.0, 0, 2 * M_PI);
- cairo_fill(cr);
- }
break;
}
@@ -947,6 +982,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
break;
default:
case MeterPeak:
+ case MeterPeak0dB:
case MeterKrms:
layout->set_text("dBFS");
break;
@@ -1056,12 +1092,19 @@ ArdourMeter::meter_expose_metrics (GdkEventExpose *ev, MeterType type, std::vect
}
cairo_move_to (cr, 0, 0);
- cairo_set_source (cr, pattern);
gint width, height;
win->get_size (width, height);
-
+#ifdef NO_OVERSAMPLE
+ cairo_set_source (cr, pattern);
cairo_rectangle (cr, 0, 0, width, height);
+#else
+ cairo_scale(cr, 0.5, 0.5);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST);
+ cairo_set_source (cr, pattern);
+ cairo_rectangle (cr, 0, 0, width * 2., height * 2.);
+#endif
+
cairo_fill (cr);
cairo_destroy (cr);
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index bfba07d..f469aed 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -59,6 +59,8 @@ PBD::Signal1<void,MeterStrip*> MeterStrip::CatchDeletion;
PBD::Signal0<void> MeterStrip::MetricChanged;
PBD::Signal0<void> MeterStrip::ConfigurationChanged;
+#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * ARDOUR_UI::ui_scale))
+
MeterStrip::MeterStrip (int metricmode, MeterType mt)
: AxisView(0)
, RouteUI(0)
@@ -68,15 +70,16 @@ MeterStrip::MeterStrip (int metricmode, MeterType mt)
_tick_bar = 0;
_metricmode = -1;
metric_type = MeterPeak;
- mtr_vbox.set_spacing(2);
- nfo_vbox.set_spacing(2);
- peakbx.set_size_request(-1, 14);
- namebx.set_size_request(18, 52);
- spacer.set_size_request(-1,0);
+
+ mtr_vbox.set_spacing (PX_SCALE(2, 2));
+ nfo_vbox.set_spacing (PX_SCALE(2, 2));
+ peakbx.set_size_request (-1, PX_SCALE(14, 14));
+ namebx.set_size_request (PX_SCALE(16, 18), PX_SCALE(32, 52));
+ spacer.set_size_request (-1,0);
set_metric_mode(metricmode, mt);
- meter_metric_area.set_size_request(25, 10);
+ meter_metric_area.set_size_request (PX_SCALE(25, 25), 10);
meter_metric_area.signal_expose_event().connect (
sigc::mem_fun(*this, &MeterStrip::meter_metrics_expose));
RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics));
@@ -88,7 +91,7 @@ MeterStrip::MeterStrip (int metricmode, MeterType mt)
mtr_vbox.pack_start (spacer, false, false);
mtr_container.add(mtr_vbox);
- mtr_hsep.set_size_request(-1,1);
+ mtr_hsep.set_size_request (-1, 1);
mtr_hsep.set_name("BlackSeparator");
nfo_vbox.pack_start (mtr_hsep, false, false);
@@ -119,8 +122,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
, _route(rt)
, peak_display()
{
- mtr_vbox.set_spacing(2);
- nfo_vbox.set_spacing(2);
+ mtr_vbox.set_spacing (PX_SCALE(2, 2));
+ nfo_vbox.set_spacing (PX_SCALE(2, 2));
SessionHandlePtr::set_session (sess);
RouteUI::init ();
RouteUI::set_route (rt);
@@ -130,6 +133,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
_metricmode = -1;
metric_type = MeterPeak;
+ // note: level_meter->setup_meters() does the scaling
int meter_width = 6;
if (_route->shared_peak_meter()->input_streams().n_total() == 1) {
meter_width = 12;
@@ -157,27 +161,27 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
ARDOUR_UI::instance()->set_tip (peak_display, _("Reset Peak"));
max_peak = minus_infinity();
peak_display.unset_flags (Gtk::CAN_FOCUS);
- peak_display.set_size_request(12, 8);
- peak_display.set_corner_radius(2);
+ peak_display.set_size_request(PX_SCALE(12, 12), PX_SCALE(8, 8));
+ peak_display.set_corner_radius(2); // ardour-button scales this
peak_align.set(0.5, 1.0, 1.0, 0.8);
peak_align.add(peak_display);
- peakbx.pack_start(peak_align, true, true, 3);
- peakbx.set_size_request(-1, 14);
+ peakbx.pack_start(peak_align, true, true, 2);
+ peakbx.set_size_request(-1, PX_SCALE(14, 14));
// add track-name & -number label
number_label.set_text("-");
- number_label.set_size_request(18, 18);
+ number_label.set_size_request(PX_SCALE(18, 18), PX_SCALE(18, 18));
name_changed();
- name_label.set_corner_radius(2);
+ name_label.set_corner_radius(2); // ardour button scales radius
name_label.set_elements((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text|ArdourButton::Inactive));
name_label.set_name("meterbridge label");
name_label.set_angle(-90.0);
name_label.set_text_ellipsize (Pango::ELLIPSIZE_END);
name_label.set_layout_ellipsize_width(48 * PANGO_SCALE);
- name_label.set_size_request(18, 50);
+ name_label.set_size_request(PX_SCALE(18, 18), PX_SCALE(50, 50));
name_label.set_alignment(-1.0, .5);
ARDOUR_UI::instance()->set_tip (name_label, _route->name());
ARDOUR_UI::instance()->set_tip (*level_meter, _route->name());
@@ -189,7 +193,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
number_label.set_layout_ellipsize_width(18 * PANGO_SCALE);
number_label.set_alignment(.5, .5);
- namebx.set_size_request(18, 52);
+ namebx.set_size_request(PX_SCALE(18, 18), PX_SCALE(52, 52));
namebx.pack_start(namenumberbx, true, false, 0);
namenumberbx.pack_start(name_label, true, false, 0);
namenumberbx.pack_start(number_label, false, false, 0);
@@ -207,25 +211,25 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
btnbox.pack_start(solobox, false, false, 1);
rec_enable_button->set_corner_radius(2);
- rec_enable_button->set_size_request(18, 18);
+ rec_enable_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
mute_button->set_corner_radius(2);
- mute_button->set_size_request(18, 18);
+ mute_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
solo_button->set_corner_radius(2);
- solo_button->set_size_request(18, 18);
+ solo_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
monitor_input_button->set_corner_radius(2);
- monitor_input_button->set_size_request(18, 18);
+ monitor_input_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
monitor_disk_button->set_corner_radius(2);
- monitor_disk_button->set_size_request(18, 18);
+ monitor_disk_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
- mutebox.set_size_request(18, 18);
- solobox.set_size_request(18, 18);
- recbox.set_size_request(18, 18);
- mon_in_box.set_size_request(18, 18);
- mon_disk_box.set_size_request(18, 18);
+ mutebox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
+ solobox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
+ recbox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
+ mon_in_box.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
+ mon_disk_box.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18));
spacer.set_size_request(-1,0);
update_button_box();
@@ -284,8 +288,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
meter_configuration_changed (_route->shared_peak_meter()->input_streams ());
- meter_ticks1_area.set_size_request(3,-1);
- meter_ticks2_area.set_size_request(3,-1);
+ meter_ticks1_area.set_size_request(PX_SCALE(3, 3), -1);
+ meter_ticks2_area.set_size_request(PX_SCALE(3, 3), -1);
meter_ticks1_area.signal_expose_event().connect (sigc::mem_fun(*this, &MeterStrip::meter_ticks1_expose));
meter_ticks2_area.signal_expose_event().connect (sigc::mem_fun(*this, &MeterStrip::meter_ticks2_expose));
@@ -541,18 +545,21 @@ MeterStrip::on_size_allocate (Gtk::Allocation& a)
tnh = 4 + std::max(2u, _session->track_number_decimals()) * 8; // TODO 8 = max_with_of_digit_0_to_9()
}
+ nh *= ARDOUR_UI::ui_scale;
+ tnh *= ARDOUR_UI::ui_scale;
+
int prev_height, ignored;
bool need_relayout = false;
- namebx.get_size_request(ignored, prev_height);
- namebx.set_size_request(18, nh + tnh);
+ namebx.get_size_request (ignored, prev_height);
+ namebx.set_size_request (PX_SCALE(18, 18), nh + tnh);
if (prev_height != nh + tnh) {
need_relayout = true;
}
- namenumberbx.get_size_request(ignored, prev_height);
- namenumberbx.set_size_request(18, nh + tnh);
+ namenumberbx.get_size_request (ignored, prev_height);
+ namenumberbx.set_size_request (PX_SCALE(18, 18), nh + tnh);
if (prev_height != nh + tnh) {
need_relayout = true;
@@ -561,8 +568,8 @@ MeterStrip::on_size_allocate (Gtk::Allocation& a)
if (_route) {
int nlh = nh + (_route->is_master() ? tnh : -1);
name_label.get_size_request(ignored, prev_height);
- name_label.set_size_request(18, nlh);
- name_label.set_layout_ellipsize_width ((nh - 4 + (_route->is_master() ? tnh : 0)) * PANGO_SCALE);
+ name_label.set_size_request (PX_SCALE(18, 18), nlh);
+ name_label.set_layout_ellipsize_width ((nh - 4 + (_route->is_master() ? tnh : 0)) * PANGO_SCALE); // XXX
if (prev_height != nlh) {
need_relayout = true;
}
@@ -716,32 +723,33 @@ MeterStrip::update_button_box ()
if (!_session) return;
int height = 0;
if (_session->config.get_show_mute_on_meterbridge()) {
- height += 20;
+ height += PX_SCALE(18, 18) + PX_SCALE(2, 2);
mutebox.show();
} else {
mutebox.hide();
}
if (_session->config.get_show_solo_on_meterbridge()) {
- height += 20;
+ height += PX_SCALE(18, 18) + PX_SCALE(2, 2);
solobox.show();
} else {
solobox.hide();
}
if (_session->config.get_show_rec_on_meterbridge()) {
- height += 20;
+ height += PX_SCALE(18, 18) + PX_SCALE(2, 2);
recbox.show();
} else {
recbox.hide();
}
if (_session->config.get_show_monitor_on_meterbridge()) {
- height += 20 + 20;
+ height += PX_SCALE(18, 18) + PX_SCALE(2, 2);
+ height += PX_SCALE(18, 18) + PX_SCALE(2, 2);
mon_in_box.show();
mon_disk_box.show();
} else {
mon_in_box.hide();
mon_disk_box.hide();
}
- btnbox.set_size_request(18, height);
+ btnbox.set_size_request(PX_SCALE(18, 18), height);
check_resize();
}
@@ -803,7 +811,7 @@ MeterStrip::name_changed () {
}
const int tnh = 4 + std::max(2u, _session->track_number_decimals()) * 8; // TODO 8 = max_width_of_digit_0_to_9()
// NB numbers are rotated 90deg. on the meterbridge -> use height
- number_label.set_size_request(18, tnh);
+ number_label.set_size_request(PX_SCALE(18, 18), tnh * ARDOUR_UI::ui_scale);
} else {
number_label.hide();
}
@@ -834,6 +842,7 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
_suspend_menu_callbacks = true;
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
+ add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak0dB), MeterPeak0dB);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index eed9017..47e5510 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -104,6 +104,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
, _current_range_max(0)
, _region_relative_time_converter(r->session().tempo_map(), r->position())
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
+ , _region_relative_time_converter_double(r->session().tempo_map(), r->position())
, _active_notes(0)
, _note_group (new ArdourCanvas::Container (group))
, _note_diff_command (0)
@@ -151,6 +152,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
, _current_range_max(0)
, _region_relative_time_converter(r->session().tempo_map(), r->position())
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
+ , _region_relative_time_converter_double(r->session().tempo_map(), r->position())
, _active_notes(0)
, _note_group (new ArdourCanvas::Container (group))
, _note_diff_command (0)
@@ -203,6 +205,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
, _current_range_max(0)
, _region_relative_time_converter(other.region_relative_time_converter())
, _source_relative_time_converter(other.source_relative_time_converter())
+ , _region_relative_time_converter_double(other.region_relative_time_converter_double())
, _active_notes(0)
, _note_group (new ArdourCanvas::Container (get_canvas_group()))
, _note_diff_command (0)
@@ -234,6 +237,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
, _current_range_max(0)
, _region_relative_time_converter(other.region_relative_time_converter())
, _source_relative_time_converter(other.source_relative_time_converter())
+ , _region_relative_time_converter_double(other.region_relative_time_converter_double())
, _active_notes(0)
, _note_group (new ArdourCanvas::Container (get_canvas_group()))
, _note_diff_command (0)
@@ -1408,6 +1412,7 @@ MidiRegionView::region_resized (const PropertyChange& what_changed)
if (what_changed.contains (ARDOUR::Properties::position)) {
_region_relative_time_converter.set_origin_b(_region->position());
+ _region_relative_time_converter_double.set_origin_b(_region->position());
set_duration(_region->length(), 0);
if (_enable_display) {
redisplay_model();
@@ -2619,22 +2624,25 @@ MidiRegionView::note_dropped(NoteBase *, frameoffset_t dt, int8_t dnote)
}
/** @param x Pixel relative to the region position.
+ * @param ensure_snap defaults to false. true = snap always, ignoring snap mode and magnetic snap.
+ * Used for inverting the snap logic with key modifiers and snap delta calculation.
* @return Snapped frame relative to the region position.
*/
framepos_t
-MidiRegionView::snap_pixel_to_sample(double x)
+MidiRegionView::snap_pixel_to_sample(double x, bool ensure_snap)
{
PublicEditor& editor (trackview.editor());
- return snap_frame_to_frame (editor.pixel_to_sample (x));
+ return snap_frame_to_frame (editor.pixel_to_sample (x), ensure_snap);
}
/** @param x Pixel relative to the region position.
+ * @param ensure_snap defaults to false. true = ignore magnetic snap and snap mode (used for snap delta calculation).
* @return Snapped pixel relative to the region position.
*/
double
-MidiRegionView::snap_to_pixel(double x)
+MidiRegionView::snap_to_pixel(double x, bool ensure_snap)
{
- return (double) trackview.editor().sample_to_pixel(snap_pixel_to_sample(x));
+ return (double) trackview.editor().sample_to_pixel(snap_pixel_to_sample(x, ensure_snap));
}
double
@@ -2685,6 +2693,12 @@ MidiRegionView::region_frames_to_region_beats(framepos_t frames) const
return _region_relative_time_converter.from(frames);
}
+double
+MidiRegionView::region_frames_to_region_beats_double (framepos_t frames) const
+{
+ return _region_relative_time_converter_double.from(frames);
+}
+
void
MidiRegionView::begin_resizing (bool /*at_front*/)
{
@@ -2733,9 +2747,11 @@ MidiRegionView::begin_resizing (bool /*at_front*/)
* a difference when multiple notes are being resized; in relative mode, each note's length is changed by the
* amount of the drag. In non-relative mode, all selected notes are set to have the same start or end point
* as the \a primary note.
+ * @param snap_delta snap offset of the primary note in pixels. used in SnapRelative SnapDelta mode.
+ * @param with_snap true if snap is to be used to determine the position, false if no snap is to be used.
*/
void
-MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative)
+MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap)
{
bool cursor_set = false;
@@ -2746,15 +2762,15 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
if (at_front) {
if (relative) {
- current_x = canvas_note->x0() + delta_x;
+ current_x = canvas_note->x0() + delta_x + snap_delta;
} else {
- current_x = primary->x0() + delta_x;
+ current_x = primary->x0() + delta_x + snap_delta;
}
} else {
if (relative) {
- current_x = canvas_note->x1() + delta_x;
+ current_x = canvas_note->x1() + delta_x + snap_delta;
} else {
- current_x = primary->x1() + delta_x;
+ current_x = primary->x1() + delta_x + snap_delta;
}
}
@@ -2768,26 +2784,47 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
}
if (at_front) {
- resize_rect->set_x0 (snap_to_pixel(current_x));
+ if (with_snap) {
+ resize_rect->set_x0 (snap_to_pixel(current_x) - snap_delta);
+ } else {
+ resize_rect->set_x0 (current_x - snap_delta);
+ }
resize_rect->set_x1 (canvas_note->x1());
} else {
- resize_rect->set_x1 (snap_to_pixel(current_x));
+ if (with_snap) {
+ resize_rect->set_x1 (snap_to_pixel(current_x) - snap_delta);
+ } else {
+ resize_rect->set_x1 (current_x - snap_delta);
+ }
resize_rect->set_x0 (canvas_note->x0());
}
if (!cursor_set) {
- const double snapped_x = snap_pixel_to_sample (current_x);
+ /* Convert snap delta from pixels to beats. */
+ framepos_t snap_delta_samps = trackview.editor().pixel_to_sample (snap_delta);
+ double snap_delta_beats = 0.0;
+ int sign = 1;
+
+ /* negative beat offsets aren't allowed */
+ if (snap_delta_samps > 0) {
+ snap_delta_beats = region_frames_to_region_beats_double (snap_delta_samps);
+ } else if (snap_delta_samps < 0) {
+ snap_delta_beats = region_frames_to_region_beats_double ( - snap_delta_samps);
+ sign = -1;
+ }
+
+ const double snapped_x = (with_snap ? snap_pixel_to_sample (current_x) : trackview.editor ().pixel_to_sample (current_x));
Evoral::Beats beats = region_frames_to_region_beats (snapped_x);
Evoral::Beats len = Evoral::Beats();
if (at_front) {
if (beats < canvas_note->note()->end_time()) {
- len = canvas_note->note()->time() - beats;
+ len = canvas_note->note()->time() - beats + (sign * snap_delta_beats);
len += canvas_note->note()->length();
}
} else {
if (beats >= canvas_note->note()->time()) {
- len = beats - canvas_note->note()->time();
+ len = beats - canvas_note->note()->time() - (sign * snap_delta_beats);
}
}
@@ -2808,7 +2845,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
* Parameters the same as for \a update_resizing().
*/
void
-MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative)
+MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap)
{
_note_diff_command = _model->new_note_diff_command (_("resize notes"));
@@ -2824,15 +2861,15 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
if (at_front) {
if (relative) {
- current_x = canvas_note->x0() + delta_x;
+ current_x = canvas_note->x0() + delta_x + snap_delta;
} else {
- current_x = primary->x0() + delta_x;
+ current_x = primary->x0() + delta_x + snap_delta;
}
} else {
if (relative) {
- current_x = canvas_note->x1() + delta_x;
+ current_x = canvas_note->x1() + delta_x + snap_delta;
} else {
- current_x = primary->x1() + delta_x;
+ current_x = primary->x1() + delta_x + snap_delta;
}
}
@@ -2843,16 +2880,32 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
current_x = trackview.editor().sample_to_pixel(_region->length());
}
- /* Convert that to a frame within the source */
- current_x = snap_pixel_to_sample (current_x) + _region->start ();
+ /* Convert snap delta from pixels to beats with sign. */
+ framepos_t snap_delta_samps = trackview.editor().pixel_to_sample (snap_delta);
+ double snap_delta_beats = 0.0;
+ int sign = 1;
+
+ if (snap_delta_samps > 0) {
+ snap_delta_beats = region_frames_to_region_beats_double (snap_delta_samps);
+ } else if (snap_delta_samps < 0) {
+ snap_delta_beats = region_frames_to_region_beats_double ( - snap_delta_samps);
+ sign = -1;
+ }
+
+ /* Convert the new x position to a frame within the source */
+ framepos_t current_fr;
+ if (with_snap) {
+ current_fr = snap_pixel_to_sample (current_x) + _region->start ();
+ } else {
+ current_fr = trackview.editor().pixel_to_sample (current_x) + _region->start ();
+ }
/* and then to beats */
- const Evoral::Beats x_beats = region_frames_to_region_beats (current_x);
+ const Evoral::Beats x_beats = region_frames_to_region_beats (current_fr);
if (at_front && x_beats < canvas_note->note()->end_time()) {
- note_diff_add_change (canvas_note, MidiModel::NoteDiffCommand::StartTime, x_beats);
-
- Evoral::Beats len = canvas_note->note()->time() - x_beats;
+ note_diff_add_change (canvas_note, MidiModel::NoteDiffCommand::StartTime, x_beats - (sign * snap_delta_beats));
+ Evoral::Beats len = canvas_note->note()->time() - x_beats + (sign * snap_delta_beats);
len += canvas_note->note()->length();
if (!!len) {
@@ -2861,8 +2914,8 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
}
if (!at_front) {
- const Evoral::Beats len = std::max(Evoral::Beats(1 / 512.0),
- x_beats - canvas_note->note()->time());
+ Evoral::Beats len = std::max(Evoral::Beats(1 / 512.0),
+ x_beats - canvas_note->note()->time() - (sign * snap_delta_beats));
note_diff_add_change (canvas_note, MidiModel::NoteDiffCommand::Length, len);
}
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 7765430..4cab6b1 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -223,8 +223,8 @@ public:
*/
void begin_resizing(bool at_front);
- void update_resizing (NoteBase*, bool, double, bool);
- void commit_resizing (NoteBase*, bool, double, bool);
+ void update_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap);
+ void commit_resizing (NoteBase* primary, bool at_front, double delat_x, bool relative, double snap_delta, bool with_snap);
void abort_resizing ();
/** Change the channel of the selection.
@@ -250,15 +250,18 @@ public:
/** Snap a region relative pixel coordinate to pixel units.
* @param x a pixel coordinate relative to region start
+ * @param ensure_snap do not use magnetic snap (required for snap delta calculation)
* @return the snapped pixel coordinate relative to region start
*/
- double snap_to_pixel(double x);
+ double snap_to_pixel(double x, bool ensure_snap = false);
/** Snap a region relative pixel coordinate to frame units.
* @param x a pixel coordinate relative to region start
+ * @param ensure_snap ignore SnapOff and magnetic snap.
+ * Required for inverting snap logic with modifier keys and snap delta calculation.
* @return the snapped framepos_t coordinate relative to region start
*/
- framepos_t snap_pixel_to_sample(double x);
+ framepos_t snap_pixel_to_sample(double x, bool ensure_snap = false);
/** Convert a timestamp in beats into frames (both relative to region position) */
framepos_t region_beats_to_region_frames(Evoral::Beats beats) const;
@@ -268,6 +271,7 @@ public:
}
/** Convert a timestamp in frames to beats (both relative to region position) */
Evoral::Beats region_frames_to_region_beats(framepos_t) const;
+ double region_frames_to_region_beats_double(framepos_t) const;
/** Convert a timestamp in beats measured from source start into absolute frames */
framepos_t source_beats_to_absolute_frames(Evoral::Beats beats) const;
@@ -286,6 +290,10 @@ public:
return _source_relative_time_converter;
}
+ ARDOUR::DoubleBeatsFramesConverter const & region_relative_time_converter_double () const {
+ return _region_relative_time_converter_double;
+ }
+
void goto_previous_note (bool add_to_selection);
void goto_next_note (bool add_to_selection);
void change_note_lengths (bool, bool, Evoral::Beats beats, bool start, bool end);
@@ -400,6 +408,7 @@ private:
ARDOUR::BeatsFramesConverter _region_relative_time_converter;
ARDOUR::BeatsFramesConverter _source_relative_time_converter;
+ ARDOUR::DoubleBeatsFramesConverter _region_relative_time_converter_double;
boost::shared_ptr<ARDOUR::MidiModel> _model;
Events _events;
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 6225f71..a011d2e 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -34,6 +34,7 @@
#include <gtkmm2ext/slider_controller.h>
#include <gtkmm2ext/bindable_button.h>
+#include "ardour/amp.h"
#include "ardour/audio_track.h"
#include "ardour/audioengine.h"
#include "ardour/internal_send.h"
@@ -96,6 +97,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
, meter_point_button (_("pre"))
, midi_input_enable_button (0)
, _comment_button (_("Comments"))
+ , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero))
, _visibility (X_("mixer-element-visibility"))
{
init ();
@@ -125,6 +127,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr<Route> rt
, meter_point_button (_("pre"))
, midi_input_enable_button (0)
, _comment_button (_("Comments"))
+ , trim_control (ArdourKnob::default_elements, ArdourKnob::Flags (ArdourKnob::Detent | ArdourKnob::ArcToZero))
, _visibility (X_("mixer-element-visibility"))
{
init ();
@@ -151,12 +154,10 @@ MixerStrip::init ()
t += string_compose (_("\n%1-%2-click to toggle the width of all strips."), Keyboard::primary_modifier_name(), Keyboard::tertiary_modifier_name ());
}
- width_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- width_button.set_icon (ArdourButton::StripWidth);
+ width_button.set_icon (ArdourIcon::StripWidth);
ARDOUR_UI::instance()->set_tip (width_button, t);
- hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- hide_button.set_icon (ArdourButton::CloseCross);
+ hide_button.set_icon (ArdourIcon::CloseCross);
ARDOUR_UI::instance()->set_tip (&hide_button, _("Hide this mixer strip"));
input_button_box.set_spacing(2);
@@ -255,6 +256,15 @@ MixerStrip::init ()
_comment_button.set_name (X_("mixer strip button"));
_comment_button.signal_clicked.connect (sigc::mem_fun (*this, &RouteUI::toggle_comment_editor));
+ // TODO implement ArdourKnob::on_size_request properly
+#define PX_SCALE(px) std::max((float)px, rintf((float)px * ARDOUR_UI::ui_scale))
+ trim_control.set_size_request (PX_SCALE(19), PX_SCALE(19));
+#undef PX_SCALE
+ trim_control.set_tooltip_prefix (_("Trim: "));
+ trim_control.set_name ("trim knob");
+ trim_control.set_no_show_all (true);
+ input_button_box.pack_start (trim_control, false, false);
+
global_vpacker.set_border_width (1);
global_vpacker.set_spacing (0);
@@ -516,12 +526,21 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
monitor_disk_button->hide ();
}
+ if (route()->trim() && route()->trim()->active()) {
+ trim_control.show ();
+ trim_control.set_controllable (route()->trim()->gain_control());
+ } else {
+ trim_control.hide ();
+ boost::shared_ptr<Controllable> none;
+ trim_control.set_controllable (none);
+ }
+
if (is_midi_track()) {
if (midi_input_enable_button == 0) {
midi_input_enable_button = manage (new ArdourButton);
midi_input_enable_button->set_name ("midi input button");
midi_input_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- midi_input_enable_button->set_icon (ArdourButton::DinMidi);
+ midi_input_enable_button->set_icon (ArdourIcon::DinMidi);
midi_input_enable_button->signal_button_press_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_press), false);
midi_input_enable_button->signal_button_release_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_release), false);
ARDOUR_UI::instance()->set_tip (midi_input_enable_button, _("Enable/Disable MIDI input"));
@@ -684,6 +703,8 @@ MixerStrip::set_width_enum (Width w, void* owner)
set_button_names ();
+ const float scale = std::max(1.f, ARDOUR_UI::ui_scale);
+
switch (w) {
case Wide:
@@ -703,8 +724,12 @@ MixerStrip::set_width_enum (Width w, void* owner)
panners.astate_string(_route->panner()->automation_state()));
}
-
- set_size_request (max (110, gpm.get_gm_width()+5), -1);
+ {
+ // panners expect an even number of horiz. pixels
+ int width = rintf (max (110.f * scale, gpm.get_gm_width() + 10.f * scale)) + 1;
+ width &= ~1;
+ set_size_request (width, -1);
+ }
break;
case Narrow:
@@ -726,7 +751,12 @@ MixerStrip::set_width_enum (Width w, void* owner)
panners.short_astate_string(_route->panner()->automation_state()));
}
- set_size_request (max (60, gpm.get_gm_width() + 10), -1);
+ {
+ // panners expect an even number of horiz. pixels
+ int width = rintf (max (60.f * scale, gpm.get_gm_width() + 10.f * scale)) + 1;
+ width &= ~1;
+ set_size_request (width, -1);
+ }
break;
}
@@ -2272,6 +2302,7 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
items.push_back (SeparatorElem());
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
+ add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterPeak0dB), MeterPeak0dB);
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index 46f5abd..9133d29 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -47,6 +47,7 @@
#include "pbd/fastlog.h"
+#include "ardour_knob.h"
#include "route_ui.h"
#include "gain_meter.h"
#include "panner_ui.h"
@@ -202,6 +203,8 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
ArdourButton _comment_button;
+ ArdourKnob trim_control;
+
void setup_comment_button ();
ArdourButton group_button;
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 54d97c3..2314409 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -676,7 +676,10 @@ Mixer_UI::strip_button_release_event (GdkEventButton *ev, MixerStrip *strip)
/* primary-click: toggle selection state of strip */
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
_selection.remove (strip);
- }
+ } else if (_selection.routes.size() > 1) {
+ /* de-select others */
+ _selection.set (strip);
+ }
} else {
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
_selection.add (strip);
@@ -1233,12 +1236,14 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
int celly;
if (!group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
- return false;
+ _group_tabs->get_menu(0)->popup (1, ev->time);
+ return true;
}
TreeIter iter = group_model->get_iter (path);
if (!iter) {
- return false;
+ _group_tabs->get_menu(0)->popup (1, ev->time);
+ return true;
}
RouteGroup* group = (*iter)[group_columns.group];
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index af03be3..e2e8bd4 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -92,6 +92,7 @@ This mode provides many different operations on both regions and control points,
@vis|Editor/temporal-zoom-in|equal|zoom in
@vis|Editor/temporal-zoom-out|minus|zoom out
+ at vis|Editor/zoom-to-session|<@TERTIARY@>underscore|zoom to session
@eep|Editor/edit-cursor-to-previous-region-sync|apostrophe|EP to prev region sync
@eep|Editor/edit-cursor-to-next-region-sync|semicolon|EP to next region sync
@eep|Editor/cycle-edit-point|grave|next EP w/o marker
@@ -106,8 +107,7 @@ This mode provides many different operations on both regions and control points,
@trans|Editor/add-location-from-playhead|nabla|add marker
@trans|Editor/remove-location-from-playhead|<@PRIMARY@>nabla|add marker
-;@trans|Transport/GotoStart|Return|to start marker
- at movp|Transport/alternate-GotoStart|KP_Return|to edit point
+ at movp|Transport/alternate-GotoStart|Return|to start marker
@trans|Editor/editor-fade-range|slash|fade range selection
@rop|Region/set-fade-in-length|<@PRIMARY@>slash|set fade in length
@@ -182,7 +182,7 @@ This mode provides many different operations on both regions and control points,
@aep|Region/align-regions-start-relative|<@PRIMARY@><@TERTIARY@>a|align start(s) relative
@rop|Region/split-region|s|split
@sess|Common/Save|<@PRIMARY@>s|save session
- at sess|Main/Snapshot|<@PRIMARY@><@TERTIARY@>s|snapshot session
+ at sess|Main/SnapshotStay|<@PRIMARY@><@TERTIARY@>s|snapshot session
@trans|Editor/track-solo-toggle|<@SECONDARY@>s|toggle track solo status
@mmode|MouseMode/set-mouse-mode-draw|d|note-draw mode
@rop|Region/duplicate-region|<@SECONDARY@>d|duplicate region (once)
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index 4bfe24a..5a09311 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -21,6 +21,7 @@
#include "pbd/compose.h"
#include "pbd/error.h"
+#include "pbd/replace_all.h"
#include "gtkmm2ext/bindable_button.h"
#include "gtkmm2ext/tearoff.h"
@@ -30,7 +31,9 @@
#include <gtkmm/menu.h>
#include <gtkmm/menuitem.h>
+#include "ardour/audioengine.h"
#include "ardour/monitor_processor.h"
+#include "ardour/port.h"
#include "ardour/route.h"
#include "ardour_ui.h"
@@ -52,6 +55,8 @@ using namespace std;
Glib::RefPtr<ActionGroup> MonitorSection::monitor_actions;
+#define PX_SCALE(px) std::max((float)px, rintf((float)px * ARDOUR_UI::ui_scale))
+
MonitorSection::MonitorSection (Session* s)
: AxisView (s)
, RouteUI (s)
@@ -66,6 +71,7 @@ MonitorSection::MonitorSection (Session* s)
, dim_display (0)
, solo_boost_display (0)
, solo_cut_display (0)
+ , _output_selector (0)
, solo_in_place_button (_("SiP"), ArdourButton::led_default_elements)
, afl_button (_("AFL"), ArdourButton::led_default_elements)
, pfl_button (_("PFL"), ArdourButton::led_default_elements)
@@ -152,12 +158,12 @@ MonitorSection::MonitorSection (Session* s)
solo_boost_control = new ArdourKnob ();
solo_boost_control->set_name("monitor knob");
- solo_boost_control->set_size_request(40,40);
+ solo_boost_control->set_size_request (PX_SCALE(40), PX_SCALE(40));
ARDOUR_UI::instance()->tooltips().set_tip (*solo_boost_control, _("Gain increase for soloed signals (0dB is normal)"));
solo_boost_display = new ArdourDisplay ();
solo_boost_display->set_name("monitor section cut");
- solo_boost_display->set_size_request(80,20);
+ solo_boost_display->set_size_request (PX_SCALE(80), PX_SCALE(20));
solo_boost_display->add_controllable_preset(_("0 dB"), 0.0);
solo_boost_display->add_controllable_preset(_("3 dB"), 3.0);
solo_boost_display->add_controllable_preset(_("6 dB"), 6.0);
@@ -181,12 +187,12 @@ MonitorSection::MonitorSection (Session* s)
solo_cut_control = new ArdourKnob ();
solo_cut_control->set_name ("monitor knob");
- solo_cut_control->set_size_request (40,40);
+ solo_cut_control->set_size_request (PX_SCALE(40), PX_SCALE(40));
ARDOUR_UI::instance()->tooltips().set_tip (*solo_cut_control, _("Gain reduction non-soloed signals\nA value above -inf dB causes \"solo-in-front\""));
solo_cut_display = new ArdourDisplay ();
solo_cut_display->set_name("monitor section cut");
- solo_cut_display->set_size_request(80,20);
+ solo_cut_display->set_size_request (PX_SCALE(80), PX_SCALE(20));
solo_cut_display->add_controllable_preset(_("0 dB"), 0.0);
solo_cut_display->add_controllable_preset(_("-6 dB"), -6.0);
solo_cut_display->add_controllable_preset(_("-12 dB"), -12.0);
@@ -205,14 +211,14 @@ MonitorSection::MonitorSection (Session* s)
/* Dim */
- dim_control = new ArdourKnob ();
+ dim_control = new ArdourKnob (ArdourKnob::default_elements, ArdourKnob::Detent);
dim_control->set_name ("monitor knob");
- dim_control->set_size_request (40,40);
+ dim_control->set_size_request (PX_SCALE(40), PX_SCALE(40));
ARDOUR_UI::instance()->tooltips().set_tip (*dim_control, _("Gain reduction to use when dimming monitor outputs"));
dim_display = new ArdourDisplay ();
dim_display->set_name("monitor section cut");
- dim_display->set_size_request(80,20);
+ dim_display->set_size_request (PX_SCALE(80), PX_SCALE(20));
dim_display->add_controllable_preset(_("0 dB"), 0.0);
dim_display->add_controllable_preset(_("-3 dB"), -3.0);
dim_display->add_controllable_preset(_("-6 dB"), -6.0);
@@ -272,7 +278,7 @@ MonitorSection::MonitorSection (Session* s)
cut_all_button.set_text (_("Mute"));
cut_all_button.set_name ("monitor section cut");
cut_all_button.set_name (X_("monitor section cut"));
- cut_all_button.set_size_request (-1,50);
+ cut_all_button.set_size_request (-1, PX_SCALE(50));
cut_all_button.show ();
act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
@@ -306,13 +312,13 @@ MonitorSection::MonitorSection (Session* s)
/* Gain */
- gain_control = new ArdourKnob ();
+ gain_control = new ArdourKnob (ArdourKnob::default_elements, ArdourKnob::Detent);
gain_control->set_name("monitor knob");
- gain_control->set_size_request(80,80);
+ gain_control->set_size_request (PX_SCALE(80), PX_SCALE(80));
gain_display = new ArdourDisplay ();
gain_display->set_name("monitor section cut");
- gain_display->set_size_request(40,20);
+ gain_display->set_size_request (PX_SCALE(40), PX_SCALE(20));
gain_display->add_controllable_preset(_("0 dB"), 0.0);
gain_display->add_controllable_preset(_("-3 dB"), -3.0);
gain_display->add_controllable_preset(_("-6 dB"), -6.0);
@@ -320,6 +326,18 @@ MonitorSection::MonitorSection (Session* s)
gain_display->add_controllable_preset(_("-20 dB"), -20.0);
gain_display->add_controllable_preset(_("-30 dB"), -30.0);
+ Label* output_label = manage (new Label (_("Output")));
+ output_label->set_name (X_("MonitorSectionLabel"));
+
+ output_button = new ArdourButton ();
+ output_button->set_text (_("Output"));
+ output_button->set_name (X_("monitor section cut"));
+ output_button->set_text_ellipsize (Pango::ELLIPSIZE_MIDDLE);
+ VBox* out_packer = manage (new VBox);
+ out_packer->set_spacing (6);
+ out_packer->pack_start (*output_label, false, false);
+ out_packer->pack_start (*output_button, false, false);
+
spin_label = manage (new Label (_("Monitor")));
spin_packer = manage (new VBox);
spin_packer->show ();
@@ -327,11 +345,12 @@ MonitorSection::MonitorSection (Session* s)
spin_packer->pack_start (*spin_label, false, false);
spin_packer->pack_start (*gain_control, false, false);
spin_packer->pack_start (*gain_display, false, false);
+ spin_packer->pack_start (*out_packer, false, false, 24);
lower_packer.pack_start (*spin_packer, true, true);
channel_table_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
- channel_table_scroller.set_size_request (-1, 150);
+ channel_table_scroller.set_size_request (-1, PX_SCALE(150));
channel_table_scroller.set_shadow_type (Gtk::SHADOW_NONE);
channel_table_scroller.show ();
channel_table_scroller.add (channel_table_viewport);
@@ -396,6 +415,10 @@ MonitorSection::MonitorSection (Session* s)
map_state ();
assign_controllables ();
+ output_button->signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::output_press), false);
+ output_button->signal_button_release_event().connect (sigc::mem_fun(*this, &MonitorSection::output_release), false);
+ output_button->signal_size_allocate().connect (sigc::mem_fun (*this, &MonitorSection::output_button_resized));
+
_tearoff = new TearOff (hpacker);
/* if torn off, make this a normal window */
@@ -403,8 +426,12 @@ MonitorSection::MonitorSection (Session* s)
_tearoff->tearoff_window().set_title (X_("Monitor"));
_tearoff->tearoff_window().signal_key_press_event().connect (sigc::ptr_fun (forward_key_press), false);
- /* catch changes that affect us */
+ update_output_display();
+ /* catch changes that affect us */
+ AudioEngine::instance()->PortConnectedOrDisconnected.connect (
+ *this, invalidator (*this), boost::bind (&MonitorSection::port_connected_or_disconnected, this, _1, _3), gui_context ()
+ );
Config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&MonitorSection::parameter_changed, this, _1), gui_context());
}
@@ -415,7 +442,9 @@ MonitorSection::~MonitorSection ()
}
_channel_buttons.clear ();
+ _output_changed_connection.disconnect ();
+ delete output_button;
delete gain_control;
delete gain_display;
delete dim_control;
@@ -425,6 +454,8 @@ MonitorSection::~MonitorSection ()
delete solo_cut_control;
delete solo_cut_display;
delete _tearoff;
+ delete _output_selector;
+ _output_selector = 0;
}
void
@@ -440,10 +471,16 @@ MonitorSection::set_session (Session* s)
/* session with monitor section */
_monitor = _route->monitor_control ();
assign_controllables ();
+ _route->output()->changed.connect (_output_changed_connection, invalidator (*this),
+ boost::bind (&MonitorSection::update_output_display, this),
+ gui_context());
} else {
/* session with no monitor section */
+ _output_changed_connection.disconnect();
_monitor.reset ();
_route.reset ();
+ delete _output_selector;
+ _output_selector = 0;
}
if (channel_table_scroller.get_parent()) {
@@ -484,11 +521,14 @@ MonitorSection::set_session (Session* s)
} else {
/* no session */
+ _output_changed_connection.disconnect();
_monitor.reset ();
_route.reset ();
control_connections.drop_connections ();
rude_iso_button.unset_active_state ();
rude_solo_button.unset_active_state ();
+ delete _output_selector;
+ _output_selector = 0;
assign_controllables ();
}
@@ -1154,3 +1194,330 @@ MonitorSection::state_id() const
{
return "monitor-section";
}
+
+void
+MonitorSection::maybe_add_bundle_to_output_menu (boost::shared_ptr<Bundle> b, ARDOUR::BundleList const& /*current*/)
+{
+ using namespace Menu_Helpers;
+
+ if (b->ports_are_inputs() == false || b->nchannels() != _route->n_outputs() || *b == *_route->input()->bundle()) {
+ return;
+ }
+
+ list<boost::shared_ptr<Bundle> >::iterator i = output_menu_bundles.begin ();
+ while (i != output_menu_bundles.end() && b->has_same_ports (*i) == false) {
+ ++i;
+ }
+
+ if (i != output_menu_bundles.end()) {
+ return;
+ }
+
+ output_menu_bundles.push_back (b);
+
+ MenuList& citems = output_menu.items();
+
+ std::string n = b->name ();
+ replace_all (n, "_", " ");
+
+ citems.push_back (MenuElem (n, sigc::bind (sigc::mem_fun(*this, &MonitorSection::bundle_output_chosen), b)));
+}
+
+void
+MonitorSection::bundle_output_chosen (boost::shared_ptr<ARDOUR::Bundle> c)
+{
+
+ ARDOUR::BundleList current = _route->output()->bundles_connected ();
+
+ if (std::find (current.begin(), current.end(), c) == current.end()) {
+ _route->output()->connect_ports_to_bundle (c, true, this);
+ } else {
+ _route->output()->disconnect_ports_from_bundle (c, this);
+ }
+}
+
+gint
+MonitorSection::output_release (GdkEventButton *ev)
+{
+ switch (ev->button) {
+ case 3:
+ edit_output_configuration ();
+ break;
+ }
+
+ return false;
+}
+
+struct RouteCompareByName {
+ bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
+ return a->name().compare (b->name()) < 0;
+ }
+};
+
+gint
+MonitorSection::output_press (GdkEventButton *ev)
+{
+ using namespace Menu_Helpers;
+ if (!_session) {
+ MessageDialog msg (_("No session - no I/O changes are possible"));
+ msg.run ();
+ return true;
+ }
+
+ MenuList& citems = output_menu.items();
+ switch (ev->button) {
+
+ case 3:
+ return false; //wait for the mouse-up to pop the dialog
+
+ case 1:
+ {
+ output_menu.set_name ("ArdourContextMenu");
+ citems.clear ();
+ output_menu_bundles.clear ();
+
+ citems.push_back (MenuElem (_("Disconnect"), sigc::mem_fun (*(this), &MonitorSection::disconnect_output)));
+
+ citems.push_back (SeparatorElem());
+ uint32_t const n_with_separator = citems.size ();
+
+ ARDOUR::BundleList current = _route->output()->bundles_connected ();
+
+ boost::shared_ptr<ARDOUR::BundleList> b = _session->bundles ();
+
+ /* give user bundles first chance at being in the menu */
+
+ for (ARDOUR::BundleList::iterator i = b->begin(); i != b->end(); ++i) {
+ if (boost::dynamic_pointer_cast<UserBundle> (*i)) {
+ maybe_add_bundle_to_output_menu (*i, current);
+ }
+ }
+
+ for (ARDOUR::BundleList::iterator i = b->begin(); i != b->end(); ++i) {
+ if (boost::dynamic_pointer_cast<UserBundle> (*i) == 0) {
+ maybe_add_bundle_to_output_menu (*i, current);
+ }
+ }
+
+ boost::shared_ptr<ARDOUR::RouteList> routes = _session->get_routes ();
+ RouteList copy = *routes;
+ copy.sort (RouteCompareByName ());
+ for (ARDOUR::RouteList::const_iterator i = copy.begin(); i != copy.end(); ++i) {
+ maybe_add_bundle_to_output_menu ((*i)->output()->bundle(), current);
+ }
+
+ if (citems.size() == n_with_separator) {
+ /* no routes added; remove the separator */
+ citems.pop_back ();
+ }
+
+ citems.push_back (SeparatorElem());
+ citems.push_back (MenuElem (_("Routing Grid"), sigc::mem_fun (*(this), &MonitorSection::edit_output_configuration)));
+
+ output_menu.popup (1, ev->time);
+ break;
+ }
+
+ default:
+ break;
+ }
+ return TRUE;
+}
+
+void
+MonitorSection::output_button_resized (Gtk::Allocation& alloc)
+{
+ output_button->set_layout_ellipsize_width (alloc.get_width() * PANGO_SCALE);
+}
+
+void
+MonitorSection::update_output_display ()
+{
+ if (!_route || !_monitor || _session->deletion_in_progress()) {
+ return;
+ }
+
+ uint32_t io_count;
+ uint32_t io_index;
+ boost::shared_ptr<Port> port;
+ vector<string> port_connections;
+
+ uint32_t total_connection_count = 0;
+ uint32_t io_connection_count = 0;
+ uint32_t ardour_connection_count = 0;
+ uint32_t system_connection_count = 0;
+ uint32_t other_connection_count = 0;
+
+ ostringstream label;
+
+ bool have_label = false;
+ bool each_io_has_one_connection = true;
+
+ string connection_name;
+ string ardour_track_name;
+ string other_connection_type;
+ string system_ports;
+ string system_port;
+
+ ostringstream tooltip;
+ char * tooltip_cstr;
+
+ io_count = _route->n_outputs().n_total();
+ tooltip << string_compose (_("<b>OUTPUT</b> from %1"), Glib::Markup::escape_text(_route->name()));
+
+
+ for (io_index = 0; io_index < io_count; ++io_index) {
+
+ port = _route->output()->nth (io_index);
+
+ //ignore any port connections that don't match our DataType
+ if (port->type() != DataType::AUDIO) {
+ continue;
+ }
+
+ port_connections.clear ();
+ port->get_connections(port_connections);
+ io_connection_count = 0;
+
+ if (!port_connections.empty()) {
+ for (vector<string>::iterator i = port_connections.begin(); i != port_connections.end(); ++i) {
+ string pn = "";
+ string& connection_name (*i);
+
+ if (connection_name.find("system:") == 0) {
+ pn = AudioEngine::instance()->get_pretty_name_by_name (connection_name);
+ }
+
+ if (io_connection_count == 0) {
+ tooltip << endl << Glib::Markup::escape_text(port->name().substr(port->name().find("/") + 1))
+ << " -> "
+ << Glib::Markup::escape_text( pn.empty() ? connection_name : pn );
+ } else {
+ tooltip << ", "
+ << Glib::Markup::escape_text( pn.empty() ? connection_name : pn );
+ }
+
+ if (connection_name.find("ardour:") == 0) {
+ if (ardour_track_name.empty()) {
+ // "ardour:Master/in 1" -> "ardour:Master/"
+ string::size_type slash = connection_name.find("/");
+ if (slash != string::npos) {
+ ardour_track_name = connection_name.substr(0, slash + 1);
+ }
+ }
+
+ if (connection_name.find(ardour_track_name) == 0) {
+ ++ardour_connection_count;
+ }
+ } else if (!pn.empty()) {
+ if (system_ports.empty()) {
+ system_ports += pn;
+ } else {
+ system_ports += "/" + pn;
+ }
+ if (connection_name.find("system:") == 0) {
+ ++system_connection_count;
+ }
+ } else if (connection_name.find("system:") == 0) {
+ // "system:playback_123" -> "123"
+ system_port = connection_name.substr(16);
+ if (system_ports.empty()) {
+ system_ports += system_port;
+ } else {
+ system_ports += "/" + system_port;
+ }
+
+ ++system_connection_count;
+ } else {
+ if (other_connection_type.empty()) {
+ // "jamin:in 1" -> "jamin:"
+ other_connection_type = connection_name.substr(0, connection_name.find(":") + 1);
+ }
+
+ if (connection_name.find(other_connection_type) == 0) {
+ ++other_connection_count;
+ }
+ }
+
+ ++total_connection_count;
+ ++io_connection_count;
+ }
+ }
+
+ if (io_connection_count != 1) {
+ each_io_has_one_connection = false;
+ }
+ }
+
+ if (total_connection_count == 0) {
+ tooltip << endl << _("Disconnected");
+ }
+
+ tooltip_cstr = new char[tooltip.str().size() + 1];
+ strcpy(tooltip_cstr, tooltip.str().c_str());
+
+ ARDOUR_UI::instance()->set_tip (output_button, tooltip_cstr, "");
+
+ if (each_io_has_one_connection) {
+ if (total_connection_count == ardour_connection_count) {
+ // all connections are to the same track in ardour
+ // "ardour:Master/" -> "Master"
+ string::size_type slash = ardour_track_name.find("/");
+ if (slash != string::npos) {
+ label << ardour_track_name.substr(7, slash - 7);
+ have_label = true;
+ }
+ } else if (total_connection_count == system_connection_count) {
+ // all connections are to system ports
+ label << system_ports;
+ have_label = true;
+ } else if (total_connection_count == other_connection_count) {
+ // all connections are to the same external program eg jamin
+ // "jamin:" -> "jamin"
+ label << other_connection_type.substr(0, other_connection_type.size() - 1);
+ have_label = true;
+ }
+ }
+
+ if (!have_label) {
+ if (total_connection_count == 0) {
+ // Disconnected
+ label << "-";
+ } else {
+ // Odd configuration
+ label << "*" << total_connection_count << "*";
+ }
+ }
+
+ output_button->set_text (label.str());
+}
+
+void
+MonitorSection::disconnect_output ()
+{
+ if (_route) {
+ _route->output()->disconnect(this);
+ }
+}
+
+void
+MonitorSection::edit_output_configuration ()
+{
+ if (_output_selector == 0) {
+ _output_selector = new MonitorSelectorWindow (_session, _route->output());
+ }
+ _output_selector->present ();
+}
+
+void
+MonitorSection::port_connected_or_disconnected (boost::weak_ptr<Port> wa, boost::weak_ptr<Port> wb)
+{
+ if (!_route) {
+ return;
+ }
+ boost::shared_ptr<Port> a = wa.lock ();
+ boost::shared_ptr<Port> b = wb.lock ();
+ if ((a && _route->output()->has_port (a)) || (b && _route->output()->has_port (b))) {
+ update_output_display ();
+ }
+}
diff --git a/gtk2_ardour/monitor_section.h b/gtk2_ardour/monitor_section.h
index 65023aa..31d7374 100644
--- a/gtk2_ardour/monitor_section.h
+++ b/gtk2_ardour/monitor_section.h
@@ -28,6 +28,7 @@
#include "axis_view.h"
#include "level_meter.h"
#include "route_ui.h"
+#include "monitor_selector.h"
namespace Gtkmm2ext {
class TearOff;
@@ -85,6 +86,18 @@ class MonitorSection : public RouteUI
ArdourDisplay* solo_boost_display;
ArdourDisplay* solo_cut_display;
+ std::list<boost::shared_ptr<ARDOUR::Bundle> > output_menu_bundles;
+ Gtk::Menu output_menu;
+ MonitorSelectorWindow *_output_selector;
+ ArdourButton* output_button;
+
+ void maybe_add_bundle_to_output_menu (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::BundleList const &);
+ void bundle_output_chosen (boost::shared_ptr<ARDOUR::Bundle>);
+ void output_button_resized (Gtk::Allocation&);
+ void update_output_display ();
+ void disconnect_output ();
+ void edit_output_configuration ();
+
void populate_buttons ();
void map_state ();
@@ -107,6 +120,8 @@ class MonitorSection : public RouteUI
void dim_level_changed ();
void solo_boost_changed ();
void gain_value_changed ();
+ gint output_press (GdkEventButton *);
+ gint output_release (GdkEventButton *);
ArdourButton solo_in_place_button;
ArdourButton afl_button;
@@ -138,8 +153,10 @@ class MonitorSection : public RouteUI
PBD::ScopedConnection config_connection;
PBD::ScopedConnectionList control_connections;
+ PBD::ScopedConnection _output_changed_connection;
bool _inhibit_solo_model_update;
void assign_controllables ();
+ void port_connected_or_disconnected (boost::weak_ptr<ARDOUR::Port>, boost::weak_ptr<ARDOUR::Port>);
};
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/monitor_selector.cc
similarity index 76%
copy from gtk2_ardour/io_selector.cc
copy to gtk2_ardour/monitor_selector.cc
index 270ed8c..ad5b799 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/monitor_selector.cc
@@ -30,7 +30,7 @@
#include "ardour/port.h"
#include "ardour/session.h"
-#include "io_selector.h"
+#include "monitor_selector.h"
#include "utils.h"
#include "gui_thread.h"
#include "i18n.h"
@@ -39,11 +39,11 @@ using namespace ARDOUR;
using namespace ARDOUR_UI_UTILS;
using namespace Gtk;
-IOSelector::IOSelector (Gtk::Window* p, ARDOUR::Session* session, boost::shared_ptr<ARDOUR::IO> io)
- : PortMatrix (p, session, DataType::NIL)
+MonitorSelector::MonitorSelector (Gtk::Window* p, ARDOUR::Session* session, boost::shared_ptr<ARDOUR::IO> io)
+ : PortMatrix (p, session, DataType::AUDIO)
, _io (io)
{
- setup_type ();
+ set_type (DataType::AUDIO);
/* signal flow from 0 to 1 */
@@ -60,53 +60,31 @@ IOSelector::IOSelector (Gtk::Window* p, ARDOUR::Session* session, boost::shared_
_port_group.reset (new PortGroup (io->name()));
_ports[_ours].add_group (_port_group);
- io->changed.connect (_io_connection, invalidator (*this), boost::bind (&IOSelector::io_changed_proxy, this), gui_context ());
+ io->changed.connect (_io_connection, invalidator (*this), boost::bind (&MonitorSelector::io_changed_proxy, this), gui_context ());
setup_all_ports ();
init ();
}
void
-IOSelector::setup_type ()
-{
- /* set type according to what's in the IO */
-
- int N = 0;
- DataType type_with_ports = DataType::NIL;
- for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
- if (_io->ports().num_ports (*i)) {
- type_with_ports = *i;
- ++N;
- }
- }
-
- if (N <= 1) {
- set_type (type_with_ports);
- } else {
- set_type (DataType::NIL);
- }
-}
-
-void
-IOSelector::io_changed_proxy ()
+MonitorSelector::io_changed_proxy ()
{
/* The IO's changed signal is emitted from code that holds its route's processor lock,
so we can't call setup_all_ports (which results in a call to Route::foreach_processor)
without a deadlock unless we break things up with this idle handler.
*/
- Glib::signal_idle().connect_once (sigc::mem_fun (*this, &IOSelector::io_changed));
+ Glib::signal_idle().connect_once (sigc::mem_fun (*this, &MonitorSelector::io_changed));
}
void
-IOSelector::io_changed ()
+MonitorSelector::io_changed ()
{
- setup_type ();
setup_all_ports ();
}
void
-IOSelector::setup_ports (int dim)
+MonitorSelector::setup_ports (int dim)
{
if (!_session) {
return;
@@ -128,7 +106,7 @@ IOSelector::setup_ports (int dim)
}
void
-IOSelector::set_state (ARDOUR::BundleChannel c[2], bool s)
+MonitorSelector::set_state (ARDOUR::BundleChannel c[2], bool s)
{
ARDOUR::Bundle::PortList const & our_ports = c[_ours].bundle->channel_ports (c[_ours].channel);
ARDOUR::Bundle::PortList const & other_ports = c[_other].bundle->channel_ports (c[_other].channel);
@@ -155,7 +133,7 @@ IOSelector::set_state (ARDOUR::BundleChannel c[2], bool s)
}
PortMatrixNode::State
-IOSelector::get_state (ARDOUR::BundleChannel c[2]) const
+MonitorSelector::get_state (ARDOUR::BundleChannel c[2]) const
{
if (c[0].bundle->nchannels() == ChanCount::ZERO || c[1].bundle->nchannels() == ChanCount::ZERO) {
return PortMatrixNode::NOT_ASSOCIATED;
@@ -190,7 +168,7 @@ IOSelector::get_state (ARDOUR::BundleChannel c[2]) const
}
uint32_t
-IOSelector::n_io_ports () const
+MonitorSelector::n_io_ports () const
{
if (!_find_inputs_for_io_outputs) {
return _io->n_ports().get (_io->default_type());
@@ -200,25 +178,25 @@ IOSelector::n_io_ports () const
}
bool
-IOSelector::list_is_global (int dim) const
+MonitorSelector::list_is_global (int dim) const
{
return (dim == _other);
}
std::string
-IOSelector::disassociation_verb () const
+MonitorSelector::disassociation_verb () const
{
return _("Disconnect");
}
std::string
-IOSelector::channel_noun () const
+MonitorSelector::channel_noun () const
{
return _("port");
}
-IOSelectorWindow::IOSelectorWindow (ARDOUR::Session* session, boost::shared_ptr<ARDOUR::IO> io, bool /*can_cancel*/)
- : ArdourWindow (_("I/O selector"))
+MonitorSelectorWindow::MonitorSelectorWindow (ARDOUR::Session* session, boost::shared_ptr<ARDOUR::IO> io, bool /*can_cancel*/)
+ : ArdourWindow (_("Monitor output selector"))
, _selector (this, session, io)
{
set_name ("IOSelectorWindow2");
@@ -229,26 +207,26 @@ IOSelectorWindow::IOSelectorWindow (ARDOUR::Session* session, boost::shared_ptr<
show_all ();
- signal_delete_event().connect (sigc::mem_fun (*this, &IOSelectorWindow::wm_delete));
+ signal_delete_event().connect (sigc::mem_fun (*this, &MonitorSelectorWindow::wm_delete));
}
bool
-IOSelectorWindow::wm_delete (GdkEventAny* /*event*/)
+MonitorSelectorWindow::wm_delete (GdkEventAny* /*event*/)
{
- _selector.Finished (IOSelector::Accepted);
+ _selector.Finished (MonitorSelector::Accepted);
return false;
}
void
-IOSelectorWindow::on_map ()
+MonitorSelectorWindow::on_map ()
{
_selector.setup_all_ports ();
Window::on_map ();
}
void
-IOSelectorWindow::on_show ()
+MonitorSelectorWindow::on_show ()
{
Gtk::Window::on_show ();
std::pair<uint32_t, uint32_t> const pm_max = _selector.max_size ();
@@ -256,9 +234,9 @@ IOSelectorWindow::on_show ()
}
void
-IOSelectorWindow::io_name_changed (void*)
+MonitorSelectorWindow::io_name_changed (void*)
{
- ENSURE_GUI_THREAD (*this, &IOSelectorWindow::io_name_changed, src)
+ ENSURE_GUI_THREAD (*this, &MonitorSelectorWindow::io_name_changed, src)
std::string title;
diff --git a/gtk2_ardour/io_selector.h b/gtk2_ardour/monitor_selector.h
similarity index 70%
copy from gtk2_ardour/io_selector.h
copy to gtk2_ardour/monitor_selector.h
index bba42e9..8c642b5 100644
--- a/gtk2_ardour/io_selector.h
+++ b/gtk2_ardour/monitor_selector.h
@@ -17,16 +17,16 @@
*/
-#ifndef __gtkardour_io_selector_h__
-#define __gtkardour_io_selector_h__
+#ifndef __gtkardour_monitor_output_selector_h__
+#define __gtkardour_monitor_output_selector_h__
#include "port_matrix.h"
#include "ardour_window.h"
-class IOSelector : public PortMatrix
+class MonitorSelector : public PortMatrix
{
public:
- IOSelector (Gtk::Window*, ARDOUR::Session *, boost::shared_ptr<ARDOUR::IO>);
+ MonitorSelector (Gtk::Window*, ARDOUR::Session *, boost::shared_ptr<ARDOUR::IO>);
void set_state (ARDOUR::BundleChannel c[2], bool);
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
@@ -53,9 +53,12 @@ class IOSelector : public PortMatrix
return _other;
}
+ bool can_add_channels (boost::shared_ptr<ARDOUR::Bundle>) const { return false; }
+ bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const { return false; }
+ bool can_rename_channels (boost::shared_ptr<ARDOUR::Bundle>) const { return false; }
+
private:
- void setup_type ();
void io_changed ();
void io_changed_proxy ();
@@ -67,22 +70,22 @@ class IOSelector : public PortMatrix
PBD::ScopedConnection _io_connection;
};
-class IOSelectorWindow : public ArdourWindow
+class MonitorSelectorWindow : public ArdourWindow
{
public:
- IOSelectorWindow (ARDOUR::Session *, boost::shared_ptr<ARDOUR::IO>, bool can_cancel = false);
+ MonitorSelectorWindow (ARDOUR::Session *, boost::shared_ptr<ARDOUR::IO>, bool can_cancel = false);
- IOSelector& selector() { return _selector; }
+ MonitorSelector& selector() { return _selector; }
protected:
void on_map ();
void on_show ();
private:
- IOSelector _selector;
+ MonitorSelector _selector;
void io_name_changed (void *src);
bool wm_delete (GdkEventAny*);
};
-#endif /* __gtkardour_io_selector_h__ */
+#endif /* __gtkardour_monitor_output_selector_h__ */
diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc
index ce8b55e..fd789ed 100644
--- a/gtk2_ardour/mono_panner.cc
+++ b/gtk2_ardour/mono_panner.cc
@@ -52,11 +52,6 @@ using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR_UI_UTILS;
-static const int pos_box_size = 9;
-static const int lr_box_size = 15;
-static const int step_down = 10;
-static const int top_step = 2;
-
MonoPanner::ColorScheme MonoPanner::colors;
bool MonoPanner::have_colors = false;
@@ -136,11 +131,16 @@ MonoPanner::on_expose_event (GdkEventExpose*)
int width, height;
double pos = position_control->get_value (); /* 0..1 */
uint32_t o, f, t, b, pf, po;
- const double corner_radius = 5;
width = get_width();
height = get_height ();
+ const int step_down = rint(height / 3.5);
+ const int lr_box_size = height - 2 * step_down;
+ const int pos_box_size = (int)(rint(step_down * .8)) | 1;
+ const int top_step = step_down - pos_box_size;
+ const double corner_radius = 5 * ARDOUR_UI::ui_scale;
+
o = colors.outline;
f = colors.fill;
t = colors.text;
@@ -165,7 +165,6 @@ MonoPanner::on_expose_event (GdkEventExpose*)
context->rectangle (0, 0, width, height);
context->fill ();
-
double usable_width = width - pos_box_size;
/* compute the centers of the L/R boxes based on the current stereo width */
@@ -173,8 +172,8 @@ MonoPanner::on_expose_event (GdkEventExpose*)
usable_width -= 1.0;
}
const double half_lr_box = lr_box_size/2.0;
- const double left = 4 + half_lr_box; // center of left box
- const double right = width - 4 - half_lr_box; // center of right box
+ const double left = pos_box_size * .5 + half_lr_box; // center of left box
+ const double right = width - pos_box_size * .5 - half_lr_box; // center of right box
/* center line */
context->set_source_rgba (UINT_RGBA_R_FLT(o), UINT_RGBA_G_FLT(o), UINT_RGBA_B_FLT(o), UINT_RGBA_A_FLT(o));
@@ -255,8 +254,8 @@ MonoPanner::on_expose_event (GdkEventExpose*)
context->set_line_width (2.0);
context->move_to (spos + (pos_box_size/2.0), top_step); /* top right */
context->rel_line_to (0.0, pos_box_size); /* lower right */
- context->rel_line_to (-pos_box_size/2.0, 4.0); /* bottom point */
- context->rel_line_to (-pos_box_size/2.0, -4.0); /* lower left */
+ context->rel_line_to (-pos_box_size/2.0, 4.0 * ARDOUR_UI::ui_scale); /* bottom point */
+ context->rel_line_to (-pos_box_size/2.0, -4.0 * ARDOUR_UI::ui_scale); /* lower left */
context->rel_line_to (0.0, -pos_box_size); /* upper left */
context->close_path ();
@@ -268,8 +267,8 @@ MonoPanner::on_expose_event (GdkEventExpose*)
/* marker line */
context->set_line_width (1.0);
- context->move_to (spos, pos_box_size + 5);
- context->rel_line_to (0, half_lr_box+step_down);
+ context->move_to (spos, 1 + top_step + pos_box_size + 4.0 * ARDOUR_UI::ui_scale);
+ context->line_to (spos, half_lr_box + step_down + lr_box_size - 1);
context->set_source_rgba (UINT_RGBA_R_FLT(po), UINT_RGBA_G_FLT(po), UINT_RGBA_B_FLT(po), UINT_RGBA_A_FLT(po));
context->stroke ();
diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc
index d49f8a3..54424b5 100644
--- a/gtk2_ardour/option_editor.cc
+++ b/gtk2_ardour/option_editor.cc
@@ -485,7 +485,6 @@ DirectoryOption::DirectoryOption (string const & i, string const & n, sigc::slot
{
_file_chooser.set_action (Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
_file_chooser.signal_selection_changed().connect (sigc::mem_fun (*this, &DirectoryOption::selection_changed));
- _file_chooser.signal_current_folder_changed().connect (sigc::mem_fun (*this, &DirectoryOption::current_folder_set));
}
@@ -509,9 +508,3 @@ DirectoryOption::selection_changed ()
{
_set (poor_mans_glob(_file_chooser.get_filename ()));
}
-
-void
-DirectoryOption::current_folder_set ()
-{
- _set (poor_mans_glob(_file_chooser.get_current_folder ()));
-}
diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h
index 9ab8132..13b0285 100644
--- a/gtk2_ardour/option_editor.h
+++ b/gtk2_ardour/option_editor.h
@@ -625,7 +625,6 @@ public:
private:
void selection_changed ();
- void current_folder_set ();
sigc::slot<std::string> _get; ///< slot to get the configuration variable's value
sigc::slot<bool, std::string> _set; ///< slot to set the configuration variable's value
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index 02f1dd4..9d40a90 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -43,8 +43,6 @@ using namespace PBD;
using namespace Gtkmm2ext;
using namespace Gtk;
-const int PannerUI::pan_bar_height = 35;
-
PannerUI::PannerUI (Session* s)
: _current_nouts (-1)
, _current_nins (-1)
@@ -242,6 +240,8 @@ PannerUI::setup_pan ()
return;
}
+ const float scale = std::max (1.f, ARDOUR_UI::ui_scale);
+
if (_current_uri == "http://ardour.org/plugin/panner_2in2out#ui")
{
delete big_window;
@@ -250,7 +250,7 @@ PannerUI::setup_pan ()
boost::shared_ptr<Pannable> pannable = _panner->pannable();
_stereo_panner = new StereoPanner (_panshell);
- _stereo_panner->set_size_request (-1, pan_bar_height);
+ _stereo_panner->set_size_request (-1, 5 * ceilf(7.f * scale));
_stereo_panner->set_send_drawing_mode (_send_mode);
pan_vbox.pack_start (*_stereo_panner, false, false);
@@ -286,7 +286,7 @@ PannerUI::setup_pan ()
_mono_panner->signal_button_release_event().connect (sigc::mem_fun(*this, &PannerUI::pan_button_event));
- _mono_panner->set_size_request (-1, pan_bar_height);
+ _mono_panner->set_size_request (-1, 5 * ceilf(7.f * scale));
_mono_panner->set_send_drawing_mode (_send_mode);
update_pan_sensitive ();
@@ -295,7 +295,7 @@ PannerUI::setup_pan ()
else if (_current_uri == "http://ardour.org/plugin/panner_vbap#ui")
{
if (!twod_panner) {
- twod_panner = new Panner2d (_panshell, 61);
+ twod_panner = new Panner2d (_panshell, rintf(61.f * scale));
twod_panner->set_name ("MixerPanZone");
twod_panner->show ();
twod_panner->signal_button_press_event().connect (sigc::mem_fun(*this, &PannerUI::pan_button_event), false);
@@ -306,7 +306,7 @@ PannerUI::setup_pan ()
if (big_window) {
big_window->reset (nins);
}
- twod_panner->set_size_request (-1, 61);
+ twod_panner->set_size_request (-1, rintf(61.f * scale));
twod_panner->set_send_drawing_mode (_send_mode);
/* and finally, add it to the panner frame */
diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h
index 600a9d1..0c0b7cf 100644
--- a/gtk2_ardour/panner_ui.h
+++ b/gtk2_ardour/panner_ui.h
@@ -100,8 +100,6 @@ class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
std::string _current_uri;
bool _send_mode;
- static const int pan_bar_height;
-
Panner2d* twod_panner; ///< 2D panner, or 0
Panner2dWindow* big_window;
diff --git a/gtk2_ardour/patch_change.cc b/gtk2_ardour/patch_change.cc
index 601011d..1bcf8d9 100644
--- a/gtk2_ardour/patch_change.cc
+++ b/gtk2_ardour/patch_change.cc
@@ -212,6 +212,16 @@ PatchChange::event_handler (GdkEvent* ev)
}
break;
+ case GDK_KEY_RELEASE:
+ switch (ev->key.keyval) {
+ case GDK_BackSpace:
+ case GDK_Delete:
+ _region.delete_patch_change (this);
+ default:
+ break;
+ }
+ break;
+
case GDK_SCROLL:
if (ev->scroll.direction == GDK_SCROLL_UP) {
_region.step_patch(
diff --git a/gtk2_ardour/piano_roll_header.cc b/gtk2_ardour/piano_roll_header.cc
index 8a67ec7..54cc802 100644
--- a/gtk2_ardour/piano_roll_header.cc
+++ b/gtk2_ardour/piano_roll_header.cc
@@ -467,7 +467,7 @@ PianoRollHeader::on_motion_notify_event (GdkEventMotion* ev)
int note = _view.y_to_note(ev->y);
- if (editor().current_mouse_mode() == Editing::MouseRange) {
+ if ( false /*editor().current_mouse_mode() == Editing::MouseRange*/ ) { //ToDo: fix this. this mode is buggy, and of questionable utility anyway
/* select note range */
@@ -544,7 +544,7 @@ PianoRollHeader::on_button_release_event (GdkEventButton* ev)
{
int note = _view.y_to_note(ev->y);
- if (editor().current_mouse_mode() == Editing::MouseRange) {
+ if (false /*editor().current_mouse_mode() == Editing::MouseRange*/ ) { //Todo: this mode is buggy, and of questionable utility anyway
if (Keyboard::no_modifiers_active (ev->state)) {
AddNoteSelection (note); // EMIT SIGNAL
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index f920836..2483cb3 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -418,6 +418,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
, add_button (_("Add"))
, save_button (_("Save"))
, delete_button (_("Delete"))
+ , reset_button (_("Reset"))
, bypass_button (ArdourButton::led_default_elements)
, description_expander (_("Description"))
, plugin_analysis_expander (_("Plugin analysis"))
@@ -431,6 +432,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
ARDOUR_UI::instance()->set_tip (add_button, _("Save a new preset"));
ARDOUR_UI::instance()->set_tip (save_button, _("Save the current preset"));
ARDOUR_UI::instance()->set_tip (delete_button, _("Delete the current preset"));
+ ARDOUR_UI::instance()->set_tip (reset_button, _("Reset parameters to default (if no parameters are in automation play mode)"));
ARDOUR_UI::instance()->set_tip (bypass_button, _("Disable signal processing by the plugin"));
_no_load_preset = 0;
@@ -446,6 +448,10 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
delete_button.set_name ("generic button");
delete_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting));
+ reset_button.set_name ("generic button");
+ reset_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::reset_plugin_parameters));
+
+
insert->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&PlugUIBase::processor_active_changed, this, boost::weak_ptr<Processor>(insert)), gui_context());
bypass_button.set_name ("plugin bypass button");
@@ -479,6 +485,10 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
plugin->PresetRemoved.connect (*this, invalidator (*this), boost::bind (&PlugUIBase::preset_added_or_removed, this), gui_context ());
plugin->PresetLoaded.connect (*this, invalidator (*this), boost::bind (&PlugUIBase::update_preset, this), gui_context ());
plugin->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&PlugUIBase::parameter_changed, this, _1, _2), gui_context ());
+
+ insert->AutomationStateChanged.connect (*this, invalidator (*this), boost::bind (&PlugUIBase::automation_state_changed, this), gui_context());
+
+ automation_state_changed();
}
PlugUIBase::~PlugUIBase()
@@ -636,6 +646,18 @@ PlugUIBase::delete_plugin_setting ()
#endif
}
+void
+PlugUIBase::automation_state_changed ()
+{
+ reset_button.set_sensitive (insert->can_reset_all_parameters());
+}
+
+void
+PlugUIBase::reset_plugin_parameters ()
+{
+ insert->reset_parameters_to_default ();
+}
+
bool
PlugUIBase::bypass_button_release (GdkEventButton*)
{
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index 6ae548d..4aed364 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -125,6 +125,8 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL
ArdourButton save_button;
/** a button to delete the current preset (if it is a user one) */
ArdourButton delete_button;
+ /** a button to delete the reset the plugin params */
+ ArdourButton reset_button;
/** a button to bypass the plugin */
ArdourButton bypass_button;
/** a button to acquire keyboard focus */
@@ -160,12 +162,14 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL
void add_plugin_setting ();
void save_plugin_setting ();
void delete_plugin_setting ();
+ void reset_plugin_parameters ();
bool focus_toggled(GdkEventButton*);
bool bypass_button_release(GdkEventButton*);
void toggle_description ();
void toggle_plugin_analysis ();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
void plugin_going_away ();
+ void automation_state_changed ();
virtual void parameter_changed (uint32_t, float);
void preset_added_or_removed ();
void update_preset_modified ();
diff --git a/gtk2_ardour/po/cs.po b/gtk2_ardour/po/cs.po
index cfd1289..4223cdb 100644
--- a/gtk2_ardour/po/cs.po
+++ b/gtk2_ardour/po/cs.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the gtk-ardour package.
#
# Pavel Fric <pavelfric at seznam.cz>, 2009, 2010, 2011.
-# Pavel Fric <pavelfric at seznam.cz>, 2010, 2012, 2013.
+# Pavel Fric <pavelfric at seznam.cz>, 2010, 2012, 2013, 2015.
msgid ""
msgstr ""
"Project-Id-Version: gtk-ardour 0.347.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-31 20:13-0400\n"
-"PO-Revision-Date: 2013-10-15 20:29+0200\n"
+"PO-Revision-Date: 2015-04-24 12:48+0200\n"
"Last-Translator: Pavel Fric <pavelfric at seznam.cz>\n"
"Language-Team: Czech <kde-i18n-doc at kde.org>\n"
"Language: cs\n"
@@ -52,7 +52,7 @@ msgstr "Sakari Bergen"
#: about.cc:132
msgid "Christian Borss"
-msgstr ""
+msgstr "Christian Borss"
#: about.cc:133
msgid "Chris Cannam"
@@ -60,7 +60,7 @@ msgstr "Chris Cannam"
#: about.cc:134
msgid "Jeremy Carter"
-msgstr ""
+msgstr "Jeremy Carter"
#: about.cc:135
msgid "Jesse Chappell"
@@ -88,7 +88,7 @@ msgstr "Gerard van Dongen"
#: about.cc:141
msgid "John Emmas"
-msgstr ""
+msgstr "John Emmas"
#: about.cc:142
msgid "Colin Fletcher"
@@ -168,7 +168,7 @@ msgstr "Matt Krai"
#: about.cc:161
msgid "Georg Krause"
-msgstr ""
+msgstr "Georg Krause"
#: about.cc:162
msgid "Nick Lanham"
@@ -200,7 +200,7 @@ msgstr "Doug Mclain"
#: about.cc:169
msgid "Todd Naugle"
-msgstr ""
+msgstr "Todd Naugle"
#: about.cc:170
msgid "Jack O'Quin"
@@ -268,7 +268,7 @@ msgstr "Thorsten Wilms"
#: about.cc:186
msgid "Grygorii Zharun"
-msgstr ""
+msgstr "Grygorii Zharun"
#: about.cc:191
msgid ""
@@ -402,7 +402,7 @@ msgstr ""
#: about.cc:591
msgid "Copyright (C) 1999-2015 Paul Davis\n"
-msgstr ""
+msgstr "Autorské právo (C) 1999-2015 Paul Davis\n"
#: about.cc:595
msgid "http://ardour.org/"
@@ -413,6 +413,8 @@ msgid ""
"%1%2\n"
"(built from revision %3)"
msgstr ""
+"%1%2\n"
+"(Sestaveno na základÄ revize %3)"
#: about.cc:600
msgid "Config"
@@ -424,7 +426,7 @@ msgstr "Nahrávajà se nabÃdky z %1"
#: actions.cc:88 actions.cc:89
msgid "badly formatted menu definition file: %1"
-msgstr ""
+msgstr "Soubor vymezujÃcà nabÃdku %1 je nesprávnÄ formátován"
#: actions.cc:91
msgid "%1 menu definition file not found"
@@ -432,7 +434,7 @@ msgstr "%1 soubor s vymezenÃm nabÃdky nenalezen"
#: actions.cc:95 actions.cc:96
msgid "%1 will not work without a valid menu definition file"
-msgstr ""
+msgstr "%1 nebude pracovat bez platného souboru vymezujÃcÃho nabÃdku"
#: add_route_dialog.cc:54 route_params_ui.cc:524
msgid "Add Track or Bus"
@@ -444,7 +446,7 @@ msgstr "NastavenÃ:"
#: add_route_dialog.cc:58
msgid "Record Mode:"
-msgstr ""
+msgstr "Režim nahrávánÃ:"
#: add_route_dialog.cc:59
msgid "Instrument:"
@@ -468,19 +470,19 @@ msgstr "SbÄrnice"
#: add_route_dialog.cc:83 add_route_dialog.cc:559
msgid "First"
-msgstr ""
+msgstr "PrvnÃ"
#: add_route_dialog.cc:84 add_route_dialog.cc:561
msgid "After Editor Selection"
-msgstr ""
+msgstr "Po výbÄru editoru"
#: add_route_dialog.cc:85 add_route_dialog.cc:563
msgid "After Mixer Selection"
-msgstr ""
+msgstr "Po výbÄru smÄÅ¡ovaÄe"
#: add_route_dialog.cc:86
msgid "Last"
-msgstr ""
+msgstr "PoslednÃ"
#: add_route_dialog.cc:103
msgid "Add:"
@@ -502,7 +504,7 @@ msgstr "Skupina:"
#: add_route_dialog.cc:162
msgid "Insert:"
-msgstr ""
+msgstr "Vložit:"
#: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306
#: ardour_ui_ed.cc:539 engine_dialog.cc:237 rc_option_editor.cc:1805
@@ -690,7 +692,7 @@ msgstr "TlaÄÃtko nemůže sledovat stav neexistujÃcÃho ovladatelného prvku\
#: ardour_button.cc:1155
msgid "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
-msgstr ""
+msgstr "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
#: ardour_ui.cc:164
msgid ""
@@ -701,6 +703,12 @@ msgid ""
"\n"
"(This will require you to restart %1.)"
msgstr ""
+"%1 %2.x objevil soubory s nastavenÃm z %1 %3.x.\n"
+"\n"
+"Chcete zkopÃrovat pÅÃmo souvisejÃcà soubory pÅedtÃm, než zaÄnete "
+"použÃvat program?\n"
+"\n"
+"(To bude vyžadovat, abyste %1 spustili znovu.)"
#: ardour_ui.cc:211 editor_actions.cc:642 region_editor.cc:51
msgid "Audition"
@@ -746,11 +754,11 @@ msgstr "Stopy a sbÄrnice"
#: ardour_ui.cc:226 engine_dialog.cc:70
msgid "Audio/MIDI Setup"
-msgstr ""
+msgstr "Nastavenà zvuku/MIDI"
#: ardour_ui.cc:227
msgid "Video Export Dialog"
-msgstr ""
+msgstr "Dialog pro vyvedenà obrazového záznamu"
#: ardour_ui.cc:228
msgid "Properties"
@@ -775,6 +783,7 @@ msgstr "Spojenà MIDI"
#: ardour_ui.cc:242
msgid "Your configuration files were copied. You can now restart %1."
msgstr ""
+"Soubory s vaÅ¡Ãm nastavenÃm byly zkopÃrovány. Nynà můžete %1 spustit znovu."
#: ardour_ui.cc:481
msgid ""
@@ -782,6 +791,9 @@ msgid ""
"\n"
"%1"
msgstr ""
+"Zvuková podpůrná vrstva byla zastavena, protože:\n"
+"\n"
+"%1"
#: ardour_ui.cc:483
msgid ""
@@ -790,44 +802,51 @@ msgid ""
"was not fast enough. Try to restart\n"
"the audio backend and save the session."
msgstr ""
+"Zvuková podpůrná vrstva byla buÄ zastavena, nebo "
+"došlo k odpojenà %1, protože %1 "
+"nebyl dostateÄnÄ rychlý. Zkuste zvukovou podpůrnou vrstvu\n"
+"spustit znovu a sezenà uložte."
#: ardour_ui.cc:507
msgid ""
"Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. "
"Please see the log window for further details."
msgstr ""
+"Vyhledánà pÅÃdavného modulu Audio Unit se nezdaÅilo. Automatické hledánà AU "
+"bylo vypnuto. "
+"Na dalÅ¡Ã podrobnosti se, prosÃm, podÃvejte v oknÄ se zápisem."
#: ardour_ui.cc:508
msgid "Audio Unit Plugin Scan Failed:"
-msgstr ""
+msgstr "Vyhledánà pÅÃdavného modulu Audio Unit se nezdaÅilo."
#: ardour_ui.cc:827
msgid "NSM server did not announce itself"
-msgstr ""
+msgstr "Server NSM se neohlásil"
#: ardour_ui.cc:840
msgid "NSM: no client ID provided"
-msgstr ""
+msgstr "NSM: Neposkytnuto žádné ID klienta"
#: ardour_ui.cc:847
msgid "NSM: no session created"
-msgstr ""
+msgstr "NSM: NevytvoÅeno žádné sezenÃ"
#: ardour_ui.cc:870
msgid "NSM: initialization failed"
-msgstr ""
+msgstr "NSM: Inicializace selhala"
#: ardour_ui.cc:900
msgid "Free/Demo Version Warning"
-msgstr ""
+msgstr "VarovánÃ: volná zkuÅ¡ebnà verze"
#: ardour_ui.cc:902
msgid "Subscribe and support development of %1"
-msgstr ""
+msgstr "PravidelnÄ dávejte penÃze a podpoÅte vývoj %1"
#: ardour_ui.cc:903
msgid "Don't warn me about this again"
-msgstr ""
+msgstr "O tomto mi už vÃckrát neÅÃkat"
#: ardour_ui.cc:905
msgid ""
@@ -839,34 +858,45 @@ msgid ""
"\n"
"%4"
msgstr ""
+"<span weight=\"bold\" size=\"large\">%1</span>\n"
+"\n"
+"<b>%2</b>\n"
+"\n"
+"<i>%3</i>\n"
+"\n"
+"%4"
#: ardour_ui.cc:906
msgid "This is a free/demo version of %1"
-msgstr ""
+msgstr "Toto je volná zkušebnà verze %1"
#: ardour_ui.cc:907
msgid "It will not restore OR save any plugin settings"
-msgstr ""
+msgstr "Nelze v nà uložit nebo nahrát žádné nastavenà pÅÃdavných modulů"
#: ardour_ui.cc:908
msgid ""
"If you load an existing session with plugin settings\n"
"they will not be used and will be lost."
msgstr ""
+"Pokud nahrajete stávajÃcà sezenà s nastavenÃm pÅÃdavných modulů,\n"
+"nepoužijà se a budou ztraceny."
#: ardour_ui.cc:910 plugin_ui.cc:569
msgid ""
"To get full access to updates without this limitation\n"
"consider becoming a subscriber for a low cost every month."
msgstr ""
+"Pro zÃskánà plného pÅÃstupu k aktualizacÃm bez tÄchto omezenÃ\n"
+"zvažte, že nás podpoÅÃte pravidelným pÅispÃvánÃm malou Äástkou každý mÄsÃc."
#: ardour_ui.cc:920
msgid "Quit now"
-msgstr ""
+msgstr "UkonÄit nynÃ"
#: ardour_ui.cc:921
msgid "Continue using %1"
-msgstr ""
+msgstr "PokraÄovat pomocà %1"
#: ardour_ui.cc:954 startup.cc:345
msgid "%1 is ready for use"
@@ -963,17 +993,17 @@ msgstr "Otázka"
#: ardour_ui.cc:1269 ardour_ui.cc:1277
msgid "Audio: <span foreground=\"red\">none</span>"
-msgstr ""
+msgstr "Zvuk: <span foreground=\"red\">žádný</span>"
#: ardour_ui.cc:1281
#, c-format
msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-msgstr ""
+msgstr "Zvuk: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
#: ardour_ui.cc:1285
#, c-format
msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-msgstr ""
+msgstr "Zvuk: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
#: ardour_ui.cc:1303 export_video_dialog.cc:80
msgid "File:"
@@ -1068,6 +1098,8 @@ msgid ""
"%1 is not connected to any audio backend.\n"
"You cannot open or close sessions in this condition"
msgstr ""
+"%1 nenà spojen s žádnou podpůrnou vrstvou.\n"
+"Za tohoto stavu nenà možné otevÅÃt nebo zavÅÃt sezenÃ."
#: ardour_ui.cc:1708
msgid "Open Session"
@@ -1095,6 +1127,10 @@ msgid ""
"You should save %1, exit and\n"
"restart with more ports."
msgstr ""
+"Je zde nedostateÄný poÄet dostupných pÅÃpojek na to,\n"
+"aby se dala vytvoÅit nová stopa nebo sbÄrnice.\n"
+"MÄl byste uložit %1, ukonÄit Ardour\n"
+"a spustit znovu s vÄtÅ¡Ãm poÄtem pÅÃpojek."
#: ardour_ui.cc:1819
msgid "You cannot add a track or bus without a session already loaded."
@@ -1123,7 +1159,7 @@ msgstr ""
#: ardour_ui.cc:2376
msgid "Save as..."
-msgstr ""
+msgstr "Uložit jako..."
#: ardour_ui.cc:2377 ardour_ui.cc:2456
msgid "New session name"
@@ -1239,10 +1275,13 @@ msgid ""
"\n"
"You will not be able to record or save."
msgstr ""
+"Toto sezenà bylo otevÅeno v režimu pouze pro ÄtenÃ.\n"
+"\n"
+"Nebudete moci nahrávat nebo ukládat."
#: ardour_ui.cc:3073
msgid "Read-only Session"
-msgstr ""
+msgstr "Sezenà pouze pro ÄtenÃ"
#: ardour_ui.cc:3139
msgid "Could not create session in \"%1\""
@@ -1320,7 +1359,7 @@ msgstr[0] ""
"\n"
"Po znovuspuÅ¡tÄnà %5,\n"
"\n"
-"<span face=\"mono\">Sezenà -> UdÄlat poÅádek -> Vyprázdnit koÅ¡</span>\n"
+"<span face=\"mono\">Sezenà â UdÄlat poÅádek â Vyprázdnit koÅ¡</span>\n"
"\n"
"uvolnà se na disku dalÅ¡Ãch %3 %4 bajtů ukládacÃho prostoru.\n"
msgstr[1] ""
@@ -1329,7 +1368,7 @@ msgstr[1] ""
"\n"
"Po znovuspuÅ¡tÄnà %5,\n"
"\n"
-"<span face=\"mono\">Sezenà -> UdÄlat poÅádek -> Vyprázdnit koÅ¡</span>\n"
+"<span face=\"mono\">Sezenà â UdÄlat poÅádek â Vyprázdnit koÅ¡</span>\n"
"\n"
"uvolnà se na disku dalÅ¡Ãch %3 %4 bajtů ukládacÃho prostoru.\n"
@@ -1363,7 +1402,7 @@ msgstr "smazané soubory"
#: ardour_ui.cc:3637
msgid "Video-Server was not launched by %1. The request to stop it is ignored."
-msgstr ""
+msgstr "Videoserver nebyl spuÅ¡tÄn %1. Požadavek na jeho zastavenà se pÅehlÞÃ."
#: ardour_ui.cc:3641
msgid "Stop Video-Server"
@@ -1379,9 +1418,7 @@ msgstr "Ano, zastavit"
#: ardour_ui.cc:3671
msgid "The Video Server is already started."
-msgstr ""
-"Videoserver je již spuÅ¡tÄn\n"
-"."
+msgstr "Videoserver je již spuÅ¡tÄn."
#: ardour_ui.cc:3673
msgid ""
@@ -1395,6 +1432,8 @@ msgid ""
"Could not connect to the Video Server. Start it or configure its access URL "
"in Preferences."
msgstr ""
+"NepodaÅilo se pÅipojit k videoserveru. SpusÅ¥te jej nebo nastavte adresu pro "
+"pÅÃstup k nÄmu v NastavenÃ."
#: ardour_ui.cc:3711
msgid "Specified docroot is not an existing directory."
@@ -1441,19 +1480,19 @@ msgstr ""
#: ardour_ui.cc:4113
msgid "Scanning for plugins"
-msgstr ""
+msgstr "Hledajà se pÅÃdavné moduly"
#: ardour_ui.cc:4115
msgid "Cancel plugin scan"
-msgstr ""
+msgstr "ZruÅ¡it hledánà pÅÃdavných modulů"
#: ardour_ui.cc:4124
msgid "Stop Timeout"
-msgstr ""
+msgstr "Äasový limit pro zastavenÃ"
#: ardour_ui.cc:4131
msgid "Scan Timeout"
-msgstr ""
+msgstr "Äasový limit pro hledánÃ"
#: ardour_ui.cc:4174
msgid ""
@@ -1523,11 +1562,11 @@ msgstr "Projekt pÅesto nahrát"
#: ardour_ui.cc:4286
msgid "Could not disconnect from Audio/MIDI engine"
-msgstr ""
+msgstr "NepodaÅilo se odpojit od stroje zvuk/MIDI"
#: ardour_ui.cc:4303 ardour_ui.cc:4306
msgid "Could not reconnect to the Audio/MIDI engine"
-msgstr ""
+msgstr "NepodaÅilo se znovupÅipojit ke stroji zvuk/MIDI"
#: ardour_ui.cc:4590
msgid ""
@@ -1669,11 +1708,11 @@ msgstr ""
#: ardour_ui2.cc:145
msgid "Reset All Peak Indicators"
-msgstr ""
+msgstr "Nastavit vÅ¡echny ukazatele nejvyÅ¡Å¡Ãch hodnot znovu"
#: ardour_ui2.cc:146
msgid "Show Error Log and acknowledge warnings"
-msgstr ""
+msgstr "Ukázat zápis chyb a potvrdit varovánÃ"
#: ardour_ui2.cc:179
msgid "[ERROR]: "
@@ -1697,7 +1736,7 @@ msgstr "Následovat úpravy"
#: ardour_ui2.cc:716 rc_option_editor.cc:2300
msgid "GUI"
-msgstr "GUI"
+msgstr "RozhranÃ"
#: ardour_ui2.cc:733 rc_option_editor.cc:1309 rc_option_editor.cc:1327
#: rc_option_editor.cc:1330 rc_option_editor.cc:1332 rc_option_editor.cc:1334
@@ -1824,15 +1863,15 @@ msgstr "PÅidat stopu nebo sbÄrnici..."
#: ardour_ui_ed.cc:134
msgid "Open Video"
-msgstr "OtevÅÃt video"
+msgstr "OtevÅÃt obrazový záznam"
#: ardour_ui_ed.cc:137
msgid "Remove Video"
-msgstr "Odstranit video"
+msgstr "Odstranit obrazový záznam"
#: ardour_ui_ed.cc:140
msgid "Export To Video File"
-msgstr "Vyvést jako videosoubor"
+msgstr "Vyvést jako soubor s obrazovým záznamem"
#: ardour_ui_ed.cc:144
msgid "Snapshot..."
@@ -1894,7 +1933,7 @@ msgstr "ZvÄtÅ¡it okno editoru"
#: ardour_ui_ed.cc:193
msgid "Maximise Mixer Space"
-msgstr ""
+msgstr "ZvÄtÅ¡it prostor smÄÅ¡ovaÄe"
#: ardour_ui_ed.cc:194
msgid "Show Toolbars"
@@ -1902,7 +1941,7 @@ msgstr "Ukázat nástrojové panely"
#: ardour_ui_ed.cc:198
msgid "Show more UI preferences"
-msgstr ""
+msgstr "Ukázat vÃce nastavenà rozhranÃ"
#: ardour_ui_ed.cc:200 mixer_ui.cc:1924 mixer_ui.cc:1930
msgid "Window|Mixer"
@@ -1918,7 +1957,7 @@ msgstr "Okno|MÄÅÃcà můstek"
#: ardour_ui_ed.cc:204
msgid "Reattach All Tearoffs"
-msgstr ""
+msgstr "PÅipojit znovu vÅ¡echna odtrženÃ"
#: ardour_ui_ed.cc:206 midi_tracer.cc:45
msgid "MIDI Tracer"
@@ -1938,27 +1977,27 @@ msgstr "Odkaz"
#: ardour_ui_ed.cc:212
msgid "Report A Bug"
-msgstr ""
+msgstr "Nahlásit chybu"
#: ardour_ui_ed.cc:213
msgid "Cheat Sheet"
-msgstr ""
+msgstr "PÅehled podvodů"
#: ardour_ui_ed.cc:214
msgid "Ardour Website"
-msgstr ""
+msgstr "Stránky Ardouru"
#: ardour_ui_ed.cc:215
msgid "Ardour Development"
-msgstr ""
+msgstr "Vývoj Ardouru"
#: ardour_ui_ed.cc:216
msgid "User Forums"
-msgstr ""
+msgstr "Uživatelská fóra"
#: ardour_ui_ed.cc:217
msgid "How to report a bug"
-msgstr ""
+msgstr "Jak nahlásit chybu"
#: ardour_ui_ed.cc:219 plugin_ui.cc:419
msgid "Save"
@@ -1972,7 +2011,7 @@ msgstr "Uložit"
#: rc_option_editor.cc:1579 rc_option_editor.cc:1582 rc_option_editor.cc:1584
#: rc_option_editor.cc:1601 rc_option_editor.cc:1612
msgid "Transport"
-msgstr "PÅesun"
+msgstr "Pohyb"
#: ardour_ui_ed.cc:233
msgid "Stop"
@@ -2008,7 +2047,7 @@ msgstr "PÅehrávat rozsah smyÄky"
#: ardour_ui_ed.cc:270
msgid "Play Selection"
-msgstr ""
+msgstr "PÅehrát výbÄr"
#: ardour_ui_ed.cc:273
msgid "Play Selection w/Preroll"
@@ -2047,64 +2086,64 @@ msgid "Forward (Fast)"
msgstr "PÅetoÄit vpÅed (rychle)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "SkoÄit k bodu nula"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "SkoÄit na zaÄátek"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "SkoÄit na konec"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "SkoÄit na pÅesný mÃstnà Äas"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
msgid "Numpad Decimal"
-msgstr ""
+msgstr "ÄÃselná klávesnice Desetinná teÄka"
#: ardour_ui_ed.cc:329
msgid "Numpad 0"
-msgstr ""
+msgstr "ÄÃselná klávesnice 0"
#: ardour_ui_ed.cc:332
msgid "Numpad 1"
-msgstr ""
+msgstr "ÄÃselná klávesnice 1"
#: ardour_ui_ed.cc:335
msgid "Numpad 2"
-msgstr ""
+msgstr "ÄÃselná klávesnice 2"
#: ardour_ui_ed.cc:338
msgid "Numpad 3"
-msgstr ""
+msgstr "ÄÃselná klávesnice 3"
#: ardour_ui_ed.cc:341
msgid "Numpad 4"
-msgstr ""
+msgstr "ÄÃselná klávesnice 4"
#: ardour_ui_ed.cc:344
msgid "Numpad 5"
-msgstr ""
+msgstr "ÄÃselná klávesnice 5"
#: ardour_ui_ed.cc:347
msgid "Numpad 6"
-msgstr ""
+msgstr "ÄÃselná klávesnice 6"
#: ardour_ui_ed.cc:350
msgid "Numpad 7"
-msgstr ""
+msgstr "ÄÃselná klávesnice 7"
#: ardour_ui_ed.cc:353
msgid "Numpad 8"
-msgstr ""
+msgstr "ÄÃselná klávesnice 8"
#: ardour_ui_ed.cc:356
msgid "Numpad 9"
-msgstr ""
+msgstr "ÄÃselná klávesnice 9"
#: ardour_ui_ed.cc:360
msgid "Focus On Clock"
@@ -2171,7 +2210,7 @@ msgstr "Automatické pÅehrávánÃ"
#: ardour_ui_ed.cc:411
msgid "Sync Startup to Video"
-msgstr "SeÅÃdit spuÅ¡tÄnà s videem"
+msgstr "SeÅÃdit spuÅ¡tÄnà s obrazovým záznamem"
#: ardour_ui_ed.cc:413
msgid "Time Master"
@@ -2255,7 +2294,9 @@ msgstr "Povolit/Zakázat vnÄjÅ¡Ã seÅÃzenà podle polohy"
#: ardour_ui_options.cc:500
msgid "Sync to JACK is not possible: video pull up/down is set"
-msgstr "SeÅÃzenà k JACKovi nenà možné: je nastaveno vytáhnutÃ/stáhnutà videa"
+msgstr ""
+"SeÅÃzenà k JACKovi nenà možné: Je nastaveno vytáhnutÃ/stáhnutà obrazového "
+"záznamu"
#: audio_clock.cc:1047 audio_clock.cc:1066
msgid "--pending--"
@@ -2333,23 +2374,23 @@ msgstr "PoÄÃtá se..."
#: audio_region_view.cc:1243
msgid "add gain control point"
-msgstr "Upravit kÅivku sÃly hlasitosti (pÅidat bod ovládánà zesÃlenÃ)"
+msgstr "Upravit kÅivku hlasitosti (pÅidat bod ovládánà zesÃlenÃ)"
#: automation_controller.cc:286 automation_controller.cc:302
msgid "Select Note..."
-msgstr ""
+msgstr "Vybrat notu..."
#: automation_controller.cc:293
msgid "Halve"
-msgstr ""
+msgstr "Zmenšit na polovinu"
#: automation_controller.cc:296
msgid "Double"
-msgstr ""
+msgstr "Zdvojnásobit"
#: automation_controller.cc:307
msgid "Set to %1 beat(s)"
-msgstr ""
+msgstr "Nastavit na %1 dob(u)"
#: automation_line.cc:286 automation_line.cc:462
msgid "automation event move"
@@ -2373,7 +2414,7 @@ msgstr "Vložit bod automatizace"
#: automation_streamview.cc:95
msgid "unable to display automation region for control without list"
-msgstr ""
+msgstr "Oblast automatizace nelze bez seznamu pro tento parametr zobrazit"
#: automation_time_axis.cc:163
msgid "automation state"
@@ -2568,15 +2609,15 @@ msgstr "SnÃmky CD"
#: editor.cc:148
msgid "TC Frames"
-msgstr ""
+msgstr "SnÃmky TC"
#: editor.cc:149
msgid "TC Seconds"
-msgstr ""
+msgstr "Sekundy TC"
#: editor.cc:150
msgid "TC Minutes"
-msgstr ""
+msgstr "Minuty TC"
#: editor.cc:151
msgid "Seconds"
@@ -2716,7 +2757,7 @@ msgstr "Slepit"
#: editor.cc:197 editor_actions.cc:501
msgid "Ripple"
-msgstr ""
+msgstr "Vlnit"
#: editor.cc:198 editor_actions.cc:157 editor_actions.cc:503
#: editor_actions.cc:1789 editor_markers.cc:905 editor_rulers.cc:260
@@ -2790,7 +2831,7 @@ msgstr "ZnaÄky na CD"
#: editor.cc:266
msgid "Video Timeline"
-msgstr "Äasová osa videa"
+msgstr "Äasová osa obrazového záznamu"
#: editor.cc:283
msgid "mode"
@@ -2920,15 +2961,15 @@ msgstr "Vybrat vše v rozsahu"
#: editor.cc:1863 editor_actions.cc:297
msgid "Set Loop from Selection"
-msgstr ""
+msgstr "Nastavit smyÄku z výbÄru"
#: editor.cc:1864 editor_actions.cc:298
msgid "Set Punch from Selection"
-msgstr ""
+msgstr "Nastavit rozsah pÅepsánà z výbÄru"
#: editor.cc:1865 editor_actions.cc:299
msgid "Set Session Start/End from Selection"
-msgstr ""
+msgstr "Nastavit zaÄátek/konec sezenà z výbÄru"
#: editor.cc:1868
msgid "Add Range Markers"
@@ -2968,7 +3009,7 @@ msgstr "Vyvést rozsah..."
#: editor.cc:1882
msgid "Export Video Range..."
-msgstr ""
+msgstr "Vyvést rozsah obrazového záznamu..."
#: editor.cc:1898 editor.cc:1979 editor_actions.cc:303
msgid "Play From Edit Point"
@@ -2992,7 +3033,7 @@ msgstr "Vybrat vÅ¡e ve stopÄ"
#: editor.cc:1913 editor.cc:1990 editor_actions.cc:194
msgid "Select All Objects"
-msgstr ""
+msgstr "Vybrat vÅ¡echny pÅedmÄty"
#: editor.cc:1914 editor.cc:1991
msgid "Invert Selection in Track"
@@ -3068,7 +3109,7 @@ msgstr "Vložit vybranou oblast"
#: editor.cc:1951
msgid "Insert Existing Media"
-msgstr "Vložit stávajÃcà zvukové soubory"
+msgstr "Vložit stávajÃcà materiál"
#: editor.cc:1960 editor.cc:2016
msgid "Nudge Entire Track Later"
@@ -3094,6 +3135,8 @@ msgstr "PostrÄit"
msgid ""
"Playhead position stored with a negative value - ignored (use zero instead)"
msgstr ""
+"Ukazatel polohy pÅehrávánà se zápornou hodnotou polohy - pÅehlÞà se (mÃsto "
+"toho se použÃvá nula)"
#: editor.cc:3006 editor.cc:3707 editor.cc:3778 midi_channel_selector.cc:157
#: midi_channel_selector.cc:395 midi_channel_selector.cc:431
@@ -3102,35 +3145,38 @@ msgstr "VÅ¡e"
#: editor.cc:3210
msgid "Smart Mode (add Range functions to Grab mode)"
-msgstr ""
+msgstr "Chytrý režim (pÅidat funkce rozsahu do režimu chÅapnutÃ)"
#: editor.cc:3211
msgid "Grab Mode (select/move objects)"
-msgstr ""
+msgstr "Režim chÅapnutà (vybrat/pÅesunout pÅedmÄty)"
#: editor.cc:3212
msgid "Cut Mode (split regions)"
-msgstr ""
+msgstr "Režim vyjmutà (rozdÄlit oblasti)"
#: editor.cc:3213
msgid "Range Mode (select time ranges)"
-msgstr ""
+msgstr "Režim rozsahu (vybrat Äasové rozsahy)"
#: editor.cc:3214
msgid "Draw Mode (draw and edit gain/notes/automation)"
-msgstr ""
+msgstr "Režim kreslenà (kreslit a upravovat zesÃlenÃ/noty/automatizaci)"
#: editor.cc:3215
msgid "Stretch Mode (time-stretch audio and midi regions, preserving pitch)"
msgstr ""
+"Režim protaženà (protáhnutà Äasu zvuku a oblastà MIDI pÅi zachovánà výšky "
+"tónu)"
#: editor.cc:3216
msgid "Audition Mode (listen to regions)"
-msgstr ""
+msgstr "Režim poslechu (poslouchat oblasti"
#: editor.cc:3217
msgid "Internal Edit Mode (edit notes and gain curves inside regions)"
msgstr ""
+"Režim vnitÅnÃch úprav (upravovat noty a kÅivky hlasitosti uvnitÅ oblastÃ)"
#: editor.cc:3218
msgid ""
@@ -3158,7 +3204,7 @@ msgstr "Oddálit"
#: editor.cc:3223
msgid "Zoom to Time Scale"
-msgstr ""
+msgstr "Pohled na Äasový úsek"
#: editor.cc:3224 editor.cc:3729 editor_actions.cc:263
msgid "Zoom to Session"
@@ -3178,7 +3224,7 @@ msgstr "Zmenšit stopy"
#: editor.cc:3228
msgid "Number of visible tracks"
-msgstr ""
+msgstr "PoÄet viditelných stop"
#: editor.cc:3229
msgid "Snap/Grid Units"
@@ -3231,87 +3277,87 @@ msgstr "VýbÄr"
#: editor.cc:3709
msgid "Fit 1 track"
-msgstr ""
+msgstr "PÅizpůsobit 1 stopu"
#: editor.cc:3710
msgid "Fit 2 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 2 stopy"
#: editor.cc:3711
msgid "Fit 4 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 4 stopy"
#: editor.cc:3712
msgid "Fit 8 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 8 stop"
#: editor.cc:3713
msgid "Fit 16 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 16 stop"
#: editor.cc:3714
msgid "Fit 24 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 24 stop"
#: editor.cc:3715
msgid "Fit 32 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 32 stop"
#: editor.cc:3716
msgid "Fit 48 tracks"
-msgstr ""
+msgstr "PÅizpůsobit 48 stop"
#: editor.cc:3717
msgid "Fit All tracks"
-msgstr ""
+msgstr "PÅizpůsobit vÅ¡echny stopy"
#: editor.cc:3718
msgid "Fit Selection"
-msgstr ""
+msgstr "PÅizpůsobit výbÄr"
#: editor.cc:3720
msgid "Zoom to 10 ms"
-msgstr ""
+msgstr "PÅiblÞit na 10 ms"
#: editor.cc:3721
msgid "Zoom to 100 ms"
-msgstr ""
+msgstr "PÅiblÞit na 100 ms"
#: editor.cc:3722
msgid "Zoom to 1 sec"
-msgstr ""
+msgstr "PÅiblÞit na 1 s"
#: editor.cc:3723
msgid "Zoom to 10 sec"
-msgstr ""
+msgstr "PÅiblÞit na 10 s"
#: editor.cc:3724
msgid "Zoom to 1 min"
-msgstr ""
+msgstr "PÅiblÞit na 1 minutu"
#: editor.cc:3725
msgid "Zoom to 10 min"
-msgstr ""
+msgstr "PÅiblÞit na 10 minut"
#: editor.cc:3726
msgid "Zoom to 1 hour"
-msgstr ""
+msgstr "PÅiblÞit na 1 hodinu"
#: editor.cc:3727
msgid "Zoom to 8 hours"
-msgstr ""
+msgstr "PÅiblÞit na 8 hodin"
#: editor.cc:3728
msgid "Zoom to 24 hours"
-msgstr ""
+msgstr "PÅiblÞit na 24 hodin"
#: editor.cc:3730
msgid "Zoom to Range/Region Selection"
-msgstr ""
+msgstr "PÅiblÞit na výbÄr rozsahu/oblasti"
#: editor.cc:3800
msgid "*"
-msgstr ""
+msgstr "*"
#: editor.cc:4120
msgid "Playlist Deletion"
@@ -3365,7 +3411,7 @@ msgstr "Upravit..."
#: editor.cc:5934 editor_actions.cc:1941
msgid "Legatize"
-msgstr ""
+msgstr "PÅevázat (legato)"
#: editor.cc:5936 editor_actions.cc:1940
msgid "Quantize..."
@@ -3373,11 +3419,11 @@ msgstr "Kvantovat..."
#: editor.cc:5938 editor_actions.cc:1943
msgid "Remove Overlap"
-msgstr ""
+msgstr "Odstranit pÅekrytà (legato)"
#: editor.cc:5940 editor_actions.cc:1942
msgid "Transform..."
-msgstr ""
+msgstr "PromÄnit..."
#: editor_actions.cc:92
msgid "Autoconnect"
@@ -3439,7 +3485,7 @@ msgstr "Rozsahy"
#: editor_actions.cc:108 editor_actions.cc:1842 session_option_editor.cc:135
#: session_option_editor.cc:144 session_option_editor.cc:151
msgid "Fades"
-msgstr "SlábnutÃ"
+msgstr "ProlÃnánÃ"
#: editor_actions.cc:111
msgid "Link"
@@ -3640,7 +3686,7 @@ msgstr "Ukazatele polohy na konec rozsahu výbÄru"
#: editor_actions.cc:195
msgid "Select All Tracks"
-msgstr ""
+msgstr "Vybrat všechny stopy"
#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2468
msgid "Deselect All"
@@ -3695,7 +3741,7 @@ msgid "Save View %1"
msgstr "Uložit pohled %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "Vyvolat pohled %1"
#: editor_actions.cc:238
@@ -3716,7 +3762,7 @@ msgstr "ZÅÃdit znaÄku na ukazateli polohy"
#: editor_actions.cc:250 editor_actions.cc:251
msgid "Remove Mark at Playhead"
-msgstr ""
+msgstr "Odstranit znaÄku pÅi ukazateli polohy"
#: editor_actions.cc:253
msgid "Nudge Next Later"
@@ -3744,7 +3790,7 @@ msgstr "Ukazatele polohy k pÅedchozà mÅÞce"
#: editor_actions.cc:264
msgid "Zoom to Selection"
-msgstr ""
+msgstr "PÅiblÞit výbÄr"
#: editor_actions.cc:265
msgid "Toggle Zoom State"
@@ -3816,7 +3862,7 @@ msgstr "Posunout Äinnou znaÄku k ukazateli polohy"
#: editor_actions.cc:295
msgid "Use Skip Ranges"
-msgstr ""
+msgstr "PoužÃt oblasti skoků"
#: editor_actions.cc:302
msgid "Play Selected Regions"
@@ -3840,11 +3886,11 @@ msgstr "Äinnou znaÄku na polohu myÅ¡i"
#: editor_actions.cc:319
msgid "Undo Selection Change"
-msgstr ""
+msgstr "ZpÄt zmÄnu výbÄru"
#: editor_actions.cc:320
msgid "Redo Selection Change"
-msgstr ""
+msgstr "Znovu zmÄnu výbÄru"
#: editor_actions.cc:322
msgid "Export Audio"
@@ -3868,7 +3914,7 @@ msgstr "OÅÃznout"
#: editor_actions.cc:344
msgid "Fade Range Selection"
-msgstr ""
+msgstr "ProlÃnat výbÄr oblasti"
#: editor_actions.cc:346
msgid "Set Tempo from Edit Range = Bar"
@@ -3880,11 +3926,11 @@ msgstr "Zápis"
#: editor_actions.cc:351 editor_actions.cc:353
msgid "Move to Next Transient"
-msgstr ""
+msgstr "PÅesunout k dalÅ¡Ãmu pÅechodu"
#: editor_actions.cc:352 editor_actions.cc:354
msgid "Move to Previous Transient"
-msgstr ""
+msgstr "PÅesunout k pÅedchozÃmu pÅechodu"
#: editor_actions.cc:358 editor_actions.cc:361
msgid "Start Range"
@@ -3922,7 +3968,7 @@ msgstr "Odstranit"
#: editor_actions.cc:411
msgid "Fit Selection (Vertical)"
-msgstr ""
+msgstr "PÅizpůsobit výbÄr (svisle)"
#: editor_actions.cc:413 time_axis_view.cc:1371
msgid "Largest"
@@ -4002,15 +4048,15 @@ msgstr "Nástroj pro Äasové úÄinky"
#: editor_actions.cc:478
msgid "Content Tool"
-msgstr ""
+msgstr "Nástroj pro obsah"
#: editor_actions.cc:484
msgid "Cut Tool"
-msgstr ""
+msgstr "Nástroj pro vyjÃmánÃ"
#: editor_actions.cc:490
msgid "Step Mouse Mode"
-msgstr "VkroÄit v režim myÅ¡i"
+msgstr "UdÄlat krok v režimu myÅ¡i"
#: editor_actions.cc:497
msgid "Change Edit Point"
@@ -4022,7 +4068,7 @@ msgstr "Stanovit pracovnà bod (vÄetnÄ znaÄky polohy)"
#: editor_actions.cc:504
msgid "Cycle Edit Mode"
-msgstr ""
+msgstr "Kroužit režim úprav"
#: editor_actions.cc:506
msgid "Snap to"
@@ -4186,11 +4232,11 @@ msgstr "Min:Sek"
#: editor_actions.cc:572 editor_actions.cc:575 editor_rulers.cc:271
msgid "Video Monitor"
-msgstr "Sledovánà videa"
+msgstr "Sledovánà obrazového záznamu"
#: editor_actions.cc:574 rc_option_editor.cc:2260
msgid "Video"
-msgstr "Video"
+msgstr "Obraz"
#: editor_actions.cc:577
msgid "Always on Top"
@@ -4296,7 +4342,7 @@ msgstr "Zavést ze sezenÃ"
#: editor_actions.cc:694
msgid "Bring all media into session folder"
-msgstr ""
+msgstr "VÅ¡echen materiál zkopÃrovat do složky se sezenÃm"
#: editor_actions.cc:697
msgid "Show Summary"
@@ -4308,7 +4354,7 @@ msgstr "Ukázat karty se skupinami"
#: editor_actions.cc:701
msgid "Show Measure Lines"
-msgstr ""
+msgstr "Ukázat taktové Äáry"
#: editor_actions.cc:705
msgid "Show Logo"
@@ -4354,7 +4400,7 @@ msgstr "Posunout na původnà polohu"
#: editor_actions.cc:1791
msgid "Lock to Video"
-msgstr "Uzamknout k videu"
+msgstr "Uzamknout k obrazovému záznamu"
#: editor_actions.cc:1796 editor_markers.cc:912
msgid "Glue to Bars and Beats"
@@ -4519,7 +4565,7 @@ msgstr "Odpojit od jiných kopiÃ"
#: editor_actions.cc:1947
msgid "Strip Silence..."
-msgstr "Obnažit ticho..."
+msgstr "Odstranit ticho..."
#: editor_actions.cc:1948
msgid "Set Range Selection"
@@ -4535,7 +4581,7 @@ msgstr "PostrÄit o krok dÅÃve"
#: editor_actions.cc:1955
msgid "Sequence Regions"
-msgstr ""
+msgstr "Åadit oblasti vedle sebe"
#: editor_actions.cc:1960
msgid "Nudge Later by Capture Offset"
@@ -4575,7 +4621,7 @@ msgstr "UmÃstit pÅechod"
#: editor_actions.cc:1990
msgid "Split/Separate"
-msgstr ""
+msgstr "RozdÄlit/OddÄlit"
#: editor_actions.cc:1991
msgid "Trim Start at Edit Point"
@@ -4620,7 +4666,7 @@ msgstr ""
#: editor_audio_import.cc:83 editor_audio_import.cc:127
msgid "Add Existing Media"
-msgstr "PÅidat stávajÃcà zvukové soubory"
+msgstr "PÅidat stávajÃcà materiál"
#: editor_audio_import.cc:175
msgid ""
@@ -4679,14 +4725,16 @@ msgstr "PÅesto vložit"
#: editor_canvas_events.cc:1306 editor_drag.cc:1381
msgid "Could not create new track after region placed in the drop zone"
msgstr ""
+"NepodaÅilo se vytvoÅit žádnou novou stopu, poté co byla oblast umÃstÄna v "
+"oblasti pro upuÅ¡tÄnÃ"
#: editor_drag.cc:1266
msgid "fixed time region drag"
-msgstr "Oblast souÄasnÄ pÅesunout"
+msgstr "Posunout oblast ve stejném Äase"
#: editor_drag.cc:2214
msgid "Ripple drag"
-msgstr ""
+msgstr "Režim vlnÄnà pÅi taženÃ"
#: editor_drag.cc:2365 midi_region_view.cc:2813
msgid "resize notes"
@@ -4694,7 +4742,7 @@ msgstr "ZmÄnit velikost not"
#: editor_drag.cc:2517
msgid "Video Start:"
-msgstr "ZaÄátek videa:"
+msgstr "ZaÄátek obrazového záznamu:"
#: editor_drag.cc:2519
msgid "Diff:"
@@ -4702,7 +4750,7 @@ msgstr "RozdÃly:"
#: editor_drag.cc:2538
msgid "Move Video"
-msgstr "Posunout video"
+msgstr "Posunout obrazový záznam"
#: editor_drag.cc:3046
msgid "copy meter mark"
@@ -4742,11 +4790,11 @@ msgstr "Chyba v programovánÃ: %1"
#: editor_drag.cc:5016 editor_drag.cc:5026
msgid "new skip marker"
-msgstr ""
+msgstr "Nová znaÄka skoku"
#: editor_drag.cc:5017
msgid "skip"
-msgstr ""
+msgstr "PÅeskoÄit"
#: editor_drag.cc:5021 location_ui.cc:56
msgid "CD"
@@ -4754,7 +4802,7 @@ msgstr "CD"
#: editor_drag.cc:5022
msgid "new CD marker"
-msgstr ""
+msgstr "Nová znaÄka na CD"
#: editor_drag.cc:5027 editor_route_groups.cc:437 mixer_ui.cc:1493
msgid "unnamed"
@@ -4762,7 +4810,7 @@ msgstr "Bez názvu"
#: editor_drag.cc:5309
msgid "Automation range drag created for invalid region type"
-msgstr ""
+msgstr "Taženà rozsahem automatizace vytvoÅeno pro neplatný typ oblasti"
#: editor_route_groups.cc:96
msgid "Col"
@@ -5061,7 +5109,7 @@ msgstr "PostrÄit o krok dozadu"
#: editor_ops.cc:618
msgid "sequence regions"
-msgstr ""
+msgstr "Åadit oblasti vedle sebe"
#: editor_ops.cc:694
msgid "build_region_boundary_cache called with snap_type = %1"
@@ -5273,7 +5321,7 @@ msgstr "Vyprázdnit"
#: editor_ops.cc:4028
msgid "objects"
-msgstr ""
+msgstr "PÅedmÄty"
#: editor_ops.cc:4238 editor_ops.cc:4270
msgid "remove region"
@@ -5318,7 +5366,7 @@ msgstr "Obrátit oblasti"
#: editor_ops.cc:5034
msgid "strip silence"
-msgstr "Obnažit ticho"
+msgstr "Odstranit ticho"
#: editor_ops.cc:5091
msgid "Fork Region(s)"
@@ -5326,7 +5374,7 @@ msgstr "Rozdvojit oblast(i)"
#: editor_ops.cc:5112
msgid "Could not unlink %1"
-msgstr ""
+msgstr "NepodaÅilo se zruÅ¡it odkaz %1"
#: editor_ops.cc:5326
msgid "reset region gain"
@@ -5342,7 +5390,7 @@ msgstr "PÅepnout zámek oblasti"
#: editor_ops.cc:5430
msgid "Toggle Video Lock"
-msgstr "PÅepnout zámek videa"
+msgstr "PÅepnout zámek obrazového záznamu"
#: editor_ops.cc:5454
msgid "region lock style"
@@ -5354,7 +5402,7 @@ msgstr "ZmÄnit neprůhlednost oblasti"
#: editor_ops.cc:5572
msgid "fade range"
-msgstr ""
+msgstr "ProlÃnat oblast"
#: editor_ops.cc:5610
msgid "set fade in length"
@@ -5394,7 +5442,7 @@ msgstr "Nastavit rozsah pÅepsánà z výbÄru"
#: editor_ops.cc:6041
msgid "set session start/end from selection"
-msgstr ""
+msgstr "Nastavit zaÄátek/konec sezenà z výbÄru"
#: editor_ops.cc:6066
msgid "set punch range from region"
@@ -5555,6 +5603,9 @@ msgid ""
"\n"
"This action cannot be undone, and the session file will be overwritten"
msgstr ""
+"Opravdu chcete odstranit %1 %2?\n"
+"\n"
+"Tento krok nelze vrátit zpÄt, a soubor se sezenÃm bude pÅepsán"
#: editor_ops.cc:6840
msgid "Yes, remove them."
@@ -5604,15 +5655,15 @@ msgstr "ZruÅ¡it spojenà oblastÃ"
#: editor_ops.cc:7315
msgid "%1: Locked"
-msgstr ""
+msgstr "%1: Uzamknuto"
#: editor_ops.cc:7322
msgid "Click to unlock"
-msgstr ""
+msgstr "KlepnÄte pro odemknutÃ"
#: editor_ops.cc:7376
msgid "Moving embedded files into session folder"
-msgstr ""
+msgstr "PÅesunujà se vložené soubory do složky se sezenÃm"
#: editor_regions.cc:112
msgid "Region name, with number of channels in []'s"
@@ -5641,12 +5692,14 @@ msgstr "Poloha seÅizovacÃho bodu oblasti, pomÄrná k zaÄátku oblasti"
#: editor_regions.cc:117
msgid "Length of region fade-in (units: secondary clock), () if disabled"
msgstr ""
-"Délka postupné zesÃlenà signálu oblasti (jednotky: vedlejÅ¡Ã hodiny), (), "
+"Délka postupného zesÃlenà signálu oblasti (jednotky: vedlejÅ¡Ã hodiny), (), "
"pokud je zakázáno"
#: editor_regions.cc:118
msgid "Length of region fade-out (units: secondary clock), () if disabled"
msgstr ""
+"Délka postupného zeslabenà signálu oblasti (jednotky: vedlejšà hodiny), (), "
+"pokud je zakázáno"
#: editor_regions.cc:119 mixer_strip.cc:2055 mono_panner.cc:203
#: panner2d.cc:240 stereo_panner.cc:251 stereo_panner.cc:274
@@ -5845,11 +5898,11 @@ msgstr "Odkrýt rozsahy"
#: editor_rulers.cc:224
msgid "Make Loop range"
-msgstr ""
+msgstr "VytvoÅit rozsah smyÄky"
#: editor_rulers.cc:225
msgid "Make Punch range"
-msgstr ""
+msgstr "VytvoÅit rozsah pÅepsánÃ"
#: editor_rulers.cc:230
msgid "New CD track marker"
@@ -5930,31 +5983,31 @@ msgstr ""
#: engine_dialog.cc:83
msgid "Device Control Panel"
-msgstr ""
+msgstr "Ovládacà panel zaÅÃzenÃ"
#: engine_dialog.cc:84
msgid "Midi Device Setup"
-msgstr ""
+msgstr "Nastavenà zaÅÃzenà MIDI"
#: engine_dialog.cc:85 engine_dialog.cc:2097
msgid "Measure"
-msgstr ""
+msgstr "ZmÄÅit"
#: engine_dialog.cc:86
msgid "Use results"
-msgstr ""
+msgstr "PoužÃt výsledky"
#: engine_dialog.cc:87
msgid "Back to settings ... (ignore results)"
-msgstr ""
+msgstr "ZpÄt na nastavenÃ... (pÅehlÞet výsledky)"
#: engine_dialog.cc:88
msgid "Calibrate Audio"
-msgstr ""
+msgstr "PÅesnÄ nastavit zvuk"
#: engine_dialog.cc:92
msgid "Back to settings"
-msgstr ""
+msgstr "ZpÄt na nastavenÃ"
#: engine_dialog.cc:111
msgid ""
@@ -5962,40 +6015,45 @@ msgid ""
"\n"
"(This is a build/packaging/system error. It should never happen.)"
msgstr ""
+"NezjiÅ¡tÄna žádná podpůrná vrstva pro zvuk/MIDI. %1 nemůže bÄžet.\n"
+"\n"
+"(Jde tu o chybu pÅekladaÄe/balÃÄkovánÃ/systému a nemÄlo k tomu nikdy dojÃt.)"
#: engine_dialog.cc:137
msgid "Latency Measurement Tool"
-msgstr ""
+msgstr "Nástroj pro mÄÅenà prodlevy"
#: engine_dialog.cc:149
msgid ""
"<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
"low level.</span>"
msgstr ""
+"<span weight=\"bold\">StáhnÄte hlasitost svého zvukového zaÅÃzenà na velmi "
+"nÃzkou úroveÅ.</span>"
#: engine_dialog.cc:158
msgid "Select two channels below and connect them using a cable."
-msgstr ""
+msgstr "Vyberte nÞe dva kanály a propojte je pomocà kabelu."
#: engine_dialog.cc:163
msgid "Output channel"
-msgstr ""
+msgstr "Výstupnà kanál"
#: engine_dialog.cc:171
msgid "Input channel"
-msgstr ""
+msgstr "Vstupnà kanál"
#: engine_dialog.cc:206
msgid "Once the channels are connected, click the \"Measure\" button."
-msgstr ""
+msgstr "Jakmile budou kanály propojeny, klepnÄte na tlaÄÃtko ZmÄÅit."
#: engine_dialog.cc:213
msgid "When satisfied with the results, click the \"Use results\" button."
-msgstr ""
+msgstr "Až budete spokojeni s výsledky, klepnÄte na tlaÄÃtko PoužÃt výsledky."
#: engine_dialog.cc:228 engine_dialog.cc:2217 engine_dialog.cc:2227
msgid "No measurement results yet"
-msgstr ""
+msgstr "ZatÃm žádné výsledky mÄÅenÃ"
#: engine_dialog.cc:238 route_params_ui.cc:106
msgid "Latency"
@@ -6003,7 +6061,7 @@ msgstr "Prodleva"
#: engine_dialog.cc:372
msgid "Audio System:"
-msgstr ""
+msgstr "Zvukový systém:"
#: engine_dialog.cc:409
msgid "Driver:"
@@ -6011,7 +6069,7 @@ msgstr "OvladaÄ:"
#: engine_dialog.cc:415
msgid "Device:"
-msgstr ""
+msgstr "ZaÅÃzenÃ:"
#: engine_dialog.cc:420 engine_dialog.cc:519 sfdb_ui.cc:153 sfdb_ui.cc:348
#: sfdb_ui.cc:353
@@ -6024,11 +6082,11 @@ msgstr "Velikost vyrovnávacà pamÄti:"
#: engine_dialog.cc:444
msgid "Input Channels:"
-msgstr ""
+msgstr "Vstupnà kanály:"
#: engine_dialog.cc:457
msgid "Output Channels:"
-msgstr ""
+msgstr "Výstupnà kanály:"
#: engine_dialog.cc:469
msgid "Hardware input latency:"
@@ -6044,13 +6102,15 @@ msgstr "Výstupnà prodleva technického vybavenà poÄÃtaÄe:"
#: engine_dialog.cc:493
msgid "MIDI System:"
-msgstr ""
+msgstr "Systém MIDI:"
#: engine_dialog.cc:511
msgid ""
"The %1 audio backend was configured and started externally.\n"
"This limits your control over it."
msgstr ""
+"Podpůrná zvuková vrstva %1 byla nastavena a spuÅ¡tÄna vnÄ.\n"
+"To omezuje vaÅ¡i moc nad nÃ."
#: engine_dialog.cc:564
msgid ""
@@ -6058,6 +6118,9 @@ msgid ""
"\n"
"Latency calibration requires a working audio interface."
msgstr ""
+"NepodaÅilo se spustit nebo pÅipojit ke zvukovému stroji.\n"
+"\n"
+"PÅesné zmÄÅenà prodlevy vyžaduje pracujÃcà rozhranà pro zvuk."
#: engine_dialog.cc:570
msgid ""
@@ -6065,10 +6128,14 @@ msgid ""
"\n"
"Latency calibration requires playback and capture"
msgstr ""
+"VaÅ¡e nynÄjÅ¡Ã nastavenà zvuku dovoluje jen pÅehrávánà nebo nahrávánÃ.\n"
+"\n"
+"PÅesné zmÄÅenà prodlevy vyžaduje obousmÄrný provoz - soubÄžné pÅehrávánà a "
+"zachytávánÃ"
#: engine_dialog.cc:651
msgid "MIDI Devices"
-msgstr ""
+msgstr "ZaÅÃzenà MIDI"
#: engine_dialog.cc:657
msgid "Device"
@@ -6076,67 +6143,66 @@ msgstr "ZaÅÃzenÃ"
#: engine_dialog.cc:659
msgid "Hardware Latencies"
-msgstr ""
+msgstr "Prodlevy technického vybavenÃ"
#: engine_dialog.cc:700
msgid "Calibrate"
-msgstr ""
+msgstr "PÅesnÄ nastavit"
#: engine_dialog.cc:800
msgid "all available channels"
-msgstr ""
+msgstr "všechny dostupné kanály"
#: engine_dialog.cc:1039 latency_gui.cc:39
-#, fuzzy
msgid "sample"
msgid_plural "samples"
msgstr[0] "Vzorek"
-msgstr[1] "Vzorek"
+msgstr[1] "vzorky"
#: engine_dialog.cc:1090
#, c-format
msgid "(%.1f ms)"
-msgstr ""
+msgstr "(%.1f ms)"
#: engine_dialog.cc:1593
msgid "Could not start backend engine %1"
-msgstr ""
+msgstr "NepodaÅilo se spustit stroj podpůrné vrstvy %1"
#: engine_dialog.cc:1644
msgid "Cannot set driver to %1"
-msgstr ""
+msgstr "Nelze nastavit ovladaÄ na %1"
#: engine_dialog.cc:1648
msgid "Cannot set device name to %1"
-msgstr ""
+msgstr "Nelze nastavit název zaÅÃzenà na %1"
#: engine_dialog.cc:1652
msgid "Cannot set sample rate to %1"
-msgstr ""
+msgstr "Nelze nastavit vzorkovacà kmitoÄet na %1"
#: engine_dialog.cc:1656
msgid "Cannot set buffer size to %1"
-msgstr ""
+msgstr "Nelze nastavit velikost vyrovnávacà pamÄti na %1"
#: engine_dialog.cc:1662
msgid "Cannot set input channels to %1"
-msgstr ""
+msgstr "Nelze nastavit vstupnà kanály na %1"
#: engine_dialog.cc:1666
msgid "Cannot set output channels to %1"
-msgstr ""
+msgstr "Nelze nastavit výstupnà kanály na %1"
#: engine_dialog.cc:1672
msgid "Cannot set input latency to %1"
-msgstr ""
+msgstr "Nelze nastavit vstupnà prodlevu na %1"
#: engine_dialog.cc:1676
msgid "Cannot set output latency to %1"
-msgstr ""
+msgstr "Nelze nastavit výstupnà prodlevu na %1"
#: engine_dialog.cc:1955 engine_dialog.cc:2014
msgid "No signal detected "
-msgstr ""
+msgstr "NezjiÅ¡tÄn žádný signál"
#: engine_dialog.cc:1968 engine_dialog.cc:2022 port_insert_ui.cc:70
#: port_insert_ui.cc:98
@@ -6145,35 +6211,35 @@ msgstr "Odpojeno od zvukového stroje"
#: engine_dialog.cc:1977 engine_dialog.cc:2030
msgid "Detected roundtrip latency: "
-msgstr ""
+msgstr "Objevena zpáteÄnà prodleva: "
#: engine_dialog.cc:1979 engine_dialog.cc:2032
msgid "Systemic latency: "
-msgstr ""
+msgstr "Systémová prodleva: "
#: engine_dialog.cc:1986
msgid "(signal detection error)"
-msgstr ""
+msgstr "(Chyba pÅi rozpoznávánà signálu)"
#: engine_dialog.cc:1992
msgid "(inverted - bad wiring)"
-msgstr ""
+msgstr "(obráceno - Å¡patné kabelovánÃ)"
#: engine_dialog.cc:2039
msgid "(averaging)"
-msgstr ""
+msgstr "(průmÄrný)"
#: engine_dialog.cc:2045
msgid "(too large jitter)"
-msgstr ""
+msgstr "(pÅÃliÅ¡ velké chvÄnÃ)"
#: engine_dialog.cc:2049
msgid "(large jitter)"
-msgstr ""
+msgstr "(velké chvÄnÃ)"
#: engine_dialog.cc:2061
msgid "Timeout - large MIDI jitter."
-msgstr ""
+msgstr "PÅekroÄenà Äasu - velký neklid MIDI"
#: engine_dialog.cc:2077 port_insert_ui.cc:134
msgid "Detecting ..."
@@ -6181,7 +6247,7 @@ msgstr "Zjišťuje se..."
#: engine_dialog.cc:2171
msgid "Disconnect from %1"
-msgstr ""
+msgstr "Odpojit od %1"
#: engine_dialog.cc:2175 mixer_strip.cc:1522 route_group_dialog.cc:45
#: route_time_axis.cc:841
@@ -6190,11 +6256,11 @@ msgstr "Äinné"
#: engine_dialog.cc:2185
msgid "Connect to %1"
-msgstr ""
+msgstr "PÅipojit k %1"
#: engine_dialog.cc:2190
msgid "Inactive"
-msgstr ""
+msgstr "NeÄinné"
#: export_channel_selector.cc:45 sfdb_ui.cc:151
msgid "Channels:"
@@ -6266,7 +6332,7 @@ msgstr "Soubory, které budou pÅepsány"
#: export_dialog.cc:296
msgid "Export initialization failed: %1"
-msgstr ""
+msgstr "Inicializace vyvedenà se nezdaÅila: %1"
#: export_dialog.cc:306
msgid "Stop Export"
@@ -6330,7 +6396,7 @@ msgstr "Poloha"
#: export_file_notebook.cc:195
msgid "Upload to Soundcloud"
-msgstr ""
+msgstr "Nahrát na Soundcloud"
#: export_file_notebook.cc:273
msgid "No format!"
@@ -6428,6 +6494,8 @@ msgid ""
"Command to run post-export\n"
"(%f=full path & filename, %d=directory, %b=basename):"
msgstr ""
+"PÅÃkaz, který se má provést po vyvedenÃ\n"
+"(%f=full path & filename, %d=directory, %b=basename):"
#: export_format_dialog.cc:57
msgid "Compatibility"
@@ -6576,11 +6644,11 @@ msgstr "<span size=\"large\">PÅedvolby</span>"
#: generic_pluginui.cc:97
msgid "Manual"
-msgstr ""
+msgstr "RuÄnÃ"
#: generic_pluginui.cc:106
msgid "All Automation"
-msgstr ""
+msgstr "VÅ¡e automatizace"
#: generic_pluginui.cc:250
msgid "Switches"
@@ -6593,16 +6661,18 @@ msgstr "OvládánÃ"
#: generic_pluginui.cc:293
msgid "Plugin Editor: could not build control element for port %1"
msgstr ""
-"Editor pÅÃdavných modulů: nepodaÅilo se vytvoÅit prvek ovládánà pro pÅÃpojku "
+"Editor pÅÃdavných modulů: NepodaÅilo se vytvoÅit prvek ovládánà pro pÅÃpojku "
"%1"
#: generic_pluginui.cc:318
msgid "Plugin Editor: no control for property %1"
-msgstr ""
+msgstr "Editor pÅÃdavných modulů: Žádné ovládánà pro vlastnost %1"
#: generic_pluginui.cc:324
msgid "Plugin Editor: could not build control element for property %1"
msgstr ""
+"Editor pÅÃdavných modulů: NepodaÅilo se vytvoÅit prvek ovládánà pro vlastnost "
+"%1"
#: generic_pluginui.cc:468
msgid "Meters"
@@ -6796,11 +6866,11 @@ msgstr ""
#: keyeditor.cc:98
msgid "Reset Bindings to Defaults"
-msgstr ""
+msgstr "Nastavit zkratky zpÄt na výchozÃ"
#: keyeditor.cc:263
msgid "Main_menu"
-msgstr "HlavnÃ_nabÃdka"
+msgstr "Hlavnà nabÃdka"
#: keyeditor.cc:265
msgid "redirectmenu"
@@ -6808,7 +6878,7 @@ msgstr "PÅesmÄrovánà nabÃdky"
#: keyeditor.cc:267
msgid "Editor_menus"
-msgstr "NabÃdky_editoru"
+msgstr "Editor nabÃdek"
#: keyeditor.cc:269
msgid "RegionList"
@@ -6820,7 +6890,7 @@ msgstr "NabÃdka zpracovánÃ"
#: latency_gui.cc:40
msgid "msec"
-msgstr "Milisekunda"
+msgstr "ms"
#: latency_gui.cc:41
msgid "period"
@@ -6922,11 +6992,11 @@ msgstr "PÅidat znaÄku rozsahu"
#: main.cc:82
msgid "%1 could not connect to the audio backend."
-msgstr ""
+msgstr "%1 se nepodaÅilo se spojit s podpůrnou vrstvou zvuku.."
#: main.cc:107 main.cc:123
msgid "The audio backend (%1) has failed, or terminated"
-msgstr ""
+msgstr "Podpůrná vrstva zvuku (%1) selhala, nebo byla ukonÄena"
#: main.cc:110
msgid ""
@@ -6936,20 +7006,27 @@ msgid ""
"\n"
"Click OK to exit %1."
msgstr ""
+"%2 byla neoÄekávanÄ a bez oznámenà %1 ukonÄena.\n"
+"\n"
+"Důvod pro to spoÄÃvá buÄ ve Å¡patném nastavenà nebo v chybÄ v %2.\n"
+"\n"
+"KlepnÄte na OK pro ukonÄenà %1."
#: main.cc:124
msgid "%2 exited unexpectedly, and without notifying %1."
-msgstr ""
+msgstr "%2 byla neoÄekávanÄ a bez oznámenà %1 ukonÄena."
#: main.cc:219
msgid ""
"\n"
" %1 could not understand your command line "
msgstr ""
+"\n"
+" %1 se nepodaÅilo porozumÄt vaÅ¡emu pÅÃkazovému Åádku "
#: main.cc:221
msgid "An error was encountered while launching %1"
-msgstr ""
+msgstr "PÅi spouÅ¡tÄnà %1 nastala chyba"
#: main.cc:310
msgid " (built using "
@@ -7280,11 +7357,11 @@ msgstr "Vložit"
#: midi_streamview.cc:185
msgid "attempt to display MIDI region with no source"
-msgstr ""
+msgstr "Pokus o zobrazenà oblasti MIDI bez datového zdroje"
#: midi_streamview.cc:195
msgid "attempt to display MIDI region with no model"
-msgstr ""
+msgstr "Pokus o zobrazenà oblasti MIDI bez datového modelu"
#: midi_streamview.cc:506
msgid "failed to create MIDI region"
@@ -7425,7 +7502,7 @@ msgstr "Nová sÃla tónu"
#: missing_file_dialog.cc:35
msgid "Missing File"
-msgstr ""
+msgstr "Chybà soubor"
#: missing_file_dialog.cc:37
msgid "Select a folder to search"
@@ -7537,7 +7614,7 @@ msgstr "PÅepnout vybrané pÅÃdavné moduly"
#: mixer_actor.cc:70
msgid "Deselect all strips and processors"
-msgstr ""
+msgstr "OdznaÄit vÅ¡echny proužky a zpracovatele"
#: mixer_actor.cc:72 mixer_actor.cc:73
msgid "Scroll Mixer Window to the left"
@@ -7594,11 +7671,11 @@ msgstr "Zamknout stav sóla"
#: mixer_strip.cc:196 mixer_strip.cc:2027
msgid "Iso"
-msgstr ""
+msgstr "Sam"
#: mixer_strip.cc:250
msgid "Mix group"
-msgstr "Skupina smÄsi"
+msgstr "Skupina zpracovánÃ"
#: mixer_strip.cc:368 rc_option_editor.cc:2327
msgid "Phase Invert"
@@ -7606,11 +7683,11 @@ msgstr "Obrácenà fáze"
#: mixer_strip.cc:369 rc_option_editor.cc:2328
msgid "Record & Monitor"
-msgstr ""
+msgstr "Nahrávánà a sledovánÃ"
#: mixer_strip.cc:370 rc_option_editor.cc:2329
msgid "Solo Iso / Lock"
-msgstr ""
+msgstr "Sólo sam/Zámek"
#: mixer_strip.cc:524
msgid "Enable/Disable MIDI input"
@@ -7627,14 +7704,16 @@ msgstr "Posl"
#: mixer_strip.cc:776 mixer_strip.cc:879 processor_box.cc:2382
msgid "Not connected to audio engine - no I/O changes are possible"
msgstr ""
+"Nespojeno se zvukovým strojem - na vstupech/výstupech (I/O) nejsou možné "
+"žádné zmÄny"
#: mixer_strip.cc:833 mixer_strip.cc:935
msgid "Add %1 port"
-msgstr ""
+msgstr "PÅidat %1 pÅÃpojku"
#: mixer_strip.cc:840 mixer_strip.cc:942
msgid "Routing Grid"
-msgstr ""
+msgstr "Spojovacà mÅÞka"
#: mixer_strip.cc:1171
msgid "<b>INPUT</b> to %1"
@@ -7682,11 +7761,11 @@ msgstr "Poznámky..."
#: mixer_strip.cc:1509 route_time_axis.cc:565
msgid "Inputs..."
-msgstr ""
+msgstr "Vstupy..."
#: mixer_strip.cc:1511 route_time_axis.cc:567
msgid "Outputs..."
-msgstr ""
+msgstr "Výstupy..."
#: mixer_strip.cc:1516
msgid "Save As Template..."
@@ -7706,19 +7785,19 @@ msgstr "ID dálkového ovládánÃ..."
#: mixer_strip.cc:1823
msgid "Pre"
-msgstr ""
+msgstr "PÅed"
#: mixer_strip.cc:1827
msgid "Post"
-msgstr ""
+msgstr "Po"
#: mixer_strip.cc:1847
msgid "Pr"
-msgstr ""
+msgstr "PÅ"
#: mixer_strip.cc:1851
msgid "Po"
-msgstr ""
+msgstr "Po"
#: mixer_strip.cc:1860
msgid "C"
@@ -7780,7 +7859,7 @@ msgstr "Proužky"
#: meter_strip.cc:157
msgid "Reset Peak"
-msgstr ""
+msgstr "Nastavit znovu vrcholy"
#: meter_strip.cc:883
msgid "Variable height"
@@ -7796,11 +7875,11 @@ msgstr "Vysoká"
#: meter_strip.cc:886
msgid "Grande"
-msgstr ""
+msgstr "Grande"
#: meter_strip.cc:887
msgid "Venti"
-msgstr ""
+msgstr "Venti"
#: meter_patterns.cc:82
msgid "Peak"
@@ -7836,7 +7915,7 @@ msgstr "K14"
#: meter_patterns.cc:106
msgid "K12"
-msgstr ""
+msgstr "K12"
#: meter_patterns.cc:109
msgid "VU"
@@ -7852,11 +7931,11 @@ msgstr "Sólo"
#: monitor_section.cc:100
msgid "Isolated"
-msgstr ""
+msgstr "Samostatné"
#: monitor_section.cc:104
msgid "Auditioning"
-msgstr ""
+msgstr "Poslech"
#: monitor_section.cc:114
msgid ""
@@ -7916,7 +7995,7 @@ msgstr "Tlumený"
#: monitor_section.cc:235
msgid "Excl. Solo"
-msgstr ""
+msgstr "Výhr. sólo"
#: monitor_section.cc:237
msgid "Exclusive solo means that only 1 solo is active at a time"
@@ -7925,7 +8004,7 @@ msgstr ""
#: monitor_section.cc:244
msgid "Solo » Mute"
-msgstr ""
+msgstr "Sólo » Ztlumit"
#: monitor_section.cc:246
msgid ""
@@ -7989,7 +8068,7 @@ msgstr "Sólo poslech pÅed prolÃnánÃm (PFL)"
#: mono_panner.cc:109 stereo_panner.cc:119
msgid "bypassed"
-msgstr ""
+msgstr "pÅemostÄno"
#: mono_panner.cc:123
#, c-format
@@ -7998,7 +8077,7 @@ msgstr "L:%3d P:%3d"
#: mono_panner_editor.cc:33
msgid "Mono Panner"
-msgstr "OvladaÄ vyváženà pro mono"
+msgstr "VyvažovaÄ pro mono"
#: mono_panner_editor.cc:44 mono_panner_editor.cc:49
#: stereo_panner_editor.cc:46 stereo_panner_editor.cc:51
@@ -8113,7 +8192,7 @@ msgstr "Normalizovat"
#: note_select_dialog.cc:33
msgid "Select Note"
-msgstr ""
+msgstr "Vybrat notu"
#: opts.cc:57
msgid "Usage: "
@@ -8150,6 +8229,9 @@ msgid ""
" -c, --name <name> Use a specific backend client name, default is "
"ardour\n"
msgstr ""
+" -c, --name <name> PoužÃt zvláštnà název pro klienta "
+"podpůrné vrstvy; "
+"výchozÃm je: ardour\n"
#: opts.cc:64
msgid ""
@@ -8499,6 +8581,8 @@ msgid ""
"Plugin presets are not supported in this build, see the Log window for more "
"information."
msgstr ""
+"V tomto sestavenà nejsou podporována pÅednastavenà pÅÃdavných modulů. "
+"Na dalÅ¡Ã informace se podÃvejte v oknÄ se zápisem."
#: plugin_ui.cc:670
msgid "Click to allow normal use of %1 keyboard shortcuts"
@@ -8686,17 +8770,19 @@ msgstr "Nejsou zde žádné %1 pÅÃpojky k pÅipojenÃ."
#: processor_box.cc:150
msgid "Send"
-msgstr ""
+msgstr "Poslat"
#: processor_box.cc:152
msgid "Return"
-msgstr ""
+msgstr "Enter"
#: processor_box.cc:310
msgid ""
"\n"
"This mono plugin has been replicated %1 times."
msgstr ""
+"\n"
+"Tento mono pÅÃdavný modul byl zkopÃrován %1 krát"
#: processor_box.cc:314
msgid ""
@@ -8704,17 +8790,22 @@ msgid ""
"Double-click to show GUI.\n"
"Alt+double-click to show generic GUI.%2"
msgstr ""
+"<b>%1</b>\n"
+"Klepnout dvakrát pro ukázánà uživatelského rozhranÃ.\n"
+"Alt+klepnout dvakrát pro ukázánà jednoduchého uživatelského rozhranÃ.%2"
#: processor_box.cc:317
msgid ""
"<b>%1</b>\n"
"Double-click to show generic GUI.%2"
msgstr ""
+"<b>%1</b>\n"
+"Klepnout dvakrát pro ukázánà jednoduchého uživatelského rozhranÃ.%2"
#: processor_box.cc:361
#, c-format
msgid "(%1x1) "
-msgstr ""
+msgstr "(%1x1) "
#: processor_box.cc:437
msgid "Show All Controls"
@@ -8726,7 +8817,7 @@ msgstr "Skrýt všechny ovládacà prvky"
#: processor_box.cc:475
msgid "Link panner controls"
-msgstr ""
+msgstr "Spojit ovládánà vyvažovaÄe"
#: processor_box.cc:575
msgid "on"
@@ -8888,7 +8979,7 @@ msgstr "Vložit nové pomocné odeslánà (Aux)..."
#: processor_box.cc:2441
msgid "Send Options"
-msgstr ""
+msgstr "Volby pro odeslánÃ"
#: processor_box.cc:2443
msgid "Clear (all)"
@@ -8924,7 +9015,7 @@ msgstr "%1: %2 (podle %3)"
#: processor_box.cc:2791
msgid "%1 (by %2)"
-msgstr ""
+msgstr "%1 (od %2)"
#: patch_change_dialog.cc:50
msgid "Patch Change"
@@ -9036,15 +9127,17 @@ msgstr "Nastavenà rozmÄrů pÃsma:"
#: rc_option_editor.cc:547
msgid "Default"
-msgstr ""
+msgstr "VýchozÃ"
#: rc_option_editor.cc:573
msgid "Major font-scale changes require an application restart to re-layout."
msgstr ""
+"VÄtÅ¡Ã zmÄny velikosti pÃsma vyžadujà opÄtovné spuÅ¡tÄnà programu kvůli "
+"pÅizpůsobenà rozvrženÃ."
#: rc_option_editor.cc:614
msgid "Waveform Clip Level (dBFS):"
-msgstr ""
+msgstr "ÃroveÅ pÅebuzenà průbÄhové kÅivky (dBFS):"
#: rc_option_editor.cc:666
msgid "Playback (seconds of buffering):"
@@ -9064,7 +9157,9 @@ msgstr "Dvojité poklepánà na název pro úpravu nastavenà povoleného protok
#: rc_option_editor.cc:903
msgid "Show Video Export Info before export"
-msgstr "Ukázat pÅed uloženÃm do souboru informace o způsobu vyvedenà videa"
+msgstr ""
+"Ukázat pÅed uloženÃm do souboru informace o způsobu vyvedenà obrazového "
+"záznamu"
#: rc_option_editor.cc:904
msgid "Show Video Server Startup Dialog"
@@ -9098,7 +9193,7 @@ msgstr ""
#: rc_option_editor.cc:922
msgid "Video Folder:"
-msgstr "Složka s videem:"
+msgstr "Složka s obrazovým záznamem:"
#: rc_option_editor.cc:927
msgid ""
@@ -9120,7 +9215,8 @@ msgid ""
"<b>When enabled</b> an information window with details is displayed before "
"the video-export dialog."
msgstr ""
-"<b>Je-li povoleno</b>, je pÅed dialogem pro ukládánà videa zobrazeno "
+"<b>Je-li povoleno</b>, je pÅed dialogem pro ukládánà obrazového záznamu "
+"zobrazeno "
"informaÄnà okno s podrobnostmi."
#: rc_option_editor.cc:939
@@ -9133,29 +9229,34 @@ msgstr ""
#: rc_option_editor.cc:1022
msgid "Always Display Plugin Scan Progress"
-msgstr ""
+msgstr "Vždy ukázat postup hledánà pÅÃdavného modulu"
#: rc_option_editor.cc:1023
msgid "Scan for [new] VST Plugins on Application Start"
-msgstr ""
+msgstr "PÅi spuÅ¡tÄnà programu hledat [nové] pÅÃdavné moduly VST"
#: rc_option_editor.cc:1024
msgid "Scan for AudioUnit Plugins on Application Start"
-msgstr ""
+msgstr "PÅi spuÅ¡tÄnà programu hledat pÅÃdavné moduly Audio Unit"
#: rc_option_editor.cc:1035
msgid "General"
-msgstr ""
+msgstr "Obecné"
#: rc_option_editor.cc:1041
msgid "Scan for Plugins"
-msgstr ""
+msgstr "Hledat pÅÃdavné moduly"
#: rc_option_editor.cc:1048
msgid ""
"<b>When enabled</b> a popup window showing plugin scan progress is displayed "
"for indexing (cache load) and discovery (detect new plugins)"
msgstr ""
+"<b>Když je povoleno</b>, je zobrazeno vyskakovacà okno ukazujÃcà postup "
+"hledánà "
+"pÅÃdavného modulu pro rejstÅÃkovánà (nahránà vyrovnávacà pamÄti) a zjiÅ¡Å¥ovánà "
+"(zjiÅ¡tÄnà "
+"nových pÅÃdavných modulů)"
#: rc_option_editor.cc:1055
msgid ""
@@ -9163,23 +9264,26 @@ msgid ""
"Plugins that require more time to load will be blacklisted. A value of 0 "
"disables the timeout."
msgstr ""
+"Zadejte pÅednastavenà pro pÅekroÄenà Äasu pro doloženà pÅÃdavného modulu "
+"v 1/10 sekundy. PÅÃdavné moduly, které k nahránà potÅebujà vÃce Äasu, budou "
+"umÃstÄny "
+"na Äernou listinu. Hodnota 0 pÅekroÄenà Äasu vypne."
#: rc_option_editor.cc:1057
msgid "Scan Time Out [deciseconds]"
-msgstr ""
+msgstr "Hledat pÅekroÄenà Äasu (desetiny sekundy)"
#: rc_option_editor.cc:1065
-#, fuzzy
msgid "VST"
-msgstr "ST"
+msgstr "VST"
#: rc_option_editor.cc:1071
msgid "Clear VST Cache"
-msgstr ""
+msgstr "Vyprázdnit vyrovnávacà pamÄÅ¥ VST"
#: rc_option_editor.cc:1075
msgid "Clear VST Blacklist"
-msgstr ""
+msgstr "Vyprázdnit Äernou listinu VST"
#: rc_option_editor.cc:1083
msgid ""
@@ -9187,18 +9291,22 @@ msgid ""
"cache index on application start. When disabled new plugins will only be "
"available after triggering a 'Scan' manually"
msgstr ""
+"<b>Když je povoleno</b>, jsou pÅi spuÅ¡tÄnà programu hledány nové pÅÃdavné "
+"moduly, "
+"jsou vyzkouÅ¡eny a pÅidány do rejstÅÃku vyrovnávacà pamÄti. Když je zakázáno, "
+"nové pÅÃdavné moduly jsou dostupné jen po ruÄnÄ provedeném hledánÃ."
#: rc_option_editor.cc:1086
msgid "Linux VST Path:"
-msgstr ""
+msgstr "Cesta k VST v Linuxu:"
#: rc_option_editor.cc:1093
msgid "Windows VST Path:"
-msgstr ""
+msgstr "Cesta k VST ve Windows:"
#: rc_option_editor.cc:1102
msgid "Audio Unit"
-msgstr ""
+msgstr "Audio Unit"
#: rc_option_editor.cc:1111
msgid ""
@@ -9207,22 +9315,29 @@ msgid ""
"manually. The first successful scan will enable AU auto-scan, Any crash "
"during plugin discovery will disable it."
msgstr ""
+"<b>Když je povoleno</b>, jsou pÅÃdavné moduly Audio Unit zjiÅ¡Å¥ovány pÅi "
+"spuÅ¡tÄnà programu, "
+"Když je zakázáno, pÅÃdavné moduly Audio Unit jsou dostupné jen po ruÄnÄ "
+"provedeném hledánÃ. "
+"Prvnà úspÄÅ¡né hledánà povolà automatické hledánà Audio Unit. Jakýkoli pád "
+"bÄhem zjiÅ¡Å¥ovánà "
+"pÅÃdavného modulu je hledánà zakáže."
#: rc_option_editor.cc:1114
msgid "Clear AU Cache"
-msgstr ""
+msgstr "Vyprázdnit vyrovnávacà pamÄÅ¥ AU"
#: rc_option_editor.cc:1118
msgid "Clear AU Blacklist"
-msgstr ""
+msgstr "Vyprázdnit Äernou listinu AU"
#: rc_option_editor.cc:1201
msgid "Set Windows VST Search Path"
-msgstr ""
+msgstr "Nastavit cestu k hledánà VST ve Windows"
#: rc_option_editor.cc:1216
msgid "Set Linux VST Search Path"
-msgstr ""
+msgstr "Nastavit cestu k hledánà VST v Linuxu"
#: rc_option_editor.cc:1297
msgid "%1 Preferences"
@@ -9290,7 +9405,7 @@ msgstr "Automatizace"
#: rc_option_editor.cc:1393
msgid "Thinning factor (larger value => less data)"
-msgstr "Faktor prostÅihávánà (vÄtÅ¡Ã hodnota => ménÄ dat)"
+msgstr "Násobek ztenÄovánà (vÄtÅ¡Ã hodnota => ménÄ dat)"
#: rc_option_editor.cc:1402
msgid "Automation sampling interval (milliseconds)"
@@ -9302,7 +9417,7 @@ msgstr "Udržovat zapnuté nahrávánà po zastavenà zapojeno"
#: rc_option_editor.cc:1423
msgid "Play loop is a transport mode"
-msgstr ""
+msgstr "PÅehrávánà smyÄky je pohybový režim"
#: rc_option_editor.cc:1428
msgid ""
@@ -9312,6 +9427,11 @@ msgid ""
"<b>When disabled</b> the loop button starts playing the loop, but stop then "
"cancels loop playback"
msgstr ""
+"<b>Když je povoleno</b>, tlaÄÃtko pro smyÄku nespustà pÅehrávánÃ, ale pÅinutà "
+"pÅehrávánà k tomu, aby vždy pÅehrávalo ve smyÄce.\n"
+"\n"
+"<b>Když je zakázáno</b>, tlaÄÃtko pro smyÄku spustà pÅehrávánà ve smyÄce, "
+"ale po stisknutà tlaÄÃtka Zastavit dojde ke zruÅ¡enà pÅehrávánà ve smyÄce"
#: rc_option_editor.cc:1434
msgid "Stop recording when an xrun occurs"
@@ -9348,7 +9468,7 @@ msgstr ""
#: rc_option_editor.cc:1467
msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
-msgstr ""
+msgstr "DÄlat souvislou smyÄku (nenà možné, když MTC, LTC atd. jsou hlavnÃ)"
#: rc_option_editor.cc:1472
msgid ""
@@ -9429,7 +9549,7 @@ msgstr ""
#: rc_option_editor.cc:1526
msgid "Sync lock timecode to clock - Disable drift compensation."
-msgstr ""
+msgstr "Uzamknout seÅizovánà Äasového kódu a hodin (zamezit vyrovnánà posunu)."
#: rc_option_editor.cc:1532
msgid ""
@@ -9442,6 +9562,15 @@ msgid ""
"<b>When disabled</b> %1 will compensate for potential drift, regardless if "
"the timecode sources shares clock sync."
msgstr ""
+"<b>Když je povoleno</b>, %1 nikdy nebude pÅehrávat s promÄnlivou rychlostÃ, "
+"když je seÅizován k vnÄjÅ¡Ãmu Äasovému kódu. Uzamknutà seÅizovánà "
+"ukazuje, že vybraný vnÄjÅ¡Ã zdroj Äasového kódu se zvukovým rozhranÃm "
+"sdÃlà seÅizovánà hodin (Black & Burst, Wordclock atd.) "
+"Tato volba vypÃná vyrovnávánà posunu. Rychlost pohybu je pevnÄ stanovena na "
+"1,0. Varispeed LTC se pÅehlÞà a zapÅÃÄiÅuje posun.\n"
+"\n"
+"<b>Když je zakázáno</b>, %1 bude vyrovnávat možný posun, nehledÄ na to, "
+"zda zdroje Äasového kódu sdÃlejà seÅizovánà hodin."
#: rc_option_editor.cc:1547
msgid "Lock to 29.9700 fps instead of 30000/1001"
@@ -9487,7 +9616,7 @@ msgstr "Povolit generátor LTC"
#: rc_option_editor.cc:1594
msgid "Send LTC while stopped"
-msgstr ""
+msgstr "Poslat LTC, když pÅehrávánà stojÃ"
#: rc_option_editor.cc:1600
msgid ""
@@ -9511,7 +9640,7 @@ msgstr ""
#: rc_option_editor.cc:1622
msgid "Allow dragging of playhead"
-msgstr ""
+msgstr "Povolit taženà ukazatele polohy"
#: rc_option_editor.cc:1630
msgid "Move relevant automation when audio regions are moved"
@@ -9528,7 +9657,7 @@ msgstr "Zobrazit hlavnà mÄÅiÄ v nástrojovém pruhu"
#: rc_option_editor.cc:1653
msgid "Default fade shape"
-msgstr ""
+msgstr "Výchozà tvar prolÃnánÃ"
#: rc_option_editor.cc:1672
msgid "Regions in active edit groups are edited together"
@@ -9548,7 +9677,7 @@ msgstr "UdÄlat z pružného výbÄru oblasti obdélnÃkové zapadnutà do mÅÃ
#: rc_option_editor.cc:1692
msgid "Show waveforms in regions"
-msgstr "Ukázat tvary vln v oblastech"
+msgstr "Ukázat průbÄhovou kÅivku v oblastech"
#: rc_option_editor.cc:1700
msgid "Show gain envelopes in audio regions"
@@ -9564,7 +9693,7 @@ msgstr "Pouze v režimu zesÃlenà oblasti"
#: rc_option_editor.cc:1709
msgid "Waveform scale"
-msgstr "Velikost tvaru vlny"
+msgstr "Velikost průbÄhové kÅivky"
#: rc_option_editor.cc:1714
msgid "linear"
@@ -9576,7 +9705,7 @@ msgstr "Logaritmický"
#: rc_option_editor.cc:1721
msgid "Waveform shape"
-msgstr "Podoba tvaru vlny"
+msgstr "Podoba průbÄhové kÅivky"
#: rc_option_editor.cc:1726
msgid "traditional"
@@ -9588,7 +9717,7 @@ msgstr "Narovnaná"
#: rc_option_editor.cc:1736
msgid "Show waveforms for audio while it is being recorded"
-msgstr "Ukázat tvary vln zvuku, když je nahráván"
+msgstr "Ukázat průbÄhové kÅivky zvuku, když je nahráván"
#: rc_option_editor.cc:1744
msgid "Show zoom toolbar"
@@ -9624,19 +9753,19 @@ msgstr "Automaticky projÞdÄt okno editoru pÅi taženà blÃzko jeho okrajů
#: rc_option_editor.cc:1786
msgid "After splitting selected regions, select"
-msgstr ""
+msgstr "Po rozdÄlenà vybraných oblastÃ"
#: rc_option_editor.cc:1791
msgid "no regions"
-msgstr ""
+msgstr "nevybrat žádné oblasti"
#: rc_option_editor.cc:1794
msgid "newly-created regions"
-msgstr ""
+msgstr "vybrat novÄ vytvoÅené oblasti"
#: rc_option_editor.cc:1798
msgid "existing selection and newly-created regions"
-msgstr ""
+msgstr "vybrat stávajÃcà oblast a novÄ vytvoÅené oblasti"
#: rc_option_editor.cc:1805
msgid "Buffering"
@@ -9644,15 +9773,15 @@ msgstr "Ukládánà do vyrovnávacà pamÄti"
#: rc_option_editor.cc:1813
msgid "Record monitoring handled by"
-msgstr "Sledovánà nahrávánà ÅÃzené"
+msgstr "Sledovánà nahrávánà je spravováno"
#: rc_option_editor.cc:1819
msgid "via Audio Driver"
-msgstr ""
+msgstr "pÅes ovladaÄ zvuku"
#: rc_option_editor.cc:1825
msgid "audio hardware"
-msgstr "Zvukové technické vybavenÃ"
+msgstr "zvukové technické vybavenÃ"
#: rc_option_editor.cc:1832
msgid "Tape machine mode"
@@ -9722,7 +9851,7 @@ msgstr "PoužÃt ZrudnoutKNule a NeobvykléHodnotyJsouNula"
#: rc_option_editor.cc:1926
msgid "Silence plugins when the transport is stopped"
-msgstr "ZtiÅ¡it pÅÃdavné moduly, když je pÅesun zastaven "
+msgstr "ZtiÅ¡it pÅÃdavné moduly, když je pohyb zastaven "
#: rc_option_editor.cc:1934
msgid "Make new plugins active"
@@ -9783,7 +9912,7 @@ msgstr "AFL signály pÅicházejà z"
#: rc_option_editor.cc:2009
msgid "immediately post-fader"
-msgstr "OkamžitÄ po-prolÃnaÄ"
+msgstr "OkamžitÄ po-prolÃnaÄi"
#: rc_option_editor.cc:2010
msgid "after post-fader processors (before pan)"
@@ -9823,15 +9952,15 @@ msgstr "Ztlumenà ovlivnà hlavnà výstupy"
#: rc_option_editor.cc:2074
msgid "Send Routing"
-msgstr ""
+msgstr "Vedenà odeslánÃ"
#: rc_option_editor.cc:2079
msgid "Link panners of Aux and External Sends with main panner by default"
-msgstr ""
+msgstr "Spojà vyvažovaÄe AUX a vnÄjÅ¡Ãho odeslánà s hlavnÃm vyvažovaÄem"
#: rc_option_editor.cc:2087
msgid "MIDI read-ahead time (seconds)"
-msgstr ""
+msgstr "Äas Ätenà v pÅedstihu MIDI (sekundy)"
#: rc_option_editor.cc:2105
msgid "Send MIDI Time Code"
@@ -9840,12 +9969,12 @@ msgstr "Poslat Äasový kód MIDI"
#: rc_option_editor.cc:2113
msgid "Percentage either side of normal transport speed to transmit MTC"
msgstr ""
-"Procento kterékoli strany bÄžné rychlosti pÅesunu k odeslánà Äasového kódu "
+"Procento kterékoli strany bÄžné rychlosti pohybu k odeslánà Äasového kódu "
"MIDI (MTC)"
#: rc_option_editor.cc:2122
msgid "Obey MIDI Machine Control commands"
-msgstr "Dodržovat pÅÃkazy pro ovládánà stroje MIDI"
+msgstr "PÅijÃmat pÅÃkazy pro ovládánà stroje MIDI"
#: rc_option_editor.cc:2130
msgid "Send MIDI Machine Control commands"
@@ -9881,11 +10010,11 @@ msgstr "Zahrát noty MIDI, když jsou vybrány"
#: rc_option_editor.cc:2194
msgid "Midi Audition"
-msgstr ""
+msgstr "Poslech MIDI"
#: rc_option_editor.cc:2198
msgid "Midi Audition Synth (LV2)"
-msgstr ""
+msgstr "Syntetizátor pro poslech MIDI (LV2)"
#: rc_option_editor.cc:2229 rc_option_editor.cc:2239 rc_option_editor.cc:2241
msgid "User interaction"
@@ -9934,18 +10063,23 @@ msgstr "Ukázat nástrojové rady, když myÅ¡ pÅejede nad prvkem"
#: rc_option_editor.cc:2290
msgid "Use name highlight bars in region displays (requires a restart)"
msgstr ""
+"PoužÃvat v zobrazenà oblastà barevné proužky na zvýraznÄnà názvu (vyžaduje "
+"opÄtovné spuÅ¡tÄnÃ)"
#: rc_option_editor.cc:2303
msgid "update transport clock display at FPS instead of every 100ms"
msgstr ""
+"Obnovit zobrazenà hodin pohybu v snÃmcÃch za sekundu (FPS) každých 100 ms"
#: rc_option_editor.cc:2312
msgid "Lock timeout (seconds)"
-msgstr ""
+msgstr "PÅekroÄenà Äasu uzamknutà (sekundy)"
#: rc_option_editor.cc:2320
msgid "Lock GUI after this many idle seconds (zero to never lock)"
msgstr ""
+"Uzamknout rozhranà po tolika sekundách neÄinnosti (nula, aby nikdy nedoÅ¡lo k "
+"zamknutÃ)"
#: rc_option_editor.cc:2336
msgid "Mixer Strip"
@@ -9959,7 +10093,7 @@ msgstr "PoužÃt úzké proužky ve smÄÅ¡ovaÄi jako výchozÃ"
#: rc_option_editor.cc:2400 rc_option_editor.cc:2416 rc_option_editor.cc:2430
#: rc_option_editor.cc:2444 rc_option_editor.cc:2446
msgid "Preferences|Metering"
-msgstr ""
+msgstr "NastavenÃ|Ukazatel hladiny"
#: rc_option_editor.cc:2355
msgid "Peak hold time"
@@ -10087,11 +10221,11 @@ msgstr "Styl mÄÅidla LED"
#: rc_option_editor.cc:2457
msgid "Theme"
-msgstr ""
+msgstr "Vzhled"
#: region_editor.cc:79
msgid "audition this region"
-msgstr "Poslech této oblasti"
+msgstr "Poslouchat tuto oblast"
#: region_editor.cc:88 region_layering_order_editor.cc:75
msgid "Position:"
@@ -10321,7 +10455,7 @@ msgstr "<b>SdÃlenÃ</b>"
#: route_group_dialog.cc:200
msgid "The group name is not unique. Please use a different name."
-msgstr ""
+msgstr "Název skupiny nenà jedineÄný. Použijte, prosÃm, jiný název."
#: route_params_ui.cc:84
msgid "Tracks/Busses"
@@ -10446,7 +10580,7 @@ msgstr "Nevrstvený režim"
#: route_time_axis.cc:792
msgid "Record Mode"
-msgstr ""
+msgstr "Režim nahrávánÃ"
#: route_time_axis.cc:799 route_time_axis.cc:1789
msgid "Playlist"
@@ -10552,7 +10686,7 @@ msgstr "Sledovat pÅehrávánÃ"
#: route_ui.cc:676
msgid "Not connected to AudioEngine - cannot engage record"
-msgstr ""
+msgstr "Nespojeno se zvukovým strojem - nelze zaÄÃt s nahrávánÃm"
#: route_ui.cc:875
msgid "Step Entry"
@@ -10612,11 +10746,11 @@ msgstr "ZajiÅ¡tÄné sólo"
#: route_ui.cc:1329
msgid "Pre Fader Sends"
-msgstr ""
+msgstr "Odeslánà pÅed-prolÃnaÄe"
#: route_ui.cc:1335
msgid "Post Fader Sends"
-msgstr ""
+msgstr "Odeslánà po-prolÃnaÄe"
#: route_ui.cc:1341
msgid "Control Outs"
@@ -10745,6 +10879,14 @@ msgid ""
"%3Use the User Interaction tab of the Preferences window if you want to "
"change this%4"
msgstr ""
+"ID dálkového ovládánà %5 je: %2\n"
+"\n"
+"\n"
+"ID dálkového ovládánà jsou v souÄasnosti urÄeny poÅadÃm stopy/sbÄrnice v %6\n"
+"\n"
+"\n"
+"%3Použijte kartu Uživatelská interakce v oknÄ pro nastavenÃ, pokud to chcete "
+"zmÄnit%4"
#: route_ui.cc:2046
msgid ""
@@ -10760,7 +10902,7 @@ msgstr "KlepnÄte pro ukázánà kanálů pro obrácenà (otoÄenà fáze)"
#: search_path_option.cc:35
msgid "Select folder to search for media"
-msgstr "Vybrat složku, v nÞ se majà hledat soubory"
+msgstr "Vybrat složku, v nÞ se má hledat materiál"
#: search_path_option.cc:44
msgid "Click to add a new location"
@@ -10776,11 +10918,11 @@ msgstr "Poslat "
#: session_dialog.cc:61
msgid "Session Setup"
-msgstr ""
+msgstr "ZÅÃzenà sezenÃ"
#: session_dialog.cc:66
msgid "Advanced options ..."
-msgstr ""
+msgstr "PokroÄilé volby..."
#: session_dialog.cc:263
msgid "New Session"
@@ -10800,7 +10942,7 @@ msgstr "Vzorkovacà kmitoÄet"
#: session_dialog.cc:325
msgid "Disk Format"
-msgstr ""
+msgstr "Formát souboru"
#: session_dialog.cc:343
msgid "Select session file"
@@ -10808,7 +10950,7 @@ msgstr "Vybrat soubor se sezenÃm"
#: session_dialog.cc:358
msgid "Other Sessions"
-msgstr ""
+msgstr "Jiná sezenÃ"
#: session_dialog.cc:384
msgid "Open"
@@ -10836,15 +10978,15 @@ msgstr "Žádná pÅedloha"
#: session_dialog.cc:663 session_dialog.cc:699
msgid "32 bit float"
-msgstr ""
+msgstr "32 bit float"
#: session_dialog.cc:666 session_dialog.cc:702
msgid "24 bit"
-msgstr ""
+msgstr "24 bit"
#: session_dialog.cc:669 session_dialog.cc:705
msgid "16 bit"
-msgstr ""
+msgstr "16 bit"
#: session_dialog.cc:747 session_dialog.cc:748 session_dialog.cc:749
msgid "channels"
@@ -10914,19 +11056,19 @@ msgstr "TÃmto dojde k výbÄru vÅ¡ech prvků tohoto typu!"
#: session_metadata_dialog.cc:285
msgid "EAN Check digit OK"
-msgstr ""
+msgstr "Kontrolnà ÄÃslice EAN OK"
#: session_metadata_dialog.cc:289
msgid "EAN Check digit error"
-msgstr ""
+msgstr "Chyba kontrolnà ÄÃslice EAN"
#: session_metadata_dialog.cc:289
msgid "expected"
-msgstr ""
+msgstr "oÄekáváno"
#: session_metadata_dialog.cc:294
msgid "EAN Length error"
-msgstr ""
+msgstr "Chyba v délce EAN"
#: session_metadata_dialog.cc:423
msgid "Field"
@@ -11026,7 +11168,7 @@ msgstr "ISRC"
#: session_metadata_dialog.cc:733
msgid "EAN barcode"
-msgstr ""
+msgstr "Äárový kód EAN"
#: session_metadata_dialog.cc:746
msgid "People"
@@ -11205,14 +11347,17 @@ msgid ""
"Use Video File's FPS Instead of Timecode Value for Timeline and Video "
"Monitor."
msgstr ""
-"PoužÃt FPS videosouboru namÃsto hodnoty Äasového kódu pro Äasovou osu a "
-"sledovánà videa."
+"PoužÃt FPS souboru s obrazovým záznamem namÃsto hodnoty Äasového kódu pro "
+"Äasovou osu a "
+"sledovánà obrazového záznamu."
#: session_option_editor.cc:91
msgid ""
"Apply Pull-Up/Down to Video Timeline and Video Monitor (Unless using JACK-"
"sync)."
msgstr ""
+"PoužÃt vytaženà nahoru/staženà dolů na Äasovou osu videa a sledovánà videa "
+"(jestliže nenà použÃváno JACK-sync)."
#: session_option_editor.cc:96
msgid "Ext Timecode Offsets"
@@ -11238,7 +11383,7 @@ msgstr ""
#: session_option_editor.cc:124
msgid "JACK Transport/Time Settings"
-msgstr "Nastavenà pÅesun/Äas pro JACK"
+msgstr "Nastavenà pohyb/Äas pro JACK"
#: session_option_editor.cc:128
msgid ""
@@ -11266,7 +11411,7 @@ msgstr "Slábnutà oblastà viditelné"
#: session_option_editor.cc:160 session_option_editor.cc:173
#: session_option_editor.cc:187
msgid "Media"
-msgstr "Hudebnà soubory"
+msgstr "Soubory"
#: session_option_editor.cc:160
msgid "Audio file format"
@@ -11314,37 +11459,37 @@ msgstr "Zvukové soubory hledat v:"
#: session_option_editor.cc:197
msgid "Search for MIDI files in:"
-msgstr "MIDI soubory hledat v:"
+msgstr "Soubory MIDI hledat v:"
#: session_option_editor.cc:206 session_option_editor.cc:218
#: session_option_editor.cc:228 session_option_editor.cc:239
msgid "Filenames"
-msgstr ""
+msgstr "Názvy souborů"
#: session_option_editor.cc:206
msgid "File Naming"
-msgstr ""
+msgstr "Pojmenovánà souboru"
#: session_option_editor.cc:212
msgid "Prefix Track number"
-msgstr ""
+msgstr "Uvodit ÄÃslo stopy"
#: session_option_editor.cc:217
msgid ""
"Adds the current track number to the beginning of the recorded file name."
-msgstr ""
+msgstr "PÅidá nynÄjÅ¡Ã ÄÃslo stopy na zaÄátek názvu souboru nahrávky."
#: session_option_editor.cc:222
msgid "Prefix Take Name"
-msgstr ""
+msgstr "Uvodit název zábÄru"
#: session_option_editor.cc:227
msgid "Adds the Take Name to the beginning of the recorded file name."
-msgstr ""
+msgstr "PÅidá název zábÄru na zaÄátek názvu souboru nahrávky."
#: session_option_editor.cc:232
msgid "Take Name"
-msgstr ""
+msgstr "Název zábÄru"
#: session_option_editor.cc:245
msgid ""
@@ -11399,7 +11544,7 @@ msgstr "TlaÄÃtko pro sólo"
#: session_option_editor.cc:305
msgid "Monitor Buttons"
-msgstr ""
+msgstr "TlaÄÃtka sledovánÃ"
#: session_option_editor.cc:310
msgid "Name Labels"
@@ -11459,11 +11604,11 @@ msgstr "PÅilepit nové oblasti k taktům a dobám"
#: session_option_editor.cc:362
msgid "Defaults"
-msgstr ""
+msgstr "VýchozÃ"
#: session_option_editor.cc:364
msgid "Use these settings as defaults"
-msgstr ""
+msgstr "PoužÃt tato nastavenà jako výchozÃ"
#: sfdb_ui.cc:90 sfdb_ui.cc:110 sfdb_ui.cc:119
msgid "as new tracks"
@@ -11511,7 +11656,7 @@ msgstr "Soubor nelze pÅeÄÃst: %1 (%2)."
#: sfdb_ui.cc:297
msgid "<b>Midi File Information</b>"
-msgstr ""
+msgstr "<b>Informace o souboru MIDI</b>"
#: sfdb_ui.cc:458
msgid "Could not access soundfile: "
@@ -11745,7 +11890,7 @@ msgstr "<b>Kvalita pÅevodu</b>"
#: sfdb_ui.cc:1756
msgid "<b>Instrument</b>"
-msgstr ""
+msgstr "<b>Nástroj</b>"
#: sfdb_ui.cc:1768 sfdb_ui.cc:1875
msgid "Best"
@@ -11765,7 +11910,9 @@ msgstr "Co nejrychleji"
#: shuttle_control.cc:56
msgid "Shuttle speed control (Context-click for options)"
-msgstr "Pendlovat ovládánà rychlosti (klepnutà pro souvisejÃcà nabÃdku voleb)"
+msgstr ""
+"Rychlost pÅehrávánà (klepnutà pravým tlaÄÃtkem myÅ¡i pro vyvolánà nabÃdky "
+"voleb)"
#: shuttle_control.cc:174
msgid "Percent"
@@ -11807,27 +11954,27 @@ msgstr "Zastaveno"
#: soundcloud_export_selector.cc:44
msgid "User Email"
-msgstr ""
+msgstr "E-mail uživatele"
#: soundcloud_export_selector.cc:45
msgid "Password"
-msgstr ""
+msgstr "Heslo"
#: soundcloud_export_selector.cc:46
msgid "Make files public"
-msgstr ""
+msgstr "ZveÅejnit soubory"
#: soundcloud_export_selector.cc:47
msgid "Open uploaded files in browser"
-msgstr ""
+msgstr "OtevÅÃt nahrané soubory v prohlÞeÄi"
#: soundcloud_export_selector.cc:48
msgid "Make files downloadable"
-msgstr ""
+msgstr "UdÄlat soubory stahovatelné"
#: soundcloud_export_selector.cc:107
msgid "%1: %2 of %3 bytes uploaded"
-msgstr ""
+msgstr "%1: Nahráno %2 z %3 bytů"
#: splash.cc:73
msgid "%1 loading ..."
@@ -12064,11 +12211,11 @@ msgstr "Nastavit hlasitost (sÃla tónu) na forte"
#: step_entry.cc:282
msgid "Set volume (velocity) to fortissimo"
-msgstr ""
+msgstr "Nastavit hlasitost (sÃlu tónu) na fortissimo"
#: step_entry.cc:283
msgid "Set volume (velocity) to fortississimo"
-msgstr ""
+msgstr "Nastavit hlasitost (sÃlu tónu) na fortississimo"
#: step_entry.cc:331
msgid "Stack inserted notes to form a chord"
@@ -12373,7 +12520,7 @@ msgstr "Å ÃÅka"
#: strip_silence_dialog.cc:44
msgid "Strip Silence"
-msgstr "Obnažit ticho"
+msgstr "Odstranit ticho"
#: strip_silence_dialog.cc:75
msgid "Minimum length"
@@ -12397,7 +12544,7 @@ msgstr "Nota rytmu"
#: tempo_dialog.cc:44 tempo_dialog.cc:60
msgid "Tap tempo"
-msgstr ""
+msgstr "Vypleskat tempo"
#: tempo_dialog.cc:54
msgid "Edit Tempo"
@@ -12498,7 +12645,7 @@ msgstr "Kreslit plochá tlaÄÃtka"
#: theme_manager.cc:69
msgid "Blink Rec-Arm buttons"
-msgstr ""
+msgstr "TlaÄÃtko hlásÃcà pÅipravenost k nahrávánà bliká"
#: theme_manager.cc:70
msgid "Color regions using their track's color"
@@ -12506,15 +12653,15 @@ msgstr "Obarvit oblasti barvou jejich stopy"
#: theme_manager.cc:71
msgid "Show waveform clipping"
-msgstr ""
+msgstr "Ukázat pÅebuzenà průbÄhové kÅivky"
#: theme_manager.cc:73
msgid "Waveforms color gradient depth"
-msgstr ""
+msgstr "Hloubka barevného pÅechodu průbÄhové kÅivky"
#: theme_manager.cc:75
msgid "Timeline item gradient depth"
-msgstr ""
+msgstr "Hloubka barevného pÅechodu prvku Äasové osy"
#: theme_manager.cc:76
msgid "All floating windows are dialogs"
@@ -12522,27 +12669,27 @@ msgstr "Všechna plovoucà okna jsou dialogy"
#: theme_manager.cc:77
msgid "Transient windows follow front window."
-msgstr ""
+msgstr "Krátkodobá okna sledujà hlavnà okno."
#: theme_manager.cc:78
msgid "Icon Set"
-msgstr ""
+msgstr "Sada ikon"
#: theme_manager.cc:87
msgid "Object"
-msgstr "Prvek"
+msgstr "PÅedmÄt"
#: theme_manager.cc:163
msgid "Items"
-msgstr ""
+msgstr "PÅedmÄty"
#: theme_manager.cc:164
msgid "Palette"
-msgstr ""
+msgstr "Paleta"
#: theme_manager.cc:165
msgid "Transparency"
-msgstr ""
+msgstr "Průhlednost"
#: theme_manager.cc:195
msgid ""
@@ -12562,10 +12709,12 @@ msgid ""
"editor and mixer.\n"
"This requires a restart of %1 to take effect"
msgstr ""
+"Krátkodobá okna sledujà pÅi zmÄnÄ mezi editorem a smÄÅ¡ovaÄem hlavnà okno.\n"
+"Aby se toto nastavenà projevilo, je potÅeba opÄtovné spuÅ¡tÄnà %1"
#: theme_manager.cc:620
msgid "Color Palette"
-msgstr ""
+msgstr "Paleta barev"
#: time_axis_view.cc:148
msgid "Track/Bus name (double click to edit)"
@@ -12647,59 +12796,59 @@ msgstr "Zastavit nahrávánà na konci oblasti pÅepsánÃ"
#: time_selection.cc:40
msgid "programming error: request for non-existent audio range (%1)!"
-msgstr "Chyba v programovánÃ: požadavek na neexistujÃcà zvukový rozsah (%1)!"
+msgstr "Chyba v programovánÃ: Požadavek na neexistujÃcà zvukový rozsah (%1)!"
#: transform_dialog.cc:39
msgid "this note's"
-msgstr ""
+msgstr "této noty"
#: transform_dialog.cc:40
msgid "the previous note's"
-msgstr ""
+msgstr "pÅedchozà noty"
#: transform_dialog.cc:41
msgid "this note's index"
-msgstr ""
+msgstr "RejstÅÃk noty"
#: transform_dialog.cc:42
msgid "the number of notes"
-msgstr ""
+msgstr "PoÄet not"
#: transform_dialog.cc:43
msgid "exactly"
-msgstr ""
+msgstr "pÅesnÄ"
#: transform_dialog.cc:44
msgid "a random number from"
-msgstr ""
+msgstr "náhodné ÄÃslo"
#: transform_dialog.cc:55
msgid "equal steps from"
-msgstr ""
+msgstr "stejné kroky"
#: transform_dialog.cc:58
msgid "note number"
-msgstr ""
+msgstr "ÄÃslo noty"
#: transform_dialog.cc:59
msgid "velocity"
-msgstr ""
+msgstr "SÃla tónu"
#: transform_dialog.cc:60
msgid "start time"
-msgstr ""
+msgstr "PoÄátek"
#: transform_dialog.cc:61
msgid "length"
-msgstr ""
+msgstr "Délka"
#: transform_dialog.cc:82 transform_dialog.cc:113
msgid "Transform"
-msgstr ""
+msgstr "PromÄnit"
#: transform_dialog.cc:91
msgid "Set "
-msgstr ""
+msgstr "Nastavit "
#: transpose_dialog.cc:30
msgid "Transpose MIDI"
@@ -12726,27 +12875,27 @@ msgstr ""
#: ui_config.cc:177
msgid "Could not find default UI configuration file %1"
-msgstr ""
+msgstr "NepodaÅilo se najÃt výchozà soubor s nastavenÃm rozhranà %1"
#: ui_config.cc:219
msgid "Loading color file %1"
-msgstr ""
+msgstr "Nahrává se soubor s barvou '%1"
#: ui_config.cc:222
msgid "cannot read color file \"%1\""
-msgstr ""
+msgstr "Nelze pÅeÄÃst soubor s barvou \"%1\""
#: ui_config.cc:227
msgid "color file \"%1\" not loaded successfully."
-msgstr ""
+msgstr "Soubor s barvou \"%1\" se nepodaÅilo nahrát."
#: ui_config.cc:233
msgid "Color file %1 not found"
-msgstr ""
+msgstr "Soubor s barvou \"%1\" nebyl nalezen"
#: ui_config.cc:282 ui_config.cc:361
msgid "Color file %1 not saved"
-msgstr ""
+msgstr "Soubor s barvou \"%1\" nebyl neuložen"
#: ui_config.cc:317
msgid "Loading user ui configuration file %1"
@@ -12775,7 +12924,7 @@ msgstr "Soubor s nastavenÃm %1 nebyl uložen"
#: ui_config.cc:592
msgid "Color %1 not found"
-msgstr ""
+msgstr "Barva %1 nenalezena"
#: ui_config.cc:662
msgid "Unable to find UI style file %1 in search path %2. %3 will look strange"
@@ -12793,11 +12942,11 @@ msgstr "Nelze najÃt soubor XPM pro %1"
#: utils.cc:597 utils.cc:627 utils.cc:641
msgid "default"
-msgstr ""
+msgstr "VýchozÃ"
#: utils.cc:642
msgid "icon \"%1\" not found for icon set \"%2\", fallback to default"
-msgstr ""
+msgstr "Ikona \"%1\" nenalezena pro sadu ikon \"%2\", návrat na výchozÃ"
#: utils.cc:649
msgid "cannot find icon image for %1 using %2"
@@ -12809,17 +12958,17 @@ msgstr "bÄhem nahrávánà ikony s názvem %1 byla zachycena výjimka"
#: add_video_dialog.cc:54
msgid "Set Video Track"
-msgstr "Nastavit videostopu"
+msgstr "Nastavit stopu s obrazovým záznamem"
#: add_video_dialog.cc:62
msgid "Open Video Monitor Window"
-msgstr ""
+msgstr "OtevÅÃt okno pro sledovánà obrazového záznamu"
#: add_video_dialog.cc:63
msgid "Adjust Session Framerate to Match Video Framerate"
msgstr ""
"Upravit rychlost snÃmkovánà sezenà tak, aby odpovÃdala rychlosti snÃmkovánà "
-"videa"
+"obrazového záznamu"
#: add_video_dialog.cc:65
msgid "Reload docroot"
@@ -12827,11 +12976,11 @@ msgstr "Nahrát znovu docroot"
#: add_video_dialog.cc:120
msgid "Video files"
-msgstr "Videosoubory"
+msgstr "Soubory s obrazovým záznamem"
#: add_video_dialog.cc:149
msgid "<b>Video Information</b>"
-msgstr "<b>Informace o videosouboru</b>"
+msgstr "<b>Informace o obrazovém záznamu</b>"
#: add_video_dialog.cc:152
msgid "Start:"
@@ -12858,8 +13007,10 @@ msgid ""
"Parsing video file info failed. Is the Video Server running? Is the file "
"readable by the Video Server? Does the docroot match? Is it a video file?"
msgstr ""
-"NepodaÅilo se zpracovat informace o videosouboru. BÄžà videoserver? Je "
-"soubor Äitelný videoserverem? Souhlasà docroot? Jde o videosoubor? Je to "
+"NepodaÅilo se zpracovat informace o souboru s obrazovým záznamem. BÄžà "
+"videoserver? Je "
+"soubor Äitelný videoserverem? Souhlasà docroot? Jde o soubor s obrazovým "
+"záznamem? Je to "
"obrazový záznam?"
#: video_timeline.cc:506
@@ -12875,7 +13026,8 @@ msgid ""
"Video file's framerate is not equal to %1 session timecode's framerate: '%2' "
"vs '%3'"
msgstr ""
-"Rychlost snÃmkovánà videosouboru nenà stejná jako rychlost snÃmkovánà "
+"Rychlost snÃmkovánà souboru s obrazovým záznamem nenà stejná jako rychlost "
+"snÃmkovánà "
"Äasového kódu sezenà %1: '%2' vs '%3'"
#: video_timeline.cc:587
@@ -12884,6 +13036,9 @@ msgid ""
"means that the video server was not started by %1 and uses a different "
"document-root."
msgstr ""
+"Docroot videoserveru neodpovÃdá. %1: '%2', Videoserver: '%3'. "
+"To obvykle znamená, že videoserver nebyl %1 spuÅ¡tÄn "
+"a použÃvá jinou koÅenovou cestu k dokumentu."
#: video_timeline.cc:724
msgid ""
@@ -12894,20 +13049,30 @@ msgid ""
"\n"
"see also http://manual.ardour.org/video-timeline/setup/"
msgstr ""
+"Program pro sledovánà obrazu 'xjadeo' nebyl nalezen. Nainstalujte, prosÃm, "
+"http://xjadeo.sf.net/ "
+"(vlastnà cestu k xjadeo lze stanovit nastavenÃm promÄnné prostÅedà XJREMOTE. "
+"Má ukazovat na program, který je sluÄitelný s dálkovým ovládánÃm rozhranà "
+"xjadeo 'xjremote').\n"
+"\n"
+"PodÃvejte se také na http://manual.ardour.org/video-timeline/setup/"
#: video_timeline.cc:739
msgid "Video-monitor 'xjadeo' cannot be launched."
-msgstr ""
+msgstr "Program pro sledovánà obrazu 'xjadeo' nelze spustit"
#: video_timeline.cc:766
msgid ""
"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or "
"later. http://xjadeo.sf.net/"
msgstr ""
+"Program pro sledovánà obrazu 'xjadeo' je pÅÃliÅ¡ starý. Nainstalujte, prosÃm, "
+"xjadeo "
+"ve verzi 0.7.7 nebo novÄjÅ¡Ã. http://xjadeo.sf.net/"
#: video_monitor.cc:285
msgid "Video Monitor: File Not Found."
-msgstr "Sledovánà videa: Soubor nenalezen"
+msgstr "Sledovánà obrazového záznamu: Soubor nenalezen."
#: transcode_ffmpeg.cc:56
msgid ""
@@ -12929,7 +13094,7 @@ msgstr ""
#: transcode_video_dialog.cc:56
msgid "Transcode/Import Video File "
-msgstr "PÅekódovat/Zavést videosoubor"
+msgstr "PÅekódovat/Zavést soubor se záznamem obrazu "
#: transcode_video_dialog.cc:58
msgid "Output File:"
@@ -12949,7 +13114,7 @@ msgstr "RuÄnà potlaÄenÃ"
#: transcode_video_dialog.cc:70 export_video_dialog.cc:103
msgid "Debug Mode: Print ffmpeg command and output to stdout."
-msgstr ""
+msgstr "Režim ladÄnÃ: Zobrazà pÅÃkaz ffmpeg a výstup do stdout."
#: transcode_video_dialog.cc:107
msgid "<b>File Information</b>"
@@ -12961,12 +13126,20 @@ msgid ""
"is not possible until you install those tools. See the Log window for more "
"information."
msgstr ""
+"V tomto systému se nepodaÅilo najÃt žádný spustitelný soubor pro ffprobe nebo "
+"ffmpeg. "
+"ZavádÄnà obrazových záznamů nenÃ, dokud tyto nástroje nenainstalujete, možné. "
+"PodÃvejte se "
+"na okno se zápisem na dalšà informace."
#: transcode_video_dialog.cc:120
msgid ""
"File-info can not be read. Most likely '%1' is not a valid video-file or an "
"unsupported video codec or format."
msgstr ""
+"Informace o souboru nelze pÅeÄÃst. ZÅejmÄ '%1' nenà platným souborem se "
+"záznamem obrazu, "
+"nebo obsahuje nepodporovaný kodek obrazu nebo formát obrazu."
#: transcode_video_dialog.cc:134
msgid "FPS:"
@@ -12994,19 +13167,19 @@ msgstr "<b>Volby pro zavedenÃ</b>"
#: transcode_video_dialog.cc:181
msgid "Reference From Current Location (Previously Transcoded Files Only)"
-msgstr ""
+msgstr "Odkaz z nynÄjÅ¡Ãho umÃstÄnà (pÅedtÃm jen pro pÅekódované soubory)"
#: transcode_video_dialog.cc:183
msgid "Import/Transcode Video to Session"
-msgstr "Zavést/PÅekódovat video do sezenÃ"
+msgstr "Zavést/PÅekódovat obrazový záznam do sezenÃ"
#: transcode_video_dialog.cc:191
msgid "Do Not Import Video (Audio Import Only)"
-msgstr ""
+msgstr "NezavádÄt obrazový záznam (zavést pouze zvukový záznam)"
#: transcode_video_dialog.cc:200
msgid "Scale Video: Width = "
-msgstr "ZmÄna velikosti videa: Å ÃÅka = "
+msgstr "ZmÄna velikosti obrazového záznamu: Å ÃÅka = "
#: transcode_video_dialog.cc:207
msgid "Original Width"
@@ -13022,11 +13195,11 @@ msgstr "Vytáhnout zvuk:"
#: transcode_video_dialog.cc:232
msgid "No Audio Track Present"
-msgstr ""
+msgstr "Žádná zvuková stopa pÅÃtomna"
#: transcode_video_dialog.cc:235
msgid "Do Not Extract Audio"
-msgstr ""
+msgstr "Nevytahovat zvuk"
#: transcode_video_dialog.cc:350
msgid "Extracting Audio.."
@@ -13038,7 +13211,7 @@ msgstr "Zvuk se nepodaÅilo vytáhnout."
#: transcode_video_dialog.cc:379
msgid "Transcoding Video.."
-msgstr "PÅekódovává se video..."
+msgstr "PÅekódovává se obrazový záznam..."
#: transcode_video_dialog.cc:413
msgid "Transcoding Failed."
@@ -13046,7 +13219,7 @@ msgstr "PÅekódovánà se nezdaÅilo."
#: transcode_video_dialog.cc:503
msgid "Save Transcoded Video File"
-msgstr "Uložit pÅekódovaný videosoubor"
+msgstr "Uložit pÅekódovaný soubor se záznamem obrazu"
#: video_server_dialog.cc:52
msgid "Launch Video Server"
@@ -13063,7 +13236,7 @@ msgstr "Docroot serveru:"
#: video_server_dialog.cc:61
msgid "Don't show this dialog again. (Reset in Edit->Preferences)."
msgstr ""
-"Nezobrazovat tento dialog znovu. (Nastavit znovu v Ãpravy -> NastavenÃ)."
+"Nezobrazovat tento dialog znovu. (Nastavit znovu v Ãpravy â NastavenÃ)."
#: video_server_dialog.cc:97
msgid ""
@@ -13074,6 +13247,12 @@ msgid ""
"\n"
"see also http://manual.ardour.org/video-timeline/setup/"
msgstr ""
+"VnÄjÅ¡Ã videoserver 'harvid' nelze najÃt.\n"
+"Nástroj je zahrnut v %1 vydánà ardour.org, popÅÃpadÄ "
+"jej můžete stáhnout z http://x42.github.com/harvid/ or acquire it from your "
+"distribution.\n"
+"\n"
+"PodÃvejte se také na http://manual.ardour.org/video-timeline/setup/"
#: video_server_dialog.cc:129
msgid "Listen Address:"
@@ -13093,6 +13272,10 @@ msgid ""
"The server configured in Edit -> Preferences -> Video is not reachable.\n"
"Do you want %1 to launch 'harvid' on this machine?"
msgstr ""
+"%1 potÅebuje vnÄjÅ¡Ã videoserver pro Äasovou osu videa.\n"
+"Server nastavovaný v Ãpravy â Nastavenà â Video nenà "
+"dosažitelný.\n"
+"Chcete, aby %1 spustil na tomto poÄÃtaÄi \"harvid\"?"
#: video_server_dialog.cc:189
msgid "Set Video Server Executable"
@@ -13132,19 +13315,19 @@ msgstr "Nelze vytvoÅit složku pro obrazový záznam \"%1\" (%2)"
#: export_video_dialog.cc:71
msgid "Export Video File "
-msgstr "Vyvést videosoubor "
+msgstr "Vyvést soubor s obrazovým záznamem "
#: export_video_dialog.cc:82
msgid "Video:"
-msgstr "Video:"
+msgstr "Obrazový záznam:"
#: export_video_dialog.cc:87
msgid "Scale Video (W x H):"
-msgstr "ZmÄna velikosti videa (W x H):"
+msgstr "ZmÄna velikosti obrazového záznamu (W x H):"
#: export_video_dialog.cc:88
msgid "Retain Aspect"
-msgstr ""
+msgstr "Zachovat pomÄr stran"
#: export_video_dialog.cc:93
msgid "Set Aspect Ratio:"
@@ -13174,7 +13357,7 @@ msgstr "PoužÃt [2] B-snÃmky (pouze MPEG 2 nebo 4)"
msgid "Override FPS (Default is to retain FPS from the input video file):"
msgstr ""
"PotlaÄit FPS (výchozÃm nastavenÃm je ponechánà snÃmků za sekundu (FPS) "
-"vstupnÃho videosouboru):"
+"vstupnÃho souboru s obrazovým záznamem):"
#: export_video_dialog.cc:101
msgid "Include Session Metadata"
@@ -13186,14 +13369,19 @@ msgid ""
"is not possible until you install those tools. See the Log window for more "
"information."
msgstr ""
+"V tomto systému se nepodaÅilo najÃt žádný spustitelný soubor pro ffprobe nebo "
+"ffmpeg. "
+"VyvádÄnà obrazových záznamů nenÃ, dokud tyto nástroje nenainstalujete, možné. "
+"PodÃvejte se "
+"na okno se zápisem na dalšà informace."
#: export_video_dialog.cc:130
msgid "<b>Output:</b> (file extension defines format)"
-msgstr ""
+msgstr "<b>Výstup:</b> (Souborová pÅÃpona urÄuje formát)"
#: export_video_dialog.cc:140
msgid "<b>Input Video:</b>"
-msgstr ""
+msgstr "<b>Vstupnà video:</b>"
#: export_video_dialog.cc:151
msgid "Audio:"
@@ -13242,28 +13430,28 @@ msgstr "Vzorkovacà kmitoÄet zvuku:"
#: export_video_dialog.cc:222 export_video_dialog.cc:231
#: export_video_dialog.cc:830 export_video_dialog.cc:833
msgid "(default for format)"
-msgstr ""
+msgstr "(výchozà pro formát)"
#: export_video_dialog.cc:242 export_video_dialog.cc:255
#: export_video_dialog.cc:837 export_video_dialog.cc:846
msgid "(default)"
-msgstr ""
+msgstr "(výchozÃ)"
#: export_video_dialog.cc:256 export_video_dialog.cc:840
msgid "(retain)"
-msgstr ""
+msgstr "(zachovat)"
#: export_video_dialog.cc:348
msgid "from 00:00:00:00 to the video's end"
-msgstr "od 00:00:00:00 po konec videa"
+msgstr "od 00:00:00:00 po konec obrazového záznamu"
#: export_video_dialog.cc:350
msgid "from the video's start to the video's end"
-msgstr "od zaÄátku videa po konec videa"
+msgstr "od zaÄátku obrazového záznamu po konec obrazového záznamu"
#: export_video_dialog.cc:353
msgid "Selected range"
-msgstr ""
+msgstr "Vybraný rozsah"
#: export_video_dialog.cc:589
msgid "Normalizing audio"
@@ -13282,33 +13470,37 @@ msgid ""
"Export Video: Cannot query duration of video-file, using duration from "
"timeline instead."
msgstr ""
-"Vyvedenà videa: Nelze se dotázat na dobu trvánà videosouboru. MÃsto toho se "
+"Vyvedenà obrazového záznamu: Nelze se dotázat na dobu trvánà souboru s "
+"obrazovým záznamem. MÃsto toho se "
"použÃvá doba trvánà z Äasové osy"
#: export_video_dialog.cc:735
msgid "Export Video: export-range does not include video."
-msgstr ""
+msgstr "Vyvést obrazový záznam: Rozsah k vyvedenà nezahrnuje obrazový záznam."
#: export_video_dialog.cc:748
msgid "Export Video: No Master Out Ports to Connect for Audio Export"
msgstr ""
-"Vyvedenà videa: Źádné hlavnà výstupnà pÅÃpojky k pÅipojenà pro vyvedenà zvuku"
+"Vyvedenà obrazového záznamu: Žádné hlavnà výstupnà pÅÃpojky k pÅipojenà pro "
+"vyvedenà zvuku"
#: export_video_dialog.cc:790
msgid "Encoding Video..."
-msgstr "Kóduje se video..."
+msgstr "Kóduje se obrazový záznam..."
#: export_video_dialog.cc:810
msgid "Export Video: Video input file cannot be read."
-msgstr "Vyvedenà videa: Vstupnà videosoubor nelze pÅeÄÃst."
+msgstr ""
+"Vyvedenà obrazového záznamu: Vstupnà soubor s obrazovým záznamem nelze "
+"pÅeÄÃst."
#: export_video_dialog.cc:916
msgid "Encoding Video.. Pass 1/2"
-msgstr "PÅekódovává se video... Průchod 1/2"
+msgstr "PÅekódovává se obrazový záznam... Průchod 1/2"
#: export_video_dialog.cc:928
msgid "Encoding Video.. Pass 2/2"
-msgstr "PÅekódovává se video... Průchod 2/2"
+msgstr "PÅekódovává se obrazový záznam... Průchod 2/2"
#: export_video_dialog.cc:1031
msgid "Transcoding failed."
@@ -13316,21 +13508,21 @@ msgstr "PÅekódovánà se nezdaÅilo."
#: export_video_dialog.cc:1267 export_video_dialog.cc:1287
msgid "Save Exported Video File"
-msgstr "Uložit vyvedený videosoubor"
+msgstr "Uložit vyvedený soubor s obrazovým záznamem"
#: export_video_infobox.cc:33
msgid "Video Export Info"
-msgstr "Informace o vyvedenà videa"
+msgstr "Informace o vyvedenà obrazového záznamu"
#: export_video_infobox.cc:34
msgid "Do Not Show This Dialog Again (Reset in Edit > Preferences > Video)."
msgstr ""
-"Nezobrazovat tento dialog znovu (Nastavit znovu v Ãpravy -> Nastavenà -> "
-"Video)."
+"Nezobrazovat tento dialog znovu (Nastavit znovu v Ãpravy â Nastavenà â "
+"Obraz)."
#: export_video_infobox.cc:46
msgid "<b>Video Export Info</b>"
-msgstr "<b>Informace o vyvedenà videa</b>"
+msgstr "<b>Informace o vyvedenà obrazového záznamu</b>"
#: export_video_infobox.cc:51
msgid ""
@@ -15064,7 +15256,7 @@ msgstr ""
#~ msgid "Key Mouse"
#~ msgstr "MyÅ¡ s tlaÄÃtky"
-#~ msgid "goto"
+#~ msgid "go to"
#~ msgstr "JÃt na"
#~ msgid "Center Active Marker"
@@ -15912,67 +16104,67 @@ msgstr ""
#~ msgid "Save View 2"
#~ msgstr "Uložit pohled 2"
-#~ msgid "Goto View 2"
+#~ msgid "Go to View 2"
#~ msgstr "Vyvolat pohled 2"
#~ msgid "Save View 3"
#~ msgstr "Uložit pohled 3"
-#~ msgid "Goto View 3"
+#~ msgid "Go to View 3"
#~ msgstr "Vyvolat pohled 3"
#~ msgid "Save View 4"
#~ msgstr "Uložit pohled 4"
-#~ msgid "Goto View 4"
+#~ msgid "Go to View 4"
#~ msgstr "Vyvolat pohled 4"
#~ msgid "Save View 5"
#~ msgstr "Uložit pohled 5"
-#~ msgid "Goto View 5"
+#~ msgid "Go to View 5"
#~ msgstr "Vyvolat pohled 5"
#~ msgid "Save View 6"
#~ msgstr "Uložit pohled 6"
-#~ msgid "Goto View 6"
+#~ msgid "Go to View 6"
#~ msgstr "Vyvolat pohled 6"
#~ msgid "Save View 7"
#~ msgstr "Uložit pohled 7"
-#~ msgid "Goto View 7"
+#~ msgid "Go to View 7"
#~ msgstr "Vyvolat pohled 7"
#~ msgid "Save View 8"
#~ msgstr "Uložit pohled 8"
-#~ msgid "Goto View 8"
+#~ msgid "Go to View 8"
#~ msgstr "Vyvolat pohled 8"
#~ msgid "Save View 9"
#~ msgstr "Uložit pohled 9"
-#~ msgid "Goto View 9"
+#~ msgid "Go to View 9"
#~ msgstr "Vyvolat pohled 9"
#~ msgid "Save View 10"
#~ msgstr "Uložit pohled 10"
-#~ msgid "Goto View 10"
+#~ msgid "Go to View 10"
#~ msgstr "Vyvolat pohled 10"
#~ msgid "Save View 11"
#~ msgstr "Uložit pohled 11"
-#~ msgid "Goto View 11"
+#~ msgid "Go to View 11"
#~ msgstr "Vyvolat pohled 11"
#~ msgid "Save View 12"
#~ msgstr "Uložit pohled 12"
-#~ msgid "Goto View 12"
+#~ msgid "Go to View 12"
#~ msgstr "Vyvolat pohled 12"
#~ msgid "Locate to Mark 2"
diff --git a/gtk2_ardour/po/de.po b/gtk2_ardour/po/de.po
index 8439507..2100d88 100644
--- a/gtk2_ardour/po/de.po
+++ b/gtk2_ardour/po/de.po
@@ -2137,19 +2137,19 @@ msgid "Forward (Fast)"
msgstr "Vorwärts (schnell)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Zum Nullpunkt springen"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Zum Anfang springen"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Zum Ende springen"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "Zur lokalen Uhrzeit springen"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3798,7 +3798,7 @@ msgid "Save View %1"
msgstr "Ansicht %1 speichern"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "Ansicht %1 aufrufen"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/el.po b/gtk2_ardour/po/el.po
index ed74fd3..329a1e0 100644
--- a/gtk2_ardour/po/el.po
+++ b/gtk2_ardour/po/el.po
@@ -1872,19 +1872,19 @@ msgid "Forward (Fast)"
msgstr ""
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr ""
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Πήγαινε ÏÏην ÎÏÏή"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr ""
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3510,7 +3510,7 @@ msgid "Save View %1"
msgstr ""
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr ""
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/en_GB.po b/gtk2_ardour/po/en_GB.po
index be85550..87b6b8c 100644
--- a/gtk2_ardour/po/en_GB.po
+++ b/gtk2_ardour/po/en_GB.po
@@ -1872,19 +1872,19 @@ msgid "Forward (Fast)"
msgstr ""
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr ""
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr ""
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr ""
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3510,7 +3510,7 @@ msgid "Save View %1"
msgstr ""
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr ""
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/es.po b/gtk2_ardour/po/es.po
index a596b1b..d0f6f39 100644
--- a/gtk2_ardour/po/es.po
+++ b/gtk2_ardour/po/es.po
@@ -2022,19 +2022,19 @@ msgid "Forward (Fast)"
msgstr "Adelante (Rápido)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Ir a cero"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Ir a inicio"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Ir a fin"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "Ir a hora actual"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3681,7 +3681,7 @@ msgid "Save View %1"
msgstr "Guardar vista %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "Ir a vista %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/fr.po b/gtk2_ardour/po/fr.po
index 50e94b1..b8717d9 100644
--- a/gtk2_ardour/po/fr.po
+++ b/gtk2_ardour/po/fr.po
@@ -2079,19 +2079,19 @@ msgid "Forward (Fast)"
msgstr "Avancer (rapide)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Aller à zéro"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Aller au début"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Aller à la fin"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "Aller à la toute fin"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3755,7 +3755,7 @@ msgid "Save View %1"
msgstr "Sauvegarder la vue %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "Charger la vue %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/it.po b/gtk2_ardour/po/it.po
index 00c7b66..02c2202 100644
--- a/gtk2_ardour/po/it.po
+++ b/gtk2_ardour/po/it.po
@@ -2017,19 +2017,19 @@ msgid "Forward (Fast)"
msgstr "Avanti (veloce)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Vai allo zero"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Vai all'inizio"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Vai alla fine"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3676,7 +3676,7 @@ msgid "Save View %1"
msgstr "Salva la vista %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "Vai alla vista %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/nn.po b/gtk2_ardour/po/nn.po
index 16294c4..52ae6eb 100644
--- a/gtk2_ardour/po/nn.po
+++ b/gtk2_ardour/po/nn.po
@@ -1976,19 +1976,19 @@ msgid "Forward (Fast)"
msgstr "Spol fort framover"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "GÃ¥ til null"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "GÃ¥ til starten"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "GÃ¥ til slutten"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "GÃ¥ til Veggur"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3623,7 +3623,7 @@ msgid "Save View %1"
msgstr "Lagra vising %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "GÃ¥ til vising %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/pl.po b/gtk2_ardour/po/pl.po
index a2bc839..8aede27 100644
--- a/gtk2_ardour/po/pl.po
+++ b/gtk2_ardour/po/pl.po
@@ -1894,19 +1894,19 @@ msgid "Forward (Fast)"
msgstr "PrzewiÅ do przodu (szybko)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Do punktu zerowego"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Do poczÄ
tku"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Do koÅca"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3532,7 +3532,7 @@ msgid "Save View %1"
msgstr ""
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr ""
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/pt.po b/gtk2_ardour/po/pt.po
index 13bfc4a..b57407c 100644
--- a/gtk2_ardour/po/pt.po
+++ b/gtk2_ardour/po/pt.po
@@ -1871,19 +1871,19 @@ msgid "Forward (Fast)"
msgstr ""
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr ""
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr ""
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr ""
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3510,7 +3510,7 @@ msgid "Save View %1"
msgstr ""
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr ""
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/pt_PT.po b/gtk2_ardour/po/pt_PT.po
index 0c867f7..52bb55a 100644
--- a/gtk2_ardour/po/pt_PT.po
+++ b/gtk2_ardour/po/pt_PT.po
@@ -1875,19 +1875,19 @@ msgid "Forward (Fast)"
msgstr "Avançar (rápido)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "Ir para o zero"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Ir para o inÃcio"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "Ir para o final"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr ""
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3513,7 +3513,7 @@ msgid "Save View %1"
msgstr ""
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr ""
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/ru.po b/gtk2_ardour/po/ru.po
index 6b3d99f..cf4491d 100644
--- a/gtk2_ardour/po/ru.po
+++ b/gtk2_ardour/po/ru.po
@@ -3,16 +3,15 @@
# This file is distributed under the same license as the gtk-ardour package.
#
# Igor Blinov pitstop at nm.ru, 2004.
-# ÐлекÑÐ°Ð½Ð´Ñ ÐÑокÑдин <alexandre.prokoudine at gmail.com>, 2010, 2011, 2012.
# ÐлекÑÐ°Ð½Ð´Ñ ÐолÑÑов <ag1455 at mail.ru>, 2014, 2015.
-# Alexandre Prokoudine <alexandre.prokoudine at gmail.com>, 2006, 2007, 2009, 2015.
+# Alexandre Prokoudine <alexandre.prokoudine at gmail.com>, 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: Ardour 4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-09 23:26+0300\n"
-"PO-Revision-Date: 2015-04-15 04:40+0300\n"
+"POT-Creation-Date: 2015-04-18 20:02+0300\n"
+"PO-Revision-Date: 2015-04-19 00:46+0300\n"
"Last-Translator: Alexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
"Language-Team: ÑÑÑÑкий <>\n"
"Language: ru\n"
@@ -26,7 +25,7 @@ msgstr ""
#: about.cc:125
msgid "Brian Ahr"
-msgstr "Brian Ahr, "
+msgstr "Brian Ahr"
#: about.cc:126
msgid "John Anderson"
@@ -475,13 +474,13 @@ msgstr "ШинÑ"
msgid "First"
msgstr "РнаÑало"
-#: add_route_dialog.cc:84 add_route_dialog.cc:561
-msgid "After Editor Selection"
-msgstr "ÐоÑле вÑбÑанного в ÑедакÑоÑе"
+#: add_route_dialog.cc:84 add_route_dialog.cc:563
+msgid "Before Selection"
+msgstr "ÐеÑед вÑделеннÑм"
-#: add_route_dialog.cc:85 add_route_dialog.cc:563
-msgid "After Mixer Selection"
-msgstr "ÐоÑле вÑбÑанного в микÑеÑе"
+#: add_route_dialog.cc:85 add_route_dialog.cc:561
+msgid "After Selection"
+msgstr "ÐоÑле вÑделенного"
#: add_route_dialog.cc:86
msgid "Last"
@@ -510,23 +509,23 @@ msgid "Insert:"
msgstr "ÐÑÑавиÑÑ:"
#: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306
-#: ardour_ui_ed.cc:539 engine_dialog.cc:237 rc_option_editor.cc:1805
-#: rc_option_editor.cc:1807 rc_option_editor.cc:1809 rc_option_editor.cc:1827
-#: rc_option_editor.cc:1829 rc_option_editor.cc:1837 rc_option_editor.cc:1839
-#: rc_option_editor.cc:1857 rc_option_editor.cc:1870 rc_option_editor.cc:1872
-#: rc_option_editor.cc:1874 rc_option_editor.cc:1919 rc_option_editor.cc:1921
-#: rc_option_editor.cc:1923 rc_option_editor.cc:1931 rc_option_editor.cc:1939
-#: rc_option_editor.cc:1941 rc_option_editor.cc:1949
+#: ardour_ui_ed.cc:539 engine_dialog.cc:238 rc_option_editor.cc:1797
+#: rc_option_editor.cc:1799 rc_option_editor.cc:1801 rc_option_editor.cc:1819
+#: rc_option_editor.cc:1821 rc_option_editor.cc:1829 rc_option_editor.cc:1831
+#: rc_option_editor.cc:1849 rc_option_editor.cc:1862 rc_option_editor.cc:1864
+#: rc_option_editor.cc:1866 rc_option_editor.cc:1911 rc_option_editor.cc:1913
+#: rc_option_editor.cc:1915 rc_option_editor.cc:1923 rc_option_editor.cc:1931
+#: rc_option_editor.cc:1933 rc_option_editor.cc:1941
msgid "Audio"
msgstr "ÐÑдио"
#: add_route_dialog.cc:224 add_route_dialog.cc:235 add_route_dialog.cc:307
-#: editor_actions.cc:109 engine_dialog.cc:239 missing_file_dialog.cc:56
-#: rc_option_editor.cc:2084 rc_option_editor.cc:2094 rc_option_editor.cc:2102
-#: rc_option_editor.cc:2110 rc_option_editor.cc:2119 rc_option_editor.cc:2127
-#: rc_option_editor.cc:2135 rc_option_editor.cc:2143 rc_option_editor.cc:2152
-#: rc_option_editor.cc:2161 rc_option_editor.cc:2170 rc_option_editor.cc:2178
-#: rc_option_editor.cc:2186 rc_option_editor.cc:2194 rc_option_editor.cc:2217
+#: editor_actions.cc:109 engine_dialog.cc:240 missing_file_dialog.cc:56
+#: rc_option_editor.cc:2076 rc_option_editor.cc:2086 rc_option_editor.cc:2094
+#: rc_option_editor.cc:2102 rc_option_editor.cc:2111 rc_option_editor.cc:2119
+#: rc_option_editor.cc:2127 rc_option_editor.cc:2135 rc_option_editor.cc:2144
+#: rc_option_editor.cc:2153 rc_option_editor.cc:2162 rc_option_editor.cc:2170
+#: rc_option_editor.cc:2178 rc_option_editor.cc:2186 rc_option_editor.cc:2209
msgid "MIDI"
msgstr "MIDI"
@@ -598,7 +597,7 @@ msgstr "8 каналов"
msgid "12 Channel"
msgstr "3 канала"
-#: add_route_dialog.cc:483 mixer_strip.cc:1843 mixer_strip.cc:2251
+#: add_route_dialog.cc:483 mixer_strip.cc:1855 mixer_strip.cc:2263
msgid "Custom"
msgstr "Ðа заказ"
@@ -715,8 +714,8 @@ msgstr ""
msgid "Audition"
msgstr "ÐонÑÑолÑ"
-#: ardour_ui.cc:217 editor_actions.cc:136 mixer_strip.cc:2023
-#: monitor_section.cc:357 rc_option_editor.cc:1959 route_time_axis.cc:252
+#: ardour_ui.cc:217 editor_actions.cc:136 mixer_strip.cc:2035
+#: monitor_section.cc:357 rc_option_editor.cc:1951 route_time_axis.cc:252
#: route_time_axis.cc:2707
msgid "Solo"
msgstr "Соло"
@@ -754,7 +753,7 @@ msgstr "ÐозиÑии"
msgid "Tracks and Busses"
msgstr "ÐоÑожки и ÑинÑ"
-#: ardour_ui.cc:231 engine_dialog.cc:70
+#: ardour_ui.cc:231 engine_dialog.cc:71
msgid "Audio/MIDI Setup"
msgstr "ÐаÑÑÑойка звÑка и MIDI"
@@ -929,7 +928,7 @@ msgstr "Ðе вÑÑ
одиÑÑ"
msgid "Just quit"
msgstr "ÐÑоÑÑо вÑйÑи"
-#: ardour_ui.cc:1065 ardour_ui.cc:4734
+#: ardour_ui.cc:1065 ardour_ui.cc:4727
msgid "Save and quit"
msgstr "СоÑ
ÑаниÑÑ Ð¸ вÑйÑи"
@@ -1415,27 +1414,27 @@ msgstr "ÐÑиÑеннÑе ÑайлÑ"
msgid "deleted file"
msgstr "УдалÑн Ñайл"
-#: ardour_ui.cc:3641
+#: ardour_ui.cc:3634
msgid "Video-Server was not launched by %1. The request to stop it is ignored."
msgstr "ÐидеоÑеÑÐ²ÐµÑ Ð½Ðµ бÑл запÑÑен %1. ÐапÑÐ¾Ñ ÐµÐ³Ð¾ оÑÑановки игноÑиÑÑеÑÑÑ."
-#: ardour_ui.cc:3645
+#: ardour_ui.cc:3638
msgid "Stop Video-Server"
msgstr "ÐÑÑановиÑÑ Ð²Ð¸Ð´ÐµÐ¾ÑеÑвеÑ"
-#: ardour_ui.cc:3646
+#: ardour_ui.cc:3639
msgid "Do you really want to stop the Video Server?"
msgstr "ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑиÑе оÑÑановиÑÑ Ð²Ð¸Ð´ÐµÐ¾ÑеÑвеÑ?"
-#: ardour_ui.cc:3649
+#: ardour_ui.cc:3642
msgid "Yes, Stop It"
msgstr "Ðа, оÑÑановиÑÑ"
-#: ardour_ui.cc:3675
+#: ardour_ui.cc:3668
msgid "The Video Server is already started."
msgstr "ÐидеоÑеÑÐ²ÐµÑ Ñже запÑÑен."
-#: ardour_ui.cc:3677
+#: ardour_ui.cc:3670
msgid ""
"An external Video Server is configured and can be reached. Not starting a "
"new instance."
@@ -1443,7 +1442,7 @@ msgstr ""
"ÐнеÑний видеоÑеÑÐ²ÐµÑ Ð½Ð°ÑÑÑоен и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпен, не наÑÐ¸Ð½Ð°Ñ Ð½Ð¾Ð²Ñй "
"ÑкземплÑÑ."
-#: ardour_ui.cc:3685 ardour_ui.cc:3790
+#: ardour_ui.cc:3678 ardour_ui.cc:3783
msgid ""
"Could not connect to the Video Server. Start it or configure its access URL "
"in Preferences."
@@ -1451,35 +1450,35 @@ msgstr ""
"Ðе ÑдалоÑÑ ÑоединиÑÑÑÑ Ñ Ð²Ð¸Ð´ÐµÐ¾ÑеÑвеÑом. ÐапÑÑÑиÑе его, либо ÑкажиÑе URL "
"доÑÑÑпа к Ð½ÐµÐ¼Ñ Ð² диалоге паÑамеÑÑов пÑогÑаммÑ."
-#: ardour_ui.cc:3715
+#: ardour_ui.cc:3708
msgid "Specified docroot is not an existing directory."
msgstr "Указан DOC-коÑÐµÐ½Ñ Ð½Ðµ ÑÑÑеÑÑвÑÑÑего каÑалога."
-#: ardour_ui.cc:3721 ardour_ui.cc:3727
+#: ardour_ui.cc:3714 ardour_ui.cc:3720
msgid "Given Video Server is not an executable file."
msgstr "ÐаннÑй видеоÑеÑÐ²ÐµÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð¸ÑполнÑемÑм Ñайлом."
-#: ardour_ui.cc:3761
+#: ardour_ui.cc:3754
msgid "Cannot launch the video-server"
msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð²Ð¸Ð´ÐµÐ¾ÑеÑвеÑ"
-#: ardour_ui.cc:3771
+#: ardour_ui.cc:3764
msgid "Video-server was started but does not respond to requests..."
msgstr "ÐидеоÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑен, но не оÑкликаеÑÑÑ."
-#: ardour_ui.cc:3816 editor_audio_import.cc:641
+#: ardour_ui.cc:3809 editor_audio_import.cc:641
msgid "could not open %1"
msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ %1"
-#: ardour_ui.cc:3820
+#: ardour_ui.cc:3813
msgid "no video-file selected"
msgstr "Ðе вÑбÑан видеоÑайл"
-#: ardour_ui.cc:4018
+#: ardour_ui.cc:4011
msgid "Recording was stopped because your system could not keep up."
msgstr "ÐапиÑÑ Ð¾ÑÑановлена из-за недоÑÑаÑоÑного бÑÑÑÑодейÑÑÐ²Ð¸Ñ ÑиÑÑемÑ"
-#: ardour_ui.cc:4047
+#: ardour_ui.cc:4040
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1493,23 +1492,23 @@ msgstr ""
"Ð ÑаÑÑноÑÑи ей не ÑдалоÑÑ Ð·Ð°Ð¿Ð¸ÑаÑÑ Ð´Ð°Ð½Ð½Ñе на диÑк\n"
"доÑÑаÑоÑно бÑÑÑÑо Ð´Ð»Ñ ÑикÑаÑии заÑ
ваÑеннÑÑ
даннÑÑ
.\n"
-#: ardour_ui.cc:4117
+#: ardour_ui.cc:4110
msgid "Scanning for plugins"
msgstr "СканиÑование плагинов"
-#: ardour_ui.cc:4119
+#: ardour_ui.cc:4112
msgid "Cancel plugin scan"
msgstr "ÐÑмениÑÑ ÑканиÑование плагинов"
-#: ardour_ui.cc:4128
+#: ardour_ui.cc:4121
msgid "Stop Timeout"
msgstr "Тайм-аÑÑ Ð¾ÑÑановки"
-#: ardour_ui.cc:4135
+#: ardour_ui.cc:4128
msgid "Scan Timeout"
msgstr "Тайм-аÑÑ ÑканиÑованиÑ"
-#: ardour_ui.cc:4178
+#: ardour_ui.cc:4171
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1523,11 +1522,11 @@ msgstr ""
"Ð ÑаÑÑноÑÑи ей не ÑдалоÑÑ Ð¿ÑоÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе\n"
"Ñ Ð´Ð¸Ñка доÑÑаÑоÑно бÑÑÑÑо Ð´Ð»Ñ Ð²Ð¾ÑпÑоизведениÑ.\n"
-#: ardour_ui.cc:4218
+#: ardour_ui.cc:4211
msgid "Crash Recovery"
msgstr "ÐоÑÑÑановление даннÑÑ
"
-#: ardour_ui.cc:4219
+#: ardour_ui.cc:4212
msgid ""
"This session appears to have been in the\n"
"middle of recording when %1 or\n"
@@ -1543,19 +1542,19 @@ msgstr ""
"%1 Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾ÑÑÑановиÑÑ Ð·Ð°Ð¿Ð¸ÑаннÑе даннÑе,\n"
"либо пÑоигноÑиÑоваÑÑ Ð¸Ñ
. ÐÑимиÑе ÑеÑение.\n"
-#: ardour_ui.cc:4231
+#: ardour_ui.cc:4224
msgid "Ignore crash data"
msgstr "ÐÑоигноÑиÑоваÑÑ"
-#: ardour_ui.cc:4232
+#: ardour_ui.cc:4225
msgid "Recover from crash"
msgstr "ÐоÑÑÑановиÑÑ Ð´Ð°Ð½Ð½Ñе"
-#: ardour_ui.cc:4252
+#: ardour_ui.cc:4245
msgid "Sample Rate Mismatch"
msgstr "ÐеÑовпадение ÑаÑÑÐ¾Ñ ÑÑмплиÑованиÑ"
-#: ardour_ui.cc:4253
+#: ardour_ui.cc:4246
msgid ""
"This session was created with a sample rate of %1 Hz, but\n"
"%2 is currently running at %3 Hz. If you load this session,\n"
@@ -1567,23 +1566,23 @@ msgstr ""
"ÐÑли Ð²Ñ Ð·Ð°Ð³ÑÑзиÑе ÑÑÑ ÑеÑÑиÑ, звÑковÑе даннÑе могÑÑ Ð±ÑÑÑ\n"
"воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ñ Ñ Ð½ÐµÐºÐ¾ÑÑекÑной ÑаÑÑоÑой ÑÑмплиÑованиÑ.\n"
-#: ardour_ui.cc:4262
+#: ardour_ui.cc:4255
msgid "Do not load session"
msgstr "Ðе загÑÑжаÑÑ ÑеÑÑиÑ"
-#: ardour_ui.cc:4263
+#: ardour_ui.cc:4256
msgid "Load session anyway"
msgstr "ÐÑе Ñавно загÑÑзиÑÑ"
-#: ardour_ui.cc:4290
+#: ardour_ui.cc:4283
msgid "Could not disconnect from Audio/MIDI engine"
msgstr "Ðе ÑдалоÑÑ Ð¾ÑÑоединиÑÑÑÑ Ð¾Ñ Ð°Ñдио/MIDI-подÑиÑÑемÑ."
-#: ardour_ui.cc:4307 ardour_ui.cc:4310
+#: ardour_ui.cc:4300 ardour_ui.cc:4303
msgid "Could not reconnect to the Audio/MIDI engine"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð²ÑоÑно ÑоединиÑÑÑÑ Ñ Ð°Ñдио/MIDI-подÑиÑÑемой."
-#: ardour_ui.cc:4594
+#: ardour_ui.cc:4587
msgid ""
"%4This is a session from an older version of %3%5\n"
"\n"
@@ -1609,38 +1608,38 @@ msgstr ""
"\n"
"ÐÑнÑне, иÑполÑзÑйÑе 2-Ñ
веÑÑии Ñо ÑÑаÑÑми ÑеÑÑиÑми %3"
-#: ardour_ui.cc:4703
+#: ardour_ui.cc:4696
msgid "This is a free/demo copy of %1. It has just switched to silent mode."
msgstr ""
"ÐемонÑÑÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ %1 ÑолÑко ÑÑо пеÑеклÑÑилаÑÑ Ð² беззвÑÑнÑй Ñежим."
-#: ardour_ui.cc:4709
+#: ardour_ui.cc:4702
msgid "%1 is now silent"
msgstr "%1 пеÑеклÑÑилÑÑ Ð² беззвÑÑнÑй Ñежим"
-#: ardour_ui.cc:4711
+#: ardour_ui.cc:4704
msgid ""
"Please consider paying for a copy of %1 - you can pay whatever you want."
msgstr ""
"Ðозможно, Ð²Ñ Ñ
оÑиÑе заплаÑиÑÑ Ð·Ð° ÐºÐ¾Ð¿Ð¸Ñ %1 â ÑÐµÐ½Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ Ñами."
-#: ardour_ui.cc:4712
+#: ardour_ui.cc:4705
msgid "Better yet become a subscriber - subscriptions start at US$1 per month."
msgstr "ÐÑ Ñакже можеÑе вÑбÑаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÐºÑ (Ð¾Ñ US$1 в меÑÑÑ)."
-#: ardour_ui.cc:4713
+#: ardour_ui.cc:4706
msgid "Pay for a copy (via the web)"
msgstr "ÐаплаÑиÑÑ Ð¾Ð´Ð¸Ð½ Ñаз"
-#: ardour_ui.cc:4714
+#: ardour_ui.cc:4707
msgid "Become a subscriber (via the web)"
msgstr "СÑаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑиком"
-#: ardour_ui.cc:4733
+#: ardour_ui.cc:4726
msgid "Remain silent"
msgstr "ÐÑÑавиÑÑ Ð±ÐµÐ·Ð·Ð²ÑÑнÑм"
-#: ardour_ui.cc:4735
+#: ardour_ui.cc:4728
msgid "Give me more time"
msgstr "ÐайÑе еÑÑ Ð¿Ð¾ÑабоÑаÑÑ"
@@ -1782,7 +1781,7 @@ msgstr "ÐвÑовозвÑаÑ"
msgid "Follow Edits"
msgstr "СледоваÑÑ Ð¿Ñавкам"
-#: ardour_ui2.cc:728 rc_option_editor.cc:2300
+#: ardour_ui2.cc:728 rc_option_editor.cc:2292
msgid "GUI"
msgstr "ÐнÑеÑÑейÑ"
@@ -1864,15 +1863,15 @@ msgstr "Тип Ñайла"
msgid "Sample Format"
msgstr "ФоÑÐ¼Ð°Ñ ÑÑмпла"
-#: ardour_ui_ed.cc:113 rc_option_editor.cc:2245 rc_option_editor.cc:2257
+#: ardour_ui_ed.cc:113 rc_option_editor.cc:2237 rc_option_editor.cc:2249
msgid "Control Surfaces"
msgstr "УÑÑÑойÑÑва ÑпÑавлениÑ"
-#: ardour_ui_ed.cc:114 rc_option_editor.cc:1921 rc_option_editor.cc:2264
+#: ardour_ui_ed.cc:114 rc_option_editor.cc:1913 rc_option_editor.cc:2256
msgid "Plugins"
msgstr "ÐлагинÑ"
-#: ardour_ui_ed.cc:115 rc_option_editor.cc:2351
+#: ardour_ui_ed.cc:115 rc_option_editor.cc:2343
msgid "Metering"
msgstr "ÐндикаÑоÑÑ"
@@ -2134,19 +2133,19 @@ msgid "Forward (Fast)"
msgstr "ÐеÑемоÑаÑÑ Ð²Ð¿ÐµÑÑд (бÑÑÑÑо)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "РнÑлевой оÑмеÑке"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "РнаÑалÑ"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "РконеÑ"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "Ð ÑекÑÑÐµÐ¼Ñ Ð²Ñемени"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -2197,7 +2196,7 @@ msgstr "Numpad 9"
msgid "Focus On Clock"
msgstr "ÐзмениÑÑ Ð²ÑÐµÐ¼Ñ Ð²ÑÑÑнÑÑ"
-#: ardour_ui_ed.cc:364 ardour_ui_ed.cc:373 audio_clock.cc:2091 editor.cc:258
+#: ardour_ui_ed.cc:364 ardour_ui_ed.cc:373 audio_clock.cc:2109 editor.cc:258
#: editor_actions.cc:567 editor_actions.cc:576 export_timespan_selector.cc:88
#: session_option_editor.cc:41 session_option_editor.cc:61
#: session_option_editor.cc:80 session_option_editor.cc:96
@@ -2214,7 +2213,7 @@ msgstr "ТакÑÑ Ð¸ доли"
msgid "Minutes & Seconds"
msgstr "ÐинÑÑÑ Ð¸ ÑекÑндÑ"
-#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 audio_clock.cc:2095 editor.cc:259
+#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 audio_clock.cc:2113 editor.cc:259
#: editor_actions.cc:566
msgid "Samples"
msgstr "СÑмплÑ"
@@ -2223,7 +2222,7 @@ msgstr "СÑмплÑ"
msgid "Punch In"
msgstr "ÐаÑало вÑезки"
-#: ardour_ui_ed.cc:383 mixer_strip.cc:1826 mixer_strip.cc:2014 route_ui.cc:165
+#: ardour_ui_ed.cc:383 mixer_strip.cc:1838 mixer_strip.cc:2026 route_ui.cc:165
#: time_info_box.cc:116
msgid "In"
msgstr "ÐÑ
од"
@@ -2232,7 +2231,7 @@ msgstr "ÐÑ
од"
msgid "Punch Out"
msgstr "ÐÐ¾Ð½ÐµÑ Ð²Ñезки"
-#: ardour_ui_ed.cc:387 mixer_strip.cc:1838 time_info_box.cc:117
+#: ardour_ui_ed.cc:387 mixer_strip.cc:1850 time_info_box.cc:117
msgid "Out"
msgstr "ÐÑÑ
од"
@@ -2288,7 +2287,7 @@ msgstr "ÐеÑедаваÑÑ MMC"
msgid "Use MMC"
msgstr "ÐÑполÑзоваÑÑ MMC"
-#: ardour_ui_ed.cc:438 rc_option_editor.cc:2097
+#: ardour_ui_ed.cc:438 rc_option_editor.cc:2089
msgid "Send MIDI Clock"
msgstr "ÐÑпÑавлÑÑÑ MIDI Clock"
@@ -2382,22 +2381,26 @@ msgstr "ÐÑибка в пÑогÑамме: %1"
msgid "programming error: %1 %2"
msgstr "ÐÑибка в пÑогÑамме: %1 %2"
-#: audio_clock.cc:2093 editor.cc:257 export_timespan_selector.cc:98
+#: audio_clock.cc:2111 editor.cc:257 export_timespan_selector.cc:98
msgid "Bars:Beats"
msgstr "ТакÑÑ : Ðоли"
-#: audio_clock.cc:2094 export_timespan_selector.cc:93
+#: audio_clock.cc:2112 export_timespan_selector.cc:93
msgid "Minutes:Seconds"
msgstr "ÐинÑÑÑ : СекÑндÑ"
-#: audio_clock.cc:2099
+#: audio_clock.cc:2117
msgid "Set From Playhead"
msgstr "Ðо ÑказаÑÐµÐ»Ñ Ð²Ð¾ÑпÑоизведениÑ"
-#: audio_clock.cc:2100
+#: audio_clock.cc:2118
msgid "Locate to This Time"
msgstr "ÐеÑейÑи к ÑÑой позиÑии"
+#: audio_clock.cc:2121
+msgid "Copy to clipboard"
+msgstr "СкопиÑоваÑÑ Ð² бÑÑÐµÑ Ð¾Ð±Ð¼ÐµÐ½Ð°"
+
#: audio_region_editor.cc:64 control_point_dialog.cc:49 rhythm_ferret.cc:124
#: rhythm_ferret.cc:129 rhythm_ferret.cc:134
msgid "dB"
@@ -2423,19 +2426,19 @@ msgstr "ÐÑоизводиÑÑÑ Ð²ÑÑиÑление..."
msgid "add gain control point"
msgstr "Ðобавление ÑоÑки конÑÑÐ¾Ð»Ñ ÑÑилениÑ"
-#: automation_controller.cc:286 automation_controller.cc:302
+#: automation_controller.cc:287 automation_controller.cc:303
msgid "Select Note..."
msgstr "ÐÑбÑаÑÑ Ð½Ð¾ÑÑ..."
-#: automation_controller.cc:293
+#: automation_controller.cc:294
msgid "Halve"
msgstr "Ðоловина"
-#: automation_controller.cc:296
+#: automation_controller.cc:297
msgid "Double"
msgstr "Ðвойной"
-#: automation_controller.cc:307
+#: automation_controller.cc:308
msgid "Set to %1 beat"
msgid_plural "Set to %1 beats"
msgstr[0] "СделаÑÑ ÑавнÑм %1 ÑдаÑÑ"
@@ -2546,15 +2549,15 @@ msgstr "Ðзменение пакеÑа"
msgid "Direction:"
msgstr "ÐапÑавление:"
-#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:666
-#: mixer_strip.cc:164 mixer_strip.cc:369 mixer_strip.cc:2247
-#: rc_option_editor.cc:2326
+#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:686
+#: mixer_strip.cc:164 mixer_strip.cc:369 mixer_strip.cc:2259
+#: rc_option_editor.cc:2318
msgid "Input"
msgstr "ÐÑ
од"
#: bundle_manager.cc:207 bundle_manager.cc:212 bundle_manager.cc:246
-#: engine_dialog.cc:668 mixer_strip.cc:168 mixer_strip.cc:373
-#: mixer_strip.cc:2250 rc_option_editor.cc:2330
+#: engine_dialog.cc:688 mixer_strip.cc:168 mixer_strip.cc:373
+#: mixer_strip.cc:2262 rc_option_editor.cc:2322
msgid "Output"
msgstr "ÐÑÑ
од"
@@ -2564,7 +2567,7 @@ msgid "Edit"
msgstr "ÐÑавка"
#: bundle_manager.cc:266 editor.cc:5902 editor.cc:5930 editor_actions.cc:338
-#: editor_actions.cc:339 plugin_ui.cc:420 processor_box.cc:2458
+#: editor_actions.cc:339 plugin_ui.cc:420 processor_box.cc:2460
msgid "Delete"
msgstr "УдалиÑÑ"
@@ -2889,7 +2892,7 @@ msgstr "Режим"
msgid "Markers"
msgstr "ÐаÑкеÑÑ"
-#: editor.cc:577 rc_option_editor.cc:1939
+#: editor.cc:577 rc_option_editor.cc:1931
msgid "Regions"
msgstr "ÐблаÑÑи"
@@ -2914,8 +2917,8 @@ msgstr "ÐблаÑÑи и маÑкеÑÑ"
#: rc_option_editor.cc:1667 rc_option_editor.cc:1679 rc_option_editor.cc:1681
#: rc_option_editor.cc:1689 rc_option_editor.cc:1697 rc_option_editor.cc:1717
#: rc_option_editor.cc:1729 rc_option_editor.cc:1731 rc_option_editor.cc:1733
-#: rc_option_editor.cc:1741 rc_option_editor.cc:1749 rc_option_editor.cc:1757
-#: rc_option_editor.cc:1772 rc_option_editor.cc:1776 rc_option_editor.cc:1800
+#: rc_option_editor.cc:1741 rc_option_editor.cc:1749 rc_option_editor.cc:1764
+#: rc_option_editor.cc:1768 rc_option_editor.cc:1792
msgid "Editor"
msgstr "РедакÑоÑ"
@@ -3131,15 +3134,15 @@ msgstr "СоздаÑÑ Ð²Ñделение Ð¼ÐµÐ¶Ð´Ñ ÑказаÑелем и к
msgid "Select"
msgstr "ÐÑделиÑÑ"
-#: editor.cc:1936 editor.cc:2007 editor_actions.cc:337 processor_box.cc:2451
+#: editor.cc:1936 editor.cc:2007 editor_actions.cc:337 processor_box.cc:2453
msgid "Cut"
msgstr "ÐÑÑезаÑÑ"
-#: editor.cc:1937 editor.cc:2008 editor_actions.cc:341 processor_box.cc:2454
+#: editor.cc:1937 editor.cc:2008 editor_actions.cc:341 processor_box.cc:2456
msgid "Copy"
msgstr "ÐопиÑоваÑÑ"
-#: editor.cc:1938 editor.cc:2009 editor_actions.cc:342 processor_box.cc:2462
+#: editor.cc:1938 editor.cc:2009 editor_actions.cc:342 processor_box.cc:2464
msgid "Paste"
msgstr "ÐÑÑавиÑÑ"
@@ -3427,8 +3430,8 @@ msgid "Keep Playlist"
msgstr "СоÑ
ÑаниÑÑ ÑпиÑок"
#: editor.cc:4133 editor_audio_import.cc:594 editor_ops.cc:6174
-#: engine_dialog.cc:2087 sfdb_freesound_mootcher.cc:69 processor_box.cc:2219
-#: processor_box.cc:2244
+#: engine_dialog.cc:2107 sfdb_freesound_mootcher.cc:69 processor_box.cc:2221
+#: processor_box.cc:2246
msgid "Cancel"
msgstr "ÐÑмена"
@@ -3449,7 +3452,7 @@ msgid "Please wait while %1 loads visual data."
msgstr "ÐождиÑеÑÑ Ð·Ð°Ð³ÑÑзки визÑалÑнÑÑ
даннÑÑ
в %1."
#: editor.cc:5901 editor.cc:5932 editor_markers.cc:985 panner_ui.cc:410
-#: processor_box.cc:2482
+#: processor_box.cc:2484
msgid "Edit..."
msgstr "ÐзмениÑÑ"
@@ -3559,7 +3562,7 @@ msgstr "ÐаÑамеÑÑÑ MIDI"
msgid "Misc Options"
msgstr "ÐÑоÑие паÑамеÑÑÑ"
-#: editor_actions.cc:119 rc_option_editor.cc:1809 route_group_dialog.cc:54
+#: editor_actions.cc:119 rc_option_editor.cc:1801 route_group_dialog.cc:54
#: session_option_editor.cc:243 session_option_editor.cc:250
msgid "Monitoring"
msgstr "ÐониÑоÑинг"
@@ -3736,7 +3739,7 @@ msgstr "РконÑÑ Ð¾Ð±Ð»Ð°ÑÑи"
msgid "Select All Tracks"
msgstr "ÐÑбÑаÑÑ Ð²Ñе доÑожки"
-#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2468
+#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2470
msgid "Deselect All"
msgstr "СнÑÑÑ Ð²Ñе вÑделениÑ"
@@ -3789,7 +3792,7 @@ msgid "Save View %1"
msgstr "СоÑ
ÑаниÑÑ Ð²Ð¸Ð´ %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "ÐеÑейÑи к Ð²Ð¸Ð´Ñ %1"
#: editor_actions.cc:238
@@ -4009,7 +4012,7 @@ msgid "Toggle Active"
msgstr "ÐеÑеклÑÑиÑÑ Ð°ÐºÑивноÑÑÑ"
#: editor_actions.cc:404 editor_actions.cc:1766 editor_markers.cc:921
-#: editor_markers.cc:986 editor_snapshots.cc:122 mixer_strip.cc:1550
+#: editor_markers.cc:986 editor_snapshots.cc:122 mixer_strip.cc:1560
#: route_time_axis.cc:856
msgid "Remove"
msgstr "УдалиÑÑ"
@@ -4286,7 +4289,7 @@ msgstr "Ðин:С"
msgid "Video Monitor"
msgstr "ÐидеомониÑоÑ"
-#: editor_actions.cc:572 rc_option_editor.cc:2260
+#: editor_actions.cc:572 rc_option_editor.cc:2252
msgid "Video"
msgstr "Ðидео"
@@ -4462,7 +4465,7 @@ msgstr "ÐÑикÑепиÑÑ Ðº ÑакÑам и долÑм"
msgid "Remove Sync"
msgstr "УдалиÑÑ ÑинÑ
ÑонизаÑоÑ"
-#: editor_actions.cc:1802 mixer_strip.cc:2013 monitor_section.cc:272
+#: editor_actions.cc:1802 mixer_strip.cc:2025 monitor_section.cc:272
#: monitor_section.cc:349 route_time_axis.cc:253 route_time_axis.cc:526
msgid "Mute"
msgstr "ÐолÑа"
@@ -4909,7 +4912,7 @@ msgid "Relative Gain Changes?"
msgstr "ÐÑноÑиÑелÑÐ½Ñ Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑÑилении"
#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:211
-#: mixer_strip.cc:2039 meter_strip.cc:363 route_time_axis.cc:2709
+#: mixer_strip.cc:2051 meter_strip.cc:363 route_time_axis.cc:2709
#: time_axis_view.cc:1190
msgid "Mute|M"
msgstr "Ð"
@@ -4918,7 +4921,7 @@ msgstr "Ð"
msgid "Sharing Mute?"
msgstr "РазделÑеÑÑÑ Ð»Ð¸ пÑиглÑÑение"
-#: editor_route_groups.cc:103 editor_routes.cc:212 mixer_strip.cc:2049
+#: editor_route_groups.cc:103 editor_routes.cc:212 mixer_strip.cc:2061
#: meter_strip.cc:371 route_time_axis.cc:2706
msgid "Solo|S"
msgstr "С"
@@ -5083,8 +5086,8 @@ msgstr "ÐеÑеименоваÑÑ Ð¼Ð°ÑкеÑ"
msgid "Rename Range"
msgstr "ÐеÑеименоваÑÑ Ð²Ñделение"
-#: editor_markers.cc:1419 editor_mouse.cc:2137 processor_box.cc:1994
-#: processor_box.cc:2464 route_time_axis.cc:1096 route_ui.cc:1571
+#: editor_markers.cc:1419 editor_mouse.cc:2137 processor_box.cc:1996
+#: processor_box.cc:2466 route_time_axis.cc:1096 route_ui.cc:1571
msgid "Rename"
msgstr "ÐеÑеименоваÑÑ"
@@ -5222,7 +5225,7 @@ msgstr "ÐпÑÑкание облаÑÑей вниз"
msgid "Rename Region"
msgstr "ÐеÑеименоваÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ..."
-#: editor_ops.cc:2670 processor_box.cc:1992 route_ui.cc:1569
+#: editor_ops.cc:2670 processor_box.cc:1994 route_ui.cc:1569
msgid "New name:"
msgstr "Ðовое название:"
@@ -6009,49 +6012,49 @@ msgstr "Смена вÑÑоÑÑ Ñона"
msgid "timefx cannot be started - thread creation error"
msgstr "Timefx не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑен, оÑибка пÑи Ñоздании поÑока"
-#: engine_dialog.cc:83
+#: engine_dialog.cc:84
msgid "Device Control Panel"
msgstr "ÐÐ°Ð½ÐµÐ»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑÑойÑÑвом"
-#: engine_dialog.cc:84
+#: engine_dialog.cc:85
msgid "Midi Device Setup"
-msgstr "УÑÑановки midi ÑÑÑÑойÑÑва"
+msgstr "ÐаÑÑÑойка MIDI-ÑÑÑÑойÑÑва"
-#: engine_dialog.cc:85 engine_dialog.cc:2101
+#: engine_dialog.cc:86 engine_dialog.cc:2121
msgid "Measure"
msgstr "ÐзмеÑиÑÑ"
-#: engine_dialog.cc:86
+#: engine_dialog.cc:87
msgid "Use results"
msgstr "ÐÑполÑзоваÑÑ ÑезÑлÑÑаÑÑ"
-#: engine_dialog.cc:87
+#: engine_dialog.cc:88
msgid "Back to settings ... (ignore results)"
msgstr "ÐакÑÑÑÑ Ð¸ не иÑполÑзоваÑÑ"
-#: engine_dialog.cc:88
+#: engine_dialog.cc:89
msgid "Calibrate Audio"
msgstr "ÐалибÑовка аÑдио"
-#: engine_dialog.cc:92
+#: engine_dialog.cc:93
msgid "Back to settings"
msgstr "ÐозвÑÐ°Ñ Ðº наÑÑÑойкам"
-#: engine_dialog.cc:111
+#: engine_dialog.cc:112
msgid ""
"No audio/MIDI backends detected. %1 cannot run\n"
"\n"
"(This is a build/packaging/system error. It should never happen.)"
msgstr ""
-"Ðе обнаÑÑÐ¶ÐµÐ½Ñ Ð°Ñдио/MIDI бÑкÑндÑ. %1 нелÑÐ·Ñ Ð½Ð°ÑаÑÑ\n"
+"ÐвÑковой и MIDI-движок не обнаÑÑженÑ. Ðевозможно запÑÑÑиÑÑ %1.\n"
"\n"
-"(ÐÑо оÑибка ÑбоÑки/Ñпаковки/ÑиÑÑÐµÐ¼Ñ Ð¸ никогда не должно пÑоиÑÑ
одиÑÑ.)"
+"(ÐÑо оÑибка ÑбоÑки/Ñпаковки/ÑиÑÑемÑ, она никогда не должна пÑоиÑÑ
одиÑÑ.)"
-#: engine_dialog.cc:137
+#: engine_dialog.cc:138
msgid "Latency Measurement Tool"
msgstr "ТеÑÑиÑование задеÑжки оÑклика"
-#: engine_dialog.cc:149
+#: engine_dialog.cc:150
msgid ""
"<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
"low level.</span>"
@@ -6059,81 +6062,81 @@ msgstr ""
"<span weight=\"bold\">УбеÑиÑе гÑомкоÑÑÑ Ð²ÑÑ
ода ваÑей звÑковой каÑÑÑ Ð´Ð¾ "
"минимÑма </span>"
-#: engine_dialog.cc:158
+#: engine_dialog.cc:159
msgid "Select two channels below and connect them using a cable."
msgstr "ÐÑбеÑиÑе два канала ниже и ÑоединиÑÑ Ð¸Ñ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ°Ð±ÐµÐ»Ñ"
-#: engine_dialog.cc:163
+#: engine_dialog.cc:164
msgid "Output channel"
msgstr "Ðанал вÑÑ
ода"
-#: engine_dialog.cc:171
+#: engine_dialog.cc:172
msgid "Input channel"
msgstr "Ðанал вÑ
ода"
-#: engine_dialog.cc:206
+#: engine_dialog.cc:207
msgid "Once the channels are connected, click the \"Measure\" button."
msgstr "Соединив каналÑ, нажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ Â«ÐзмеÑиÑÑ»."
-#: engine_dialog.cc:213
+#: engine_dialog.cc:214
msgid "When satisfied with the results, click the \"Use results\" button."
msgstr ""
"ÐÑли ÑезÑлÑÑÐ°Ñ Ð²Ð°Ñ ÑÑÑÑаиваеÑ, нажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ Â«ÐÑполÑзоваÑÑ ÑезÑлÑÑаÑÑ»."
-#: engine_dialog.cc:228 engine_dialog.cc:2221 engine_dialog.cc:2231
+#: engine_dialog.cc:229 engine_dialog.cc:2241 engine_dialog.cc:2251
msgid "No measurement results yet"
msgstr "Ðока Ð½ÐµÑ ÑезÑлÑÑаÑов измеÑениÑ"
-#: engine_dialog.cc:238 route_params_ui.cc:106
+#: engine_dialog.cc:239 route_params_ui.cc:106
msgid "Latency"
msgstr "ÐадеÑжка оÑклика"
-#: engine_dialog.cc:376
+#: engine_dialog.cc:396
msgid "Audio System:"
msgstr "ÐвÑÐºÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема:"
-#: engine_dialog.cc:413
+#: engine_dialog.cc:433
msgid "Driver:"
msgstr "ÐÑайвеÑ:"
-#: engine_dialog.cc:419
+#: engine_dialog.cc:439
msgid "Device:"
msgstr "УÑÑÑойÑÑво:"
-#: engine_dialog.cc:424 engine_dialog.cc:523 sfdb_ui.cc:153 sfdb_ui.cc:348
+#: engine_dialog.cc:444 engine_dialog.cc:543 sfdb_ui.cc:153 sfdb_ui.cc:348
#: sfdb_ui.cc:353
msgid "Sample rate:"
msgstr "ЧаÑÑоÑа ÑÑмплиÑованиÑ:"
-#: engine_dialog.cc:430 engine_dialog.cc:530
+#: engine_dialog.cc:450 engine_dialog.cc:550
msgid "Buffer size:"
msgstr "Ð Ð°Ð·Ð¼ÐµÑ Ð±ÑÑеÑа:"
-#: engine_dialog.cc:448
+#: engine_dialog.cc:468
msgid "Input Channels:"
msgstr "Ðаналов вÑ
ода:"
-#: engine_dialog.cc:461
+#: engine_dialog.cc:481
msgid "Output Channels:"
msgstr "Ðаналов вÑÑ
ода:"
-#: engine_dialog.cc:473
+#: engine_dialog.cc:493
msgid "Hardware input latency:"
msgstr "ÐадеÑжка аппаÑаÑнÑÑ
вÑ
одов:"
-#: engine_dialog.cc:476 engine_dialog.cc:489
+#: engine_dialog.cc:496 engine_dialog.cc:509
msgid "samples"
msgstr "ÑÑмплов"
-#: engine_dialog.cc:486
+#: engine_dialog.cc:506
msgid "Hardware output latency:"
msgstr "ÐадеÑжка аппаÑаÑнÑÑ
вÑÑ
одов:"
-#: engine_dialog.cc:497
+#: engine_dialog.cc:517
msgid "MIDI System:"
msgstr "ÐодÑиÑÑема MIDI:"
-#: engine_dialog.cc:515
+#: engine_dialog.cc:535
msgid ""
"The %1 audio backend was configured and started externally.\n"
"This limits your control over it."
@@ -6141,7 +6144,7 @@ msgstr ""
"ÐвÑÐºÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема %1 бÑла наÑÑÑоена и запÑÑена извне.\n"
"ÐÑ Ð½Ðµ ÑможеÑе полноÑÑÑÑ ÐºÐ¾Ð½ÑÑолиÑоваÑÑ ÐµÑ."
-#: engine_dialog.cc:568
+#: engine_dialog.cc:588
msgid ""
"Failed to start or connect to audio-engine.\n"
"\n"
@@ -6151,7 +6154,7 @@ msgstr ""
"\n"
"ÐалибÑовка задеÑжки ÑÑебÑÐµÑ ÑабоÑий аÑдиоинÑеÑÑейÑ."
-#: engine_dialog.cc:574
+#: engine_dialog.cc:594
msgid ""
"Your selected audio configuration is playback- or capture-only.\n"
"\n"
@@ -6161,133 +6164,133 @@ msgstr ""
"\n"
"ÐалибÑовка задеÑжки ÑÑебÑÐµÑ Ð²Ð¾ÑпÑоизведение и заÑ
ваÑ"
-#: engine_dialog.cc:655
+#: engine_dialog.cc:675
msgid "MIDI Devices"
msgstr "MIDI ÑÑÑÑойÑÑва"
-#: engine_dialog.cc:661
+#: engine_dialog.cc:681
msgid "Device"
msgstr "УÑÑÑойÑÑво"
-#: engine_dialog.cc:663
+#: engine_dialog.cc:683
msgid "Hardware Latencies"
msgstr "ÐппаÑаÑнÑе задеÑжки"
-#: engine_dialog.cc:704
+#: engine_dialog.cc:724
msgid "Calibrate"
msgstr "ÐалибÑовка"
-#: engine_dialog.cc:804
+#: engine_dialog.cc:824
msgid "all available channels"
msgstr "ÐÑе доÑÑÑпнÑе каналÑ"
-#: engine_dialog.cc:1043 latency_gui.cc:39
+#: engine_dialog.cc:1063 latency_gui.cc:39
msgid "sample"
msgid_plural "samples"
msgstr[0] "ÑÑмпл"
msgstr[1] "ÑÑмпла"
msgstr[2] "ÑÑмплов"
-#: engine_dialog.cc:1094
+#: engine_dialog.cc:1114
#, c-format
msgid "(%.1f ms)"
msgstr "(%.1f мÑ)"
-#: engine_dialog.cc:1597
+#: engine_dialog.cc:1617
msgid "Could not start backend engine %1"
msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð´Ð²Ð¸Ð¶Ð¾Ðº бекенда %1"
-#: engine_dialog.cc:1648
+#: engine_dialog.cc:1668
msgid "Cannot set driver to %1"
msgstr "Ðевозможно иÑполÑзоваÑÑ %1 в каÑеÑÑве дÑайвеÑа."
-#: engine_dialog.cc:1652
+#: engine_dialog.cc:1672
msgid "Cannot set device name to %1"
msgstr "Ðевозможно %1 в имени ÑÑÑÑойÑÑва."
-#: engine_dialog.cc:1656
+#: engine_dialog.cc:1676
msgid "Cannot set sample rate to %1"
msgstr "Ðевозможно иÑполÑзоваÑÑ %1 в ÑаÑÑоÑÑ ÑÑмплиÑованиÑ."
-#: engine_dialog.cc:1660
+#: engine_dialog.cc:1680
msgid "Cannot set buffer size to %1"
msgstr "Ðевозможно иÑполÑзоваÑÑ %1 в ÑазмеÑа бÑÑеÑа."
-#: engine_dialog.cc:1666
+#: engine_dialog.cc:1686
msgid "Cannot set input channels to %1"
msgstr "Ðе ÑдаеÑÑÑ ÑÑÑановиÑÑ Ð²Ñ
однÑе ÐºÐ°Ð½Ð°Ð»Ñ Ð² %1"
-#: engine_dialog.cc:1670
+#: engine_dialog.cc:1690
msgid "Cannot set output channels to %1"
msgstr "Ðе ÑдаеÑÑÑ ÑÑÑановиÑÑ Ð²ÑÑ
однÑе ÐºÐ°Ð½Ð°Ð»Ñ Ð² %1"
-#: engine_dialog.cc:1676
+#: engine_dialog.cc:1696
msgid "Cannot set input latency to %1"
msgstr "Ðе ÑдаеÑÑÑ ÑÑÑановиÑÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð²Ñ
ода в %1"
-#: engine_dialog.cc:1680
+#: engine_dialog.cc:1700
msgid "Cannot set output latency to %1"
msgstr "Ðе ÑдаеÑÑÑ ÑÑÑановиÑÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð²ÑÑ
ода в %1"
-#: engine_dialog.cc:1959 engine_dialog.cc:2018
+#: engine_dialog.cc:1979 engine_dialog.cc:2038
msgid "No signal detected "
msgstr "Сигнал не обнаÑÑжен"
-#: engine_dialog.cc:1972 engine_dialog.cc:2026 port_insert_ui.cc:70
+#: engine_dialog.cc:1992 engine_dialog.cc:2046 port_insert_ui.cc:70
#: port_insert_ui.cc:98
msgid "Disconnected from audio engine"
msgstr "ÐÑполнено оÑÑоединение Ð¾Ñ Ð·Ð²Ñкового движка"
-#: engine_dialog.cc:1981 engine_dialog.cc:2034
+#: engine_dialog.cc:2001 engine_dialog.cc:2054
msgid "Detected roundtrip latency: "
msgstr "ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑледÑÑÑие задеÑжки:"
-#: engine_dialog.cc:1983 engine_dialog.cc:2036
+#: engine_dialog.cc:2003 engine_dialog.cc:2056
msgid "Systemic latency: "
msgstr "СиÑÑÐµÐ¼Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑжка:"
-#: engine_dialog.cc:1990
+#: engine_dialog.cc:2010
msgid "(signal detection error)"
msgstr "(оÑибка обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ñигнала)"
-#: engine_dialog.cc:1996
+#: engine_dialog.cc:2016
msgid "(inverted - bad wiring)"
msgstr "(инвеÑÑиÑовано - плоÑ
Ð°Ñ Ð¿Ñоводка)"
-#: engine_dialog.cc:2043
+#: engine_dialog.cc:2063
msgid "(averaging)"
msgstr "(ÑÑÑеднение)"
-#: engine_dialog.cc:2049
+#: engine_dialog.cc:2069
msgid "(too large jitter)"
msgstr "(ÑлиÑком болÑÑое дÑожание)"
-#: engine_dialog.cc:2053
+#: engine_dialog.cc:2073
msgid "(large jitter)"
msgstr "(болÑÑое дÑожание)"
-#: engine_dialog.cc:2065
+#: engine_dialog.cc:2085
msgid "Timeout - large MIDI jitter."
msgstr "Тайм-аÑÑ - болÑÑой MIDI джиÑÑеÑ."
-#: engine_dialog.cc:2081 port_insert_ui.cc:134
+#: engine_dialog.cc:2101 port_insert_ui.cc:134
msgid "Detecting ..."
msgstr "ÐÑполнÑеÑÑÑ Ð¾Ð¿Ñеделение..."
-#: engine_dialog.cc:2175
+#: engine_dialog.cc:2195
msgid "Disconnect from %1"
msgstr "ÐÑÑоединиÑÑ Ð¾Ñ %1"
-#: engine_dialog.cc:2179 mixer_strip.cc:1525 route_group_dialog.cc:45
+#: engine_dialog.cc:2199 mixer_strip.cc:1525 route_group_dialog.cc:45
#: route_time_axis.cc:841
msgid "Active"
msgstr "ÐкÑивно"
-#: engine_dialog.cc:2189
+#: engine_dialog.cc:2209
msgid "Connect to %1"
msgstr "СоединиÑÑ Ñ %1"
-#: engine_dialog.cc:2194
+#: engine_dialog.cc:2214
msgid "Inactive"
msgstr "ÐеакÑивно"
@@ -6614,7 +6617,7 @@ msgstr "ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑиÑе ÑдалиÑÑ ÑÑÐ¾Ñ Ð¿
msgid "Show Times as:"
msgstr "ÐоказаÑÑ Ð²ÑÐµÐ¼Ñ ÐºÐ°Ðº:"
-#: export_timespan_selector.cc:53 processor_box.cc:2466
+#: export_timespan_selector.cc:53 processor_box.cc:2468
msgid "Select All"
msgstr "ÐÑделиÑÑ Ð²ÑÑ"
@@ -6638,7 +6641,7 @@ msgstr "getSoundResourceFile: ÐÐµÑ Ð¿ÑавилÑного коÑÐ½Ñ Ð² Ñай
msgid "getSoundResourceFile: root = %1, != response"
msgstr "getSoundResourceFile: коÑÐµÐ½Ñ = %1, != оÑвеÑ"
-#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:1824
+#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:1816
msgid "%1"
msgstr "%1"
@@ -6690,7 +6693,7 @@ msgstr "ÐÑÑ Ð°Ð²ÑомаÑизаÑиÑ"
msgid "Switches"
msgstr "ÐеÑеклÑÑаÑели"
-#: generic_pluginui.cc:260 generic_pluginui.cc:436 processor_box.cc:2440
+#: generic_pluginui.cc:260 generic_pluginui.cc:436 processor_box.cc:2442
msgid "Controls"
msgstr "УпÑавление"
@@ -7068,8 +7071,8 @@ msgid " and GCC version "
msgstr ", пÑи помоÑи GCC веÑÑии "
#: main.cc:323
-msgid "Copyright (C) 1999-2012 Paul Davis"
-msgstr "ÐвÑоÑÑкие пÑава © 1999-2012 Paul Davis"
+msgid "Copyright (C) 1999-2015 Paul Davis"
+msgstr "ÐвÑоÑÑкие пÑава (C) 1999-2015 Paul Davis"
#: main.cc:324
msgid ""
@@ -7117,7 +7120,7 @@ msgstr "ÐаÑÐºÐµÑ Ð¢ÐµÐºÑÑ"
#: midi_channel_selector.cc:161 midi_channel_selector.cc:400
#: midi_channel_selector.cc:436 rc_option_editor.cc:1573
-#: rc_option_editor.cc:2203 sfdb_ui.cc:665
+#: rc_option_editor.cc:2195 sfdb_ui.cc:665
msgid "None"
msgstr "ÐеÑ"
@@ -7668,7 +7671,7 @@ msgid "pre"
msgstr "Ðо"
#: mixer_strip.cc:98 mixer_strip.cc:127 mixer_strip.cc:374 mixer_strip.cc:1413
-#: rc_option_editor.cc:2331
+#: rc_option_editor.cc:2323
msgid "Comments"
msgstr "ÐомменÑаÑии"
@@ -7700,11 +7703,11 @@ msgstr "ÐзолиÑоваÑÑ Ñоло"
msgid "Lock Solo Status"
msgstr "СÑаÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки ÑолиÑованиÑ"
-#: mixer_strip.cc:197 mixer_strip.cc:2035
+#: mixer_strip.cc:197 mixer_strip.cc:2047
msgid "SoloLock|Lock"
msgstr "Ðлок"
-#: mixer_strip.cc:198 mixer_strip.cc:2034
+#: mixer_strip.cc:198 mixer_strip.cc:2046
msgid "Iso"
msgstr "Ðзо."
@@ -7712,15 +7715,15 @@ msgstr "Ðзо."
msgid "Mix group"
msgstr "ÐÑÑппа микÑа"
-#: mixer_strip.cc:370 rc_option_editor.cc:2327
+#: mixer_strip.cc:370 rc_option_editor.cc:2319
msgid "Phase Invert"
msgstr "ÐнвеÑÑÐ¸Ñ ÑазÑ"
-#: mixer_strip.cc:371 rc_option_editor.cc:2328
+#: mixer_strip.cc:371 rc_option_editor.cc:2320
msgid "Record & Monitor"
msgstr "ÐапиÑÑ Ð¸ мониÑоÑ"
-#: mixer_strip.cc:372 rc_option_editor.cc:2329
+#: mixer_strip.cc:372 rc_option_editor.cc:2321
msgid "Solo Iso / Lock"
msgstr "Соло Iso / Ðлок"
@@ -7736,7 +7739,7 @@ msgstr "ÐÑÑ
"
msgid "Snd"
msgstr "ÐÑл"
-#: mixer_strip.cc:779 mixer_strip.cc:882 processor_box.cc:2382
+#: mixer_strip.cc:779 mixer_strip.cc:882 processor_box.cc:2384
msgid "Not connected to audio engine - no I/O changes are possible"
msgstr ""
"ÐÐµÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñо звÑковой подÑиÑÑемой, лÑбÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ
ода-вÑÑ
ода "
@@ -7818,87 +7821,87 @@ msgstr "ÐаÑиÑаÑÑ Ð¾Ñ Ð¾Ñклонений"
msgid "Remote Control ID..."
msgstr "ID Ð´Ð»Ñ ÑдалÑнного ÑпÑавлениÑ..."
-#: mixer_strip.cc:1830
+#: mixer_strip.cc:1842
msgid "Pre"
msgstr "Ðо"
-#: mixer_strip.cc:1834
+#: mixer_strip.cc:1846
msgid "Post"
msgstr "ÐоÑле"
-#: mixer_strip.cc:1850
+#: mixer_strip.cc:1862
msgid "Meter|In"
msgstr "ÐÑ
"
-#: mixer_strip.cc:1854
+#: mixer_strip.cc:1866
msgid "Meter|Pr"
msgstr "ÐÑд"
-#: mixer_strip.cc:1858
+#: mixer_strip.cc:1870
msgid "Meter|Po"
msgstr "ÐÑл"
-#: mixer_strip.cc:1862
+#: mixer_strip.cc:1874
msgid "Meter|O"
msgstr "ÐÑÑ
"
-#: mixer_strip.cc:1867
+#: mixer_strip.cc:1879
msgid "Meter|C"
msgstr "Ð"
-#: mixer_strip.cc:2015 route_ui.cc:171
+#: mixer_strip.cc:2027 route_ui.cc:171
msgid "Disk"
msgstr "ÐиÑк"
-#: mixer_strip.cc:2027 monitor_section.cc:70
+#: mixer_strip.cc:2039 monitor_section.cc:70
msgid "AFL"
msgstr "AFL"
-#: mixer_strip.cc:2030 monitor_section.cc:71
+#: mixer_strip.cc:2042 monitor_section.cc:71
msgid "PFL"
msgstr "PFL"
-#: mixer_strip.cc:2040 meter_strip.cc:383
+#: mixer_strip.cc:2052 meter_strip.cc:383
msgid "MonitorInput|I"
msgstr "ÐÑ
"
-#: mixer_strip.cc:2041 meter_strip.cc:384
+#: mixer_strip.cc:2053 meter_strip.cc:384
msgid "MonitorDisk|D"
msgstr "Ð"
-#: mixer_strip.cc:2053 meter_strip.cc:375 route_time_axis.cc:2697
+#: mixer_strip.cc:2065 meter_strip.cc:375 route_time_axis.cc:2697
msgid "AfterFader|A"
msgstr "Ð"
-#: mixer_strip.cc:2056
+#: mixer_strip.cc:2068
msgid "Prefader|P"
msgstr "Ð"
-#: mixer_strip.cc:2061
+#: mixer_strip.cc:2073
msgid "SoloIso|I"
msgstr "Ð"
-#: mixer_strip.cc:2062
+#: mixer_strip.cc:2074
msgid "SoloLock|L"
msgstr "Ð"
-#: mixer_strip.cc:2248
+#: mixer_strip.cc:2260
msgid "Pre Fader"
msgstr "ÐÑедÑейдеÑ"
-#: mixer_strip.cc:2249
+#: mixer_strip.cc:2261
msgid "Post Fader"
msgstr "ÐоÑлеÑейдеÑ"
-#: mixer_strip.cc:2293 meter_strip.cc:851
+#: mixer_strip.cc:2305 meter_strip.cc:851
msgid "Change all in Group to %1"
msgstr "ÐоменÑÑÑ Ð²Ñе в гÑÑппе на %1"
-#: mixer_strip.cc:2295 meter_strip.cc:853
+#: mixer_strip.cc:2307 meter_strip.cc:853
msgid "Change all to %1"
msgstr "ÐоменÑÑÑ Ð²Ñе на %1"
-#: mixer_strip.cc:2297 meter_strip.cc:855
+#: mixer_strip.cc:2309 meter_strip.cc:855
msgid "Change same track-type to %1"
msgstr "ÐоменÑÑÑ Ð´Ð¾Ñожки одного Ñипа на %1"
@@ -8959,7 +8962,7 @@ msgstr "СвÑзаÑÑ ÑегÑлÑÑоÑÑ Ð¿Ð°Ð½Ð¾ÑамиÑованиÑ"
msgid "on"
msgstr "Ðкл"
-#: processor_box.cc:575 rc_option_editor.cc:2360 rc_option_editor.cc:2374
+#: processor_box.cc:575 rc_option_editor.cc:2352 rc_option_editor.cc:2366
msgid "off"
msgstr "ÐÑкл"
@@ -8971,15 +8974,15 @@ msgstr ""
"ЩелÑком пÑавой клавиÑей мÑÑи можно добавлÑÑÑ, \n"
"изменÑÑÑ Ð¸ ÑдалÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ, поÑÑлÑ, возвÑаÑÑ Ð¸ пÑ."
-#: processor_box.cc:1429 processor_box.cc:1804
+#: processor_box.cc:1431 processor_box.cc:1806
msgid "Plugin Incompatibility"
msgstr "ÐеÑовмеÑÑимоÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð²"
-#: processor_box.cc:1432
+#: processor_box.cc:1434
msgid "You attempted to add the plugin \"%1\" in slot %2.\n"
msgstr "ÐÑ Ð¿ÑÑалиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½ \"%1\" в ÑÐ»Ð¾Ñ %2.\n"
-#: processor_box.cc:1438
+#: processor_box.cc:1440
msgid ""
"\n"
"This plugin has:\n"
@@ -8987,21 +8990,21 @@ msgstr ""
"\n"
"У ÑÑого плагина:\n"
-#: processor_box.cc:1441
+#: processor_box.cc:1443
msgid "\t%1 MIDI input\n"
msgid_plural "\t%1 MIDI inputs\n"
msgstr[0] "\t%1 MIDI-вÑ
од\n"
msgstr[1] "\t%1 MIDI-вÑ
ода\n"
msgstr[2] "\t%1 MIDI-вÑ
одов\n"
-#: processor_box.cc:1445
+#: processor_box.cc:1447
msgid "\t%1 audio input\n"
msgid_plural "\t%1 audio inputs\n"
msgstr[0] "\t%1 звÑковой вÑ
од\n"
msgstr[1] "\t%1 звÑковÑÑ
вÑ
ода\n"
msgstr[2] "\t%1 звÑковÑÑ
вÑ
одов\n"
-#: processor_box.cc:1448
+#: processor_box.cc:1450
msgid ""
"\n"
"but at the insertion point, there are:\n"
@@ -9009,21 +9012,21 @@ msgstr ""
"\n"
"но в ÑоÑке вÑÑавки ÑейÑаÑ:\n"
-#: processor_box.cc:1451
+#: processor_box.cc:1453
msgid "\t%1 MIDI channel\n"
msgid_plural "\t%1 MIDI channels\n"
msgstr[0] "\t%1 MIDI-канал\n"
msgstr[1] "\t%1 MIDI-канала\n"
msgstr[2] "\t%1 MIDI-каналов\n"
-#: processor_box.cc:1455
+#: processor_box.cc:1457
msgid "\t%1 audio channel\n"
msgid_plural "\t%1 audio channels\n"
msgstr[0] "\t%1 звÑковой канал\n"
msgstr[1] "\t%1 звÑковÑÑ
канала\n"
msgstr[2] "\t%1 звÑковÑÑ
каналов\n"
-#: processor_box.cc:1458
+#: processor_box.cc:1460
msgid ""
"\n"
"%1 is unable to insert this plugin here.\n"
@@ -9031,11 +9034,11 @@ msgstr ""
"\n"
"%1 не Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑавиÑÑ ÑÑда ÑÑÐ¾Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½.\n"
-#: processor_box.cc:1495
+#: processor_box.cc:1497
msgid "Cannot set up new send: %1"
msgstr "Ðевозможно наÑÑÑоиÑÑ Ð½Ð¾Ð²Ñй поÑÑл: %1"
-#: processor_box.cc:1807
+#: processor_box.cc:1809
msgid ""
"You cannot reorder these plugins/sends/inserts\n"
"in that way because the inputs and\n"
@@ -9045,20 +9048,20 @@ msgstr ""
"поÑÑÐ»Ñ Ð¸ возвÑаÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм обÑазом, поÑколÑÐºÑ \n"
"вÑ
Ð¾Ð´Ñ Ð¸ вÑÑ
Ð¾Ð´Ñ Ð¿ÐµÑеÑÑанÑÑ ÐºÐ¾ÑÑекÑно ÑабоÑаÑÑ."
-#: processor_box.cc:1991
+#: processor_box.cc:1993
msgid "Rename Processor"
msgstr "ÐеÑеименоваÑÑ Ð¾Ð±ÑабоÑÑик"
-#: processor_box.cc:2022
+#: processor_box.cc:2024
msgid "At least 100 IO objects exist with a name like %1 - name not changed"
msgstr ""
"СÑÑеÑÑвÑÐµÑ Ð¿Ð¾ кÑайней меÑе 100 обÑекÑов IO Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, как %1 - Ð¸Ð¼Ñ Ð½Ðµ изменено"
-#: processor_box.cc:2159
+#: processor_box.cc:2161
msgid "plugin insert constructor failed"
msgstr "Сбой конÑÑÑÑкÑоÑа вÑÑавки плагина"
-#: processor_box.cc:2170
+#: processor_box.cc:2172
msgid ""
"Copying the set of processors on the clipboard failed,\n"
"probably because the I/O configuration of the plugins\n"
@@ -9068,7 +9071,7 @@ msgstr ""
"бÑÑÐµÑ Ð¾Ð±Ð¼ÐµÐ½Ð°. ÐеÑоÑÑно, конÑигÑÑаÑÐ¸Ñ Ð²Ñ
ода и вÑÑ
ода\n"
"плагинов не Ñовпала Ñ ÐºÐ¾Ð½ÑигÑÑаÑией ÑÑой доÑожки."
-#: processor_box.cc:2216
+#: processor_box.cc:2218
msgid ""
"Do you really want to remove all processors from %1?\n"
"(this cannot be undone)"
@@ -9077,15 +9080,15 @@ msgstr ""
"обÑабоÑÑики из \"%1\" ?\n"
"(оÑмена невозможна)"
-#: processor_box.cc:2220 processor_box.cc:2245
+#: processor_box.cc:2222 processor_box.cc:2247
msgid "Yes, remove them all"
msgstr "Ðа, ÑдалиÑÑ Ð¸Ñ
вÑе"
-#: processor_box.cc:2222 processor_box.cc:2247
+#: processor_box.cc:2224 processor_box.cc:2249
msgid "Remove processors"
msgstr "УдалиÑÑ Ð¾Ð±ÑабоÑÑики"
-#: processor_box.cc:2237
+#: processor_box.cc:2239
msgid ""
"Do you really want to remove all pre-fader processors from %1?\n"
"(this cannot be undone)"
@@ -9094,7 +9097,7 @@ msgstr ""
"пÑедÑейдеÑнÑе обÑабоÑÑики из \"%1\" ?\n"
"(оÑмена невозможна)"
-#: processor_box.cc:2240
+#: processor_box.cc:2242
msgid ""
"Do you really want to remove all post-fader processors from %1?\n"
"(this cannot be undone)"
@@ -9103,59 +9106,59 @@ msgstr ""
"поÑлеÑейдеÑнÑе обÑабоÑÑики из \"%1\" ?\n"
"(оÑмена невозможна)"
-#: processor_box.cc:2428
+#: processor_box.cc:2430
msgid "New Plugin"
msgstr "ÐобавиÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½"
-#: processor_box.cc:2431
+#: processor_box.cc:2433
msgid "New Insert"
msgstr "ÐобавиÑÑ Ð²Ð¾Ð·Ð²ÑаÑ"
-#: processor_box.cc:2434
+#: processor_box.cc:2436
msgid "New External Send ..."
msgstr "ÐобавиÑÑ Ð²Ð½ÐµÑний поÑÑл Ñ Ð¿Ð¾ÑÑом JACK..."
-#: processor_box.cc:2438
+#: processor_box.cc:2440
msgid "New Aux Send ..."
msgstr "ÐобавиÑÑ Ð²Ð½ÐµÑний поÑÑл без поÑÑа JACK..."
-#: processor_box.cc:2441
+#: processor_box.cc:2443
msgid "Send Options"
msgstr "ÐаÑамеÑÑÑ Ð¾ÑпÑавки"
-#: processor_box.cc:2443
+#: processor_box.cc:2445
msgid "Clear (all)"
msgstr "ÐÑиÑÑиÑÑ (вÑÑ)"
-#: processor_box.cc:2445
+#: processor_box.cc:2447
msgid "Clear (pre-fader)"
msgstr "ÐÑиÑÑиÑÑ (до ÑейдеÑа)"
-#: processor_box.cc:2447
+#: processor_box.cc:2449
msgid "Clear (post-fader)"
msgstr "ÐÑиÑÑиÑÑ (поÑле ÑейдеÑа)"
-#: processor_box.cc:2473
+#: processor_box.cc:2475
msgid "Activate All"
msgstr "ÐкÑивиÑоваÑÑ Ð²Ñе"
-#: processor_box.cc:2475
+#: processor_box.cc:2477
msgid "Deactivate All"
msgstr "ÐеакÑивиÑоваÑÑ Ð²Ñе"
-#: processor_box.cc:2477
+#: processor_box.cc:2479
msgid "A/B Plugins"
msgstr "ÐÑклÑÑиÑÑ Ð²Ñе"
-#: processor_box.cc:2486
+#: processor_box.cc:2488
msgid "Edit with generic controls..."
msgstr "ÐзмениÑÑ Ñ Ð¸Ð½ÑеÑÑейÑом Ñ
оÑÑа..."
-#: processor_box.cc:2789
+#: processor_box.cc:2791
msgid "%1: %2 (by %3)"
msgstr "%1: %2 (авÑÐ¾Ñ â %3)"
-#: processor_box.cc:2791
+#: processor_box.cc:2793
msgid "%1 (by %2)"
msgstr "%1 (на %2)"
@@ -9392,7 +9395,7 @@ msgid ""
"<b>When enabled</b> a popup window showing plugin scan progress is displayed "
"for indexing (cache load) and discovery (detect new plugins)"
msgstr ""
-"<b>Ðогда вклÑÑено,<b> вÑплÑваÑÑее окно показÑÐ²Ð°ÐµÑ Ð¿ÑогÑеÑÑ Ð¿Ð¾Ð¸Ñка и "
+"<b>Ðогда вклÑÑено,</b> вÑплÑваÑÑее окно показÑÐ²Ð°ÐµÑ Ð¿ÑогÑеÑÑ Ð¿Ð¾Ð¸Ñка и "
"индекÑаÑии звÑковÑÑ
плагинов в ÑиÑÑеме"
#: rc_option_editor.cc:1055
@@ -9427,9 +9430,9 @@ msgid ""
"cache index on application start. When disabled new plugins will only be "
"available after triggering a 'Scan' manually"
msgstr ""
-"<b>Ðогда вклÑÑено,<b> пÑи запÑÑке пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²ÑполнÑеÑÑÑ Ð¿Ð¾Ð¸Ñк, ÑеÑÑиÑование "
-"и добавление новÑÑ
плагинов VST в Ð¸Ð½Ð´ÐµÐºÑ ÐºÑÑа. Ðогда оÑклÑÑено, новÑе "
-"Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ ÑÑановÑÑÑÑ Ð´Ð¾ÑÑÑпнÑми лиÑÑ Ð¿Ð¾Ñле запÑÑка ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑÑÑнÑÑ."
+"<b>Ðогда вклÑÑено,</b> пÑи запÑÑке пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²ÑполнÑеÑÑÑ Ð¿Ð¾Ð¸Ñк, "
+"ÑеÑÑиÑование и добавление новÑÑ
плагинов VST в Ð¸Ð½Ð´ÐµÐºÑ ÐºÑÑа. Ðогда оÑклÑÑено, "
+"новÑе Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ ÑÑановÑÑÑÑ Ð´Ð¾ÑÑÑпнÑми лиÑÑ Ð¿Ð¾Ñле запÑÑка ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑÑÑнÑÑ."
#: rc_option_editor.cc:1086
msgid "Linux VST Path:"
@@ -9614,9 +9617,9 @@ msgid ""
"<b>When disabled</b> looping is done by locating back to the start of the "
"loop when %1 reaches the end which will often cause a small click or delay"
msgstr ""
-"<b>Ðогда вклÑÑено,<b> пÑи вопÑоизведении пеÑли бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ ÑпÑеждаÑÑее "
-"ÑÑение даннÑÑ
Ñ Â«Ð¾Ð±Ñеканием» в конеÑнÑÑ
ÑоÑкаÑ
Ñикла, Ñак ÑÑо ÑÑанÑпоÑÑ Ð½Ðµ "
-"бÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑаÑÑÑÑ Ð² конÑевÑÑ ÑоÑÐºÑ Ñикла.\n"
+"<b>Ðогда вклÑÑено,</b> пÑи вопÑоизведении пеÑли бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ "
+"ÑпÑеждаÑÑее ÑÑение даннÑÑ
Ñ Â«Ð¾Ð±Ñеканием» в конеÑнÑÑ
ÑоÑкаÑ
Ñикла, Ñак ÑÑо "
+"ÑÑанÑпоÑÑ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑаÑÑÑÑ Ð² конÑевÑÑ ÑоÑÐºÑ Ñикла.\n"
"\n"
"<b>Ðогда оÑклÑÑено,</b> заÑикливание бÑÐ´ÐµÑ Ð²Ñполнено пеÑемеÑением ÑказаÑÐµÐ»Ñ "
"обÑаÑно в наÑало Ñикла, когда %1 доÑÑÐ¸Ð³Ð°ÐµÑ ÐºÐ¾Ð½Ñа, ÑÑо бÑÐ´ÐµÑ ÑаÑÑо пÑиводиÑÑ "
@@ -9677,7 +9680,7 @@ msgstr ""
"<b>ÐÑли вклÑÑено,</b> ÑаÑÑоÑа видеокадÑов ÑеÑÑии бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð°, ÑÑÐ¾Ð±Ñ "
"ÑооÑвеÑÑÑвоваÑÑ ÑаÑÑоÑе, пеÑедаваемой внеÑним иÑÑоÑником ÑинÑ
ÑоÑигнала.\n"
"\n"
-"<b>ÐÑли вÑклÑÑено,</b> ÑаÑÑоÑа видеокадÑов ÑеÑÑии менÑÑÑÑÑ Ð½Ðµ бÑдеÑ. ÐмеÑÑо "
+"<b>ÐÑли вÑклÑÑено,</b> ÑаÑÑоÑа видеокадÑов ÑеÑÑии менÑÑÑÑÑ Ð½Ðµ бÑдеÑ. ÐмеÑÑо "
"ÑÑого индикаÑÐ¾Ñ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов в оÑновном ÑÑÑÑÑике бÑÐ´ÐµÑ Ð¼ÐµÑÑаÑÑ ÐºÑаÑнÑм, а "
"%1 бÑÐ´ÐµÑ ÐºÐ¾Ð½Ð²ÐµÑÑиÑоваÑÑ Ð²Ð½ÐµÑний Ñайм-код в Ñайм-код ÑеÑÑии."
@@ -9696,7 +9699,7 @@ msgid ""
"<b>When disabled</b> %1 will compensate for potential drift, regardless if "
"the timecode sources shares clock sync."
msgstr ""
-"<b>Ðогда вклÑÑено, </b> %1 не менÑÐµÑ Ð²ÑÑоÑÑ Ñона пÑи ÑÑкоÑении, бÑдÑÑи "
+"<b>Ðогда вклÑÑено,</b> %1 не менÑÐµÑ Ð²ÑÑоÑÑ Ñона пÑи ÑÑкоÑении, бÑдÑÑи "
"ведомÑм по внеÑÐ½ÐµÐ¼Ñ Ñайм-кодÑ. ÐлокиÑовка ÑинÑ
ÑонизаÑии ознаÑаеÑ, ÑÑо "
"вÑбÑаннÑй иÑÑоÑник Ñайм-кода ÑазделÑÐµÑ ÑинÑ
ÑонизаÑÐ¸Ñ ÑаÑов (Black & Burst, "
"Wordclock и Ñ.д.) Ñ Ð°ÑдиоинÑеÑÑейÑом. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾ÑклÑÑÐ°ÐµÑ ÐºÐ¾Ð¼Ð¿ÐµÐ½ÑаÑÐ¸Ñ "
@@ -9861,15 +9864,11 @@ msgstr "ÐоказÑваÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑÑ
msgid "Update editor window during drags of the summary"
msgstr "ÐбновлÑÑÑ Ð¾ÐºÐ½Ð¾ ÑедакÑоÑа пÑи изменениÑÑ
в панели Ñводки"
-#: rc_option_editor.cc:1760
-msgid "Synchronise editor and mixer selection"
-msgstr "СинÑ
ÑонизиÑоваÑÑ Ð²Ñделение в ÑедакÑоÑе и микÑеÑе"
-
-#: rc_option_editor.cc:1767
+#: rc_option_editor.cc:1759
msgid "Name new markers"
msgstr "СпÑаÑиваÑÑ Ð¾Ð± имени каждого нового маÑкеÑа"
-#: rc_option_editor.cc:1773
+#: rc_option_editor.cc:1765
msgid ""
"If enabled, popup a dialog when a new marker is created to allow its name to "
"be set as it is created.\n"
@@ -9882,277 +9881,277 @@ msgstr ""
"ÐÑ Ð²Ñегда можеÑе позднее пеÑеименоваÑÑ Ð¼Ð°ÑкеÑÑ, ÑелкнÑв по ним пÑавой "
"кнопкой мÑÑи."
-#: rc_option_editor.cc:1779
+#: rc_option_editor.cc:1771
msgid "Auto-scroll editor window when dragging near its edges"
msgstr ""
"ÐвÑомаÑиÑеÑки пÑокÑÑÑиваÑÑ Ð¾ÐºÐ½Ð¾ ÑедакÑоÑа пÑи пеÑеÑаÑкивании близко к кÑаÑм"
-#: rc_option_editor.cc:1786
+#: rc_option_editor.cc:1778
msgid "After splitting selected regions, select"
msgstr "ÐоÑле ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²ÑбÑаннÑÑ
облаÑÑей вÑбиÑаÑÑ"
-#: rc_option_editor.cc:1791
+#: rc_option_editor.cc:1783
msgid "no regions"
msgstr "Ðе вÑбиÑаÑÑ Ð¾Ð±Ð»Ð°ÑÑи"
-#: rc_option_editor.cc:1794
+#: rc_option_editor.cc:1786
msgid "newly-created regions"
msgstr "ТолÑко ÑÑо ÑозданнÑе облаÑÑи"
-#: rc_option_editor.cc:1798
+#: rc_option_editor.cc:1790
msgid "existing selection and newly-created regions"
msgstr "Ðак вÑбÑаннÑе Ñанее, Ñак и ÑолÑко ÑÑо ÑозданнÑе облаÑÑи"
-#: rc_option_editor.cc:1805
+#: rc_option_editor.cc:1797
msgid "Buffering"
msgstr "ÐÑÑеÑизаÑиÑ"
-#: rc_option_editor.cc:1813
+#: rc_option_editor.cc:1805
msgid "Record monitoring handled by"
msgstr "ÐониÑоÑинг запиÑи вÑполнÑеÑÑÑ"
-#: rc_option_editor.cc:1819
+#: rc_option_editor.cc:1811
msgid "via Audio Driver"
msgstr "ЧеÑез аÑдиодÑайвеÑ"
-#: rc_option_editor.cc:1825
+#: rc_option_editor.cc:1817
msgid "audio hardware"
msgstr "ÐппаÑаÑнÑм обеÑпеÑением"
-#: rc_option_editor.cc:1832
+#: rc_option_editor.cc:1824
msgid "Tape machine mode"
msgstr "Режим плÑноÑного магниÑоÑона"
-#: rc_option_editor.cc:1837
+#: rc_option_editor.cc:1829
msgid "Connection of tracks and busses"
msgstr "Соединение доÑожек и Ñин"
-#: rc_option_editor.cc:1842
+#: rc_option_editor.cc:1834
msgid "Auto-connect master/monitor busses"
msgstr "ÐвÑомаÑиÑеÑки ÑоединÑÑÑ ÑÐ¸Ð½Ñ master/monitor"
-#: rc_option_editor.cc:1849
+#: rc_option_editor.cc:1841
msgid "Connect track inputs"
msgstr "СоединÑÑÑ Ð²Ñ
Ð¾Ð´Ñ Ð´Ð¾Ñожек"
-#: rc_option_editor.cc:1854
+#: rc_option_editor.cc:1846
msgid "automatically to physical inputs"
msgstr "ÐвÑомаÑиÑеÑки Ñ ÑизиÑеÑкими вÑ
одами"
-#: rc_option_editor.cc:1855 rc_option_editor.cc:1868
+#: rc_option_editor.cc:1847 rc_option_editor.cc:1860
msgid "manually"
msgstr "ÐÑÑÑнÑÑ"
-#: rc_option_editor.cc:1861
+#: rc_option_editor.cc:1853
msgid "Connect track and bus outputs"
msgstr "СоединÑÑÑ Ð²ÑÑ
Ð¾Ð´Ñ Ð´Ð¾Ñожек и Ñин"
-#: rc_option_editor.cc:1866
+#: rc_option_editor.cc:1858
msgid "automatically to physical outputs"
msgstr "ÐвÑомаÑиÑеÑки Ñ ÑизиÑеÑкими вÑÑ
одами"
-#: rc_option_editor.cc:1867
+#: rc_option_editor.cc:1859
msgid "automatically to master bus"
msgstr "ÐвÑомаÑиÑеÑки Ñ Ð¾Ð±Ñей Ñиной"
-#: rc_option_editor.cc:1872
+#: rc_option_editor.cc:1864
msgid "Denormals"
msgstr "ÐÑÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ñигнала"
-#: rc_option_editor.cc:1877
+#: rc_option_editor.cc:1869
msgid "Use DC bias to protect against denormals"
msgstr "ÐÑполÑзоваÑÑ ÑмеÑение Ð´Ð»Ñ Ð·Ð°ÑиÑÑ Ð¾Ñ Ð´ÐµÐ½Ð¾ÑмализаÑии"
-#: rc_option_editor.cc:1884
+#: rc_option_editor.cc:1876
msgid "Processor handling"
msgstr "ЧÑо делаÑÑ Ñ Ð¾Ð±ÑабоÑÑиками"
-#: rc_option_editor.cc:1890
+#: rc_option_editor.cc:1882
msgid "no processor handling"
msgstr "ÐиÑего не делаÑÑ"
-#: rc_option_editor.cc:1896
+#: rc_option_editor.cc:1888
msgid "use FlushToZero"
msgstr "ÐÑполÑзоваÑÑ FlushToZero"
-#: rc_option_editor.cc:1903
+#: rc_option_editor.cc:1895
msgid "use DenormalsAreZero"
msgstr "ÐÑполÑзоваÑÑ DenormalsAreZero"
-#: rc_option_editor.cc:1910
+#: rc_option_editor.cc:1902
msgid "use FlushToZero and DenormalsAreZero"
msgstr "ÐÑполÑзоваÑÑ FlushToZero и DenormalsAreZero"
-#: rc_option_editor.cc:1926
+#: rc_option_editor.cc:1918
msgid "Silence plugins when the transport is stopped"
msgstr "ÐÑиглÑÑаÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ Ð¿Ñи оÑÑановке ÑÑанÑпоÑÑа"
-#: rc_option_editor.cc:1934
+#: rc_option_editor.cc:1926
msgid "Make new plugins active"
msgstr "ÐелаÑÑ Ð½Ð¾Ð²Ñе Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ Ð°ÐºÑивнÑми"
-#: rc_option_editor.cc:1944
+#: rc_option_editor.cc:1936
msgid "Enable automatic analysis of audio"
msgstr "ÐклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкий анализ звÑка"
-#: rc_option_editor.cc:1952
+#: rc_option_editor.cc:1944
msgid "Replicate missing region channels"
msgstr "ÐоÑÑоздаваÑÑ Ð¾ÑÑÑÑÑÑвÑÑÑие ÐºÐ°Ð½Ð°Ð»Ñ Ð¾Ð±Ð»Ð°ÑÑи"
-#: rc_option_editor.cc:1959 rc_option_editor.cc:1961 rc_option_editor.cc:1976
-#: rc_option_editor.cc:1988 rc_option_editor.cc:2000 rc_option_editor.cc:2012
-#: rc_option_editor.cc:2016 rc_option_editor.cc:2024 rc_option_editor.cc:2032
-#: rc_option_editor.cc:2040 rc_option_editor.cc:2042 rc_option_editor.cc:2050
-#: rc_option_editor.cc:2058 rc_option_editor.cc:2066 rc_option_editor.cc:2074
-#: rc_option_editor.cc:2076
+#: rc_option_editor.cc:1951 rc_option_editor.cc:1953 rc_option_editor.cc:1968
+#: rc_option_editor.cc:1980 rc_option_editor.cc:1992 rc_option_editor.cc:2004
+#: rc_option_editor.cc:2008 rc_option_editor.cc:2016 rc_option_editor.cc:2024
+#: rc_option_editor.cc:2032 rc_option_editor.cc:2034 rc_option_editor.cc:2042
+#: rc_option_editor.cc:2050 rc_option_editor.cc:2058 rc_option_editor.cc:2066
+#: rc_option_editor.cc:2068
msgid "Solo / mute"
msgstr "Соло/ÐÑиглÑÑение"
-#: rc_option_editor.cc:1964
+#: rc_option_editor.cc:1956
msgid "Solo-in-place mute cut (dB)"
msgstr "ÐÑиглÑÑение Ñигнала пÑи ÑолиÑовании (dB)"
-#: rc_option_editor.cc:1971
+#: rc_option_editor.cc:1963
msgid "Solo controls are Listen controls"
msgstr "УпÑавление ÑолиÑованием ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº ÑпÑавление пÑоÑлÑÑиванием"
-#: rc_option_editor.cc:1980
+#: rc_option_editor.cc:1972
msgid "Listen Position"
msgstr "Ðоложение пÑоÑлÑÑиваниÑ"
-#: rc_option_editor.cc:1985
+#: rc_option_editor.cc:1977
msgid "after-fader (AFL)"
msgstr "ÐоÑле ÑейдеÑа (AFL)"
-#: rc_option_editor.cc:1986
+#: rc_option_editor.cc:1978
msgid "pre-fader (PFL)"
msgstr "Ðо ÑейдеÑа (PFL)"
-#: rc_option_editor.cc:1992
+#: rc_option_editor.cc:1984
msgid "PFL signals come from"
msgstr "ÐÑÑоÑник Ñигнала PFL"
-#: rc_option_editor.cc:1997
+#: rc_option_editor.cc:1989
msgid "before pre-fader processors"
msgstr "Ðо поÑлеÑейдеÑнÑÑ
обÑабоÑÑиков"
-#: rc_option_editor.cc:1998
+#: rc_option_editor.cc:1990
msgid "pre-fader but after pre-fader processors"
msgstr "Ðо ÑейдеÑа, но поÑле пÑедÑейдеÑнÑÑ
обÑабоÑÑиков"
-#: rc_option_editor.cc:2004
+#: rc_option_editor.cc:1996
msgid "AFL signals come from"
msgstr "ÐÑÑоÑник Ñигнала AFL"
-#: rc_option_editor.cc:2009
+#: rc_option_editor.cc:2001
msgid "immediately post-fader"
msgstr "СÑÐ°Ð·Ñ Ð¿Ð¾Ñле ÑейдеÑа"
-#: rc_option_editor.cc:2010
+#: rc_option_editor.cc:2002
msgid "after post-fader processors (before pan)"
msgstr "Ðа поÑлеÑейдеÑнÑми обÑабоÑÑиками и до паноÑамиÑованиÑ"
-#: rc_option_editor.cc:2019
+#: rc_option_editor.cc:2011
msgid "Exclusive solo"
msgstr "ÐкÑклÑзивное ÑолиÑование"
-#: rc_option_editor.cc:2027
+#: rc_option_editor.cc:2019
msgid "Show solo muting"
msgstr "ÐоказÑваÑÑ Ð¿ÑиглÑÑение пÑи ÑолиÑовании"
-#: rc_option_editor.cc:2035
+#: rc_option_editor.cc:2027
msgid "Soloing overrides muting"
msgstr "СолиÑование пÑиоÑиÑеÑнее пÑиглÑÑениÑ"
-#: rc_option_editor.cc:2040
+#: rc_option_editor.cc:2032
msgid "Default track / bus muting options"
msgstr "ÐÑиглÑÑение доÑожек и Ñин по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°ÑÑагиваеÑ"
-#: rc_option_editor.cc:2045
+#: rc_option_editor.cc:2037
msgid "Mute affects pre-fader sends"
msgstr "ÐÑедÑейдеÑнÑе поÑÑлÑ"
-#: rc_option_editor.cc:2053
+#: rc_option_editor.cc:2045
msgid "Mute affects post-fader sends"
msgstr "ÐоÑлеÑейдеÑнÑе поÑÑлÑ"
-#: rc_option_editor.cc:2061
+#: rc_option_editor.cc:2053
msgid "Mute affects control outputs"
msgstr "ÐÑÑ
Ð¾Ð´Ñ Ð¼Ð¾Ð½Ð¸ÑоÑинга"
-#: rc_option_editor.cc:2069
+#: rc_option_editor.cc:2061
msgid "Mute affects main outputs"
msgstr "ÐÑновнÑе вÑÑ
одÑ"
-#: rc_option_editor.cc:2074
+#: rc_option_editor.cc:2066
msgid "Send Routing"
msgstr "ÐаÑÑÑÑÑизаÑÐ¸Ñ Ð¿Ð¾ÑÑлов"
-#: rc_option_editor.cc:2079
+#: rc_option_editor.cc:2071
msgid "Link panners of Aux and External Sends with main panner by default"
msgstr "Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑвÑзÑваÑÑ Ð²Ð½ÐµÑние поÑÑÐ»Ñ Ñ Ð¾ÑновнÑм ÑегÑлÑÑоÑом паноÑамÑ"
-#: rc_option_editor.cc:2087
+#: rc_option_editor.cc:2079
msgid "MIDI read-ahead time (seconds)"
msgstr "ЧÑение MIDI Ñ ÑпÑеждением (в ÑекÑндаÑ
)"
-#: rc_option_editor.cc:2105
+#: rc_option_editor.cc:2097
msgid "Send MIDI Time Code"
msgstr "ÐеÑедаваÑÑ MIDI Time Code"
-#: rc_option_editor.cc:2113
+#: rc_option_editor.cc:2105
msgid "Percentage either side of normal transport speed to transmit MTC"
msgstr "ÐÑоÑÐµÐ½Ñ Ð¿Ð¾ обе ÑÑоÑÐ¾Ð½Ñ Ð¾Ñ Ð½Ð¾ÑмалÑной ÑÑанÑп. ÑкоÑоÑÑи Ð´Ð»Ñ Ð¿ÐµÑедаÑи MTC"
-#: rc_option_editor.cc:2122
+#: rc_option_editor.cc:2114
msgid "Obey MIDI Machine Control commands"
msgstr "ÐÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ MIDI Machine Control"
-#: rc_option_editor.cc:2130
+#: rc_option_editor.cc:2122
msgid "Send MIDI Machine Control commands"
msgstr "ÐÑпÑавлÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ MIDI Machine Control"
-#: rc_option_editor.cc:2138
+#: rc_option_editor.cc:2130
msgid "Send MIDI control feedback"
msgstr "ÐÑпÑавлÑÑÑ Ð¾Ñклик на конÑÑолÑнÑе ÑобÑÑÐ¸Ñ MIDI"
-#: rc_option_editor.cc:2146
+#: rc_option_editor.cc:2138
msgid "Inbound MMC device ID"
msgstr "ÐденÑиÑикаÑÐ¾Ñ Ð²Ñ
одÑÑего ÑÑÑÑойÑÑва MMC"
-#: rc_option_editor.cc:2155
+#: rc_option_editor.cc:2147
msgid "Outbound MMC device ID"
msgstr "ÐденÑиÑикаÑÐ¾Ñ Ð²ÑÑ
одÑÑего ÑÑÑÑойÑÑва MMC"
-#: rc_option_editor.cc:2164
+#: rc_option_editor.cc:2156
msgid "Initial program change"
msgstr "ÐÑÑ
Ð¾Ð´Ð½Ð°Ñ Ñмена пÑогÑаммÑ"
-#: rc_option_editor.cc:2173
+#: rc_option_editor.cc:2165
msgid "Display first MIDI bank/program as 0"
msgstr "ÐоказÑваÑÑ Ð¿ÐµÑвÑй банк/пÑогÑÐ°Ð¼Ð¼Ñ MIDI как 0"
-#: rc_option_editor.cc:2181
+#: rc_option_editor.cc:2173
msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
msgstr "Ðикогда не показÑваÑÑ Ð¿ÐµÑиодиÑеÑкие ÑообÑÐµÐ½Ð¸Ñ MIDI (MTC, MIDI Clock)"
-#: rc_option_editor.cc:2189
+#: rc_option_editor.cc:2181
msgid "Sound MIDI notes as they are selected"
msgstr "ÐоÑпÑоизводиÑÑ Ð½Ð¾ÑÑ MIDI пÑи иÑ
вÑделении"
-#: rc_option_editor.cc:2194
+#: rc_option_editor.cc:2186
msgid "Midi Audition"
msgstr "ÐÑоÑлÑÑивание MIDI"
-#: rc_option_editor.cc:2198
+#: rc_option_editor.cc:2190
msgid "Midi Audition Synth (LV2)"
msgstr "ÐнÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ Ð¿ÑоÑлÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ MIDI (LV2)"
-#: rc_option_editor.cc:2229 rc_option_editor.cc:2239 rc_option_editor.cc:2241
+#: rc_option_editor.cc:2221 rc_option_editor.cc:2231 rc_option_editor.cc:2233
msgid "User interaction"
msgstr "ÐзаимодейÑÑвие Ñ Ð¿Ð¾Ð»ÑзоваÑелем"
-#: rc_option_editor.cc:2232
+#: rc_option_editor.cc:2224
msgid ""
"Use translations of %1 messages\n"
" <i>(requires a restart of %1 to take effect)</i>\n"
@@ -10162,141 +10161,141 @@ msgstr ""
" <i>(вÑÑÑÐ¿Ð°ÐµÑ Ð² ÑÐ¸Ð»Ñ Ð¿Ð¾Ñле пеÑезапÑÑка %1)</i>\n"
" <i>(еÑли локализаÑÐ¸Ñ Ð´Ð»Ñ Ð²Ð°Ñего ÑзÑка доÑÑÑпна)</i>"
-#: rc_option_editor.cc:2239
+#: rc_option_editor.cc:2231
msgid "Keyboard"
msgstr "ÐлавиаÑÑÑа"
-#: rc_option_editor.cc:2249
+#: rc_option_editor.cc:2241
msgid "Control surface remote ID"
msgstr "ID Ð´Ð»Ñ ÑдалÑнного ÑпÑавлениÑ"
-#: rc_option_editor.cc:2254
+#: rc_option_editor.cc:2246
msgid "assigned by user"
msgstr "ÐазнаÑеннÑе полÑзоваÑелем"
-#: rc_option_editor.cc:2255
+#: rc_option_editor.cc:2247
msgid "follows order of mixer"
msgstr "СледÑÑÑ Ð¿Ð¾ÑÑÐ´ÐºÑ Ð¼Ð¸ÐºÑеÑа"
-#: rc_option_editor.cc:2269 rc_option_editor.cc:2278 rc_option_editor.cc:2287
-#: rc_option_editor.cc:2297 rc_option_editor.cc:2321 rc_option_editor.cc:2334
-#: rc_option_editor.cc:2343
+#: rc_option_editor.cc:2261 rc_option_editor.cc:2270 rc_option_editor.cc:2279
+#: rc_option_editor.cc:2289 rc_option_editor.cc:2313 rc_option_editor.cc:2326
+#: rc_option_editor.cc:2335
msgid "Preferences|GUI"
msgstr "ÐнÑеÑÑейÑ"
-#: rc_option_editor.cc:2272
+#: rc_option_editor.cc:2264
msgid "Graphically indicate mouse pointer hovering over various widgets"
msgstr "ÐодÑвеÑиваÑÑ ÑлеменÑÑ Ð¸Ð½ÑеÑÑейÑа под ÑказаÑелем мÑÑи"
-#: rc_option_editor.cc:2281
+#: rc_option_editor.cc:2273
msgid "Show tooltips if mouse hovers over a control"
msgstr "ÐоказÑваÑÑ Ð²ÑплÑваÑÑие подÑказки к ÑлеменÑам инÑеÑÑейÑа"
-#: rc_option_editor.cc:2290
+#: rc_option_editor.cc:2282
msgid "Use name highlight bars in region displays (requires a restart)"
msgstr "ÐодÑвеÑиваÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑей (ÑÑебÑÐµÑ Ð¿ÐµÑезапÑÑка)"
-#: rc_option_editor.cc:2303
+#: rc_option_editor.cc:2295
msgid "update transport clock display at FPS instead of every 100ms"
msgstr "ÐбновлÑÑÑ ÑаÑÑ ÑÑанÑпоÑÑа по FPS, а не каждÑе 100 мÑ"
-#: rc_option_editor.cc:2312
+#: rc_option_editor.cc:2304
msgid "Lock timeout (seconds)"
msgstr "Тайм-аÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки (ÑекÑндÑ)"
-#: rc_option_editor.cc:2320
+#: rc_option_editor.cc:2312
msgid "Lock GUI after this many idle seconds (zero to never lock)"
msgstr ""
"ÐлокиÑовка GUI поÑле ÑÑого колиÑеÑÑва ÑекÑнд пÑоÑÑоÑ\n"
"(0 - никогда не блокиÑоваÑÑ)"
-#: rc_option_editor.cc:2336
+#: rc_option_editor.cc:2328
msgid "Mixer Strip"
msgstr "ÐолоÑа микÑеÑа"
-#: rc_option_editor.cc:2346
+#: rc_option_editor.cc:2338
msgid "Use narrow strips in the mixer by default"
msgstr "ÐÑполÑзоваÑÑ Ñонкие полоÑки в микÑеÑе по ÑмолÑаниÑ"
-#: rc_option_editor.cc:2351 rc_option_editor.cc:2365 rc_option_editor.cc:2384
-#: rc_option_editor.cc:2400 rc_option_editor.cc:2416 rc_option_editor.cc:2430
-#: rc_option_editor.cc:2444 rc_option_editor.cc:2446
+#: rc_option_editor.cc:2343 rc_option_editor.cc:2357 rc_option_editor.cc:2376
+#: rc_option_editor.cc:2392 rc_option_editor.cc:2408 rc_option_editor.cc:2422
+#: rc_option_editor.cc:2436 rc_option_editor.cc:2438
msgid "Preferences|Metering"
msgstr "ÐамеÑ"
-#: rc_option_editor.cc:2355
+#: rc_option_editor.cc:2347
msgid "Peak hold time"
msgstr "УдеÑживание пика"
-#: rc_option_editor.cc:2361
+#: rc_option_editor.cc:2353
msgid "short"
msgstr "ÐоÑоÑкое"
-#: rc_option_editor.cc:2362
+#: rc_option_editor.cc:2354
msgid "medium"
msgstr "СÑеднее"
-#: rc_option_editor.cc:2363
+#: rc_option_editor.cc:2355
msgid "long"
msgstr "Ðолгое"
-#: rc_option_editor.cc:2369
+#: rc_option_editor.cc:2361
msgid "DPM fall-off"
msgstr "СкоÑоÑÑÑ ÑпаданиÑ"
-#: rc_option_editor.cc:2375
+#: rc_option_editor.cc:2367
msgid "slowest [6.6dB/sec]"
msgstr "Самое медленное [6,6 Ðб/Ñ]"
-#: rc_option_editor.cc:2376
+#: rc_option_editor.cc:2368
msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
msgstr "Ðедленное [8,6 Ðб/Ñ] (BBC PPM, EBU PPM)"
-#: rc_option_editor.cc:2377
+#: rc_option_editor.cc:2369
msgid "slowish [12.0dB/sec] (DIN)"
msgstr "ÐеÑоÑопливое [12 Ðб/Ñ] (DIN)"
-#: rc_option_editor.cc:2378
+#: rc_option_editor.cc:2370
msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
msgstr "УмеÑенное [13,3 Ðб/Ñ] (EBU Digi PPM, IRT Digi PPM)"
-#: rc_option_editor.cc:2379
+#: rc_option_editor.cc:2371
msgid "medium [20dB/sec]"
msgstr "СÑеднее [20 Ðб/Ñ]"
-#: rc_option_editor.cc:2380
+#: rc_option_editor.cc:2372
msgid "fast [32dB/sec]"
msgstr "ÐÑÑÑÑое [32 Ðб/Ñ]"
-#: rc_option_editor.cc:2381
+#: rc_option_editor.cc:2373
msgid "faster [46dB/sec]"
msgstr "ÐÑÑ Ð±ÑÑÑÑее [46 Ðб/Ñ]"
-#: rc_option_editor.cc:2382
+#: rc_option_editor.cc:2374
msgid "fastest [70dB/sec]"
msgstr "Самое бÑÑÑÑое [70 Ðб/Ñ]"
-#: rc_option_editor.cc:2388
+#: rc_option_editor.cc:2380
msgid "Meter line-up level; 0dBu"
msgstr "ТоÑка вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа; 0dBu"
-#: rc_option_editor.cc:2393 rc_option_editor.cc:2409
+#: rc_option_editor.cc:2385 rc_option_editor.cc:2401
msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-#: rc_option_editor.cc:2394 rc_option_editor.cc:2410
+#: rc_option_editor.cc:2386 rc_option_editor.cc:2402
msgid "-20dBFS (SMPTE RP.0155)"
msgstr "-20dBFS (SMPTE RP.0155)"
-#: rc_option_editor.cc:2395 rc_option_editor.cc:2411
+#: rc_option_editor.cc:2387 rc_option_editor.cc:2403
msgid "-18dBFS (EBU, BBC)"
msgstr "-18dBFS (EBU, BBC)"
-#: rc_option_editor.cc:2396 rc_option_editor.cc:2412
+#: rc_option_editor.cc:2388 rc_option_editor.cc:2404
msgid "-15dBFS (DIN)"
msgstr "-15dBFS (DIN)"
-#: rc_option_editor.cc:2398
+#: rc_option_editor.cc:2390
msgid ""
"Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
"level for IEC1/Nordic, IEC2 PPM and VU meter."
@@ -10304,39 +10303,39 @@ msgstr ""
"ÐаÑÑÑойка измеÑ. маÑкеÑов и ÑвеÑа ÑоÑки Ñзла Ð´Ð»Ñ dBFS маÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐºÐ°Ð»Ñ "
"DPM, ÑÑÑановка ÑÑалонного ÑÑÐ¾Ð²Ð½Ñ Ð´Ð»Ñ IEC1/Nordic, PPM и VU-меÑÑа."
-#: rc_option_editor.cc:2404
+#: rc_option_editor.cc:2396
msgid "IEC1/DIN Meter line-up level; 0dBu"
msgstr "ТоÑка вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа IEC1/DIN; 0dBu"
-#: rc_option_editor.cc:2414
+#: rc_option_editor.cc:2406
msgid "Reference level for IEC1/DIN meter."
msgstr "РеÑеÑенÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа IEC1/DIN"
-#: rc_option_editor.cc:2420
+#: rc_option_editor.cc:2412
msgid "VU Meter standard"
msgstr "СÑандаÑÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа VU"
-#: rc_option_editor.cc:2425
+#: rc_option_editor.cc:2417
msgid "0VU = -2dBu (France)"
msgstr "0VU = -2dBu (ФÑанÑиÑ)"
-#: rc_option_editor.cc:2426
+#: rc_option_editor.cc:2418
msgid "0VU = 0dBu (North America, Australia)"
msgstr "0VU = 0dBu (СевеÑÐ½Ð°Ñ ÐмеÑика, ÐвÑÑÑалиÑ)"
-#: rc_option_editor.cc:2427
+#: rc_option_editor.cc:2419
msgid "0VU = +4dBu (standard)"
msgstr "0VU = +4dBu (ÑÑандаÑÑ)"
-#: rc_option_editor.cc:2428
+#: rc_option_editor.cc:2420
msgid "0VU = +8dBu"
msgstr "0VU = +8dBu"
-#: rc_option_editor.cc:2434
+#: rc_option_editor.cc:2426
msgid "Peak threshold [dBFS]"
msgstr "ÐоÑог пика (dbFS)"
-#: rc_option_editor.cc:2442
+#: rc_option_editor.cc:2434
msgid ""
"Specify the audio signal level in dbFS at and above which the meter-peak "
"indicator will flash red."
@@ -10344,11 +10343,11 @@ msgstr ""
"УкажиÑе в dbFS номиналÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð·Ð²Ñкового Ñигнала и пикового, когда "
"индикаÑÐ¾Ñ Ð¼Ð¸Ð³Ð°ÐµÑ ÐºÑаÑнÑм ÑвеÑом."
-#: rc_option_editor.cc:2449
+#: rc_option_editor.cc:2441
msgid "LED meter style"
msgstr "ÐндикаÑÐ¾Ñ Ð² ÑÑиле LED"
-#: rc_option_editor.cc:2457
+#: rc_option_editor.cc:2449
msgid "Theme"
msgstr "Тема"
@@ -13637,6 +13636,18 @@ msgstr ""
"\n"
"ÐÑкÑÑÑÑ ÑÑководÑÑво в бÑаÑзеÑе? "
+#~ msgid "After Editor Selection"
+#~ msgstr "ÐоÑле вÑбÑанного в ÑедакÑоÑе"
+
+#~ msgid "After Mixer Selection"
+#~ msgstr "ÐоÑле вÑбÑанного в микÑеÑе"
+
+#~ msgid "Copyright (C) 1999-2012 Paul Davis"
+#~ msgstr "ÐвÑоÑÑкие пÑава © 1999-2012 Paul Davis"
+
+#~ msgid "Synchronise editor and mixer selection"
+#~ msgstr "СинÑ
ÑонизиÑоваÑÑ Ð²Ñделение в ÑедакÑоÑе и микÑеÑе"
+
#~ msgid "tracks"
#~ msgstr "доÑожек"
diff --git a/gtk2_ardour/po/sv.po b/gtk2_ardour/po/sv.po
index ccc8165..833d087 100644
--- a/gtk2_ardour/po/sv.po
+++ b/gtk2_ardour/po/sv.po
@@ -1874,19 +1874,19 @@ msgid "Forward (Fast)"
msgstr "Framåtspolning (snabb)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "GÃ¥ till noll"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "Gå till början"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "GÃ¥ till slutet"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "Gå till väggklocka"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3516,7 +3516,7 @@ msgid "Save View %1"
msgstr "Spara vy %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "GÃ¥ till vy %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/po/zh.po b/gtk2_ardour/po/zh.po
index 7c9de8e..36b58d0 100644
--- a/gtk2_ardour/po/zh.po
+++ b/gtk2_ardour/po/zh.po
@@ -1905,19 +1905,19 @@ msgid "Forward (Fast)"
msgstr "å带(å¿«é)"
#: ardour_ui_ed.cc:306
-msgid "Goto Zero"
+msgid "Go to Zero"
msgstr "转å°é¶ç¹"
#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Goto Start"
+msgid "Go to Start"
msgstr "转å°èµ·å§ä½ç½®"
#: ardour_ui_ed.cc:315
-msgid "Goto End"
+msgid "Go to End"
msgstr "转å°æ«å°¾ä½ç½®"
#: ardour_ui_ed.cc:318
-msgid "Goto Wall Clock"
+msgid "Go to Wall Clock"
msgstr "转å°ç¡®åçæ¬å°æ¶é´"
#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
@@ -3543,7 +3543,7 @@ msgid "Save View %1"
msgstr "ä¿åè§å¾ %1"
#: editor_actions.cc:232
-msgid "Goto View %1"
+msgid "Go to View %1"
msgstr "跳转å°è§å¾ %1"
#: editor_actions.cc:238
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 092cd5e..71435fe 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -21,10 +21,6 @@
#include "gtk2ardour-config.h"
#endif
-#ifdef COMPILER_MSVC
-#define rintf(x) round((x) + 0.5)
-#endif
-
#include <cmath>
#include <iostream>
#include <set>
@@ -49,6 +45,7 @@
#include "ardour/audioengine.h"
#include "ardour/internal_return.h"
#include "ardour/internal_send.h"
+#include "ardour/meter.h"
#include "ardour/panner_shell.h"
#include "ardour/plugin_insert.h"
#include "ardour/pannable.h"
@@ -120,6 +117,9 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo
_button.signal_led_clicked.connect (sigc::mem_fun (*this, &ProcessorEntry::led_clicked));
_button.set_text (name (_width));
+ if (boost::dynamic_pointer_cast<PeakMeter> (_processor)) {
+ _button.set_elements(ArdourButton::Element(_button.elements() & ~ArdourButton::Indicator));
+ }
if (_processor) {
_vbox.pack_start (_routing_icon);
@@ -493,7 +493,7 @@ ProcessorEntry::toggle_panner_link ()
ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string const & n)
: _control (c)
, _adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1)
- , _slider (&_adjustment, boost::shared_ptr<PBD::Controllable>(), 0, 13)
+ , _slider (&_adjustment, boost::shared_ptr<PBD::Controllable>(), 0, max(13.f, rintf(13.f * ARDOUR_UI::ui_scale)))
, _slider_persistant_tooltip (&_slider)
, _button (ArdourButton::led_default_elements)
, _ignore_ui_adjustment (false)
@@ -734,7 +734,7 @@ PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
_plugin_insert->input_streams().n_audio() < _plugin_insert->natural_input_streams().n_audio()
)
{
- _routing_icon.set_size_request (-1, 7);
+ _routing_icon.set_size_request (-1, std::max (7.f, rintf(7.f * ARDOUR_UI::ui_scale)));
_routing_icon.set_visible(true);
_input_icon.show();
} else {
@@ -756,6 +756,11 @@ PluginInsertProcessorEntry::hide_things ()
plugin_insert_splitting_changed ();
}
+ProcessorEntry::PortIcon::PortIcon(bool input) {
+ _input = input;
+ _ports = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
+ set_size_request (-1, std::max (2.f, rintf(2.f * ARDOUR_UI::ui_scale)));
+}
bool
ProcessorEntry::PortIcon::on_expose_event (GdkEventExpose* ev)
@@ -775,6 +780,7 @@ ProcessorEntry::PortIcon::on_expose_event (GdkEventExpose* ev)
cairo_rectangle (cr, 0, 0, width, height);
cairo_fill (cr);
+ const double dx = rint(max(2., 2. * ARDOUR_UI::ui_scale));
if (_ports.n_total() > 1) {
for (uint32_t i = 0; i < _ports.n_total(); ++i) {
if (i < _ports.n_midi()) {
@@ -789,7 +795,7 @@ ProcessorEntry::PortIcon::on_expose_event (GdkEventExpose* ev)
UINT_RGBA_B_FLT(audio_port_color));
}
const float x = rintf(width * (.2f + .6f * i / (_ports.n_total() - 1.f)));
- cairo_rectangle (cr, x-1, 0, 3, height);
+ cairo_rectangle (cr, x-dx * .5, 0, 1+dx, height);
cairo_fill(cr);
}
} else if (_ports.n_total() == 1) {
@@ -805,7 +811,7 @@ ProcessorEntry::PortIcon::on_expose_event (GdkEventExpose* ev)
UINT_RGBA_B_FLT(audio_port_color));
}
const float x = rintf(width * .5);
- cairo_rectangle (cr, x-1, 0, 3, height);
+ cairo_rectangle (cr, x-dx * .5, 0, 1+dx, height);
cairo_fill(cr);
cairo_stroke(cr);
}
@@ -822,7 +828,7 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
cairo_clip (cr);
- cairo_set_line_width (cr, 1.0);
+ cairo_set_line_width (cr, max (1.f, ARDOUR_UI::ui_scale));
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
Gtk::Allocation a = get_allocation();
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index 9622011..28c9af7 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -210,11 +210,7 @@ private:
class PortIcon : public Gtk::DrawingArea {
public:
- PortIcon(bool input) {
- _input = input;
- _ports = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
- set_size_request (-1, 2);
- }
+ PortIcon(bool input);
void set_ports(ARDOUR::ChanCount const ports) { _ports = ports; }
private:
bool on_expose_event (GdkEventExpose *);
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 1ee068f..951c3e9 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -141,10 +141,14 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
*/
virtual void set_snap_threshold (double t) = 0;
- /** Snap a value according to the current snap setting. */
+ /**
+ * Snap a value according to the current snap setting.
+ * ensure_snap overrides SnapOff and magnetic snap
+ */
virtual void snap_to (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false) = 0;
+ bool for_mark = false,
+ bool ensure_snap = false) = 0;
/** Undo some transactions.
* @param n Number of transactions to undo.
@@ -282,11 +286,11 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual void restore_editing_space () = 0;
virtual void update_tearoff_visibility () = 0;
virtual void reattach_all_tearoffs () = 0;
- virtual framepos_t get_preferred_edit_position (bool ignore_playhead = false, bool from_context_menu = false, bool from_outside_canvas = false) = 0;
+ virtual framepos_t get_preferred_edit_position (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE, bool from_context_menu = false, bool from_outside_canvas = false) = 0;
virtual void toggle_meter_updating() = 0;
virtual void split_regions_at (framepos_t, RegionSelection&) = 0;
virtual void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false) = 0;
- virtual void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false) = 0;
+ virtual void mouse_add_new_marker (framepos_t where, bool is_cd=false) = 0;
virtual void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>) = 0;
virtual void add_to_idle_resize (TimeAxisView*, int32_t) = 0;
virtual framecnt_t get_nudge_distance (framepos_t pos, framecnt_t& next) = 0;
@@ -419,6 +423,11 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual void get_regionviews_by_id (PBD::ID const id, RegionSelection & regions) const = 0;
virtual void get_per_region_note_selection (std::list<std::pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > >&) const = 0;
+ virtual void mouse_add_new_tempo_event (framepos_t where) = 0;
+ virtual void mouse_add_new_meter_event (framepos_t where) = 0;
+ virtual void edit_tempo_section (ARDOUR::TempoSection*) = 0;
+ virtual void edit_meter_section (ARDOUR::MeterSection*) = 0;
+
/// Singleton instance, set up by Editor::Editor()
static PublicEditor* _instance;
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 13f4258..e12789e 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -21,6 +21,8 @@
#include "gtk2ardour-config.h"
#endif
+#include <cairo/cairo.h>
+
#include <boost/algorithm/string.hpp>
#include <gtkmm/liststore.h>
@@ -271,20 +273,22 @@ static const struct {
{ "Option", GDK_MOD1_MASK },
{ "Command-Shift", GDK_META_MASK|GDK_SHIFT_MASK },
{ "Command-Option", GDK_MOD1_MASK|GDK_META_MASK },
- { "Shift-Option", GDK_SHIFT_MASK|GDK_MOD1_MASK },
+ { "Option-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
+ { "Control-Shift", GDK_CONTROL_MASK|GDK_SHIFT_MASK },
{ "Shift-Command-Option", GDK_MOD5_MASK|GDK_SHIFT_MASK|GDK_META_MASK },
#else
{ "Key|Shift", GDK_SHIFT_MASK },
{ "Control", GDK_CONTROL_MASK },
- { "Alt (Mod1)", GDK_MOD1_MASK },
+ { "Alt", GDK_MOD1_MASK },
{ "Control-Shift", GDK_CONTROL_MASK|GDK_SHIFT_MASK },
{ "Control-Alt", GDK_CONTROL_MASK|GDK_MOD1_MASK },
{ "Shift-Alt", GDK_SHIFT_MASK|GDK_MOD1_MASK },
{ "Control-Shift-Alt", GDK_CONTROL_MASK|GDK_SHIFT_MASK|GDK_MOD1_MASK },
+ { "Alt-Windows", GDK_MOD1_MASK|GDK_MOD4_MASK },
{ "Mod2", GDK_MOD2_MASK },
{ "Mod3", GDK_MOD3_MASK },
- { "Mod4", GDK_MOD4_MASK },
+ { "Windows", GDK_MOD4_MASK },
{ "Mod5", GDK_MOD5_MASK },
#endif
{ 0, 0 }
@@ -319,25 +323,57 @@ public:
}
}
- Table* t = manage (new Table (4, 4));
+ Table* t = manage (new Table (5, 11));
t->set_spacings (4);
- Label* l = manage (left_aligned_label (_("Edit using:")));
+ int row = 0;
+ int col = 0;
+
+ Label* l = manage (left_aligned_label (_("Select Keyboard layout:")));
+ l->set_name ("OptionsLabel");
+
+ vector<string> strs;
+
+ for (map<string,string>::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) {
+ strs.push_back (bf->first);
+ }
+
+ set_popdown_strings (_keyboard_layout_selector, strs);
+ _keyboard_layout_selector.set_active_text (Keyboard::current_binding_name());
+ _keyboard_layout_selector.signal_changed().connect (sigc::mem_fun (*this, &KeyboardOptions::bindings_changed));
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_keyboard_layout_selector, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 0;
+
+ l = manage (left_aligned_label (_("When Clicking:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, col, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ l = manage (left_aligned_label (_("Edit using:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 0, 1, FILL | EXPAND, FILL);
- t->attach (_edit_modifier_combo, 1, 2, 0, 1, FILL | EXPAND, FILL);
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_edit_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
l = manage (new Label (_("+ button")));
l->set_name ("OptionsLabel");
- t->attach (*l, 3, 4, 0, 1, FILL | EXPAND, FILL);
- t->attach (_edit_button_spin, 4, 5, 0, 1, FILL | EXPAND, FILL);
+ t->attach (*l, col + 3, col + 4, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_edit_button_spin, col + 4, col + 5, row, row + 1, FILL | EXPAND, FILL);
_edit_button_spin.set_name ("OptionsEntry");
_edit_button_adjustment.set_value (Keyboard::edit_button());
_edit_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::edit_button_changed));
+ ++row;
+ col = 1;
+
set_popdown_strings (_delete_modifier_combo, dumb);
_delete_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::delete_modifier_chosen));
@@ -351,19 +387,21 @@ public:
l = manage (left_aligned_label (_("Delete using:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 1, 2, FILL | EXPAND, FILL);
- t->attach (_delete_modifier_combo, 1, 2, 1, 2, FILL | EXPAND, FILL);
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_delete_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
l = manage (new Label (_("+ button")));
l->set_name ("OptionsLabel");
- t->attach (*l, 3, 4, 1, 2, FILL | EXPAND, FILL);
- t->attach (_delete_button_spin, 4, 5, 1, 2, FILL | EXPAND, FILL);
+ t->attach (*l, col + 3, col + 4, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_delete_button_spin, col + 4, col + 5, row, row + 1, FILL | EXPAND, FILL);
_delete_button_spin.set_name ("OptionsEntry");
_delete_button_adjustment.set_value (Keyboard::delete_button());
_delete_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::delete_button_changed));
+ ++row;
+ col = 1;
set_popdown_strings (_insert_note_modifier_combo, dumb);
_insert_note_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::insert_note_modifier_chosen));
@@ -378,20 +416,165 @@ public:
l = manage (left_aligned_label (_("Insert note using:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 2, 3, FILL | EXPAND, FILL);
- t->attach (_insert_note_modifier_combo, 1, 2, 2, 3, FILL | EXPAND, FILL);
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_insert_note_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
l = manage (new Label (_("+ button")));
l->set_name ("OptionsLabel");
- t->attach (*l, 3, 4, 2, 3, FILL | EXPAND, FILL);
- t->attach (_insert_note_button_spin, 4, 5, 2, 3, FILL | EXPAND, FILL);
+ t->attach (*l, col + 3, col + 4, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_insert_note_button_spin, col + 4, col + 5, row, row + 1, FILL | EXPAND, FILL);
_insert_note_button_spin.set_name ("OptionsEntry");
_insert_note_button_adjustment.set_value (Keyboard::insert_note_button());
_insert_note_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::insert_note_button_changed));
+ ++row;
+
+ l = manage (left_aligned_label (_("When Beginning a Drag:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* copy modifier */
+ set_popdown_strings (_copy_modifier_combo, dumb);
+ _copy_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::copy_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) Keyboard::CopyModifier) {
+ _copy_modifier_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Copy items using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_copy_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* constraint modifier */
+ set_popdown_strings (_constraint_modifier_combo, dumb);
+ _constraint_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::constraint_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::constraint_modifier ()) {
+ _constraint_modifier_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Constrain drag using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_constraint_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+
+ l = manage (left_aligned_label (_("When Beginning a Trim:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* trim_contents */
+ set_popdown_strings (_trim_contents_combo, dumb);
+ _trim_contents_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_contents_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_contents_modifier ()) {
+ _trim_contents_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Trim contents using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_trim_contents_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* anchored trim */
+ set_popdown_strings (_trim_anchored_combo, dumb);
+ _trim_anchored_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_anchored_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_anchored_modifier ()) {
+ _trim_anchored_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Anchored trim using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ ++col;
+ t->attach (_trim_anchored_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* jump trim disabled for now
+ set_popdown_strings (_trim_jump_combo, dumb);
+ _trim_jump_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_jump_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) Keyboard::trim_jump_modifier ()) {
+ _trim_jump_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Jump after trim using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ ++col;
+ t->attach (_trim_jump_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+ */
+
+ /* note resize relative */
+ set_popdown_strings (_note_size_relative_combo, dumb);
+ _note_size_relative_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::note_size_relative_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::note_size_relative_modifier ()) {
+ _note_size_relative_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Resize notes relatively using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ ++col;
+ t->attach (_note_size_relative_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ ++row;
+
+ l = manage (left_aligned_label (_("While Dragging:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* ignore snap */
set_popdown_strings (_snap_modifier_combo, dumb);
_snap_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_modifier_chosen));
@@ -405,24 +588,100 @@ public:
l = manage (left_aligned_label (_("Ignore snap using:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 3, 4, FILL | EXPAND, FILL);
- t->attach (_snap_modifier_combo, 1, 2, 3, 4, FILL | EXPAND, FILL);
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_snap_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
- vector<string> strs;
+ ++row;
+ col = 1;
- for (map<string,string>::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) {
- strs.push_back (bf->first);
+ /* snap delta */
+ set_popdown_strings (_snap_delta_combo, dumb);
+ _snap_delta_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_delta_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) Keyboard::snap_delta_modifier ()) {
+ _snap_delta_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
}
- set_popdown_strings (_keyboard_layout_selector, strs);
- _keyboard_layout_selector.set_active_text (Keyboard::current_binding_name());
- _keyboard_layout_selector.signal_changed().connect (sigc::mem_fun (*this, &KeyboardOptions::bindings_changed));
+ l = manage (left_aligned_label (_("Snap relatively using:")));
+ l->set_name ("OptionsLabel");
- l = manage (left_aligned_label (_("Keyboard layout:")));
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_snap_delta_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+
+ l = manage (left_aligned_label (_("While Trimming:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* trim_overlap */
+ set_popdown_strings (_trim_overlap_combo, dumb);
+ _trim_overlap_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_overlap_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_overlap_modifier ()) {
+ _trim_overlap_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Resize overlaped regions using:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 4, 5, FILL | EXPAND, FILL);
- t->attach (_keyboard_layout_selector, 1, 2, 4, 5, FILL | EXPAND, FILL);
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_trim_overlap_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+
+ l = manage (left_aligned_label (_("While Dragging Control Points:")));
+ l->set_name ("OptionEditorHeading");
+ t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* fine adjust */
+ set_popdown_strings (_fine_adjust_combo, dumb);
+ _fine_adjust_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::fine_adjust_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::fine_adjust_modifier ()) {
+ _fine_adjust_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Fine adjust using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_fine_adjust_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
+ ++row;
+ col = 1;
+
+ /* push points */
+ set_popdown_strings (_push_points_combo, dumb);
+ _push_points_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::push_points_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) ArdourKeyboard::push_points_modifier ()) {
+ _push_points_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Push points using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+ t->attach (_push_points_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
_box->pack_start (*t, false, false);
}
@@ -478,6 +737,18 @@ private:
}
}
+ void copy_modifier_chosen ()
+ {
+ string const txt = _copy_modifier_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ Keyboard::set_copy_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
void insert_note_modifier_chosen ()
{
string const txt = _insert_note_modifier_combo.get_active_text();
@@ -502,6 +773,102 @@ private:
}
}
+ void snap_delta_modifier_chosen ()
+ {
+ string const txt = _snap_delta_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ Keyboard::set_snap_delta_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void constraint_modifier_chosen ()
+ {
+ string const txt = _constraint_modifier_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_constraint_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void trim_contents_modifier_chosen ()
+ {
+ string const txt = _trim_contents_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_trim_contents_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void trim_overlap_modifier_chosen ()
+ {
+ string const txt = _trim_overlap_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_trim_overlap_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void trim_anchored_modifier_chosen ()
+ {
+ string const txt = _trim_anchored_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_trim_anchored_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void fine_adjust_modifier_chosen ()
+ {
+ string const txt = _fine_adjust_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_fine_adjust_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void push_points_modifier_chosen ()
+ {
+ string const txt = _push_points_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_push_points_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
+ void note_size_relative_modifier_chosen ()
+ {
+ string const txt = _note_size_relative_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ ArdourKeyboard::set_note_size_relative_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
void delete_button_changed ()
{
Keyboard::set_delete_button (_delete_button_spin.get_value_as_int());
@@ -520,8 +887,18 @@ private:
ComboBoxText _keyboard_layout_selector;
ComboBoxText _edit_modifier_combo;
ComboBoxText _delete_modifier_combo;
+ ComboBoxText _copy_modifier_combo;
ComboBoxText _insert_note_modifier_combo;
ComboBoxText _snap_modifier_combo;
+ ComboBoxText _snap_delta_combo;
+ ComboBoxText _constraint_modifier_combo;
+ ComboBoxText _trim_contents_combo;
+ ComboBoxText _trim_overlap_combo;
+ ComboBoxText _trim_anchored_combo;
+ ComboBoxText _trim_jump_combo;
+ ComboBoxText _fine_adjust_combo;
+ ComboBoxText _push_points_combo;
+ ComboBoxText _note_size_relative_combo;
Adjustment _delete_button_adjustment;
SpinButton _delete_button_spin;
Adjustment _edit_button_adjustment;
@@ -541,7 +918,7 @@ public:
{
_dpi_adjustment.set_value (_ui_config->get_font_scale() / 1024.);
- Label* l = manage (new Label (_("Font scaling:")));
+ Label* l = manage (new Label (_("GUI and Font scaling:")));
l->set_name ("OptionsLabel");
const Glib::ustring dflt = _("Default");
@@ -570,7 +947,7 @@ public:
_box->pack_start (*h, false, false);
- set_note (_("Major font-scale changes require an application restart to re-layout."));
+ set_note (_("Adjusting the scale require an application restart to re-layout."));
_dpi_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &FontScalingOptions::dpi_changed));
}
@@ -1678,6 +2055,17 @@ RCOptionEditor::RCOptionEditor ()
add_option (_("Editor"), bco);
+ ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
+ "layer-model",
+ _("Layering model"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_layer_model),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_layer_model)
+ );
+
+ lm->add (LaterHigher, _("later is higher"));
+ lm->add (Manual, _("manual layering"));
+ add_option (_("Editor"), lm);
+
add_option (_("Editor"),
new BoolOption (
"rubberbanding-snaps-to-grid",
@@ -1699,7 +2087,7 @@ RCOptionEditor::RCOptionEditor ()
"show-region-gain-envelopes",
_("Show gain envelopes in audio regions"),
_("in all modes"),
- _("only in region gain mode"),
+ _("only in Draw and Internal Edit modes"),
sigc::mem_fun (*_ui_config, &UIConfiguration::get_show_region_gain),
sigc::mem_fun (*_ui_config, &UIConfiguration::set_show_region_gain)
));
@@ -2258,6 +2646,18 @@ RCOptionEditor::RCOptionEditor ()
/* INTERFACE */
+#ifdef CAIRO_SUPPORTS_FORCE_BUGGY_GRADIENTS_ENVIRONMENT_VARIABLE
+ BoolOption* bgo = new BoolOption (
+ "buggy-gradients",
+ _("Possibly improve slow graphical performance"),
+ sigc::mem_fun (*_ui_config, &UIConfiguration::get_buggy_gradients),
+ sigc::mem_fun (*_ui_config, &UIConfiguration::set_buggy_gradients)
+ );
+
+ Gtkmm2ext::UI::instance()->set_tip (bgo->tip_widget(), string_compose (_("This requires restarting %1 before having an effect"), PROGRAM_NAME));
+ add_option (S_("Preferences|GUI"), bgo);
+#endif
+
add_option (S_("Preferences|GUI"),
new BoolOption (
"widget-prelight",
@@ -2297,6 +2697,22 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (*_ui_config, &UIConfiguration::set_super_rapid_clock_update)
));
+
+ /* Image cache size */
+
+ Gtk::Adjustment *ics = manage (new Gtk::Adjustment(0, 1, 1024, 10)); /* 1 MB to 1GB in steps of 10MB */
+ HSliderOption *sics = new HSliderOption("waveform-cache-size",
+ _("Waveform image cache size (megabytes)"),
+ ics,
+ sigc::mem_fun (*ARDOUR_UI::config(), &UIConfiguration::get_waveform_cache_size),
+ sigc::mem_fun (*ARDOUR_UI::config(), &UIConfiguration::set_waveform_cache_size)
+ );
+ sics->scale().set_digits (0);
+ Gtkmm2ext::UI::instance()->set_tip
+ (sics->tip_widget(),
+ _("Increasing the cache size uses more memory to store waveform images, which can improve graphical performance."));
+ add_option (S_("Preferences|GUI"), sics);
+
/* Lock GUI timeout */
Gtk::Adjustment *lts = manage (new Gtk::Adjustment(0, 0, 1000, 1, 10));
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index cbeb122..7a748c8 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -30,6 +30,7 @@
#include "time_axis_view.h"
#include "editor.h"
+#include "gui_thread.h"
#include "i18n.h"
@@ -44,7 +45,9 @@ AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView&
// If this isn't true something is horribly wrong, and we'll get catastrophic gain values
assert(l->parameter().type() == EnvelopeAutomation);
- _time_converter->set_origin_b (r.region()->position() - r.region()->start());
+ _time_converter->set_origin_b (rv.region()->position());
+
+ r.region()->PropertyChanged.connect (_region_changed_connection, invalidator (*this), boost::bind (&AudioRegionGainLine::region_changed, this, _1), gui_context());
group->raise_to_top ();
group->set_y_position (2);
@@ -96,3 +99,15 @@ AudioRegionGainLine::end_drag (bool with_push, uint32_t final_index)
AutomationLine::end_drag (with_push, final_index);
}
+void
+AudioRegionGainLine::region_changed (const PropertyChange& what_changed)
+{
+ PropertyChange interesting_stuff;
+
+ interesting_stuff.add (ARDOUR::Properties::start);
+ interesting_stuff.add (ARDOUR::Properties::position);
+
+ if (what_changed.contains (interesting_stuff)) {
+ _time_converter->set_origin_b (rv.region()->position());
+ }
+}
diff --git a/gtk2_ardour/region_gain_line.h b/gtk2_ardour/region_gain_line.h
index 1395bc3..683537e 100644
--- a/gtk2_ardour/region_gain_line.h
+++ b/gtk2_ardour/region_gain_line.h
@@ -42,7 +42,10 @@ class AudioRegionGainLine : public AutomationLine
void remove_point (ControlPoint&);
+
private:
+ PBD::ScopedConnection _region_changed_connection;
+ void region_changed (const PBD::PropertyChange& what_changed);
AudioRegionView& rv;
};
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index be96cd4..75e091f 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -939,10 +939,12 @@ RegionView::move_contents (frameoffset_t distance)
/** Snap a frame offset within our region using the current snap settings.
* @param x Frame offset from this region's position.
+ * @param ensure_snap whether to ignore snap_mode (in the case of SnapOff) and magnetic snap.
+ * Used when inverting snap mode logic with key modifiers, or snap distance calculation.
* @return Snapped frame offset from this region's position.
*/
frameoffset_t
-RegionView::snap_frame_to_frame (frameoffset_t x) const
+RegionView::snap_frame_to_frame (frameoffset_t x, bool ensure_snap) const
{
PublicEditor& editor = trackview.editor();
@@ -951,12 +953,12 @@ RegionView::snap_frame_to_frame (frameoffset_t x) const
/* try a snap in either direction */
framepos_t frame = session_frame;
- editor.snap_to (frame, RoundNearest);
+ editor.snap_to (frame, RoundNearest, false, ensure_snap);
/* if we went off the beginning of the region, snap forwards */
if (frame < _region->position ()) {
frame = session_frame;
- editor.snap_to (frame, RoundUpAlways);
+ editor.snap_to (frame, RoundUpAlways, false, ensure_snap);
}
/* back to region relative */
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index 92006c5..f17e37a 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -121,8 +121,8 @@ class RegionView : public TimeAxisViewItem
}
};
- ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
-
+ ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t, bool ensure_snap = false) const;
+
protected:
/** Allows derived types to specify their visibility requirements
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index c0dedb8..7f112b9 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -112,6 +112,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, ArdourCan
, gm (sess, true, 75, 14)
, _ignore_set_layer_display (false)
, gain_automation_item(NULL)
+ , trim_automation_item(NULL)
, mute_automation_item(NULL)
, pan_automation_item(NULL)
{
@@ -522,6 +523,15 @@ RouteTimeAxisView::build_automation_action_menu (bool for_selection)
_main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
}
+ if (trim_track) {
+ items.push_back (CheckMenuElem (_("Trim"), sigc::mem_fun (*this, &RouteTimeAxisView::update_trim_track_visibility)));
+ trim_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
+ trim_automation_item->set_active ((!for_selection || _editor.get_selection().tracks.size() == 1) &&
+ (trim_track && string_is_affirmative (trim_track->gui_property ("visible"))));
+
+ _main_automation_menu_map[Evoral::Parameter(TrimAutomation)] = trim_automation_item;
+ }
+
if (mute_track) {
items.push_back (CheckMenuElem (_("Mute"), sigc::mem_fun (*this, &RouteTimeAxisView::update_mute_track_visibility)));
mute_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
@@ -1604,6 +1614,7 @@ RouteTimeAxisView::paste (framepos_t pos, const Selection& selection, PasteConte
pos += _editor.get_paste_offset(pos, ctx.count, duration);
pl->clear_changes ();
+ pl->clear_owned_changes ();
if (Config->get_edit_mode() == Ripple) {
std::pair<framepos_t, framepos_t> extent = (*p)->get_extent_with_endspace();
framecnt_t amount = extent.second - extent.first;
@@ -1897,6 +1908,22 @@ RouteTimeAxisView::update_gain_track_visibility ()
}
void
+RouteTimeAxisView::update_trim_track_visibility ()
+{
+ bool const showit = trim_automation_item->get_active();
+
+ if (showit != string_is_affirmative (trim_track->gui_property ("visible"))) {
+ trim_track->set_marked_for_display (showit);
+
+ /* now trigger a redisplay */
+
+ if (!no_redraw) {
+ _route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */
+ }
+ }
+}
+
+void
RouteTimeAxisView::update_mute_track_visibility ()
{
bool const showit = mute_automation_item->get_active();
@@ -2551,7 +2578,7 @@ RouteTimeAxisView::meter_changed ()
{
ENSURE_GUI_THREAD (*this, &RouteTimeAxisView::meter_changed)
reset_meter();
- if (_route && !no_redraw) {
+ if (_route && !no_redraw && ARDOUR_UI::config()->get_show_track_meters()) {
request_redraw ();
}
// reset peak when meter point changes
@@ -2750,6 +2777,29 @@ RouteTimeAxisView::create_gain_automation_child (const Evoral::Parameter& param,
}
void
+RouteTimeAxisView::create_trim_automation_child (const Evoral::Parameter& param, bool show)
+{
+ boost::shared_ptr<AutomationControl> c = _route->trim()->gain_control();
+ if (!c || ! _route->trim()->active()) {
+ return;
+ }
+
+ trim_track.reset (new AutomationTimeAxisView (_session,
+ _route, _route->trim(), c, param,
+ _editor,
+ *this,
+ false,
+ parent_canvas,
+ _route->trim()->describe_parameter(param)));
+
+ if (_view) {
+ _view->foreach_regionview (sigc::mem_fun (*trim_track.get(), &TimeAxisView::add_ghost));
+ }
+
+ add_automation_child (Evoral::Parameter(TrimAutomation), trim_track, show);
+}
+
+void
RouteTimeAxisView::create_mute_automation_child (const Evoral::Parameter& param, bool show)
{
boost::shared_ptr<AutomationControl> c = _route->mute_control();
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index ea278e4..57b2bbb 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -239,12 +239,14 @@ protected:
void color_handler ();
void region_view_added (RegionView*);
void create_gain_automation_child (const Evoral::Parameter &, bool);
+ void create_trim_automation_child (const Evoral::Parameter &, bool);
void create_mute_automation_child (const Evoral::Parameter &, bool);
void setup_processor_menu_and_curves ();
void route_color_changed ();
bool can_edit_name() const;
boost::shared_ptr<AutomationTimeAxisView> gain_track;
+ boost::shared_ptr<AutomationTimeAxisView> trim_track;
boost::shared_ptr<AutomationTimeAxisView> mute_track;
StreamView* _view;
@@ -306,6 +308,7 @@ protected:
protected:
void update_gain_track_visibility ();
+ void update_trim_track_visibility ();
void update_mute_track_visibility ();
void update_pan_track_visibility ();
@@ -316,6 +319,7 @@ protected:
void ensure_pan_views (bool show = true);
Gtk::CheckMenuItem* gain_automation_item;
+ Gtk::CheckMenuItem* trim_automation_item;
Gtk::CheckMenuItem* mute_automation_item;
std::list<boost::shared_ptr<AutomationTimeAxisView> > pan_tracks;
Gtk::CheckMenuItem* pan_automation_item;
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 9b6e800..854f6e0 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -148,8 +148,7 @@ RouteUI::init ()
rec_enable_button = manage (new ArdourButton);
rec_enable_button->set_name ("record enable button");
- rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon));
- rec_enable_button->set_icon (ArdourButton::RecButton);
+ rec_enable_button->set_icon (ArdourIcon::RecButton);
UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), "");
if (ARDOUR_UI::config()->get_blink_rec_arm()) {
@@ -1202,8 +1201,7 @@ RouteUI::mute_active_state (Session* s, boost::shared_ptr<Route> r)
if (r->muted ()) {
/* full mute */
return Gtkmm2ext::ExplicitActive;
- } else if (!r->is_master() && s->soloing() && !r->soloed() && !r->solo_isolated()) {
- /* master is NEVER muted by others */
+ } else if (r->muted_by_others()) {
return Gtkmm2ext::ImplicitActive;
} else {
/* no mute at all */
@@ -2122,10 +2120,10 @@ RouteUI::track_mode_changed (void)
switch (track()->mode()) {
case ARDOUR::NonLayered:
case ARDOUR::Normal:
- rec_enable_button->set_icon (ArdourButton::RecButton);
+ rec_enable_button->set_icon (ArdourIcon::RecButton);
break;
case ARDOUR::Destructive:
- rec_enable_button->set_icon (ArdourButton::RecTapeMode);
+ rec_enable_button->set_icon (ArdourIcon::RecTapeMode);
break;
}
rec_enable_button->queue_draw();
diff --git a/gtk2_ardour/save_as_dialog.cc b/gtk2_ardour/save_as_dialog.cc
new file mode 100644
index 0000000..f696d13
--- /dev/null
+++ b/gtk2_ardour/save_as_dialog.cc
@@ -0,0 +1,154 @@
+/*
+ Copyright (C) 2015 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 <gtkmm/stock.h>
+
+#include "ardour/session.h"
+
+#include "save_as_dialog.h"
+
+#include "i18n.h"
+
+using namespace std;
+using namespace Gtk;
+using namespace ARDOUR;
+
+SaveAsDialog::SaveAsDialog ()
+ : ArdourDialog (_("Save As"))
+ , switch_to_button (_("Switch to newly-saved version"))
+ , copy_media_button (_("Copy media to new session"))
+ , copy_external_button (_("Copy external media into new session"))
+ , no_include_media_button (_("Newly-saved session should be empty"))
+{
+ VBox* vbox = get_vbox();
+
+ vbox->set_spacing (6);
+
+ HBox* hbox;
+ Label* label;
+
+ hbox = manage (new HBox);
+ hbox->set_spacing (6);
+ label = manage (new Label (_("Save as session name")));
+ hbox->pack_start (*label, false, false);
+ hbox->pack_start (new_name_entry, true, true);
+ vbox->pack_start (*hbox, false, false);
+
+ hbox = manage (new HBox);
+ hbox->set_spacing (6);
+ label = manage (new Label (_("Parent directory/folder")));
+ hbox->pack_start (*label, false, false);
+ hbox->pack_start (new_parent_folder_selector, true, true);
+ vbox->pack_start (*hbox, false, false);
+
+ vbox->pack_start (switch_to_button, false, false);
+
+ VBox* sub_vbox = manage (new VBox);
+ HBox* sub_hbox = manage (new HBox);
+ HBox* empty = manage (new HBox);
+
+ sub_vbox->pack_start (copy_media_button, false, false);
+ sub_vbox->pack_start (copy_external_button, false, false);
+
+ /* indent the two media-related buttons by some amount */
+ sub_hbox->set_spacing (24);
+ sub_hbox->pack_start (*empty, false, false);
+ sub_hbox->pack_start (*sub_vbox, false, false);
+
+ vbox->pack_start (no_include_media_button, false, false);
+ vbox->pack_start (*sub_hbox, false, false);
+
+ switch_to_button.set_active (true);
+ copy_media_button.set_active (true);
+
+ vbox->show_all ();
+
+ add_button (Stock::CANCEL, RESPONSE_CANCEL);
+ add_button (Stock::OK, RESPONSE_OK);
+
+ no_include_media_button.signal_toggled ().connect (sigc::mem_fun (*this, &SaveAsDialog::no_include_toggled));
+
+ new_parent_folder_selector.set_action (FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ new_parent_folder_selector.set_current_folder (Glib::get_home_dir());
+ new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed));
+ set_response_sensitive (RESPONSE_OK, false);
+}
+
+void
+SaveAsDialog::no_include_toggled ()
+{
+ if (no_include_media_button.get_active()) {
+ copy_media_button.set_sensitive (false);
+ copy_external_button.set_sensitive (false);
+ } else {
+ copy_media_button.set_sensitive (true);
+ copy_external_button.set_sensitive (true);
+ }
+}
+
+void
+SaveAsDialog::name_entry_changed ()
+{
+ if (!new_name_entry.get_text().empty()) {
+ set_response_sensitive (RESPONSE_OK);
+ }
+}
+
+string
+SaveAsDialog::new_parent_folder () const
+{
+ return new_parent_folder_selector.get_filename ();
+}
+
+string
+SaveAsDialog::new_name () const
+{
+ return new_name_entry.get_text ();
+}
+
+bool
+SaveAsDialog::switch_to () const
+{
+ return switch_to_button.get_active ();
+}
+
+bool
+SaveAsDialog::copy_media () const
+{
+ return copy_media_button.get_active ();
+}
+
+bool
+SaveAsDialog::copy_external () const
+{
+ return copy_external_button.get_active ();
+}
+
+void
+SaveAsDialog::clear_name ()
+{
+ new_name_entry.set_text ("");
+ set_response_sensitive (RESPONSE_OK, false);
+}
+
+bool
+SaveAsDialog::include_media () const
+{
+ return !no_include_media_button.get_active ();
+}
diff --git a/gtk2_ardour/new_plugin_preset_dialog.h b/gtk2_ardour/save_as_dialog.h
similarity index 51%
copy from gtk2_ardour/new_plugin_preset_dialog.h
copy to gtk2_ardour/save_as_dialog.h
index 8dddf6c..75751f8 100644
--- a/gtk2_ardour/new_plugin_preset_dialog.h
+++ b/gtk2_ardour/save_as_dialog.h
@@ -1,6 +1,5 @@
/*
- Copyright (C) 2010 Paul Davis
- Author: Carl Hetherington <cth at carlh.net>
+ Copyright (C) 2015 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
@@ -18,24 +17,40 @@
*/
+#ifndef __ardour_gtk_save_as_dialog_h__
+#define __ardour_gtk_save_as_dialog_h__
+
#include <gtkmm/entry.h>
#include <gtkmm/checkbutton.h>
-#include "ardour/plugin.h"
+#include <gtkmm/filechooserbutton.h>
+
#include "ardour_dialog.h"
-class NewPluginPresetDialog : public ArdourDialog
+class SaveAsDialog : public ArdourDialog
{
public:
- NewPluginPresetDialog (boost::shared_ptr<ARDOUR::Plugin>);
-
- std::string name () const;
- bool replace () const;
-
+ SaveAsDialog ();
+
+ std::string new_parent_folder () const;
+ std::string new_name () const;
+
+ bool switch_to () const;
+ bool include_media () const;
+ bool copy_media () const;
+ bool copy_external () const;
+
+ void clear_name ();
+
private:
- void setup_sensitivity ();
-
- Gtk::Entry _name;
- Gtk::CheckButton _replace;
- Gtk::Button* _add;
- std::vector<ARDOUR::Plugin::PresetRecord> _presets;
+ Gtk::CheckButton switch_to_button;
+ Gtk::CheckButton copy_media_button;
+ Gtk::CheckButton copy_external_button;
+ Gtk::CheckButton no_include_media_button;
+ Gtk::FileChooserButton new_parent_folder_selector;
+ Gtk::Entry new_name_entry;
+
+ void name_entry_changed ();
+ void no_include_toggled ();
};
+
+#endif /* __ardour_gtk_tempo_dialog_h__ */
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc
index d879ce5..440b62a 100644
--- a/gtk2_ardour/shuttle_control.cc
+++ b/gtk2_ardour/shuttle_control.cc
@@ -302,9 +302,10 @@ ShuttleControl::on_button_release_event (GdkEventButton* ev)
if (Config->get_shuttle_behaviour() == Sprung) {
if (shuttle_speed_on_grab == 0 ) {
- _session->request_transport_speed (1.0);
+ _session->request_stop ();
+ } else {
+ _session->request_transport_speed (shuttle_speed_on_grab);
}
- _session->request_transport_speed (shuttle_speed_on_grab);
} else {
mouse_shuttle (ev->x, true);
}
diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc
index 7bd82cf..63d7066 100644
--- a/gtk2_ardour/step_editor.cc
+++ b/gtk2_ardour/step_editor.cc
@@ -88,7 +88,7 @@ StepEditor::start_step_editing ()
void
StepEditor::resync_step_edit_position ()
{
- step_edit_insert_position = _editor.get_preferred_edit_position (false, false, true);
+ step_edit_insert_position = _editor.get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, true);
}
void
diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc
index 53cb659..ab057c9 100644
--- a/gtk2_ardour/stereo_panner.cc
+++ b/gtk2_ardour/stereo_panner.cc
@@ -53,11 +53,6 @@ using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR_UI_UTILS;
-static const int pos_box_size = 8;
-static const int lr_box_size = 15;
-static const int step_down = 10;
-static const int top_step = 2;
-
StereoPanner::ColorScheme StereoPanner::colors[3];
bool StereoPanner::have_colors = false;
@@ -150,13 +145,18 @@ StereoPanner::on_expose_event (GdkEventExpose*)
const double pos = position_control->get_value (); /* 0..1 */
const double swidth = width_control->get_value (); /* -1..+1 */
const double fswidth = fabs (swidth);
- const double corner_radius = 5.0;
uint32_t o, f, t, b, r;
State state;
width = get_width();
height = get_height ();
+ const int step_down = rint(height / 3.5);
+ const double corner_radius = 5.0 * ARDOUR_UI::ui_scale;
+ const int lr_box_size = height - 2 * step_down;
+ const int pos_box_size = (int)(rint(step_down * .8)) | 1;
+ const int top_step = step_down - pos_box_size;
+
if (swidth == 0.0) {
state = Mono;
} else if (swidth < 0.0) {
@@ -412,6 +412,7 @@ StereoPanner::on_button_press_event (GdkEventButton* ev)
double pos = position_control->get_value (); /* 0..1 */
double swidth = width_control->get_value (); /* -1..+1 */
double fswidth = fabs (swidth);
+ const int lr_box_size = get_height() - 2 * rint(get_height() / 3.5);
int usable_width = get_width() - lr_box_size;
double center = (lr_box_size/2.0) + (usable_width * pos);
int left = lrint (center - (fswidth * usable_width / 2.0)); // center of leftmost box
@@ -529,6 +530,7 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev)
return false;
}
+ const int lr_box_size = get_height() - 2 * rint(get_height() / 3.5);
int usable_width = get_width() - lr_box_size;
double delta = (ev->x - last_drag_x) / (double) usable_width;
double current_width = width_control->get_value ();
diff --git a/gtk2_ardour/tape_region_view.cc b/gtk2_ardour/tape_region_view.cc
index f40ccb6..2d71bdf 100644
--- a/gtk2_ardour/tape_region_view.cc
+++ b/gtk2_ardour/tape_region_view.cc
@@ -82,12 +82,23 @@ void
TapeAudioRegionView::update (uint32_t /*n*/)
{
/* check that all waves are build and ready */
-
if (!tmp_waves.empty()) {
return;
}
ENSURE_GUI_THREAD (*this, &TapeAudioRegionView::update, n);
// CAIROCANVAS
- // waves[n]->rebuild ();
+
+ /* this is a quick hack to draw something (abuse gain_changed to force
+ * an image-cache invalidation.
+ *
+ * TODO: ArdourCanvas::WaveView needs an API to look up the specific channel "n"
+ * and a special case to not only invalidate the cache but re-expose the
+ * waveform. e.g.
+ *
+ * waves[m]->rebuild(); // where 'm' corresponds to channel 'n'.
+ */
+ for (uint32_t i = 0; i < waves.size(); ++i) {
+ waves[i]->gain_changed ();
+ }
}
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc
index a16d224..a458c42 100644
--- a/gtk2_ardour/tempo_dialog.cc
+++ b/gtk2_ardour/tempo_dialog.cc
@@ -181,7 +181,10 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double note_type,
when_beat_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT));
when_beat_entry.signal_key_release_event().connect (sigc::mem_fun (*this, &TempoDialog::entry_key_release), false);
pulse_selector.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::pulse_change));
- tap_tempo_button.signal_clicked().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo));
+ tap_tempo_button.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_button_press), false);
+ tap_tempo_button.signal_focus_out_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_focus_out));
+
+ tapped = false;
}
bool
@@ -261,35 +264,51 @@ TempoDialog::pulse_change ()
set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
}
-void
-TempoDialog::tap_tempo ()
+bool
+TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
{
gint64 now;
now = g_get_monotonic_time (); // microseconds
- if (last_tap > 0) {
+ if (tapped) {
double interval, bpm;
static const double decay = 0.5;
interval = (now - last_tap) * 1.0e-6;
if (interval <= 6.0) {
- // >= 10 bpm, say
+ // <= 6 seconds (say): >= 10 bpm
if (average_interval > 0) {
+ if (average_interval > interval / 1.2 && average_interval < interval * 1.2) {
average_interval = interval * decay
+ average_interval * (1.0-decay);
+ } else {
+ average_interval = 0;
+ }
} else {
average_interval = interval;
}
- bpm = 60.0 / average_interval;
- bpm_spinner.set_value (bpm);
+ if (average_interval > 0) {
+ bpm = 60.0 / average_interval;
+ bpm_spinner.set_value (bpm);
+ }
} else {
average_interval = 0;
}
} else {
average_interval = 0;
+ tapped = true;
}
last_tap = now;
+
+ return true;
+}
+
+bool
+TempoDialog::tap_tempo_focus_out (GdkEventFocus* )
+{
+ tapped = false;
+ return false;
}
MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string&)
diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h
index da924ac..eda4e61 100644
--- a/gtk2_ardour/tempo_dialog.h
+++ b/gtk2_ardour/tempo_dialog.h
@@ -53,11 +53,13 @@ private:
bool bpm_button_release (GdkEventButton* );
bool entry_key_release (GdkEventKey* );
void pulse_change ();
- void tap_tempo ();
+ bool tap_tempo_button_press (GdkEventButton* );
+ bool tap_tempo_focus_out (GdkEventFocus* );
typedef std::map<std::string,float> NoteTypes;
NoteTypes note_types;
+ bool tapped; // whether the tap-tempo button has been clicked
gint64 last_tap;
double average_interval;
diff --git a/gtk2_ardour/theme_manager.cc b/gtk2_ardour/theme_manager.cc
index 1af708e..1f1baa8 100644
--- a/gtk2_ardour/theme_manager.cc
+++ b/gtk2_ardour/theme_manager.cc
@@ -24,6 +24,8 @@
#include "fix_carbon.h"
+#include <glib/gstdio.h>
+
#include <gtkmm/stock.h>
#include <gtkmm/settings.h>
@@ -385,6 +387,19 @@ ThemeManager::set_ui_to_state()
void
ThemeManager::reset_canvas_colors()
{
+ string cfile;
+ string basename;
+
+ basename = "my-";
+ basename += ARDOUR_UI::config()->get_color_file();
+ basename += ".colors";
+
+ if (find_file (ardour_config_search_path(), basename, cfile)) {
+ string backup = cfile + string (X_(".old"));
+ g_rename (cfile.c_str(), backup.c_str());
+ /* don't really care if it fails */
+ }
+
ARDOUR_UI::config()->load_defaults();
ARDOUR_UI::config()->save_state ();
set_ui_to_state();
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 23aaa61..9deb7eb 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -27,6 +27,7 @@
#include "pbd/error.h"
#include "pbd/convert.h"
#include "pbd/stacktrace.h"
+#include "pbd/unwind.h"
#include <gtkmm2ext/doi.h>
#include <gtkmm2ext/utils.h>
@@ -82,7 +83,7 @@ Glib::RefPtr<Gtk::SizeGroup> TimeAxisView::midi_scroomer_size_group = Glib::RefP
void
TimeAxisView::setup_sizes()
{
- name_width_px = ceil (100. * ARDOUR_UI::config()->get_font_scale() / 102400.);
+ name_width_px = ceilf (100.f * ARDOUR_UI::ui_scale);
}
TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisView* rent, Canvas& /*canvas*/)
@@ -102,6 +103,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
, _y_position (0)
, _editor (ed)
, name_entry (0)
+ , ending_name_edit (false)
, control_parent (0)
, _order (0)
, _effective_height (0)
@@ -696,6 +698,15 @@ TimeAxisView::end_name_edit (int response)
if (!name_entry) {
return;
}
+
+ if (ending_name_edit) {
+ /* already doing this, and focus out or other event has caused
+ us to re-enter this code.
+ */
+ return;
+ }
+
+ PBD::Unwinder<bool> uw (ending_name_edit, true);
bool edit_next = false;
bool edit_prev = false;
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index baeeb2a..1eb1935 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -259,6 +259,7 @@ class TimeAxisView : public virtual AxisView
bool name_entry_focus_out (GdkEventFocus *ev);
Gtk::Entry* name_entry;
+ bool ending_name_edit;
void begin_name_edit ();
void end_name_edit (int);
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index 9a0e377..94f9b93 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -209,24 +209,12 @@ TimeAxisViewItem::init (ArdourCanvas::Item* parent, double fpp, uint32_t base_co
if (ARDOUR_UI::config()->get_show_name_highlight() && (visibility & ShowNameHighlight)) {
- double width;
- double start = 1.0;
-
- if (visibility & FullWidthNameHighlight) {
- width = trackview.editor().sample_to_pixel(item_duration);
- } else {
- width = trackview.editor().sample_to_pixel(item_duration) - 2.0;
- }
-
- name_highlight = new ArdourCanvas::Rectangle (group,
- ArdourCanvas::Rect (start,
- trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE,
- width - 2.0,
- trackview.current_height() - 1.0));
+ /* rectangle size will be set in ::manage_name_highlight() */
+ name_highlight = new ArdourCanvas::Rectangle (group);
CANVAS_DEBUG_NAME (name_highlight, string_compose ("name highlight for %1", get_item_name()));
name_highlight->set_data ("timeaxisviewitem", this);
name_highlight->set_outline_what (ArdourCanvas::Rectangle::TOP);
- name_highlight->set_outline_color (RGBA_TO_UINT (0,0,0,255));
+ name_highlight->set_outline_color (RGBA_TO_UINT (0,0,0,255)); // this should use a theme color
} else {
name_highlight = 0;
@@ -575,7 +563,7 @@ TimeAxisViewItem::set_height (double height)
if (frame) {
- frame->set_y0 (1.0);
+ frame->set_y0 (0.0);
frame->set_y1 (height);
if (frame_handle_start) {
@@ -589,7 +577,7 @@ TimeAxisViewItem::set_height (double height)
}
if (vestigial_frame) {
- vestigial_frame->set_y0 (1.0);
+ vestigial_frame->set_y0 (0.0);
vestigial_frame->set_y1 (height);
}
@@ -618,7 +606,8 @@ TimeAxisViewItem::manage_name_highlight ()
if (name_highlight && wide_enough_for_name && high_enough_for_name) {
name_highlight->show();
- name_highlight->set (ArdourCanvas::Rect (1.0, (double) _height - NAME_HIGHLIGHT_SIZE, _width, (double) _height - 1.0));
+ // name_highlight->set_x_position (1.0);
+ name_highlight->set (ArdourCanvas::Rect (0.0, (double) _height - NAME_HIGHLIGHT_SIZE, _width - 2.0, _height));
} else {
name_highlight->hide();
diff --git a/gtk2_ardour/transcode_ffmpeg.cc b/gtk2_ardour/transcode_ffmpeg.cc
index 7666395..7ecdc36 100644
--- a/gtk2_ardour/transcode_ffmpeg.cc
+++ b/gtk2_ardour/transcode_ffmpeg.cc
@@ -470,7 +470,7 @@ TranscodeFfmpeg::transcode (std::string outfile, const int outw, const int outh,
if (bitrate < 10) bitrate = 10;
if (bitrate > 1000) bitrate = 1000;
- argp=(char**) calloc(16,sizeof(char*));
+ argp=(char**) calloc(15,sizeof(char*));
argp[0] = strdup(ffmpeg_exe.c_str());
argp[1] = strdup("-i");
argp[2] = strdup(infile.c_str());
@@ -480,18 +480,17 @@ TranscodeFfmpeg::transcode (std::string outfile, const int outw, const int outh,
argp[6] = (char*) calloc(10,sizeof(char)); snprintf(argp[6], 10, "%ix%i", width, height);
argp[7] = strdup("-y");
argp[8] = strdup("-vcodec");
- argp[9] = strdup("mjpeg");
+ argp[9] = strdup("mpeg4");
argp[10] = strdup("-an");
- argp[11] = strdup("-intra");
- argp[12] = strdup("-g");
- argp[13] = strdup("1");
- argp[14] = strdup(outfile.c_str());
- argp[15] = (char *)0;
+ argp[11] = strdup("-keyint_min");
+ argp[12] = strdup("10");
+ argp[13] = strdup(outfile.c_str());
+ argp[14] = (char *)0;
/* Note: these are free()d in ~SystemExec */
#if 1 /* DEBUG */
if (debug_enable) { /* tentative debug mode */
printf("TRANSCODE VIDEO:\n");
- for (int i=0; i< 15; ++i) {
+ for (int i=0; i< 14; ++i) {
printf("%s ", argp[i]);
}
printf("\n");
diff --git a/gtk2_ardour/ui_config.cc b/gtk2_ardour/ui_config.cc
index 1040c54..1fe2d41 100644
--- a/gtk2_ardour/ui_config.cc
+++ b/gtk2_ardour/ui_config.cc
@@ -23,6 +23,8 @@
#include <cstdlib>
#include <cstdio> /* for snprintf, grrr */
+#include <cairo/cairo.h>
+
#include <glibmm/miscutils.h>
#include <glib/gstdio.h>
@@ -78,10 +80,6 @@ UIConfiguration::UIConfiguration ()
ARDOUR_UI_UTILS::ColorsChanged.connect (boost::bind (&UIConfiguration::colors_changed, this));
ParameterChanged.connect (sigc::mem_fun (*this, &UIConfiguration::parameter_changed));
-
- /* force GTK theme setting, so that loading an RC file will work */
-
- load_color_theme ();
}
UIConfiguration::~UIConfiguration ()
@@ -152,6 +150,24 @@ UIConfiguration::map_parameters (boost::function<void (std::string)>& functor)
}
int
+UIConfiguration::pre_gui_init ()
+{
+#ifdef CAIRO_SUPPORTS_FORCE_BUGGY_GRADIENTS_ENVIRONMENT_VARIABLE
+ if (get_buggy_gradients()) {
+ g_setenv ("FORCE_BUGGY_GRADIENTS", "1", 1);
+ }
+#endif
+ return 0;
+}
+
+UIConfiguration*
+UIConfiguration::post_gui_init ()
+{
+ load_color_theme ();
+ return this;
+}
+
+int
UIConfiguration::load_defaults ()
{
std::string rcfile;
@@ -177,13 +193,14 @@ UIConfiguration::load_defaults ()
warning << string_compose (_("Could not find default UI configuration file %1"), default_ui_config_file_name) << endmsg;
}
+
if (ret == 0) {
/* reload color theme */
load_color_theme (false);
ARDOUR_UI_UTILS::ColorsChanged (); /* EMIT SIGNAL */
}
- return 0;
+ return ret;
}
int
diff --git a/gtk2_ardour/ui_config.h b/gtk2_ardour/ui_config.h
index c9f950d..285bc53 100644
--- a/gtk2_ardour/ui_config.h
+++ b/gtk2_ardour/ui_config.h
@@ -48,6 +48,7 @@ class UIConfiguration : public PBD::Stateful
int load_state ();
int save_state ();
int load_defaults ();
+ int load_color_theme (bool allow_own=true);
int set_state (const XMLNode&, int version);
XMLNode& get_state (void);
@@ -79,6 +80,16 @@ class UIConfiguration : public PBD::Stateful
void map_parameters (boost::function<void (std::string)>&);
void parameter_changed (std::string);
+
+ /** called before initializing any part of the GUI. Sets up
+ * any runtime environment required to make the GUI work
+ * in specific ways.
+ */
+ int pre_gui_init ();
+
+ /** called after the GUI toolkit has been initialized.
+ */
+ UIConfiguration* post_gui_init ();
#undef UI_CONFIG_VARIABLE
#define UI_CONFIG_VARIABLE(Type,var,name,value) \
@@ -118,7 +129,6 @@ class UIConfiguration : public PBD::Stateful
void load_modifiers (XMLNode const &);
void reset_gtk_theme ();
void colors_changed ();
- int load_color_theme (bool allow_own=true);
uint32_t block_save;
};
diff --git a/gtk2_ardour/ui_config_vars.h b/gtk2_ardour/ui_config_vars.h
index 8c6f7bf..ae6648a 100644
--- a/gtk2_ardour/ui_config_vars.h
+++ b/gtk2_ardour/ui_config_vars.h
@@ -71,3 +71,5 @@ UI_CONFIG_VARIABLE (bool, show_editor_meter, "show-editor-meter", true)
UI_CONFIG_VARIABLE (double, waveform_clip_level, "waveform-clip-level", -0.0933967) /* units of dB */
UI_CONFIG_VARIABLE (bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true)
UI_CONFIG_VARIABLE (bool, no_new_session_dialog, "no-new-session-dialog", false)
+UI_CONFIG_VARIABLE (bool, buggy_gradients, "buggy-gradients", false)
+UI_CONFIG_VARIABLE (uint64_t, waveform_cache_size, "waveform-cache-size", 100) /* units of megagbytes */
diff --git a/gtk2_ardour/video_timeline.cc b/gtk2_ardour/video_timeline.cc
index eed09fd..12236ee 100644
--- a/gtk2_ardour/video_timeline.cc
+++ b/gtk2_ardour/video_timeline.cc
@@ -356,16 +356,20 @@ VideoTimeLine::update_video_timeline()
vtl_start -= visible_video_frames * vtl_dist;
visible_video_frames *=3;
- if (vtl_start < video_offset ) {
- visible_video_frames += ceil((double)vtl_start/vtl_dist);
+ /* don't request frames that are too far to the right */
+ if (vtl_start < video_offset) {
+ visible_video_frames = std::max((double)0.0, (double)visible_video_frames + ceil((double)(vtl_start - video_offset)/vtl_dist));
vtl_start = video_offset;
}
- /* apply video-file constraints */
+ /* apply video-file constraints
+ * (first frame in video is at video_start_offset) */
if (vtl_start > video_start_offset + video_duration + video_offset ) {
visible_video_frames = 0;
}
- /* TODO optimize: compute rather than iterate */
+ /* trim end.
+ * end = position on timeline (video-offset) minus video-file's first frame position
+ * TODO optimize: compute rather than iterate */
while (visible_video_frames > 0 && vtl_start + (visible_video_frames-1) * vtl_dist >= video_start_offset + video_duration + video_offset) {
--visible_video_frames;
}
@@ -757,14 +761,13 @@ VideoTimeLine::find_xjadeo () {
{
if (v_major >= 1) v_ok = true;
else if (v_major == 0 && v_minor >= 8) v_ok = true;
- else if (v_major == 0 && v_minor >= 7 && v_micro >= 7) v_ok = true;
}
}
if (!v_ok) {
_xjadeo_bin = X_("");
warning << _(
"Video-monitor 'xjadeo' is too old. "
- "Please install xjadeo version 0.7.7 or later. http://xjadeo.sf.net/"
+ "Please install xjadeo version 0.8.0 or later. http://xjadeo.sf.net/"
) << endmsg;
}
}
diff --git a/gtk2_ardour/vst_plugin_ui.cc b/gtk2_ardour/vst_plugin_ui.cc
index 56b8344..a5e3afe 100644
--- a/gtk2_ardour/vst_plugin_ui.cc
+++ b/gtk2_ardour/vst_plugin_ui.cc
@@ -39,7 +39,8 @@ VSTPluginUI::VSTPluginUI (boost::shared_ptr<ARDOUR::PluginInsert> insert, boost:
box->set_spacing (6);
box->set_border_width (6);
box->pack_end (focus_button, false, false);
- box->pack_end (bypass_button, false, false, 10);
+ box->pack_end (bypass_button, false, false, 4);
+ box->pack_end (reset_button, false, false, 4);
box->pack_end (delete_button, false, false);
box->pack_end (save_button, false, false);
box->pack_end (add_button, false, false);
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index c3e5655..60d99a6 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -106,7 +106,7 @@ gtk2_ardour_sources = [
'group_tabs.cc',
'gtk_pianokeyboard.c',
'gui_object.cc',
- 'insert_time_dialog.cc',
+ 'insert_remove_time_dialog.cc',
'instrument_selector.cc',
'interthread_progress_window.cc',
'io_selector.cc',
@@ -144,6 +144,7 @@ gtk2_ardour_sources = [
'meter_strip.cc',
'meter_patterns.cc',
'monitor_section.cc',
+ 'monitor_selector.cc',
'mono_panner.cc',
'mono_panner_editor.cc',
'mouse_cursors.cc',
@@ -199,6 +200,7 @@ gtk2_ardour_sources = [
'route_time_axis.cc',
'route_ui.cc',
'ruler_dialog.cc',
+ 'save_as_dialog.cc',
'search_path_option.cc',
'selection.cc',
'selection_memento.cc',
diff --git a/icons/win32/res/mixbus_icon12_32.ico b/icons/win32/res/mixbus_icon12_32.ico
deleted file mode 100644
index 59d007e..0000000
Binary files a/icons/win32/res/mixbus_icon12_32.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_icon12_48.ico b/icons/win32/res/mixbus_icon12_48.ico
deleted file mode 100644
index 9c46000..0000000
Binary files a/icons/win32/res/mixbus_icon12_48.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_icon12_64.ico b/icons/win32/res/mixbus_icon12_64.ico
deleted file mode 100644
index a52a925..0000000
Binary files a/icons/win32/res/mixbus_icon12_64.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_icon_32px.ico b/icons/win32/res/mixbus_icon_32px.ico
deleted file mode 100644
index 59d007e..0000000
Binary files a/icons/win32/res/mixbus_icon_32px.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_icon_48px.ico b/icons/win32/res/mixbus_icon_48px.ico
deleted file mode 100644
index 9c46000..0000000
Binary files a/icons/win32/res/mixbus_icon_48px.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_icon_64px.ico b/icons/win32/res/mixbus_icon_64px.ico
deleted file mode 100644
index a52a925..0000000
Binary files a/icons/win32/res/mixbus_icon_64px.ico and /dev/null differ
diff --git a/icons/win32/res/mixbus_ses_icon_32.ico b/icons/win32/res/mixbus_ses_icon_32.ico
deleted file mode 100644
index d1cd5fe..0000000
Binary files a/icons/win32/res/mixbus_ses_icon_32.ico and /dev/null differ
diff --git a/libs/ardour/MSVClibardour/ardour.vcproj b/libs/ardour/MSVClibardour/ardour.vcproj
index 18fcf4f..25b6d76 100644
--- a/libs/ardour/MSVClibardour/ardour.vcproj
+++ b/libs/ardour/MSVClibardour/ardour.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;"..\..\midi++2";..\..\audiographer;"$(GenericIncludeFolder)\taglib";"$(GenericIncludeFolder)\taglib\toolkit";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;DEBUGGABLE_BACKENDS;DEBUGGABLE_SCANNER_APP;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;DEBUGGABLE_BACKENDS;DEBUGGABLE_SCANNER_APP;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;"..\..\midi++2";..\..\audiographer;"$(GenericIncludeFolder)\taglib";"$(GenericIncludeFolder)\taglib\toolkit";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;"..\..\midi++2";..\..\audiographer;"$(GenericIncludeFolder)\taglib";"$(GenericIncludeFolder)\taglib\toolkit";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;DEBUGGABLE_BACKENDS;DEBUGGABLE_SCANNER_APP;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;DEBUGGABLE_BACKENDS;DEBUGGABLE_SCANNER_APP;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_LIBARDOUR;LIBARDOUR_DLL_EXPORTS;LIBARDOUR=\"mixbus3\";RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;ENABLE_NLS;PACKAGE="\"ardour3\"";PROGRAM_NAME="\"Mixbus\"";PROGRAM_VERSION="\"3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc
index 523b538..880fe25 100644
--- a/libs/ardour/amp.cc
+++ b/libs/ardour/amp.cc
@@ -34,19 +34,23 @@
using namespace ARDOUR;
using namespace PBD;
-using std::min;
-Amp::Amp (Session& s)
+// used for low-pass filter denormal protection
+#define GAIN_COEFF_TINY (1e-10) // -200dB
+
+Amp::Amp (Session& s, std::string type)
: Processor(s, "Amp")
, _apply_gain(true)
, _apply_gain_automation(false)
- , _current_gain(1.0)
+ , _current_gain(GAIN_COEFF_ZERO)
, _current_automation_frame (INT64_MAX)
, _gain_automation_buffer(0)
+ , _type (type)
+ , _midi_amp (type != "trim")
{
- Evoral::Parameter p (GainAutomation);
+ Evoral::Parameter p (_type == "trim" ? TrimAutomation : GainAutomation);
boost::shared_ptr<AutomationList> gl (new AutomationList (p));
- _gain_control = boost::shared_ptr<GainControl> (new GainControl (X_("gaincontrol"), s, this, p, gl));
+ _gain_control = boost::shared_ptr<GainControl> (new GainControl ((_type == "trim") ? X_("trimcontrol") : X_("gaincontrol"), s, this, p, gl));
_gain_control->set_flags (Controllable::GainLike);
add_control(_gain_control);
@@ -89,8 +93,22 @@ Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/,
gain_t* gab = _gain_automation_buffer;
assert (gab);
- const float a = 62.78 / _session.nominal_frame_rate(); // 10 Hz LPF
- float lpf = _current_gain;
+ if (_midi_amp) {
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ MidiBuffer& mb (*i);
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ assert(ev.time() >= 0 && ev.time() < nframes);
+ ev.scale_velocity (fabsf (gab[ev.time()]));
+ }
+ }
+ }
+ }
+
+
+ const double a = 156.825 / _session.nominal_frame_rate(); // 25 Hz LPF; see Amp::apply_gain for details
+ double lpf = _current_gain;
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const sp = i->data();
@@ -101,8 +119,8 @@ Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/,
}
}
- if (lpf < 1e-10) {
- _current_gain = 0;
+ if (fabs (lpf) < GAIN_COEFF_TINY) {
+ _current_gain = GAIN_COEFF_ZERO;
} else {
_current_gain = lpf;
}
@@ -113,21 +131,23 @@ Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/,
if (_current_gain != dg) {
- _current_gain = Amp::apply_gain (bufs, _session.nominal_frame_rate(), nframes, _current_gain, dg);
+ _current_gain = Amp::apply_gain (bufs, _session.nominal_frame_rate(), nframes, _current_gain, dg, _midi_amp);
- } else if (_current_gain != 1.0f) {
+ } else if (_current_gain != GAIN_COEFF_UNITY) {
- /* gain has not changed, but its non-unity
- */
+ /* gain has not changed, but its non-unity */
- for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ if (_midi_amp) {
+ /* don't Trim midi velocity -- only relevant for Midi on Audio tracks */
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
- MidiBuffer& mb (*i);
-
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
- if (ev.is_note_on()) {
- ev.scale_velocity (_current_gain);
+ MidiBuffer& mb (*i);
+
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.scale_velocity (fabsf (_current_gain));
+ }
}
}
}
@@ -143,7 +163,7 @@ Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/,
}
gain_t
-Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, gain_t initial, gain_t target)
+Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, gain_t initial, gain_t target, bool midi_amp)
{
/** Apply a (potentially) declicked gain to the buffers of @a bufs */
gain_t rv = target;
@@ -159,25 +179,28 @@ Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, ga
}
/* MIDI Gain */
- for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
-
- gain_t delta;
- if (target < initial) {
- /* fade out: remove more and more of delta from initial */
- delta = -(initial - target);
- } else {
- /* fade in: add more and more of delta from initial */
- delta = target - initial;
- }
+ if (midi_amp) {
+ /* don't Trim midi velocity -- only relevant for Midi on Audio tracks */
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+
+ gain_t delta;
+ if (target < initial) {
+ /* fade out: remove more and more of delta from initial */
+ delta = -(initial - target);
+ } else {
+ /* fade in: add more and more of delta from initial */
+ delta = target - initial;
+ }
- MidiBuffer& mb (*i);
+ MidiBuffer& mb (*i);
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
- if (ev.is_note_on()) {
- const gain_t scale = delta * (ev.time()/(double) nframes);
- ev.scale_velocity (initial+scale);
+ if (ev.is_note_on()) {
+ const gain_t scale = delta * (ev.time()/(double) nframes);
+ ev.scale_velocity (fabsf (initial+scale));
+ }
}
}
}
@@ -187,11 +210,11 @@ Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, ga
/* Low pass filter coefficient: 1.0 - e^(-2.0 * Ï * f / 48000) f in Hz.
* for f << SR, approx a ~= 6.2 * f / SR;
*/
- const float a = 62.78 / sample_rate; // 10 Hz LPF
+ const double a = 156.825 / sample_rate; // 25 Hz LPF
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const buffer = i->data();
- float lpf = initial;
+ double lpf = initial;
for (pframes_t nx = 0; nx < nframes; ++nx) {
buffer[nx] *= lpf;
@@ -201,9 +224,8 @@ Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, ga
rv = lpf;
}
}
- // 1e-10 ~ 200dB, prevent denormals.
- if (rv < 1e-10) return 0;
- if (fabsf(rv - 1.0) < 1e-10) return 1.0;
+ if (fabsf (rv - target) < GAIN_COEFF_TINY) return target;
+ if (fabsf (rv) < GAIN_COEFF_TINY) return GAIN_COEFF_ZERO;
return rv;
}
@@ -221,11 +243,11 @@ Amp::declick (BufferSet& bufs, framecnt_t nframes, int dir)
if (dir < 0) {
/* fade out: remove more and more of delta from initial */
delta = -1.0;
- initial = 1.0;
+ initial = GAIN_COEFF_UNITY;
} else {
/* fade in: add more and more of delta from initial */
delta = 1.0;
- initial = 0.0;
+ initial = GAIN_COEFF_ZERO;
}
/* Audio Gain */
@@ -267,31 +289,34 @@ Amp::apply_gain (AudioBuffer& buf, framecnt_t sample_rate, framecnt_t nframes, g
}
Sample* const buffer = buf.data();
- const float a = 62.78 / sample_rate; // 10 Hz LPF, see [other] Amp::apply_gain() above,
+ const double a = 156.825 / sample_rate; // 25 Hz LPF, see [other] Amp::apply_gain() above for details
- float lpf = initial;
+ double lpf = initial;
for (pframes_t nx = 0; nx < nframes; ++nx) {
buffer[nx] *= lpf;
lpf += a * (target - lpf);
}
- if (lpf < 1e-10) return 0;
- if (fabsf(lpf - 1.0) < 1e-10) return 1.0;
+ if (fabs (lpf - target) < GAIN_COEFF_TINY) return target;
+ if (fabs (lpf) < GAIN_COEFF_TINY) return GAIN_COEFF_ZERO;
return lpf;
}
void
-Amp::apply_simple_gain (BufferSet& bufs, framecnt_t nframes, gain_t target)
+Amp::apply_simple_gain (BufferSet& bufs, framecnt_t nframes, gain_t target, bool midi_amp)
{
- if (target == 0.0) {
+ if (fabsf (target) < GAIN_COEFF_SMALL) {
- for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
- MidiBuffer& mb (*i);
+ if (midi_amp) {
+ /* don't Trim midi velocity -- only relevant for Midi on Audio tracks */
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ MidiBuffer& mb (*i);
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
- if (ev.is_note_on()) {
- ev.set_velocity (0);
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.set_velocity (0);
+ }
}
}
}
@@ -300,15 +325,18 @@ Amp::apply_simple_gain (BufferSet& bufs, framecnt_t nframes, gain_t target)
memset (i->data(), 0, sizeof (Sample) * nframes);
}
- } else if (target != 1.0) {
+ } else if (target != GAIN_COEFF_UNITY) {
- for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
- MidiBuffer& mb (*i);
+ if (midi_amp) {
+ /* don't Trim midi velocity -- only relevant for Midi on Audio tracks */
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ MidiBuffer& mb (*i);
- for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
- if (ev.is_note_on()) {
- ev.scale_velocity (target);
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.scale_velocity (fabsf (target));
+ }
}
}
}
@@ -322,9 +350,9 @@ Amp::apply_simple_gain (BufferSet& bufs, framecnt_t nframes, gain_t target)
void
Amp::apply_simple_gain (AudioBuffer& buf, framecnt_t nframes, gain_t target)
{
- if (target == 0.0) {
+ if (fabsf (target) < GAIN_COEFF_SMALL) {
memset (buf.data(), 0, sizeof (Sample) * nframes);
- } else if (target != 1.0) {
+ } else if (target != GAIN_COEFF_UNITY) {
apply_gain_to_buffer (buf.data(), nframes, target);
}
}
@@ -334,7 +362,8 @@ Amp::inc_gain (gain_t factor, void *src)
{
float desired_gain = _gain_control->user_double();
- if (desired_gain == 0.0f) {
+ if (fabsf (desired_gain) < GAIN_COEFF_SMALL) {
+ // really?! what's the idea here?
set_gain (0.000001f + (0.000001f * factor), src);
} else {
set_gain (desired_gain + (desired_gain * factor), src);
@@ -351,7 +380,7 @@ XMLNode&
Amp::state (bool full_state)
{
XMLNode& node (Processor::state (full_state));
- node.add_property("type", "amp");
+ node.add_property("type", _type);
node.add_child_nocopy (_gain_control->get_state());
return node;
@@ -374,20 +403,28 @@ Amp::set_state (const XMLNode& node, int version)
void
Amp::GainControl::set_value (double val)
{
- AutomationControl::set_value (min (val, (double) Config->get_max_gain()));
+ AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower));
_amp->session().set_dirty ();
}
double
Amp::GainControl::internal_to_interface (double v) const
{
- return gain_to_slider_position (v);
+ if (_desc.type == GainAutomation) {
+ return gain_to_slider_position (v);
+ } else {
+ return (accurate_coefficient_to_dB (v) - lower_db) / range_db;
+ }
}
double
Amp::GainControl::interface_to_internal (double v) const
{
- return slider_position_to_gain (v);
+ if (_desc.type == GainAutomation) {
+ return slider_position_to_gain (v);
+ } else {
+ return dB_to_coefficient (lower_db + v * range_db);
+ }
}
double
diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h
index 5bfcf1d..04e4c16 100644
--- a/libs/ardour/ardour/amp.h
+++ b/libs/ardour/ardour/amp.h
@@ -19,6 +19,7 @@
#ifndef __ardour_amp_h__
#define __ardour_amp_h__
+#include "ardour/dB.h"
#include "ardour/libardour_visibility.h"
#include "ardour/types.h"
#include "ardour/chan_count.h"
@@ -35,7 +36,7 @@ class IO;
*/
class LIBARDOUR_API Amp : public Processor {
public:
- Amp(Session& s);
+ Amp(Session& s, std::string type = "amp");
std::string display_name() const;
@@ -59,8 +60,8 @@ public:
XMLNode& state (bool full);
int set_state (const XMLNode&, int version);
- static gain_t apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, gain_t initial, gain_t target);
- static void apply_simple_gain(BufferSet& bufs, framecnt_t nframes, gain_t target);
+ static gain_t apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, gain_t initial, gain_t target, bool midi_amp = true);
+ static void apply_simple_gain(BufferSet& bufs, framecnt_t nframes, gain_t target, bool midi_amp = true);
static gain_t apply_gain (AudioBuffer& buf, framecnt_t sample_rate, framecnt_t nframes, gain_t initial, gain_t target);
static void apply_simple_gain(AudioBuffer& buf, framecnt_t nframes, gain_t target);
@@ -83,6 +84,9 @@ public:
, _amp (a) {
set_flags (Controllable::Flag (flags() | Controllable::GainLike));
alist()->reset_default (1.0);
+
+ lower_db = accurate_coefficient_to_dB (_desc.lower);
+ range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
}
void set_value (double val);
@@ -94,6 +98,8 @@ public:
std::string get_user_string () const;
Amp* _amp;
+ double lower_db;
+ double range_db;
};
boost::shared_ptr<GainControl> gain_control() {
@@ -117,6 +123,8 @@ private:
/** Buffer that we should use for gain automation */
gain_t* _gain_automation_buffer;
+ std::string _type;
+ bool _midi_amp;
};
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index e0e7d8e..8ce99c4 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -143,6 +143,16 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
DeviceStatus (const std::string& s, bool avail) : name (s), available (avail) {}
};
+ /** An optional alternate interface for backends to provide a facility to
+ * select separate input and output devices.
+ *
+ * If a backend returns true then enumerate_input_devices() and
+ * enumerate_output_devices() will be used instead of enumerate_devices()
+ * to enumerate devices. Similarly set_input/output_device_name() should
+ * be used to set devices instead of set_device_name().
+ */
+ virtual bool use_separate_input_and_output_devices () const { return false; }
+
/** Returns a collection of DeviceStatuses identifying devices discovered
* by this backend since the start of the process.
*
@@ -152,6 +162,26 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
*/
virtual std::vector<DeviceStatus> enumerate_devices () const = 0;
+ /** Returns a collection of DeviceStatuses identifying input devices
+ * discovered by this backend since the start of the process.
+ *
+ * Any of the names in each DeviceStatus may be used to identify a
+ * device in other calls to the backend, though any of them may become
+ * invalid at any time.
+ */
+ virtual std::vector<DeviceStatus> enumerate_input_devices () const
+ { return std::vector<DeviceStatus>(); }
+
+ /** Returns a collection of DeviceStatuses identifying output devices
+ * discovered by this backend since the start of the process.
+ *
+ * Any of the names in each DeviceStatus may be used to identify a
+ * device in other calls to the backend, though any of them may become
+ * invalid at any time.
+ */
+ virtual std::vector<DeviceStatus> enumerate_output_devices () const
+ { return std::vector<DeviceStatus>(); }
+
/** Returns a collection of float identifying sample rates that are
* potentially usable with the hardware identified by @param device.
* Any of these values may be supplied in other calls to this backend
@@ -231,6 +261,21 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
/** Set the name of the device to be used
*/
virtual int set_device_name (const std::string&) = 0;
+
+ /** Set the name of the input device to be used if using separate
+ * input/output devices.
+ *
+ * @see use_separate_input_and_output_devices()
+ */
+ virtual int set_input_device_name (const std::string&) { return 0;}
+
+ /** Set the name of the output device to be used if using separate
+ * input/output devices.
+ *
+ * @see use_separate_input_and_output_devices()
+ */
+ virtual int set_output_device_name (const std::string&) { return 0;}
+
/** Deinitialize and destroy current device
*/
virtual int drop_device() {return 0;};
@@ -283,6 +328,8 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
/* Retrieving parameters */
virtual std::string device_name () const = 0;
+ virtual std::string input_device_name () const { return std::string(); }
+ virtual std::string output_device_name () const { return std::string(); }
virtual float sample_rate () const = 0;
virtual uint32_t buffer_size () const = 0;
virtual bool interleaved () const = 0;
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
index f93c949..f48204d 100644
--- a/libs/ardour/ardour/audio_diskstream.h
+++ b/libs/ardour/ardour/audio_diskstream.h
@@ -73,6 +73,7 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream
}
void set_record_enabled (bool yn);
+ void set_record_safe (bool yn);
int set_destructive (bool yn);
int set_non_layered (bool yn);
bool can_become_destructive (bool& requires_bounce) const;
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 445d299..330de4e 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -293,12 +293,6 @@ class LIBARDOUR_API AudioEngine : public SessionHandlePtr, public PortManager
void do_reset_backend();
void do_devicelist_update();
- void meter_thread ();
- void start_metering_thread ();
- void stop_metering_thread ();
-
- static gint m_meter_exit;
-
typedef std::map<std::string,AudioBackendInfo*> BackendMap;
BackendMap _backends;
AudioBackendInfo* backend_discover (const std::string&);
diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h
index 11fb489..ddf9eee 100644
--- a/libs/ardour/ardour/automatable.h
+++ b/libs/ardour/ardour/automatable.h
@@ -81,6 +81,8 @@ public:
int set_automation_xml_state (const XMLNode&, Evoral::Parameter default_param);
XMLNode& get_automation_xml_state();
+ PBD::Signal0<void> AutomationStateChanged;
+
protected:
Session& _a_session;
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index e489d70..24a9e0d 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -89,6 +89,9 @@ public:
double normal() const { return _desc.normal; }
bool toggled() const { return _desc.toggled; }
+ double internal_to_interface (double i) const;
+ double interface_to_internal (double i) const;
+
const ParameterDescriptor& desc() const { return _desc; }
const ARDOUR::Session& session() const { return _session; }
diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h
index f12a67d..5e8e696 100644
--- a/libs/ardour/ardour/coreaudiosource.h
+++ b/libs/ardour/ardour/coreaudiosource.h
@@ -48,6 +48,7 @@ class LIBARDOUR_API CoreAudioSource : public AudioFileSource {
static int get_soundfile_info (string path, SoundFileInfo& _info, string& error_msg);
protected:
+ void close ();
framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
framecnt_t write_unlocked (Sample *, framecnt_t) { return 0; }
diff --git a/libs/ardour/ardour/cycle_timer.h b/libs/ardour/ardour/cycle_timer.h
index cab389e..ac19abd 100644
--- a/libs/ardour/ardour/cycle_timer.h
+++ b/libs/ardour/ardour/cycle_timer.h
@@ -42,7 +42,7 @@ class LIBARDOUR_API CycleTimer {
public:
CycleTimer(const std::string& name) {
#ifndef NDEBUG
- if (PBD::debug_bits & PBD::DEBUG::CycleTimers) {
+ if (DEBUG_ENABLED (PBD::DEBUG::CycleTimers)) {
_name = name;
if (cycles_per_usec == 0) {
cycles_per_usec = get_mhz ();
@@ -56,7 +56,7 @@ class LIBARDOUR_API CycleTimer {
~CycleTimer() {
#ifndef NDEBUG
- if (PBD::debug_bits & PBD::DEBUG::CycleTimers) {
+ if (DEBUG_ENABLED (PBD::DEBUG::CycleTimers)) {
_exit = get_cycles();
std::cerr << _name << ": " << (float) (_exit - _entry) / cycles_per_usec << " (" << _entry << ", " << _exit << ')' << std::endl;
}
diff --git a/libs/ardour/ardour/dB.h b/libs/ardour/ardour/dB.h
index abacdfc..1a4ed98 100644
--- a/libs/ardour/ardour/dB.h
+++ b/libs/ardour/ardour/dB.h
@@ -20,8 +20,13 @@
#ifndef __ardour_dB_h__
#define __ardour_dB_h__
+#include <limits>
#include "pbd/fastlog.h"
+#define GAIN_COEFF_ZERO 0.f
+#define GAIN_COEFF_SMALL 0.0000001f //-140dB
+#define GAIN_COEFF_UNITY 1.f
+
static inline float dB_to_coefficient (float dB) {
return dB > -318.8f ? pow (10.0f, dB * 0.05f) : 0.0f;
}
@@ -31,6 +36,7 @@ static inline float fast_coefficient_to_dB (float coeff) {
}
static inline float accurate_coefficient_to_dB (float coeff) {
+ if (coeff < 1e-15) return -std::numeric_limits<float>::infinity();
return 20.0f * log10f (coeff);
}
diff --git a/libs/ardour/ardour/debug.h b/libs/ardour/ardour/debug.h
index 8f4b562..1c19d85 100644
--- a/libs/ardour/ardour/debug.h
+++ b/libs/ardour/ardour/debug.h
@@ -29,46 +29,46 @@
namespace PBD {
namespace DEBUG {
- LIBARDOUR_API extern uint64_t MidiSourceIO;
- LIBARDOUR_API extern uint64_t MidiPlaylistIO;
- LIBARDOUR_API extern uint64_t MidiDiskstreamIO;
- LIBARDOUR_API extern uint64_t SnapBBT;
- LIBARDOUR_API extern uint64_t Latency;
- LIBARDOUR_API extern uint64_t LatencyCompensation;
- LIBARDOUR_API extern uint64_t Peaks;
- LIBARDOUR_API extern uint64_t Processors;
- LIBARDOUR_API extern uint64_t ProcessThreads;
- LIBARDOUR_API extern uint64_t Graph;
- LIBARDOUR_API extern uint64_t Destruction;
- LIBARDOUR_API extern uint64_t MTC;
- LIBARDOUR_API extern uint64_t LTC;
- LIBARDOUR_API extern uint64_t Transport;
- LIBARDOUR_API extern uint64_t Slave;
- LIBARDOUR_API extern uint64_t SessionEvents;
- LIBARDOUR_API extern uint64_t MidiIO;
- LIBARDOUR_API extern uint64_t MackieControl;
- LIBARDOUR_API extern uint64_t MidiClock;
- LIBARDOUR_API extern uint64_t Monitor;
- LIBARDOUR_API extern uint64_t Solo;
- LIBARDOUR_API extern uint64_t AudioPlayback;
- LIBARDOUR_API extern uint64_t Panning;
- LIBARDOUR_API extern uint64_t LV2;
- LIBARDOUR_API extern uint64_t CaptureAlignment;
- LIBARDOUR_API extern uint64_t PluginManager;
- LIBARDOUR_API extern uint64_t AudioUnits;
- LIBARDOUR_API extern uint64_t ControlProtocols;
- LIBARDOUR_API extern uint64_t CycleTimers;
- LIBARDOUR_API extern uint64_t MidiTrackers;
- LIBARDOUR_API extern uint64_t Layering;
- LIBARDOUR_API extern uint64_t TempoMath;
- LIBARDOUR_API extern uint64_t TempoMap;
- LIBARDOUR_API extern uint64_t OrderKeys;
- LIBARDOUR_API extern uint64_t Automation;
- LIBARDOUR_API extern uint64_t WiimoteControl;
- LIBARDOUR_API extern uint64_t Ports;
- LIBARDOUR_API extern uint64_t AudioEngine;
- LIBARDOUR_API extern uint64_t Soundcloud;
- LIBARDOUR_API extern uint64_t Butler;
+ LIBARDOUR_API extern DebugBits MidiSourceIO;
+ LIBARDOUR_API extern DebugBits MidiPlaylistIO;
+ LIBARDOUR_API extern DebugBits MidiDiskstreamIO;
+ LIBARDOUR_API extern DebugBits SnapBBT;
+ LIBARDOUR_API extern DebugBits Latency;
+ LIBARDOUR_API extern DebugBits LatencyCompensation;
+ LIBARDOUR_API extern DebugBits Peaks;
+ LIBARDOUR_API extern DebugBits Processors;
+ LIBARDOUR_API extern DebugBits ProcessThreads;
+ LIBARDOUR_API extern DebugBits Graph;
+ LIBARDOUR_API extern DebugBits Destruction;
+ LIBARDOUR_API extern DebugBits MTC;
+ LIBARDOUR_API extern DebugBits LTC;
+ LIBARDOUR_API extern DebugBits Transport;
+ LIBARDOUR_API extern DebugBits Slave;
+ LIBARDOUR_API extern DebugBits SessionEvents;
+ LIBARDOUR_API extern DebugBits MidiIO;
+ LIBARDOUR_API extern DebugBits MackieControl;
+ LIBARDOUR_API extern DebugBits MidiClock;
+ LIBARDOUR_API extern DebugBits Monitor;
+ LIBARDOUR_API extern DebugBits Solo;
+ LIBARDOUR_API extern DebugBits AudioPlayback;
+ LIBARDOUR_API extern DebugBits Panning;
+ LIBARDOUR_API extern DebugBits LV2;
+ LIBARDOUR_API extern DebugBits CaptureAlignment;
+ LIBARDOUR_API extern DebugBits PluginManager;
+ LIBARDOUR_API extern DebugBits AudioUnits;
+ LIBARDOUR_API extern DebugBits ControlProtocols;
+ LIBARDOUR_API extern DebugBits CycleTimers;
+ LIBARDOUR_API extern DebugBits MidiTrackers;
+ LIBARDOUR_API extern DebugBits Layering;
+ LIBARDOUR_API extern DebugBits TempoMath;
+ LIBARDOUR_API extern DebugBits TempoMap;
+ LIBARDOUR_API extern DebugBits OrderKeys;
+ LIBARDOUR_API extern DebugBits Automation;
+ LIBARDOUR_API extern DebugBits WiimoteControl;
+ LIBARDOUR_API extern DebugBits Ports;
+ LIBARDOUR_API extern DebugBits AudioEngine;
+ LIBARDOUR_API extern DebugBits Soundcloud;
+ LIBARDOUR_API extern DebugBits Butler;
}
}
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
index cde21b2..fc41d10 100644
--- a/libs/ardour/ardour/diskstream.h
+++ b/libs/ardour/ardour/diskstream.h
@@ -104,7 +104,9 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
void set_roll_delay (framecnt_t);
bool record_enabled() const { return g_atomic_int_get (&_record_enabled); }
+ bool record_safe () const { return g_atomic_int_get (&_record_safe); }
virtual void set_record_enabled (bool yn) = 0;
+ virtual void set_record_safe (bool yn) = 0;
bool destructive() const { return _flags & Destructive; }
virtual int set_destructive (bool /*yn*/) { return -1; }
@@ -176,6 +178,7 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
}
PBD::Signal0<void> RecordEnableChanged;
+ PBD::Signal0<void> RecordSafeChanged;
PBD::Signal0<void> SpeedChanged;
PBD::Signal0<void> ReverseChanged;
/* Emitted when this diskstream is set to use a different playlist */
@@ -263,6 +266,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
void engage_record_enable ();
void disengage_record_enable ();
+ void engage_record_safe ();
+ void disengage_record_safe ();
virtual bool prep_record_enable () = 0;
virtual bool prep_record_disable () = 0;
@@ -286,7 +291,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
boost::shared_ptr<Playlist> _playlist;
- mutable gint _record_enabled;
+ gint _record_enabled;
+ gint _record_safe;
double _visible_speed;
double _actual_speed;
/* items needed for speed change logic */
diff --git a/libs/ardour/ardour/export_format_manager.h b/libs/ardour/ardour/export_format_manager.h
index dad7d84..fff9729 100644
--- a/libs/ardour/ardour/export_format_manager.h
+++ b/libs/ardour/ardour/export_format_manager.h
@@ -100,6 +100,7 @@ class LIBARDOUR_API ExportFormatManager : public PBD::ScopedConnectionList
void select_with_cue (bool);
void select_with_toc (bool);
+ void select_with_mp4chaps (bool);
void select_upload (bool);
void set_command (std::string);
void select_src_quality (ExportFormatBase::SRCQuality value);
diff --git a/libs/ardour/ardour/export_format_specification.h b/libs/ardour/ardour/export_format_specification.h
index 2a62d79..ed6e259 100644
--- a/libs/ardour/ardour/export_format_specification.h
+++ b/libs/ardour/ardour/export_format_specification.h
@@ -96,6 +96,7 @@ class LIBARDOUR_API ExportFormatSpecification : public ExportFormatBase {
void set_tag (bool tag_it) { _tag = tag_it; }
void set_with_cue (bool yn) { _with_cue = yn; }
void set_with_toc (bool yn) { _with_toc = yn; }
+ void set_with_mp4chaps (bool yn) { _with_mp4chaps = yn; }
void set_soundcloud_upload (bool yn) { _soundcloud_upload = yn; }
void set_command (std::string command) { _command = command; }
@@ -127,6 +128,8 @@ class LIBARDOUR_API ExportFormatSpecification : public ExportFormatBase {
float normalize_target () const { return _normalize_target; }
bool with_toc() const { return _with_toc; }
bool with_cue() const { return _with_cue; }
+ bool with_mp4chaps() const { return _with_mp4chaps; }
+
bool soundcloud_upload() const { return _soundcloud_upload; }
std::string command() const { return _command; }
@@ -178,6 +181,7 @@ class LIBARDOUR_API ExportFormatSpecification : public ExportFormatBase {
float _normalize_target;
bool _with_toc;
bool _with_cue;
+ bool _with_mp4chaps;
bool _soundcloud_upload;
std::string _command;
diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h
index 8336cea..526d32b 100644
--- a/libs/ardour/ardour/export_handler.h
+++ b/libs/ardour/ardour/export_handler.h
@@ -185,14 +185,19 @@ class LIBARDOUR_API ExportHandler : public ExportElementFactory, public sigc::tr
void write_cue_header (CDMarkerStatus & status);
void write_toc_header (CDMarkerStatus & status);
+ void write_mp4ch_header (CDMarkerStatus & status);
void write_track_info_cue (CDMarkerStatus & status);
void write_track_info_toc (CDMarkerStatus & status);
+ void write_track_info_mp4ch (CDMarkerStatus & status);
void write_index_info_cue (CDMarkerStatus & status);
void write_index_info_toc (CDMarkerStatus & status);
+ void write_index_info_mp4ch (CDMarkerStatus & status);
void frames_to_cd_frames_string (char* buf, framepos_t when);
+ void frames_to_chapter_marks_string (char* buf, framepos_t when);
+
std::string toc_escape_cdtext (const std::string&);
std::string toc_escape_filename (const std::string&);
std::string cue_escape_cdtext (const std::string& txt);
diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h
index ac073d9..0929c33 100644
--- a/libs/ardour/ardour/file_source.h
+++ b/libs/ardour/ardour/file_source.h
@@ -46,8 +46,8 @@ class LIBARDOUR_API FileSource : virtual public Source {
public:
virtual ~FileSource ();
- virtual const std::string& path() const { return _path; }
-
+ const std::string& path() const { return _path; }
+
virtual bool safe_file_extension (const std::string& path) const = 0;
int move_to_trash (const std::string& trash_dir_name);
@@ -89,9 +89,9 @@ public:
*/
int rename (const std::string& name);
- virtual void release_descriptor () {}
+ virtual void close () = 0;
-protected:
+ protected:
FileSource (Session& session, DataType type,
const std::string& path,
const std::string& origin,
diff --git a/libs/ardour/ardour/meter.h b/libs/ardour/ardour/meter.h
index 8ed1ade..7539db2 100644
--- a/libs/ardour/ardour/meter.h
+++ b/libs/ardour/ardour/meter.h
@@ -36,16 +36,6 @@ class BufferSet;
class ChanCount;
class Session;
-class LIBARDOUR_API Metering {
- public:
- static void update_meters ();
- static PBD::Signal0<void> Meter;
-
- private:
- /* this object is not meant to be instantiated */
- Metering();
-};
-
/** Meters peaks on the input and stores them for access.
*/
class LIBARDOUR_API PeakMeter : public Processor {
@@ -53,7 +43,6 @@ public:
PeakMeter(Session& s, const std::string& name);
~PeakMeter();
- void meter();
void reset ();
void reset_max ();
@@ -64,7 +53,7 @@ public:
number of streams in the route, no matter where we put it.
*/
- void reset_max_channels (const ChanCount&);
+ void set_max_channels (const ChanCount&);
/* tell the meter than no matter how many channels it can handle,
`in' is the number it is actually going be handling from
@@ -72,6 +61,7 @@ public:
*/
void reflect_inputs (const ChanCount& in);
+ void emit_configuration_changed ();
/** Compute peaks */
void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool);
@@ -82,14 +72,6 @@ public:
ChanCount input_streams () const { return current_meters; }
ChanCount output_streams () const { return current_meters; }
- float peak_power (uint32_t n) {
- if (n < _visible_peak_power.size()) {
- return _visible_peak_power[n];
- } else {
- return minus_infinity();
- }
- }
-
float meter_level (uint32_t n, MeterType type);
void set_type(MeterType t);
@@ -108,10 +90,13 @@ private:
*/
ChanCount current_meters;
- std::vector<float> _peak_signal;
- std::vector<float> _visible_peak_power;
- std::vector<float> _max_peak_signal;
- std::vector<float> _max_peak_power;
+ bool _reset_dpm;
+ bool _reset_max;
+
+ uint32_t _bufcnt;
+ std::vector<float> _peak_buffer; // internal, integrate
+ std::vector<float> _peak_power; // includes accurate falloff, hence dB
+ std::vector<float> _max_peak_signal; // dB calculation is done on demand
std::vector<Kmeterdsp *> _kmeter;
std::vector<Iec1ppmdsp *> _iec1meter;
diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h
index 58b74bd..6610708 100644
--- a/libs/ardour/ardour/midi_diskstream.h
+++ b/libs/ardour/ardour/midi_diskstream.h
@@ -70,6 +70,7 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream
void flush_playback (framepos_t, framepos_t);
void set_record_enabled (bool yn);
+ void set_record_safe (bool yn);
void reset_tracker ();
void resolve_tracker (Evoral::EventSink<framepos_t>& buffer, framepos_t time);
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index f2542f0..2ba57e4 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -51,6 +51,7 @@ public:
boost::shared_ptr<Diskstream> create_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
void set_record_enabled (bool yn, void *src);
+ void set_record_safe (bool yn, void *src);
DataType data_type () const {
return DataType::MIDI;
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index dfc7c14..e01f56d 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -61,6 +61,9 @@ class LIBARDOUR_API PluginInsert : public Processor
void deactivate ();
void flush ();
+ bool reset_parameters_to_default ();
+ bool can_reset_all_parameters ();
+
int set_block_size (pframes_t nframes);
ChanCount output_streams() const;
@@ -94,9 +97,6 @@ class LIBARDOUR_API PluginInsert : public Processor
double get_value (void) const;
XMLNode& get_state();
- double internal_to_interface (double) const;
- double interface_to_internal (double) const;
-
private:
PluginInsert* _plugin;
};
diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h
index 6ced0e7..71b18f2 100644
--- a/libs/ardour/ardour/port_manager.h
+++ b/libs/ardour/ardour/port_manager.h
@@ -149,6 +149,7 @@ class LIBARDOUR_API PortManager
void fade_out (gain_t, gain_t, pframes_t);
void silence (pframes_t nframes);
+ void silence_outputs (pframes_t nframes);
void check_monitoring ();
/** Signal the start of an audio cycle.
* This MUST be called before any reading/writing for this cycle.
diff --git a/libs/ardour/ardour/process_thread.h b/libs/ardour/ardour/process_thread.h
index 779fdae..67bd07d 100644
--- a/libs/ardour/ardour/process_thread.h
+++ b/libs/ardour/ardour/process_thread.h
@@ -50,6 +50,7 @@ public:
static BufferSet& get_route_buffers (ChanCount count = ChanCount::ZERO, bool silence = false);
static BufferSet& get_mix_buffers (ChanCount count = ChanCount::ZERO);
static gain_t* gain_automation_buffer ();
+ static gain_t* trim_automation_buffer ();
static gain_t* send_gain_automation_buffer ();
static pan_t** pan_automation_buffer ();
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 832cb8e..52c3309 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -90,6 +90,7 @@ CONFIG_VARIABLE (bool, use_osc, "use-osc", false)
/* editing related */
+CONFIG_VARIABLE (LayerModel, layer_model, "layer-model", Manual)
CONFIG_VARIABLE (bool, automation_follows_regions, "automation-follows-regions", true)
CONFIG_VARIABLE (bool, region_boundaries_from_selected_tracks, "region-boundaries-from-selected-tracks", true)
CONFIG_VARIABLE (bool, region_boundaries_from_onscreen_tracks, "region-boundaries-from-onscreen_tracks", true)
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 5d52fc0..cce1e15 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -129,6 +129,8 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
virtual void set_record_enabled (bool /*yn*/, void * /*src*/) {}
virtual bool record_enabled() const { return false; }
+ virtual void set_record_safe (bool yn, void *src) {}
+ virtual bool record_safe () const {return false; }
virtual void nonrealtime_handle_transport_stopped (bool abort, bool did_locate, bool flush_processors);
virtual void realtime_handle_transport_stopped () {}
virtual void realtime_locate () {}
@@ -142,12 +144,17 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
void set_gain (gain_t val, void *src);
void inc_gain (gain_t delta, void *src);
+ void set_trim (gain_t val, void *src);
+ void inc_trim (gain_t delta, void *src);
+
void set_mute_points (MuteMaster::MutePoint);
MuteMaster::MutePoint mute_points () const;
bool muted () const;
void set_mute (bool yn, void* src);
+ bool muted_by_others() const;
+
/* controls use set_solo() to modify this route's solo state
*/
@@ -179,8 +186,9 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
bool denormal_protection() const;
void set_meter_point (MeterPoint, bool force = false);
- MeterPoint meter_point() const { return _meter_point; }
- void meter ();
+ bool apply_processor_changes_rt ();
+ void emit_pending_signals ();
+ MeterPoint meter_point() const { return _pending_meter_point; }
void set_meter_type (MeterType t) { _meter_type = t; }
MeterType meter_type() const { return _meter_type; }
@@ -188,6 +196,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
/* Processors */
boost::shared_ptr<Amp> amp() const { return _amp; }
+ boost::shared_ptr<Amp> trim() const { return _trim; }
PeakMeter& peak_meter() { return *_meter.get(); }
const PeakMeter& peak_meter() const { return *_meter.get(); }
boost::shared_ptr<PeakMeter> shared_peak_meter() const { return _meter; }
@@ -255,6 +264,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
int add_processors (const ProcessorList&, boost::shared_ptr<Processor>, ProcessorStreams* err = 0);
boost::shared_ptr<Processor> before_processor_for_placement (Placement);
boost::shared_ptr<Processor> before_processor_for_index (int);
+ bool processors_reorder_needs_configure (const ProcessorList& new_order);
int remove_processor (boost::shared_ptr<Processor>, ProcessorStreams* err = 0, bool need_process_lock = true);
int remove_processors (const ProcessorList&, ProcessorStreams* err = 0);
int reorder_processors (const ProcessorList& new_order, ProcessorStreams* err = 0);
@@ -504,6 +514,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
bool _active;
framecnt_t _signal_latency;
framecnt_t _signal_latency_at_amp_position;
+ framecnt_t _signal_latency_at_trim_position;
framecnt_t _initial_delay;
framecnt_t _roll_delay;
@@ -515,9 +526,21 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
boost::shared_ptr<MonitorProcessor> _monitor_control;
boost::shared_ptr<Pannable> _pannable;
+ enum {
+ EmitNone = 0x00,
+ EmitMeterChanged = 0x01,
+ EmitMeterVisibilityChange = 0x02,
+ EmitRtProcessorChange = 0x04
+ };
+
+ ProcessorList _pending_processor_order;
+ gint _pending_process_reorder; // atomic
+ gint _pending_signals; // atomic
+
Flag _flags;
int _pending_declick;
MeterPoint _meter_point;
+ MeterPoint _pending_meter_point;
MeterType _meter_type;
boost::dynamic_bitset<> _phase_invert;
bool _self_solo;
@@ -567,6 +590,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
virtual void maybe_declick (BufferSet&, framecnt_t, int);
boost::shared_ptr<Amp> _amp;
+ boost::shared_ptr<Amp> _trim;
boost::shared_ptr<PeakMeter> _meter;
boost::shared_ptr<DelayLine> _delayline;
@@ -592,6 +616,9 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
bool _initial_io_setup;
int configure_processors_unlocked (ProcessorStreams*);
+ bool set_meter_point_unlocked ();
+ void apply_processor_order (const ProcessorList& new_order);
+
std::list<std::pair<ChanCount, ChanCount> > try_configure_processors (ChanCount, ProcessorStreams *);
std::list<std::pair<ChanCount, ChanCount> > try_configure_processors_unlocked (ChanCount, ProcessorStreams *);
@@ -648,8 +675,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
or 0.
*/
boost::weak_ptr<Processor> _processor_after_last_custom_meter;
- /** true if the last custom meter position was at the end of the processor list */
- bool _last_custom_meter_was_at_end;
void reset_instrument_info ();
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 9967c9c..bbc8293 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -183,6 +183,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
static PBD::Signal1<void,std::string> Dialog;
+ PBD::Signal0<void> BatchUpdateStart;
+ PBD::Signal0<void> BatchUpdateEnd;
+
int ensure_subdirs ();
std::string automation_dir () const; ///< Automation data
@@ -392,8 +395,37 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
framecnt_t worst_input_latency () const { return _worst_input_latency; }
framecnt_t worst_track_latency () const { return _worst_track_latency; }
framecnt_t worst_playback_latency () const { return _worst_output_latency + _worst_track_latency; }
+
+ struct SaveAs {
+ std::string new_parent_folder; /* parent folder where new session folder will be created */
+ std::string new_name; /* name of newly saved session */
+ bool switch_to; /* true if we should be working on newly saved session after save-as; false otherwise */
+ bool include_media; /* true if the newly saved session should contain references to media */
+ bool copy_media; /* true if media files (audio, media, etc) should be copied into newly saved session; false otherwise */
+ bool copy_external; /* true if external media should be consolidated into the newly saved session; false otherwise */
+
+ std::string final_session_folder_name; /* filled in by * Session::save_as(), provides full path to newly saved session */
+
+ /* emitted as we make progress. 3 arguments passed to signal
+ * handler:
+ *
+ * 1: percentage complete measured as a fraction (0-1.0) of
+ * total data copying done.
+ * 2: number of files copied so far
+ * 3: total number of files to copy
+ *
+ * Handler should return true for save-as to continue, or false
+ * to stop (and remove all evidence of partial save-as).
+ */
+ PBD::Signal3<bool,float,int64_t,int64_t> Progress;
+
+ /* if save_as() returns non-zero, this string will indicate the reason why.
+ */
+ std::string failure_message;
+ };
- int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false);
+ int save_as (SaveAs&);
+ int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false, bool template_only = false);
int restore_state (std::string snapshot_name);
int save_template (std::string template_name);
int save_history (std::string snapshot_name = "");
@@ -564,6 +596,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
TempoMap& tempo_map() { return *_tempo_map; }
const TempoMap& tempo_map() const { return *_tempo_map; }
+ unsigned int get_xrun_count () const {return _xrun_count; }
+ void reset_xrun_count () {_xrun_count = 0; }
+
/* region info */
boost::shared_ptr<Region> find_whole_file_parent (boost::shared_ptr<Region const>) const;
@@ -665,6 +700,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void set_mute (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
void set_listen (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
void set_record_enabled (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
+ void set_record_safe (boost::shared_ptr<RouteList>, bool yn, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
void set_solo_isolated (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
void set_monitoring (boost::shared_ptr<RouteList>, MonitorChoice, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false);
void set_exclusive_input_active (boost::shared_ptr<RouteList> rt, bool onoff, bool flip_others=false);
@@ -676,6 +712,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
/* monitor/master out */
void add_monitor_section ();
+ void reset_monitor_section ();
void remove_monitor_section ();
boost::shared_ptr<Route> monitor_out() const { return _monitor_out; }
@@ -790,6 +827,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
/* buffers for gain and pan */
gain_t* gain_automation_buffer () const;
+ gain_t* trim_automation_buffer () const;
gain_t* send_gain_automation_buffer () const;
pan_t** pan_automation_buffer () const;
@@ -1010,6 +1048,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
bool _writable;
bool _was_seamless;
bool _under_nsm_control;
+ unsigned int _xrun_count;
void initialize_latencies ();
void set_worst_io_latencies ();
@@ -1239,6 +1278,21 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void *do_work();
+ /* Signal Forwarding */
+ void emit_route_signals ();
+ void emit_thread_run ();
+ static void *emit_thread (void *);
+ void emit_thread_start ();
+ void emit_thread_terminate ();
+
+ pthread_t _rt_emit_thread;
+ bool _rt_thread_active;
+
+ pthread_mutex_t _rt_emit_mutex;
+ pthread_cond_t _rt_emit_cond;
+ bool _rt_emit_pending;
+
+
/* SessionEventManager interface */
void process_event (SessionEvent*);
@@ -1437,8 +1491,10 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
typedef std::map<PBD::ID,boost::shared_ptr<Source> > SourceMap;
private:
+ void reset_write_sources (bool mark_write_complete, bool force = false);
SourceMap sources;
+
private:
int load_sources (const XMLNode& node);
XMLNode& get_sources_as_xml ();
@@ -1644,6 +1700,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void rt_set_listen (boost::shared_ptr<RouteList>, bool yn, bool group_override);
void rt_set_solo_isolated (boost::shared_ptr<RouteList>, bool yn, bool group_override);
void rt_set_record_enabled (boost::shared_ptr<RouteList>, bool yn, bool group_override);
+ void rt_set_record_safe (boost::shared_ptr<RouteList>, bool yn, bool group_override);
void rt_set_monitoring (boost::shared_ptr<RouteList>, MonitorChoice, bool group_override);
/** temporary list of Diskstreams used only during load of 2.X sessions */
@@ -1699,6 +1756,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void setup_click_state (const XMLNode*);
void setup_bundles ();
+ void save_as_bring_callback (uint32_t, uint32_t, std::string);
+
static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);
};
diff --git a/libs/ardour/ardour/silentfilesource.h b/libs/ardour/ardour/silentfilesource.h
index cf64622..80f4b36 100644
--- a/libs/ardour/ardour/silentfilesource.h
+++ b/libs/ardour/ardour/silentfilesource.h
@@ -40,6 +40,7 @@ public:
bool clamped_at_unity() const { return false; }
protected:
+ void close() {}
friend class SourceFactory;
SilentFileSource (Session& s, const XMLNode& x, framecnt_t len, float srate)
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h
index d088f2d..35e0c89 100644
--- a/libs/ardour/ardour/smf_source.h
+++ b/libs/ardour/ardour/smf_source.h
@@ -72,6 +72,7 @@ public:
void prevent_deletion ();
protected:
+ void close ();
void set_path (const std::string& newpath);
void flush_midi (const Lock& lock);
diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h
index 11ec6fe..5a4a115 100644
--- a/libs/ardour/ardour/sndfilesource.h
+++ b/libs/ardour/ardour/sndfilesource.h
@@ -75,6 +75,8 @@ class LIBARDOUR_API SndFileSource : public AudioFileSource {
static int get_soundfile_info (const std::string& path, SoundFileInfo& _info, std::string& error_msg);
protected:
+ void close ();
+
void set_path (const std::string& p);
void set_header_timeline_position ();
diff --git a/libs/ardour/ardour/srcfilesource.h b/libs/ardour/ardour/srcfilesource.h
index 78564c8..073329c 100644
--- a/libs/ardour/ardour/srcfilesource.h
+++ b/libs/ardour/ardour/srcfilesource.h
@@ -52,6 +52,7 @@ public:
bool clamped_at_unity() const { return false; }
protected:
+ void close ();
framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
framecnt_t write_unlocked (Sample */*dst*/, framecnt_t /*cnt*/) { return 0; }
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h
index 6e6818b..24a3f53 100644
--- a/libs/ardour/ardour/tempo.h
+++ b/libs/ardour/ardour/tempo.h
@@ -287,6 +287,7 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
const Meter& meter_at (framepos_t) const;
const TempoSection& tempo_section_at (framepos_t) const;
+ const MeterSection& meter_section_at (framepos_t) const;
void add_tempo (const Tempo&, Timecode::BBT_Time where);
void add_meter (const Meter&, Timecode::BBT_Time where);
@@ -322,7 +323,8 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
void change_initial_tempo (double bpm, double note_type);
void insert_time (framepos_t, framecnt_t);
-
+ bool cut_time (framepos_t where, framecnt_t amount); //returns true if anything was moved
+
int n_tempos () const;
int n_meters () const;
diff --git a/libs/ardour/ardour/thread_buffers.h b/libs/ardour/ardour/thread_buffers.h
index bf686fd..5ea352f 100644
--- a/libs/ardour/ardour/thread_buffers.h
+++ b/libs/ardour/ardour/thread_buffers.h
@@ -42,6 +42,7 @@ public:
BufferSet* route_buffers;
BufferSet* mix_buffers;
gain_t* gain_automation_buffer;
+ gain_t* trim_automation_buffer;
gain_t* send_gain_automation_buffer;
pan_t** pan_automation_buffer;
uint32_t npan_buffers;
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 5e05ec3..f699b5d 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -107,7 +107,9 @@ class LIBARDOUR_API Track : public Route, public PublicDiskstream
boost::shared_ptr<AutomationControl> rec_enable_control() { return _rec_enable_control; }
bool record_enabled() const;
+ bool record_safe () const;
void set_record_enabled (bool yn, void *src);
+ void set_record_safe (bool yn, void *src);
void prep_record_enabled (bool yn, void *src);
bool using_diskstream_id (PBD::ID) const;
@@ -165,6 +167,7 @@ class LIBARDOUR_API Track : public Route, public PublicDiskstream
/* Emitted when our diskstream is set to use a different playlist */
PBD::Signal0<void> PlaylistChanged;
PBD::Signal0<void> RecordEnableChanged;
+ PBD::Signal0<void> RecordSafeChanged;
PBD::Signal0<void> SpeedChanged;
PBD::Signal0<void> AlignmentStyleChanged;
@@ -227,6 +230,7 @@ private:
void diskstream_playlist_changed ();
void diskstream_record_enable_changed ();
+ void diskstream_record_safe_changed ();
void diskstream_speed_changed ();
void diskstream_alignment_style_changed ();
void parameter_changed (std::string const & p);
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 921cb3e..b1b4388 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -139,6 +139,7 @@ namespace ARDOUR {
FadeOutAutomation,
EnvelopeAutomation,
RecEnableAutomation,
+ TrimAutomation,
};
enum AutoState {
@@ -179,18 +180,19 @@ namespace ARDOUR {
};
enum MeterType {
- MeterMaxSignal = 0x001,
- MeterMaxPeak = 0x002,
- MeterPeak = 0x004,
- MeterKrms = 0x008,
- MeterK20 = 0x010,
- MeterK14 = 0x020,
- MeterIEC1DIN = 0x040,
- MeterIEC1NOR = 0x080,
- MeterIEC2BBC = 0x100,
- MeterIEC2EBU = 0x200,
- MeterVU = 0x400,
- MeterK12 = 0x800
+ MeterMaxSignal = 0x0001,
+ MeterMaxPeak = 0x0002,
+ MeterPeak = 0x0004,
+ MeterKrms = 0x0008,
+ MeterK20 = 0x0010,
+ MeterK14 = 0x0020,
+ MeterIEC1DIN = 0x0040,
+ MeterIEC1NOR = 0x0080,
+ MeterIEC2BBC = 0x0100,
+ MeterIEC2EBU = 0x0200,
+ MeterVU = 0x0400,
+ MeterK12 = 0x0800,
+ MeterPeak0dB = 0x1000
};
enum TrackMode {
@@ -439,6 +441,11 @@ namespace ARDOUR {
MixerOrdered
};
+ enum LayerModel {
+ LaterHigher,
+ Manual
+ };
+
enum ListenPosition {
AfterFaderListen,
PreFaderListen
@@ -461,7 +468,8 @@ namespace ARDOUR {
enum CDMarkerFormat {
CDMarkerNone,
CDMarkerCUE,
- CDMarkerTOC
+ CDMarkerTOC,
+ MP4Chaps
};
enum HeaderFormat {
@@ -554,7 +562,8 @@ namespace ARDOUR {
struct RouteProcessorChange {
enum Type {
GeneralChange = 0x0,
- MeterPointChange = 0x1
+ MeterPointChange = 0x1,
+ RealTimeChange = 0x2
};
RouteProcessorChange () : type (GeneralChange), meter_visibly_changed (true)
@@ -629,6 +638,7 @@ std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
std::istream& operator>>(std::istream& o, ARDOUR::InsertMergePolicy& sf);
std::istream& operator>>(std::istream& o, ARDOUR::SyncSource& sf);
std::istream& operator>>(std::istream& o, ARDOUR::ShuttleBehaviour& sf);
@@ -648,6 +658,7 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::RemoteModel& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::InsertMergePolicy& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::SyncSource& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::ShuttleBehaviour& sf);
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
index 2d4d02f..00e1f92 100644
--- a/libs/ardour/audio_diskstream.cc
+++ b/libs/ardour/audio_diskstream.cc
@@ -74,6 +74,10 @@ AudioDiskstream::AudioDiskstream (Session &sess, const string &name, Diskstream:
in_set_state = true;
use_new_playlist ();
in_set_state = false;
+
+ if (flag & Destructive) {
+ use_destructive_playlist ();
+ }
}
AudioDiskstream::AudioDiskstream (Session& sess, const XMLNode& node)
@@ -331,10 +335,13 @@ AudioDiskstream::setup_destructive_playlist ()
PropertyList plist;
plist.add (Properties::name, _name.val());
plist.add (Properties::start, 0);
- plist.add (Properties::length, max_framepos - (max_framepos - srcs.front()->natural_position()));
+ plist.add (Properties::length, max_framepos - srcs.front()->natural_position());
boost::shared_ptr<Region> region (RegionFactory::create (srcs, plist));
_playlist->add_region (region, srcs.front()->natural_position());
+
+ /* apply region properties and update write sources */
+ use_destructive_playlist();
}
void
@@ -346,7 +353,14 @@ AudioDiskstream::use_destructive_playlist ()
with the (presumed single, full-extent) region.
*/
- boost::shared_ptr<Region> rp = _playlist->find_next_region (_session.current_start_frame(), Start, 1);
+ boost::shared_ptr<Region> rp;
+ {
+ const RegionList& rl (_playlist->region_list().rlist());
+ if (rl.size() > 0) {
+ assert((rl.size() == 1));
+ rp = rl.front();
+ }
+ }
if (!rp) {
reset_write_sources (false, true);
@@ -1722,7 +1736,7 @@ AudioDiskstream::finish_capture (boost::shared_ptr<ChannelList> c)
void
AudioDiskstream::set_record_enabled (bool yn)
{
- if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0) {
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0 || record_safe ()) {
return;
}
@@ -1747,10 +1761,39 @@ AudioDiskstream::set_record_enabled (bool yn)
}
}
+void
+AudioDiskstream::set_record_safe (bool yn)
+{
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0) {
+ return;
+ }
+
+ /* can't rec-safe in destructive mode if transport is before start ????
+ REQUIRES REVIEW */
+
+ if (destructive() && yn && _session.transport_frame() < _session.current_start_frame()) {
+ return;
+ }
+
+ /* yes, i know that this not proof against race conditions, but its
+ good enough. i think.
+ */
+
+ if (record_safe () != yn) {
+ if (yn) {
+ engage_record_safe ();
+ } else {
+ disengage_record_safe ();
+ }
+
+ RecordSafeChanged (); /* EMIT SIGNAL */
+ }
+}
+
bool
AudioDiskstream::prep_record_enable ()
{
- if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0) {
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0 || record_safe ()) { // REQUIRES REVIEW "|| record_safe ()"
return false;
}
@@ -2324,6 +2367,13 @@ AudioDiskstream::can_become_destructive (bool& requires_bounce) const
return false;
}
+ /* if no regions are present: easy */
+
+ if (_playlist->n_regions() == 0) {
+ requires_bounce = false;
+ return true;
+ }
+
/* is there only one region ? */
if (_playlist->n_regions() != 1) {
@@ -2331,7 +2381,14 @@ AudioDiskstream::can_become_destructive (bool& requires_bounce) const
return false;
}
- boost::shared_ptr<Region> first = _playlist->find_next_region (_session.current_start_frame(), Start, 1);
+ boost::shared_ptr<Region> first;
+ {
+ const RegionList& rl (_playlist->region_list().rlist());
+ assert((rl.size() == 1));
+ first = rl.front();
+
+ }
+
if (!first) {
requires_bounce = false;
return true;
@@ -2340,12 +2397,24 @@ AudioDiskstream::can_become_destructive (bool& requires_bounce) const
/* do the source(s) for the region cover the session start position ? */
if (first->position() != _session.current_start_frame()) {
+ // what is the idea here? why start() ??
if (first->start() > _session.current_start_frame()) {
requires_bounce = true;
return false;
}
}
+ /* currently RouteTimeAxisView::set_track_mode does not
+ * implement bounce. Existing regions cannot be converted.
+ *
+ * so let's make sure this region is already set up
+ * as tape-track (spanning the complete range)
+ */
+ if (first->length() != max_framepos - first->position()) {
+ requires_bounce = true;
+ return false;
+ }
+
/* is the source used by only 1 playlist ? */
boost::shared_ptr<AudioRegion> afirst = boost::dynamic_pointer_cast<AudioRegion> (first);
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index 62109e8..c056763 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -187,16 +187,16 @@ AudioTrack::set_state (const XMLNode& node, int version)
{
const XMLProperty *prop;
- if (Track::set_state (node, version)) {
- return -1;
- }
-
if ((prop = node.property (X_("mode"))) != 0) {
_mode = TrackMode (string_2_enum (prop->value(), _mode));
} else {
_mode = Normal;
}
+ if (Track::set_state (node, version)) {
+ return -1;
+ }
+
pending_state = const_cast<XMLNode*> (&node);
if (_session.state_of_the_state() & Session::Loading) {
@@ -603,7 +603,7 @@ AudioTrack::freeze_me (InterThreadInfo& itt)
/* reset stuff that has already been accounted for in the freeze process */
- set_gain (1.0, this);
+ set_gain (GAIN_COEFF_UNITY, this);
_amp->gain_control()->set_automation_state (Off);
/* XXX need to use _main_outs _panner->set_automation_state (Off); */
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 8c1c533..4b9a81e 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -2375,7 +2375,8 @@ AUPluginInfo::au_start_crashlog ()
assert(!_crashlog_fd);
DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("Creating AU Log: %1\n", fn));
if (!(_crashlog_fd = fopen(fn.c_str(), "w"))) {
- PBD::error << "Cannot create AU error-log\n";
+ PBD::error << "Cannot create AU error-log" << fn << "\n";
+ cerr << "Cannot create AU error-log" << fn << "\n";
}
}
@@ -2395,9 +2396,12 @@ AUPluginInfo::au_remove_crashlog ()
void
AUPluginInfo::au_crashlog (std::string msg)
{
- assert(_crashlog_fd);
- fprintf(_crashlog_fd, "AU: %s\n", msg.c_str());
- ::fflush(_crashlog_fd);
+ if (!_crashlog_fd) {
+ fprintf(stderr, "AU: %s\n", msg.c_str());
+ } else {
+ fprintf(_crashlog_fd, "AU: %s\n", msg.c_str());
+ ::fflush(_crashlog_fd);
+ }
}
void
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 116b990..c18b5dd 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -61,7 +61,6 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-gint AudioEngine::m_meter_exit;
AudioEngine* AudioEngine::_instance = 0;
#ifdef SILENCE_AFTER
@@ -99,7 +98,6 @@ AudioEngine::AudioEngine ()
, _silence_hit_cnt (0)
#endif
{
- g_atomic_int_set (&m_meter_exit, 0);
reset_silence_countdown ();
start_hw_event_processing();
discover_backends ();
@@ -108,7 +106,6 @@ AudioEngine::AudioEngine ()
AudioEngine::~AudioEngine ()
{
_in_destructor = true;
- stop_metering_thread ();
stop_hw_event_processing();
drop_backend ();
for (BackendMap::const_iterator i = _backends.begin(); i != _backends.end(); ++i) {
@@ -205,7 +202,15 @@ AudioEngine::process_callback (pframes_t nframes)
if (!tm.locked()) {
/* return having done nothing */
- _processed_frames = next_processed_frames;
+ if (_session) {
+ Xrun();
+ }
+ /* really only JACK requires this
+ * (other backends clear the output buffers
+ * before the process_callback. it may even be
+ * jack/alsa only). but better safe than sorry.
+ */
+ PortManager::silence_outputs (nframes);
return 0;
}
@@ -283,7 +288,7 @@ AudioEngine::process_callback (pframes_t nframes)
/* fade out over 1 second */
session_removal_countdown = sample_rate()/2;
- session_removal_gain = 1.0;
+ session_removal_gain = GAIN_COEFF_UNITY;
session_removal_gain_step = 1.0/session_removal_countdown;
} else if (session_removal_countdown > 0) {
@@ -352,7 +357,6 @@ AudioEngine::process_callback (pframes_t nframes)
}
if (!_running) {
- PortManager::cycle_end (nframes);
_processed_frames = next_processed_frames;
return 0;
}
@@ -569,40 +573,6 @@ AudioEngine::stop_hw_event_processing()
}
-
-void
-AudioEngine::stop_metering_thread ()
-{
- if (m_meter_thread) {
- g_atomic_int_set (&m_meter_exit, 1);
- m_meter_thread->join ();
- m_meter_thread = 0;
- }
-}
-
-void
-AudioEngine::start_metering_thread ()
-{
- if (m_meter_thread == 0) {
- g_atomic_int_set (&m_meter_exit, 0);
- m_meter_thread = Glib::Threads::Thread::create (boost::bind (&AudioEngine::meter_thread, this));
- }
-}
-
-void
-AudioEngine::meter_thread ()
-{
- pthread_set_name (X_("meter"));
-
- while (true) {
- Glib::usleep (10000); /* 1/100th sec interval */
- if (g_atomic_int_get(&m_meter_exit)) {
- break;
- }
- Metering::Meter ();
- }
-}
-
void
AudioEngine::set_session (Session *s)
{
@@ -662,11 +632,8 @@ AudioEngine::reconnect_session_routes (bool reconnect_inputs, bool reconnect_out
void
AudioEngine::died ()
{
- /* called from a signal handler for SIGPIPE */
-
- stop_metering_thread ();
-
- _running = false;
+ /* called from a signal handler for SIGPIPE */
+ _running = false;
}
int
@@ -875,8 +842,6 @@ AudioEngine::start (bool for_latency)
}
- start_metering_thread ();
-
if (!for_latency) {
Running(); /* EMIT SIGNAL */
}
@@ -909,7 +874,6 @@ AudioEngine::stop (bool for_latency)
_latency_output_port = 0;
_latency_input_port = 0;
_started_for_latency = false;
- stop_metering_thread ();
Port::PortDrop ();
@@ -1250,7 +1214,6 @@ AudioEngine::halted_callback (const char* why)
return;
}
- stop_metering_thread ();
_running = false;
Port::PortDrop (); /* EMIT SIGNAL */
diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc
index 2523a85..19434bd 100644
--- a/libs/ardour/audiofilesource.cc
+++ b/libs/ardour/audiofilesource.cc
@@ -168,10 +168,21 @@ AudioFileSource::peak_path (string audio_path)
{
string base;
- base = PBD::basename_nosuffix (audio_path);
+ string::size_type suffix = audio_path.find_last_of ('.');
+
+ if (suffix != string::npos) {
+ base = audio_path.substr (0, suffix);
+ } else {
+ warning << string_compose (_("Odd audio file path: %1"), audio_path) << endmsg;
+ base = audio_path;
+ }
+
base += '%';
base += (char) ('A' + _channel);
+ /* pass in the name/path of the source, with no audio file type suffix
+ */
+
return _session.peak_path (base);
}
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 37bf3e1..8113b26 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -72,8 +72,6 @@ namespace ARDOUR {
}
}
-static const double VERY_SMALL_SIGNAL = 0.0000001; //-140dB
-
/* Curve manipulations */
static void
@@ -106,14 +104,14 @@ generate_db_fade (boost::shared_ptr<Evoral::ControlList> dst, double len, int nu
//generate a fade-out curve by successively applying a gain drop
float fade_speed = dB_to_coefficient(dB_drop / (float) num_steps);
for (int i = 1; i < (num_steps-1); i++) {
- float coeff = 1.0;
+ float coeff = GAIN_COEFF_UNITY;
for (int j = 0; j < i; j++) {
coeff *= fade_speed;
}
dst->fast_simple_add (len*(double)i/(double)num_steps, coeff);
}
- dst->fast_simple_add (len, VERY_SMALL_SIGNAL);
+ dst->fast_simple_add (len, GAIN_COEFF_SMALL);
}
static void
@@ -428,15 +426,16 @@ AudioRegion::read_peaks (PeakData *buf, framecnt_t npeaks, framecnt_t offset, fr
if (audio_source(chan_n)->read_peaks (buf, npeaks, offset, cnt, frames_per_pixel)) {
return 0;
- } else {
- if (_scale_amplitude != 1.0f) {
- for (framecnt_t n = 0; n < npeaks; ++n) {
- buf[n].max *= _scale_amplitude;
- buf[n].min *= _scale_amplitude;
- }
+ }
+
+ if (_scale_amplitude != 1.0f) {
+ for (framecnt_t n = 0; n < npeaks; ++n) {
+ buf[n].max *= _scale_amplitude;
+ buf[n].min *= _scale_amplitude;
}
- return cnt;
}
+
+ return npeaks;
}
/** @param buf Buffer to write data to (existing data will be overwritten).
@@ -791,8 +790,8 @@ AudioRegion::state ()
// so, if they are both at 1.0f, that means the default region.
if (_envelope->size() == 2 &&
- _envelope->front()->value == 1.0f &&
- _envelope->back()->value==1.0f) {
+ _envelope->front()->value == GAIN_COEFF_UNITY &&
+ _envelope->back()->value==GAIN_COEFF_UNITY) {
if (_envelope->front()->when == 0 && _envelope->back()->when == _length) {
default_env = true;
}
@@ -966,11 +965,13 @@ AudioRegion::fade_range (framepos_t start, framepos_t end)
switch (coverage (start, end)) {
case Evoral::OverlapStart:
+ trim_front(start);
s = _position;
e = end;
set_fade_in (FadeConstantPower, e - s);
break;
case Evoral::OverlapEnd:
+ trim_end(end);
s = start;
e = _position + _length;
set_fade_out (FadeConstantPower, e - s);
@@ -1026,8 +1027,8 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
switch (shape) {
case FadeLinear:
- _fade_in->fast_simple_add (0.0, VERY_SMALL_SIGNAL);
- _fade_in->fast_simple_add (len, 1.0);
+ _fade_in->fast_simple_add (0.0, GAIN_COEFF_SMALL);
+ _fade_in->fast_simple_add (len, GAIN_COEFF_UNITY);
reverse_curve (_inverse_fade_in.val(), _fade_in.val());
break;
@@ -1048,12 +1049,12 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
break;
case FadeConstantPower:
- _fade_in->fast_simple_add (0.0, VERY_SMALL_SIGNAL);
+ _fade_in->fast_simple_add (0.0, GAIN_COEFF_SMALL);
for (int i = 1; i < num_steps; ++i) {
const float dist = i / (num_steps + 1.f);
_fade_in->fast_simple_add (len * dist, sin (dist * M_PI / 2.0));
}
- _fade_in->fast_simple_add (len, 1.0);
+ _fade_in->fast_simple_add (len, GAIN_COEFF_UNITY);
reverse_curve (_inverse_fade_in.val(), _fade_in.val());
break;
@@ -1065,9 +1066,9 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
const double breakpoint = 0.7; //linear for first 70%
for (int i = 2; i < 9; ++i) {
const float coeff = (1.f - breakpoint) * powf (0.5, i);
- _fade_in->fast_simple_add (len * (breakpoint + ((1.0 - breakpoint) * (double)i / 9.0)), coeff);
+ _fade_in->fast_simple_add (len * (breakpoint + ((GAIN_COEFF_UNITY - breakpoint) * (double)i / 9.0)), coeff);
}
- _fade_in->fast_simple_add (len, VERY_SMALL_SIGNAL);
+ _fade_in->fast_simple_add (len, GAIN_COEFF_SMALL);
reverse_curve (c3, _fade_in.val());
_fade_in->copy_events (*c3);
reverse_curve (_inverse_fade_in.val(), _fade_in.val());
@@ -1108,8 +1109,8 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
switch (shape) {
case FadeLinear:
- _fade_out->fast_simple_add (0.0, 1.0);
- _fade_out->fast_simple_add (len, VERY_SMALL_SIGNAL);
+ _fade_out->fast_simple_add (0.0, GAIN_COEFF_UNITY);
+ _fade_out->fast_simple_add (len, GAIN_COEFF_SMALL);
reverse_curve (_inverse_fade_out.val(), _fade_out.val());
break;
@@ -1128,12 +1129,12 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
case FadeConstantPower:
//constant-power fades use a sin/cos relationship
//the cutoff is abrupt but it has the benefit of being symmetrical
- _fade_out->fast_simple_add (0.0, 1.0);
+ _fade_out->fast_simple_add (0.0, GAIN_COEFF_UNITY);
for (int i = 1; i < num_steps; ++i) {
const float dist = i / (num_steps + 1.f);
_fade_out->fast_simple_add (len * dist, cos (dist * M_PI / 2.0));
}
- _fade_out->fast_simple_add (len, VERY_SMALL_SIGNAL);
+ _fade_out->fast_simple_add (len, GAIN_COEFF_SMALL);
reverse_curve (_inverse_fade_out.val(), _fade_out.val());
break;
@@ -1145,9 +1146,9 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
const double breakpoint = 0.7; //linear for first 70%
for (int i = 2; i < 9; ++i) {
const float coeff = (1.f - breakpoint) * powf (0.5, i);
- _fade_out->fast_simple_add (len * (breakpoint + ((1.0 - breakpoint) * (double)i / 9.0)), coeff);
+ _fade_out->fast_simple_add (len * (breakpoint + ((GAIN_COEFF_UNITY - breakpoint) * (double)i / 9.0)), coeff);
}
- _fade_out->fast_simple_add (len, VERY_SMALL_SIGNAL);
+ _fade_out->fast_simple_add (len, GAIN_COEFF_SMALL);
reverse_curve (_inverse_fade_out.val(), _fade_out.val());
break;
}
@@ -1266,8 +1267,8 @@ AudioRegion::set_default_envelope ()
{
_envelope->freeze ();
_envelope->clear ();
- _envelope->fast_simple_add (0, 1.0f);
- _envelope->fast_simple_add (_length, 1.0f);
+ _envelope->fast_simple_add (0, GAIN_COEFF_UNITY);
+ _envelope->fast_simple_add (_length, GAIN_COEFF_UNITY);
_envelope->thaw ();
}
@@ -1447,14 +1448,14 @@ AudioRegion::normalize (float max_amplitude, float target_dB)
{
gain_t target = dB_to_coefficient (target_dB);
- if (target == 1.0f) {
+ if (target == GAIN_COEFF_UNITY) {
/* do not normalize to precisely 1.0 (0 dBFS), to avoid making it appear
that we may have clipped.
*/
target -= FLT_EPSILON;
}
- if (max_amplitude == 0.0f) {
+ if (max_amplitude < GAIN_COEFF_SMALL) {
/* don't even try */
return;
}
diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc
index c856ef4..566a37f 100644
--- a/libs/ardour/audiosource.cc
+++ b/libs/ardour/audiosource.cc
@@ -356,6 +356,33 @@ AudioSource::read_peaks_with_fpp (PeakData *peaks, framecnt_t npeaks, framepos_t
framecnt_t read_npeaks = npeaks;
framecnt_t zero_fill = 0;
+ GStatBuf statbuf;
+
+ expected_peaks = (cnt / (double) samples_per_file_peak);
+ if (g_stat (peakpath.c_str(), &statbuf) != 0) {
+ error << string_compose (_("Cannot open peakfile @ %1 for size check (%2)"), peakpath, strerror (errno)) << endmsg;
+ return -1;
+ }
+
+ /* check actual size of the peakfile is at least large enough for all
+ * the data in the audio file. if it is too short, assume that a crash
+ * or other error truncated it, and rebuild it from scratch.
+ */
+
+ const off_t expected_file_size = (_length / (double) samples_per_file_peak) * sizeof (PeakData);
+
+ if (statbuf.st_size < expected_file_size) {
+ warning << string_compose (_("peak file %1 is truncated from %2 to %3"), peakpath, expected_file_size, statbuf.st_size) << endmsg;
+ const_cast<AudioSource*>(this)->build_peaks_from_scratch ();
+ if (g_stat (peakpath.c_str(), &statbuf) != 0) {
+ error << string_compose (_("Cannot open peakfile @ %1 for size check (%2) after rebuild"), peakpath, strerror (errno)) << endmsg;
+ }
+ if (statbuf.st_size < expected_file_size) {
+ fatal << "peak file is still truncated after rebuild" << endmsg;
+ /*NOTREACHED*/
+ }
+ }
+
ScopedFileDescriptor sfd (::open (peakpath.c_str(), O_RDONLY));
if (sfd < 0) {
@@ -363,9 +390,9 @@ AudioSource::read_peaks_with_fpp (PeakData *peaks, framecnt_t npeaks, framepos_t
return -1;
}
- expected_peaks = (cnt / (double) samples_per_file_peak);
scale = npeaks/expected_peaks;
+
DEBUG_TRACE (DEBUG::Peaks, string_compose (" ======>RP: npeaks = %1 start = %2 cnt = %3 len = %4 samples_per_visual_peak = %5 expected was %6 ... scale = %7 PD ptr = %8\n"
, npeaks, start, cnt, _length, samples_per_visual_peak, expected_peaks, scale, peaks));
@@ -376,6 +403,8 @@ AudioSource::read_peaks_with_fpp (PeakData *peaks, framecnt_t npeaks, framepos_t
cnt = _length - start;
read_npeaks = min ((framecnt_t) floor (cnt / samples_per_visual_peak), npeaks);
zero_fill = npeaks - read_npeaks;
+ expected_peaks = (cnt / (double) samples_per_file_peak);
+ scale = npeaks/expected_peaks;
}
// cerr << "actual npeaks = " << read_npeaks << " zf = " << zero_fill << endl;
@@ -684,7 +713,7 @@ AudioSource::build_peaks_from_scratch ()
/* hold lock while building peaks */
Glib::Threads::Mutex::Lock lp (_lock);
-
+
if (prepare_for_peakfile_writes ()) {
goto out;
}
@@ -761,7 +790,9 @@ AudioSource::done_with_peakfile_writes (bool done)
_peakfile_fd = -1;
}
-/** @param first_frame Offset from the source start of the first frame to process */
+/** @param first_frame Offset from the source start of the first frame to
+ * process. _lock MUST be held by caller.
+*/
int
AudioSource::compute_and_write_peaks (Sample* buf, framecnt_t first_frame, framecnt_t cnt,
bool force, bool intermediate_peaks_ready)
diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc
index 310592a..f928ee0 100644
--- a/libs/ardour/automatable.cc
+++ b/libs/ardour/automatable.cc
@@ -163,6 +163,8 @@ Automatable::describe_parameter (Evoral::Parameter param)
if (param == Evoral::Parameter(GainAutomation)) {
return _("Fader");
+ } else if (param.type() == TrimAutomation) {
+ return _("Trim");
} else if (param.type() == MuteAutomation) {
return _("Mute");
} else if (param.type() == MidiCCAutomation) {
@@ -276,6 +278,7 @@ Automatable::set_parameter_automation_state (Evoral::Parameter param, AutoState
if (c && (s != c->automation_state())) {
c->set_automation_state (s);
_a_session.set_dirty ();
+ AutomationStateChanged(); /* Emit signal */
}
}
@@ -441,6 +444,13 @@ Automatable::control_factory(const Evoral::Parameter& param)
} else {
warning << "GainAutomation for non-Amp" << endl;
}
+ } else if (param.type() == TrimAutomation) {
+ Amp* amp = dynamic_cast<Amp*>(this);
+ if (amp) {
+ control = new Amp::GainControl(X_("trimcontrol"), _a_session, amp, param);
+ } else {
+ warning << "TrimAutomation for non-Amp" << endl;
+ }
} else if (param.type() == PanAzimuthAutomation || param.type() == PanWidthAutomation || param.type() == PanElevationAutomation) {
Pannable* pannable = dynamic_cast<Pannable*>(this);
if (pannable) {
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index bfa16f9..2195203 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -139,3 +139,49 @@ AutomationControl::stop_touch(bool mark, double when)
}
}
}
+
+double
+AutomationControl::internal_to_interface (double val) const
+{
+ if (_desc.integer_step) {
+ // both upper and lower are inclusive.
+ val = (val - lower()) / (1 + upper() - lower());
+ } else {
+ val = (val - lower()) / (upper() - lower());
+ }
+
+ if (_desc.logarithmic) {
+ if (val > 0) {
+ val = pow (val, 1/1.5);
+ } else {
+ val = 0;
+ }
+ }
+
+ return val;
+}
+
+double
+AutomationControl::interface_to_internal (double val) const
+{
+ if (_desc.logarithmic) {
+ if (val <= 0) {
+ val = 0;
+ } else {
+ val = pow (val, 1.5);
+ }
+ }
+
+ if (_desc.integer_step) {
+ val = lower() + val * (1 + upper() - lower());
+ } else {
+ val = lower() + val * (upper() - lower());
+ }
+
+ if (val < lower()) val = lower();
+ if (val > upper()) val = upper();
+
+ return val;
+}
+
+
diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc
index 941178a..7f7599f 100644
--- a/libs/ardour/automation_list.cc
+++ b/libs/ardour/automation_list.cc
@@ -139,6 +139,7 @@ AutomationList::create_curve_if_necessary()
{
switch (_parameter.type()) {
case GainAutomation:
+ case TrimAutomation:
case PanAzimuthAutomation:
case PanElevationAutomation:
case PanWidthAutomation:
diff --git a/libs/ardour/coreaudiosource.cc b/libs/ardour/coreaudiosource.cc
index 010905d..33753f4 100644
--- a/libs/ardour/coreaudiosource.cc
+++ b/libs/ardour/coreaudiosource.cc
@@ -104,6 +104,12 @@ CoreAudioSource::~CoreAudioSource ()
{
}
+void
+CoreAudioSource::close ()
+{
+ af.Close ();
+}
+
int
CoreAudioSource::safe_read (Sample* dst, framepos_t start, framecnt_t cnt, AudioBufferList& abl) const
{
diff --git a/libs/ardour/debug.cc b/libs/ardour/debug.cc
index c0993e9..0a00e89 100644
--- a/libs/ardour/debug.cc
+++ b/libs/ardour/debug.cc
@@ -25,45 +25,45 @@
using namespace std;
-uint64_t PBD::DEBUG::MidiSourceIO = PBD::new_debug_bit ("midisourceio");
-uint64_t PBD::DEBUG::MidiPlaylistIO = PBD::new_debug_bit ("midiplaylistio");
-uint64_t PBD::DEBUG::MidiDiskstreamIO = PBD::new_debug_bit ("mididiskstreamio");
-uint64_t PBD::DEBUG::SnapBBT = PBD::new_debug_bit ("snapbbt");
-uint64_t PBD::DEBUG::Latency = PBD::new_debug_bit ("latency");
-uint64_t PBD::DEBUG::LatencyCompensation = PBD::new_debug_bit ("latencycompensation");
-uint64_t PBD::DEBUG::Peaks = PBD::new_debug_bit ("peaks");
-uint64_t PBD::DEBUG::Processors = PBD::new_debug_bit ("processors");
-uint64_t PBD::DEBUG::ProcessThreads = PBD::new_debug_bit ("processthreads");
-uint64_t PBD::DEBUG::Graph = PBD::new_debug_bit ("graph");
-uint64_t PBD::DEBUG::Destruction = PBD::new_debug_bit ("destruction");
-uint64_t PBD::DEBUG::MTC = PBD::new_debug_bit ("mtc");
-uint64_t PBD::DEBUG::LTC = PBD::new_debug_bit ("ltc");
-uint64_t PBD::DEBUG::Transport = PBD::new_debug_bit ("transport");
-uint64_t PBD::DEBUG::Slave = PBD::new_debug_bit ("slave");
-uint64_t PBD::DEBUG::SessionEvents = PBD::new_debug_bit ("sessionevents");
-uint64_t PBD::DEBUG::MidiIO = PBD::new_debug_bit ("midiio");
-uint64_t PBD::DEBUG::MackieControl = PBD::new_debug_bit ("mackiecontrol");
-uint64_t PBD::DEBUG::MidiClock = PBD::new_debug_bit ("midiclock");
-uint64_t PBD::DEBUG::Monitor = PBD::new_debug_bit ("monitor");
-uint64_t PBD::DEBUG::Solo = PBD::new_debug_bit ("solo");
-uint64_t PBD::DEBUG::AudioPlayback = PBD::new_debug_bit ("audioplayback");
-uint64_t PBD::DEBUG::Panning = PBD::new_debug_bit ("panning");
-uint64_t PBD::DEBUG::LV2 = PBD::new_debug_bit ("lv2");
-uint64_t PBD::DEBUG::CaptureAlignment = PBD::new_debug_bit ("capturealignment");
-uint64_t PBD::DEBUG::PluginManager = PBD::new_debug_bit ("pluginmanager");
-uint64_t PBD::DEBUG::AudioUnits = PBD::new_debug_bit ("audiounits");
-uint64_t PBD::DEBUG::ControlProtocols = PBD::new_debug_bit ("controlprotocols");
-uint64_t PBD::DEBUG::CycleTimers = PBD::new_debug_bit ("cycletimers");
-uint64_t PBD::DEBUG::MidiTrackers = PBD::new_debug_bit ("miditrackers");
-uint64_t PBD::DEBUG::Layering = PBD::new_debug_bit ("layering");
-uint64_t PBD::DEBUG::TempoMath = PBD::new_debug_bit ("tempomath");
-uint64_t PBD::DEBUG::TempoMap = PBD::new_debug_bit ("tempomap");
-uint64_t PBD::DEBUG::OrderKeys = PBD::new_debug_bit ("orderkeys");
-uint64_t PBD::DEBUG::Automation = PBD::new_debug_bit ("automation");
-uint64_t PBD::DEBUG::WiimoteControl = PBD::new_debug_bit ("wiimotecontrol");
-uint64_t PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports");
-uint64_t PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine");
-uint64_t PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud");
-uint64_t PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler");
+PBD::DebugBits PBD::DEBUG::MidiSourceIO = PBD::new_debug_bit ("midisourceio");
+PBD::DebugBits PBD::DEBUG::MidiPlaylistIO = PBD::new_debug_bit ("midiplaylistio");
+PBD::DebugBits PBD::DEBUG::MidiDiskstreamIO = PBD::new_debug_bit ("mididiskstreamio");
+PBD::DebugBits PBD::DEBUG::SnapBBT = PBD::new_debug_bit ("snapbbt");
+PBD::DebugBits PBD::DEBUG::Latency = PBD::new_debug_bit ("latency");
+PBD::DebugBits PBD::DEBUG::LatencyCompensation = PBD::new_debug_bit ("latencycompensation");
+PBD::DebugBits PBD::DEBUG::Peaks = PBD::new_debug_bit ("peaks");
+PBD::DebugBits PBD::DEBUG::Processors = PBD::new_debug_bit ("processors");
+PBD::DebugBits PBD::DEBUG::ProcessThreads = PBD::new_debug_bit ("processthreads");
+PBD::DebugBits PBD::DEBUG::Graph = PBD::new_debug_bit ("graph");
+PBD::DebugBits PBD::DEBUG::Destruction = PBD::new_debug_bit ("destruction");
+PBD::DebugBits PBD::DEBUG::MTC = PBD::new_debug_bit ("mtc");
+PBD::DebugBits PBD::DEBUG::LTC = PBD::new_debug_bit ("ltc");
+PBD::DebugBits PBD::DEBUG::Transport = PBD::new_debug_bit ("transport");
+PBD::DebugBits PBD::DEBUG::Slave = PBD::new_debug_bit ("slave");
+PBD::DebugBits PBD::DEBUG::SessionEvents = PBD::new_debug_bit ("sessionevents");
+PBD::DebugBits PBD::DEBUG::MidiIO = PBD::new_debug_bit ("midiio");
+PBD::DebugBits PBD::DEBUG::MackieControl = PBD::new_debug_bit ("mackiecontrol");
+PBD::DebugBits PBD::DEBUG::MidiClock = PBD::new_debug_bit ("midiclock");
+PBD::DebugBits PBD::DEBUG::Monitor = PBD::new_debug_bit ("monitor");
+PBD::DebugBits PBD::DEBUG::Solo = PBD::new_debug_bit ("solo");
+PBD::DebugBits PBD::DEBUG::AudioPlayback = PBD::new_debug_bit ("audioplayback");
+PBD::DebugBits PBD::DEBUG::Panning = PBD::new_debug_bit ("panning");
+PBD::DebugBits PBD::DEBUG::LV2 = PBD::new_debug_bit ("lv2");
+PBD::DebugBits PBD::DEBUG::CaptureAlignment = PBD::new_debug_bit ("capturealignment");
+PBD::DebugBits PBD::DEBUG::PluginManager = PBD::new_debug_bit ("pluginmanager");
+PBD::DebugBits PBD::DEBUG::AudioUnits = PBD::new_debug_bit ("audiounits");
+PBD::DebugBits PBD::DEBUG::ControlProtocols = PBD::new_debug_bit ("controlprotocols");
+PBD::DebugBits PBD::DEBUG::CycleTimers = PBD::new_debug_bit ("cycletimers");
+PBD::DebugBits PBD::DEBUG::MidiTrackers = PBD::new_debug_bit ("miditrackers");
+PBD::DebugBits PBD::DEBUG::Layering = PBD::new_debug_bit ("layering");
+PBD::DebugBits PBD::DEBUG::TempoMath = PBD::new_debug_bit ("tempomath");
+PBD::DebugBits PBD::DEBUG::TempoMap = PBD::new_debug_bit ("tempomap");
+PBD::DebugBits PBD::DEBUG::OrderKeys = PBD::new_debug_bit ("orderkeys");
+PBD::DebugBits PBD::DEBUG::Automation = PBD::new_debug_bit ("automation");
+PBD::DebugBits PBD::DEBUG::WiimoteControl = PBD::new_debug_bit ("wiimotecontrol");
+PBD::DebugBits PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports");
+PBD::DebugBits PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine");
+PBD::DebugBits PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud");
+PBD::DebugBits PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler");
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc
index f167198..359b029 100644
--- a/libs/ardour/delivery.cc
+++ b/libs/ardour/delivery.cc
@@ -52,7 +52,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<Pann
: IOProcessor(s, boost::shared_ptr<IO>(), (role_requires_output_ports (r) ? io : boost::shared_ptr<IO>()), name)
, _role (r)
, _output_buffers (new BufferSet())
- , _current_gain (1.0)
+ , _current_gain (GAIN_COEFF_UNITY)
, _no_outs_cuz_we_no_monitor (false)
, _mute_master (mm)
, _no_panner_reset (false)
@@ -76,7 +76,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<Pannable> pannable, boost::sha
: IOProcessor(s, false, (role_requires_output_ports (r) ? true : false), name, "", DataType::AUDIO, (r == Send))
, _role (r)
, _output_buffers (new BufferSet())
- , _current_gain (1.0)
+ , _current_gain (GAIN_COEFF_UNITY)
, _no_outs_cuz_we_no_monitor (false)
, _mute_master (mm)
, _no_panner_reset (false)
@@ -264,7 +264,7 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
_current_gain = Amp::apply_gain (bufs, _session.nominal_frame_rate(), nframes, _current_gain, tgain);
- } else if (tgain == 0.0) {
+ } else if (tgain < GAIN_COEFF_SMALL) {
/* we were quiet last time, and we're still supposed to be quiet.
Silence the outputs, and make sure the buffers are quiet too,
@@ -273,11 +273,11 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pf
_output->silence (nframes);
if (result_required) {
bufs.set_count (output_buffers().count ());
- Amp::apply_simple_gain (bufs, nframes, 0.0);
+ Amp::apply_simple_gain (bufs, nframes, GAIN_COEFF_ZERO);
}
goto out;
- } else if (tgain != 1.0) {
+ } else if (tgain != GAIN_COEFF_UNITY) {
/* target gain has not changed, but is not unity */
Amp::apply_simple_gain (bufs, nframes, tgain);
@@ -498,7 +498,7 @@ Delivery::target_gain ()
/* if we've been requested to deactivate, our target gain is zero */
if (!_pending_active) {
- return 0.0;
+ return GAIN_COEFF_ZERO;
}
/* if we've been told not to output because its a monitoring situation and
@@ -506,7 +506,7 @@ Delivery::target_gain ()
*/
if (_no_outs_cuz_we_no_monitor) {
- return 0.0;
+ return GAIN_COEFF_ZERO;
}
MuteMaster::MutePoint mp = MuteMaster::Main; // stupid gcc uninit warning
@@ -538,7 +538,7 @@ Delivery::target_gain ()
it gets its signal from the master out.
*/
- desired_gain = 0.0;
+ desired_gain = GAIN_COEFF_ZERO;
}
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index 49d9d62..9f3322d 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -64,6 +64,7 @@ Diskstream::Diskstream (Session &sess, const string &name, Flag flag)
, i_am_the_modifier (0)
, _track (0)
, _record_enabled (0)
+ , _record_safe (0)
, _visible_speed (1.0f)
, _actual_speed (1.0f)
, _buffer_reallocation_required (false)
@@ -102,6 +103,7 @@ Diskstream::Diskstream (Session& sess, const XMLNode& /*node*/)
, i_am_the_modifier (0)
, _track (0)
, _record_enabled (0)
+ , _record_safe (0)
, _visible_speed (1.0f)
, _actual_speed (1.0f)
, _buffer_reallocation_required (false)
@@ -468,6 +470,7 @@ Diskstream::get_state ()
snprintf (buf, sizeof(buf), "%f", _visible_speed);
node->add_property ("speed", buf);
node->add_property ("capture-alignment", enum_2_string (_alignment_choice));
+ node->add_property ("record-safe", _record_safe ? "yes" : "no");
if (_extra_xml) {
node->add_child_copy (*_extra_xml);
@@ -516,8 +519,12 @@ Diskstream::set_state (const XMLNode& node, int /*version*/)
non_realtime_set_speed ();
}
}
+
+ if ((prop = node.property ("record-safe")) != 0) {
+ _record_safe = PBD::string_is_affirmative (prop->value()) ? 1 : 0;
+ }
- return 0;
+ return 0;
}
void
@@ -769,6 +776,18 @@ Diskstream::disengage_record_enable ()
g_atomic_int_set (&_record_enabled, 0);
}
+void
+Diskstream::engage_record_safe ()
+{
+ g_atomic_int_set (&_record_safe, 1);
+}
+
+void
+Diskstream::disengage_record_safe ()
+{
+ g_atomic_int_set (&_record_safe, 0);
+}
+
framecnt_t
Diskstream::default_disk_read_chunk_frames()
{
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index a674a21..a1cf8d0 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -74,6 +74,7 @@ setup_enum_writer ()
AFLPosition _AFLPosition;
RemoteModel _RemoteModel;
DenormalModel _DenormalModel;
+ LayerModel _LayerModel;
InsertMergePolicy _InsertMergePolicy;
ListenPosition _ListenPosition;
SampleFormat _SampleFormat;
@@ -135,6 +136,7 @@ setup_enum_writer ()
#define REGISTER_CLASS_ENUM(t,e) i.push_back (t::e); s.push_back (#e)
REGISTER_ENUM (GainAutomation);
+ REGISTER_ENUM (TrimAutomation);
REGISTER_ENUM (PanAzimuthAutomation);
REGISTER_ENUM (PanElevationAutomation);
REGISTER_ENUM (PanWidthAutomation);
@@ -186,6 +188,7 @@ setup_enum_writer ()
REGISTER_ENUM (MeterIEC2BBC);
REGISTER_ENUM (MeterIEC2EBU);
REGISTER_ENUM (MeterVU);
+ REGISTER_ENUM (MeterPeak0dB);
REGISTER (_MeterType);
REGISTER_ENUM (Normal);
@@ -296,7 +299,11 @@ setup_enum_writer ()
*/
enum_writer.add_to_hack_table ("EditorOrdered", "MixerOrdered");
- REGISTER_ENUM (InsertMergeReject);
+ REGISTER_ENUM (LaterHigher);
+ REGISTER_ENUM (Manual);
+ REGISTER (_LayerModel);
+
+ REGISTER_ENUM (InsertMergeReject);
REGISTER_ENUM (InsertMergeRelax);
REGISTER_ENUM (InsertMergeReplace);
REGISTER_ENUM (InsertMergeTruncateExisting);
@@ -803,6 +810,19 @@ std::ostream& operator<<(std::ostream& o, const ListenPosition& var)
std::string s = enum_2_string (var);
return o << s;
}
+std::istream& operator>>(std::istream& o, LayerModel& var)
+{
+ std::string s;
+ o >> s;
+ var = (LayerModel) string_2_enum (s, var);
+ return o;
+}
+
+std::ostream& operator<<(std::ostream& o, const LayerModel& var)
+{
+ std::string s = enum_2_string (var);
+ return o << s;
+}
std::istream& operator>>(std::istream& o, InsertMergePolicy& var)
{
diff --git a/libs/ardour/event_type_map.cc b/libs/ardour/event_type_map.cc
index cd3aeac..8782162 100644
--- a/libs/ardour/event_type_map.cc
+++ b/libs/ardour/event_type_map.cc
@@ -130,6 +130,8 @@ EventTypeMap::from_symbol(const string& str) const
if (str == "gain") {
p_type = GainAutomation;
+ } else if (str == "trim") {
+ p_type = TrimAutomation;
} else if (str == "solo") {
p_type = SoloAutomation;
} else if (str == "mute") {
@@ -207,6 +209,8 @@ EventTypeMap::to_symbol(const Evoral::Parameter& param) const
if (t == GainAutomation) {
return "gain";
+ } else if (t == TrimAutomation) {
+ return "trim";
} else if (t == PanAzimuthAutomation) {
return "pan-azimuth";
} else if (t == PanElevationAutomation) {
diff --git a/libs/ardour/export_format_manager.cc b/libs/ardour/export_format_manager.cc
index 04cfa76..f87a086 100644
--- a/libs/ardour/export_format_manager.cc
+++ b/libs/ardour/export_format_manager.cc
@@ -293,6 +293,12 @@ ExportFormatManager::select_with_toc (bool value)
check_for_description_change ();
}
+void
+ExportFormatManager::select_with_mp4chaps (bool value)
+{
+ current_selection->set_with_mp4chaps (value);
+ check_for_description_change ();
+}
void
ExportFormatManager::set_command (std::string command)
diff --git a/libs/ardour/export_format_specification.cc b/libs/ardour/export_format_specification.cc
index 9a972da..32d16c9 100644
--- a/libs/ardour/export_format_specification.cc
+++ b/libs/ardour/export_format_specification.cc
@@ -167,9 +167,10 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s)
, _silence_end (s)
, _normalize (false)
- , _normalize_target (1.0)
+ , _normalize_target (GAIN_COEFF_UNITY)
, _with_toc (false)
, _with_cue (false)
+ , _with_mp4chaps (false)
, _soundcloud_upload (false)
, _command ("")
{
@@ -248,6 +249,7 @@ ExportFormatSpecification::get_state ()
root->add_property ("id", _id.to_s());
root->add_property ("with-cue", _with_cue ? "true" : "false");
root->add_property ("with-toc", _with_toc ? "true" : "false");
+ root->add_property ("with-mp4chaps", _with_mp4chaps ? "true" : "false");
root->add_property ("command", _command);
node = root->add_child ("Encoding");
@@ -319,14 +321,19 @@ ExportFormatSpecification::set_state (const XMLNode & root)
} else {
_with_cue = false;
}
-
+
if ((prop = root.property ("with-toc"))) {
_with_toc = string_is_affirmative (prop->value());
} else {
_with_toc = false;
}
-
-
+
+ if ((prop = root.property ("with-mp4chaps"))) {
+ _with_mp4chaps = string_is_affirmative (prop->value());
+ } else {
+ _with_mp4chaps = false;
+ }
+
if ((prop = root.property ("command"))) {
_command = prop->value();
} else {
@@ -602,6 +609,10 @@ ExportFormatSpecification::description (bool include_name)
components.push_back ("CUE");
}
+ if (_with_mp4chaps) {
+ components.push_back ("MP4ch");
+ }
+
if (!_command.empty()) {
components.push_back ("+");
}
diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc
index b44c46e..e755d9b 100644
--- a/libs/ardour/export_handler.cc
+++ b/libs/ardour/export_handler.cc
@@ -305,6 +305,10 @@ ExportHandler::finish_timespan ()
export_cd_marker_file (current_timespan, fmt, filename, CDMarkerTOC);
}
+ if (fmt->with_mp4chaps()) {
+ export_cd_marker_file (current_timespan, fmt, filename, MP4Chaps);
+ }
+
if (fmt->tag()) {
AudiofileTagger::tag_file(filename, *SessionMetadata::Metadata());
}
@@ -403,6 +407,11 @@ ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSp
track_func = &ExportHandler::write_track_info_cue;
index_func = &ExportHandler::write_index_info_cue;
break;
+ case MP4Chaps:
+ header_func = &ExportHandler::write_mp4ch_header;
+ track_func = &ExportHandler::write_track_info_mp4ch;
+ index_func = &ExportHandler::write_index_info_mp4ch;
+ break;
default:
return;
}
@@ -500,17 +509,22 @@ ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSp
string
ExportHandler::get_cd_marker_filename(std::string filename, CDMarkerFormat format)
{
- /* do not strip file suffix because there may be more than one format,
+ /* do not strip file suffix because there may be more than one format,
and we do not want the CD marker file from one format to overwrite
another (e.g. foo.wav.cue > foo.aiff.cue)
*/
switch (format) {
- case CDMarkerTOC:
+ case CDMarkerTOC:
return filename + ".toc";
- case CDMarkerCUE:
+ case CDMarkerCUE:
return filename + ".cue";
- default:
+ case MP4Chaps:
+ {
+ unsigned lastdot = filename.find_last_of('.');
+ return filename.substr(0,lastdot) + ".chapters.txt";
+ }
+ default:
return filename + ".marker"; // Should not be reached when actually creating a file
}
}
@@ -577,7 +591,7 @@ ExportHandler::write_toc_header (CDMarkerStatus & status)
string album_title = SessionMetadata::Metadata()->album();
if (barcode != "")
- status.out << "CATALOG " << barcode << endl;
+ status.out << "CATALOG \"" << barcode << "\"" << endl;
if (album_title != "")
title = album_title;
@@ -585,11 +599,17 @@ ExportHandler::write_toc_header (CDMarkerStatus & status)
status.out << "CD_DA" << endl;
status.out << "CD_TEXT {" << endl << " LANGUAGE_MAP {" << endl << " 0 : EN" << endl << " }" << endl;
status.out << " LANGUAGE 0 {" << endl << " TITLE " << toc_escape_cdtext (title) << endl ;
- status.out << " PERFORMER \"" << toc_escape_cdtext (album_artist) << "\"" << endl;
+ status.out << " PERFORMER " << toc_escape_cdtext (album_artist) << endl;
status.out << " }" << endl << "}" << endl;
}
void
+ExportHandler::write_mp4ch_header (CDMarkerStatus & status)
+{
+ status.out << "00:00:00.000 Intro" << endl;
+}
+
+void
ExportHandler::write_track_info_cue (CDMarkerStatus & status)
{
gchar buf[18];
@@ -693,6 +713,14 @@ ExportHandler::write_track_info_toc (CDMarkerStatus & status)
status.out << "START" << buf << endl;
}
+void ExportHandler::write_track_info_mp4ch (CDMarkerStatus & status)
+{
+ gchar buf[18];
+
+ frames_to_chapter_marks_string(buf, status.track_start_frame);
+ status.out << buf << " " << status.marker->name() << endl;
+}
+
void
ExportHandler::write_index_info_cue (CDMarkerStatus & status)
{
@@ -716,6 +744,11 @@ ExportHandler::write_index_info_toc (CDMarkerStatus & status)
}
void
+ExportHandler::write_index_info_mp4ch (CDMarkerStatus & status)
+{
+}
+
+void
ExportHandler::frames_to_cd_frames_string (char* buf, framepos_t when)
{
framecnt_t remainder;
@@ -730,6 +763,23 @@ ExportHandler::frames_to_cd_frames_string (char* buf, framepos_t when)
sprintf (buf, " %02d:%02d:%02d", mins, secs, frames);
}
+void
+ExportHandler::frames_to_chapter_marks_string (char* buf, framepos_t when)
+{
+ framecnt_t remainder;
+ framecnt_t fr = session.nominal_frame_rate();
+ int hours, mins, secs, msecs;
+
+ hours = when / (3600 * fr);
+ remainder = when - (hours * 3600 * fr);
+ mins = remainder / (60 * fr);
+ remainder -= mins * 60 * fr;
+ secs = remainder / fr;
+ remainder -= secs * fr;
+ msecs = (remainder * 1000) / fr;
+ sprintf (buf, "%02d:%02d:%02d.%03d", hours, mins, secs, msecs);
+}
+
std::string
ExportHandler::toc_escape_cdtext (const std::string& txt)
{
diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc
index 0aec49e..507f0df 100644
--- a/libs/ardour/file_source.cc
+++ b/libs/ardour/file_source.cc
@@ -337,7 +337,6 @@ FileSource::find (Session& s, DataType type, const string& path, bool must_exist
}
found_path = keeppath;
-
ret = true;
out:
@@ -545,6 +544,7 @@ FileSource::set_within_session_from_path (const std::string& path)
void
FileSource::set_path (const std::string& newpath)
{
+ close ();
_path = newpath;
set_within_session_from_path (newpath);
if (_within_session) {
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index 3ed028e..90a15c9 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -417,14 +417,14 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status,
break;
}
} else {
- info << string_compose (_("Track %1 of %2 contained no usable MIDI data"), i, source->file_path()) << endmsg;
+ info << string_compose (_("Track %1 of %2 contained no usable MIDI data"), i, source->num_tracks()) << endmsg;
}
++s; // next source
}
- } catch (...) {
- error << string_compose (_("MIDI file %1 was not readable (no reason available)"), source->file_path()) << endmsg;
+ } catch (exception& e) {
+ error << string_compose (_("MIDI file could not be written (best guess: %1)"), e.what()) << endmsg;
}
if (buf) {
diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc
index de5af0c..e8e560c 100644
--- a/libs/ardour/internal_send.cc
+++ b/libs/ardour/internal_send.cc
@@ -74,10 +74,10 @@ InternalSend::init_gain ()
{
if (_role == Listen) {
/* send to monitor bus is always at unity */
- _amp->set_gain (1.0, this);
+ _amp->set_gain (GAIN_COEFF_UNITY, this);
} else {
/* aux sends start at -inf dB */
- _amp->set_gain (0, this);
+ _amp->set_gain (GAIN_COEFF_ZERO, this);
}
}
@@ -196,16 +196,16 @@ InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame
_current_gain = Amp::apply_gain (mixbufs, _session.nominal_frame_rate(), nframes, _current_gain, tgain);
- } else if (tgain == 0.0) {
+ } else if (tgain == GAIN_COEFF_ZERO) {
/* we were quiet last time, and we're still supposed to be quiet.
*/
_meter->reset ();
- Amp::apply_simple_gain (mixbufs, nframes, 0.0);
+ Amp::apply_simple_gain (mixbufs, nframes, GAIN_COEFF_ZERO);
goto out;
- } else if (tgain != 1.0) {
+ } else if (tgain != GAIN_COEFF_UNITY) {
/* target gain has not changed, but is not zero or unity */
Amp::apply_simple_gain (mixbufs, nframes, tgain);
@@ -220,7 +220,7 @@ InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame
/* consider metering */
if (_metering) {
- if (_amp->gain_control()->get_value() == 0) {
+ if (_amp->gain_control()->get_value() == GAIN_COEFF_ZERO) {
_meter->reset();
} else {
_meter->run (mixbufs, start_frame, end_frame, nframes, true);
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index d98f9a9..243312f 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -1082,6 +1082,18 @@ LV2Plugin::do_save_preset(string name)
Glib::get_home_dir(),
Glib::build_filename(".lv2", prefix + "_" + base_name + ".lv2"));
+#ifdef HAVE_LILV_0_21_3
+ /* delete reference to old preset (if any) */
+ const PresetRecord* r = preset_by_label(name);
+ if (r) {
+ LilvNode* pset = lilv_new_uri (_world.world, r->uri.c_str());
+ if (pset) {
+ lilv_world_unload_resource (_world.world, pset);
+ lilv_node_free(pset);
+ }
+ }
+#endif
+
LilvState* state = lilv_state_new_from_instance(
_impl->plugin,
_impl->instance,
@@ -1143,6 +1155,9 @@ LV2Plugin::do_remove_preset(string name)
return;
}
+ /* Unload preset from world. */
+ lilv_world_unload_resource(world, pset);
+
/* Delete it from the file system. This will remove the preset file and the entry
from the manifest. If this results in an empty manifest (i.e. the
preset is the only thing in the bundle), then the bundle is removed. */
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index 5913ca5..f065fb1 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -35,8 +35,6 @@ using namespace std;
using namespace ARDOUR;
-PBD::Signal0<void> Metering::Meter;
-
PeakMeter::PeakMeter (Session& s, const std::string& name)
: Processor (s, string_compose ("meter-%1", name))
{
@@ -46,6 +44,8 @@ PeakMeter::PeakMeter (Session& s, const std::string& name)
Vumeterdsp::init(s.nominal_frame_rate());
_pending_active = true;
_meter_type = MeterPeak;
+ _reset_dpm = true;
+ _reset_max = true;
}
PeakMeter::~PeakMeter ()
@@ -60,6 +60,11 @@ PeakMeter::~PeakMeter ()
_iec2meter.pop_back();
_vumeter.pop_back();
}
+ while (_peak_power.size() > 0) {
+ _peak_buffer.pop_back();
+ _peak_power.pop_back();
+ _max_peak_signal.pop_back();
+ }
}
@@ -76,6 +81,10 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
if (!_active && !_pending_active) {
return;
}
+ const bool do_reset_max = _reset_max;
+ const bool do_reset_dpm = _reset_dpm;
+ _reset_max = false;
+ _reset_dpm = false;
// cerr << "meter " << name() << " runs with " << bufs.available() << " inputs\n";
@@ -84,6 +93,10 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
uint32_t n = 0;
+ const float falloff_dB = Config->get_meter_falloff() * nframes / _session.nominal_frame_rate();
+ const uint32_t zoh = _session.nominal_frame_rate() * .021;
+ _bufcnt += nframes;
+
// Meter MIDI in to the first n_midi peaks
for (uint32_t i = 0; i < n_midi; ++i, ++n) {
float val = 0.0f;
@@ -103,16 +116,46 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
}
}
}
- _peak_signal[n] = max (val, _peak_signal[n]);
+ if (_peak_power[n] < (1.0 / 512.0)) {
+ _peak_power[n] = 0;
+ } else {
+ /* empirical algorithm WRT to audio falloff times */
+ _peak_power[n] -= sqrtf (_peak_power[n]) * falloff_dB * 0.045f;
+ }
+ _peak_power[n] = max(_peak_power[n], val);
+ _max_peak_signal[n] = 0;
}
// Meter audio in to the rest of the peaks
for (uint32_t i = 0; i < n_audio; ++i, ++n) {
if (bufs.get_audio(i).silent()) {
- _peak_signal[n] = .0f;
+ ;
+ } else {
+ _peak_buffer[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_buffer[n]);
+ _max_peak_signal[n] = std::max(_peak_buffer[n], _max_peak_signal[n]); // todo sync reset
+ }
+
+ if (do_reset_max) {
+ _max_peak_signal[n] = 0;
+ }
+
+ if (do_reset_dpm) {
+ _peak_buffer[n] = 0;
+ _peak_power[n] = -std::numeric_limits<float>::infinity();
} else {
- _peak_signal[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_signal[n]);
+ // falloff
+ if (_peak_power[n] > -318.8f) {
+ _peak_power[n] -= falloff_dB;
+ } else {
+ _peak_power[n] = -std::numeric_limits<float>::infinity();
+ }
+ _peak_power[n] = max(_peak_power[n], accurate_coefficient_to_dB(_peak_buffer[n]));
+ // integration buffer, retain peaks > 49Hz
+ if (_bufcnt > zoh) {
+ _peak_buffer[n] = 0;
+ }
}
+
if (_meter_type & (MeterKrms | MeterK20 | MeterK14 | MeterK12)) {
_kmeter[i]->process(bufs.get_audio(i).data(), nframes);
}
@@ -128,8 +171,13 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
}
// Zero any excess peaks
- for (uint32_t i = n; i < _peak_signal.size(); ++i) {
- _peak_signal[i] = 0.0f;
+ for (uint32_t i = n; i < _peak_power.size(); ++i) {
+ _peak_power[i] = -std::numeric_limits<float>::infinity();
+ _max_peak_signal[n] = 0;
+ }
+
+ if (_bufcnt > zoh) {
+ _bufcnt = 0;
}
_active = _pending_active;
@@ -138,10 +186,16 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
void
PeakMeter::reset ()
{
- for (size_t i = 0; i < _peak_signal.size(); ++i) {
- _peak_signal[i] = 0.0f;
+ if (_active || _pending_active) {
+ _reset_dpm = true;
+ } else {
+ for (size_t i = 0; i < _peak_power.size(); ++i) {
+ _peak_power[i] = -std::numeric_limits<float>::infinity();
+ _peak_buffer[i] = 0;
+ }
}
+ // these are handled async just fine.
for (size_t n = 0; n < _kmeter.size(); ++n) {
_kmeter[n]->reset();
_iec1meter[n]->reset();
@@ -153,19 +207,13 @@ PeakMeter::reset ()
void
PeakMeter::reset_max ()
{
- for (size_t i = 0; i < _max_peak_power.size(); ++i) {
- _max_peak_power[i] = -std::numeric_limits<float>::infinity();
- _max_peak_signal[i] = 0;
+ if (_active || _pending_active) {
+ _reset_max = true;
+ return;
}
-
- const size_t n_midi = min (_peak_signal.size(), (size_t) current_meters.n_midi());
-
- for (size_t n = 0; n < _peak_signal.size(); ++n) {
- if (n < n_midi) {
- _visible_peak_power[n] = 0;
- } else {
- _visible_peak_power[n] = -std::numeric_limits<float>::infinity();
- }
+ for (size_t i = 0; i < _max_peak_signal.size(); ++i) {
+ _max_peak_signal[i] = 0;
+ _peak_buffer[i] = 0;
}
}
@@ -185,7 +233,7 @@ PeakMeter::configure_io (ChanCount in, ChanCount out)
current_meters = in;
- reset_max_channels (in);
+ set_max_channels (in);
return Processor::configure_io (in, out);
}
@@ -193,49 +241,38 @@ PeakMeter::configure_io (ChanCount in, ChanCount out)
void
PeakMeter::reflect_inputs (const ChanCount& in)
{
- for (uint32_t i = in.n_total(); i < current_meters.n_total(); ++i) {
- if (i < _peak_signal.size()) {
- _peak_signal[i] = 0.0f;
- }
- }
- for (uint32_t i = in.n_audio(); i < current_meters.n_audio(); ++i) {
- if (i >= _kmeter.size()) continue;
- _kmeter[i]->reset();
- _iec1meter[i]->reset();
- _iec2meter[i]->reset();
- _vumeter[i]->reset();
- }
-
+ reset();
current_meters = in;
reset_max();
+ // ConfigurationChanged() postponed
+}
- ConfigurationChanged (in, in); /* EMIT SIGNAL */
+void
+PeakMeter::emit_configuration_changed () {
+ ConfigurationChanged (current_meters, current_meters); /* EMIT SIGNAL */
}
void
-PeakMeter::reset_max_channels (const ChanCount& chn)
+PeakMeter::set_max_channels (const ChanCount& chn)
{
uint32_t const limit = chn.n_total();
const size_t n_audio = chn.n_audio();
- while (_peak_signal.size() > limit) {
- _peak_signal.pop_back();
- _visible_peak_power.pop_back();
+ while (_peak_power.size() > limit) {
+ _peak_buffer.pop_back();
+ _peak_power.pop_back();
_max_peak_signal.pop_back();
- _max_peak_power.pop_back();
}
- while (_peak_signal.size() < limit) {
- _peak_signal.push_back(0);
- _visible_peak_power.push_back(minus_infinity());
+ while (_peak_power.size() < limit) {
+ _peak_buffer.push_back(0);
+ _peak_power.push_back(-std::numeric_limits<float>::infinity());
_max_peak_signal.push_back(0);
- _max_peak_power.push_back(minus_infinity());
}
- assert(_peak_signal.size() == limit);
- assert(_visible_peak_power.size() == limit);
+ assert(_peak_buffer.size() == limit);
+ assert(_peak_power.size() == limit);
assert(_max_peak_signal.size() == limit);
- assert(_max_peak_power.size() == limit);
/* alloc/free other audio-only meter types. */
while (_kmeter.size() > n_audio) {
@@ -268,80 +305,6 @@ PeakMeter::reset_max_channels (const ChanCount& chn)
* of meter size during this call.
*/
-void
-PeakMeter::meter ()
-{
- if (!_active) {
- return;
- }
-
- // TODO block this thread while PeakMeter::reset_max_channels() is
- // reallocating channels.
- // (may happen with Session > New: old session not yet closed,
- // meter-thread still active while new one is initializing and
- // maybe on other occasions, too)
- if ( (_visible_peak_power.size() != _peak_signal.size())
- || (_max_peak_power.size() != _peak_signal.size())
- || (_max_peak_signal.size() != _peak_signal.size())
- ) {
- return;
- }
-
- const size_t limit = min (_peak_signal.size(), (size_t) current_meters.n_total ());
- const size_t n_midi = min (_peak_signal.size(), (size_t) current_meters.n_midi());
-
- /* 0.01f ^= 100 Hz update rate */
- const float midi_meter_falloff = Config->get_meter_falloff() * 0.01f;
- /* kmeters: 24dB / 2 sec */
- const float audio_meter_falloff = (_meter_type & (MeterK20 | MeterK14 | MeterK12)) ? 0.12f : midi_meter_falloff;
-
- for (size_t n = 0; n < limit; ++n) {
-
- /* grab peak since last read */
-
- float new_peak = _peak_signal[n]; /* XXX we should use atomic exchange from here ... */
- _peak_signal[n] = 0; /* ... to here */
-
- if (n < n_midi) {
- _max_peak_power[n] = -std::numeric_limits<float>::infinity(); // std::max (new_peak, _max_peak_power[n]); // XXX
- _max_peak_signal[n] = 0;
- if (midi_meter_falloff == 0.0f || new_peak > _visible_peak_power[n]) {
- ;
- } else {
- /* empirical algorithm WRT to audio falloff times */
- new_peak = _visible_peak_power[n] - sqrt(_visible_peak_power[n] * midi_meter_falloff * 0.0002f);
- if (new_peak < (1.0 / 512.0)) new_peak = 0;
- }
- _visible_peak_power[n] = new_peak;
- continue;
- }
-
- /* AUDIO */
-
- /* compute new visible value using falloff */
-
- _max_peak_signal[n] = std::max(new_peak, _max_peak_signal[n]);
-
- if (new_peak > 0.0) {
- new_peak = accurate_coefficient_to_dB (new_peak);
- } else {
- new_peak = minus_infinity();
- }
-
- /* update max peak */
-
- _max_peak_power[n] = std::max (new_peak, _max_peak_power[n]);
-
- if (audio_meter_falloff == 0.0f || new_peak > _visible_peak_power[n]) {
- _visible_peak_power[n] = new_peak;
- } else {
- // do falloff
- new_peak = _visible_peak_power[n] - (audio_meter_falloff);
- _visible_peak_power[n] = std::max (new_peak, -std::numeric_limits<float>::infinity());
- }
- }
-}
-
#define CHECKSIZE(MTR) (n < MTR.size() + n_midi && n >= n_midi)
float
@@ -385,16 +348,18 @@ PeakMeter::meter_level(uint32_t n, MeterType type) {
}
break;
case MeterPeak:
- return peak_power(n);
- case MeterMaxSignal:
- if (n < _max_peak_signal.size()) {
- return _max_peak_signal[n];
+ case MeterPeak0dB:
+ if (n < _peak_power.size()) {
+ return _peak_power[n];
}
break;
+ case MeterMaxSignal:
+ assert(0);
+ break;
default:
case MeterMaxPeak:
- if (n < _max_peak_power.size()) {
- return _max_peak_power[n];
+ if (n < _max_peak_signal.size()) {
+ return accurate_coefficient_to_dB(_max_peak_signal[n]);
}
break;
}
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index ee6bd13..b1b09e4 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -163,7 +163,7 @@ MidiBuffer::push_back(TimeType time, size_t size, const uint8_t* data)
const size_t stamp_size = sizeof(TimeType);
#ifndef NDEBUG
- if (DEBUG::MidiIO & PBD::debug_bits) {
+ if (DEBUG_ENABLED(DEBUG::MidiIO)) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("midibuffer %1 push event @ %2 sz %3 ", this, time, size));
for (size_t i=0; i < size; ++i) {
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index e8b23b3..a2a80f7 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -414,7 +414,7 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
break;
}
#ifndef NDEBUG
- if (DEBUG::MidiIO & PBD::debug_bits) {
+ if (DEBUG_ENABLED(DEBUG::MidiIO)) {
const uint8_t* __data = ev.buffer();
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("mididiskstream %1 capture event @ %2 + %3 sz %4 ", this, ev.time(), transport_frame, ev.size()));
@@ -1143,7 +1143,7 @@ MidiDiskstream::finish_capture ()
void
MidiDiskstream::set_record_enabled (bool yn)
{
- if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_midi() == 0) {
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_midi() == 0 || record_safe ()) {
return;
}
@@ -1162,10 +1162,32 @@ MidiDiskstream::set_record_enabled (bool yn)
}
}
+void
+MidiDiskstream::set_record_safe (bool yn)
+{
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_midi() == 0) { // REQUIRES REVIEW
+ return;
+ }
+
+ /* yes, i know that this not proof against race conditions, but its
+ good enough. i think.
+ */
+
+ if (record_safe () != yn) {
+ if (yn) {
+ engage_record_safe ();
+ } else {
+ disengage_record_safe ();
+ }
+
+ RecordSafeChanged (); /* EMIT SIGNAL */
+ }
+}
+
bool
MidiDiskstream::prep_record_enable ()
{
- if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_midi() == 0) {
+ if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_midi() == 0 || record_safe ()) { // REQUIRES REVIEW "|| record_safe ()"
return false;
}
diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc
index de50006..3d53aba 100644
--- a/libs/ardour/midi_model.cc
+++ b/libs/ardour/midi_model.cc
@@ -1453,6 +1453,11 @@ MidiModel::sync_to_source (const Glib::Threads::Mutex::Lock& source_lock)
return false;
}
+ /* Invalidate and store active notes, which will be picked up by the iterator
+ on the next roll if time progresses linearly. */
+ ms->invalidate(source_lock,
+ ms->session().transport_rolling() ? &_active_notes : NULL);
+
ms->mark_streaming_midi_write_started (source_lock, note_mode());
for (Evoral::Sequence<TimeType>::const_iterator i = begin(TimeType(), true); i != end(); ++i) {
diff --git a/libs/ardour/midi_port.cc b/libs/ardour/midi_port.cc
index 615abed..f7a0d0f 100644
--- a/libs/ardour/midi_port.cc
+++ b/libs/ardour/midi_port.cc
@@ -231,18 +231,18 @@ MidiPort::flush_buffers (pframes_t nframes)
// event times are in frames, relative to cycle start
#ifndef NDEBUG
- if (DEBUG::MidiIO & PBD::debug_bits) {
- DEBUG_STR_DECL(a);
- DEBUG_STR_APPEND(a, string_compose ("MidiPort %1 pop event @ %2 sz %3 ", _buffer, ev.time(), ev.size()));
- for (size_t i=0; i < ev.size(); ++i) {
- DEBUG_STR_APPEND(a,hex);
- DEBUG_STR_APPEND(a,"0x");
- DEBUG_STR_APPEND(a,(int)(ev.buffer()[i]));
- DEBUG_STR_APPEND(a,' ');
- }
- DEBUG_STR_APPEND(a,'\n');
- DEBUG_TRACE (DEBUG::MidiIO, DEBUG_STR(a).str());
- }
+ if (DEBUG_ENABLED (DEBUG::MidiIO)) {
+ DEBUG_STR_DECL(a);
+ DEBUG_STR_APPEND(a, string_compose ("MidiPort %1 pop event @ %2 sz %3 ", _buffer, ev.time(), ev.size()));
+ for (size_t i=0; i < ev.size(); ++i) {
+ DEBUG_STR_APPEND(a,hex);
+ DEBUG_STR_APPEND(a,"0x");
+ DEBUG_STR_APPEND(a,(int)(ev.buffer()[i]));
+ DEBUG_STR_APPEND(a,' ');
+ }
+ DEBUG_STR_APPEND(a,'\n');
+ DEBUG_TRACE (DEBUG::MidiIO, DEBUG_STR(a).str());
+ }
#endif
assert (ev.time() < (nframes + _global_port_buffer_offset + _port_buffer_offset));
diff --git a/libs/ardour/midi_ring_buffer.cc b/libs/ardour/midi_ring_buffer.cc
index 7e88f5f..3923e53 100644
--- a/libs/ardour/midi_ring_buffer.cc
+++ b/libs/ardour/midi_ring_buffer.cc
@@ -103,7 +103,7 @@ MidiRingBuffer<T>::read(MidiBuffer& dst, framepos_t start, framepos_t end, frame
bool success = read_contents (ev_size, write_loc);
#ifndef NDEBUG
- if (DEBUG::MidiDiskstreamIO && PBD::debug_bits) {
+ if (DEBUG_ENABLED (DEBUG::MidiDiskstreamIO)) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("wrote MidiEvent to Buffer (time=%1, start=%2 offset=%3)", ev_time, start, offset));
for (size_t i=0; i < ev_size; ++i) {
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 3f15464..487eb20 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -112,6 +112,16 @@ MidiTrack::set_record_enabled (bool yn, void *src)
}
void
+MidiTrack::set_record_safe (bool yn, void *src)
+{
+ if (_step_editing) { /* REQUIRES REVIEW */
+ return;
+ }
+
+ Track::set_record_safe (yn, src);
+}
+
+void
MidiTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
{
/* We have to do this here, as Track::set_diskstream will cause a buffer refill,
diff --git a/libs/ardour/mix.cc b/libs/ardour/mix.cc
index 220cd06..adae68a 100644
--- a/libs/ardour/mix.cc
+++ b/libs/ardour/mix.cc
@@ -32,7 +32,7 @@ using namespace ARDOUR;
// Debug wrappers
float
-debug_compute_peak (ARDOUR::Sample *buf, pframes_t nsamples, float current)
+debug_compute_peak (const ARDOUR::Sample *buf, pframes_t nsamples, float current)
{
if ( ((intptr_t)buf % 16) != 0) {
std::cerr << "compute_peak(): buffer unaligned!" << std::endl;
@@ -52,7 +52,7 @@ debug_apply_gain_to_buffer (ARDOUR::Sample *buf, pframes_t nframes, float gain)
}
void
-debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, pframes_t nframes, float gain)
+debug_mix_buffers_with_gain (ARDOUR::Sample *dst, const ARDOUR::Sample *src, pframes_t nframes, float gain)
{
if ( ((intptr_t)dst & 15) != 0) {
std::cerr << "mix_buffers_with_gain(): dst unaligned!" << std::endl;
@@ -67,7 +67,7 @@ debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, pframes_t
}
void
-debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, pframes_t nframes)
+debug_mix_buffers_no_gain (ARDOUR::Sample *dst, const ARDOUR::Sample *src, pframes_t nframes)
{
if ( ((intptr_t)dst & 15) != 0) {
std::cerr << "mix_buffers_no_gain(): dst unaligned!" << std::endl;
diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc
index f19ce90..38ecc14 100644
--- a/libs/ardour/monitor_processor.cc
+++ b/libs/ardour/monitor_processor.cc
@@ -182,9 +182,9 @@ MonitorProcessor::set_state (const XMLNode& node, int version)
if ((prop = (*i)->property ("cut")) != 0) {
if (string_is_affirmative (prop->value())){
- cr.cut = 0.0f;
+ cr.cut = GAIN_COEFF_ZERO;
} else {
- cr.cut = 1.0f;
+ cr.cut = GAIN_COEFF_UNITY;
}
}
@@ -256,8 +256,8 @@ MonitorProcessor::state (bool full)
snprintf (buf, sizeof (buf), "%u", chn);
chn_node->add_property ("id", buf);
- chn_node->add_property (X_("cut"), (*x)->cut == 1.0f ? "no" : "yes");
- chn_node->add_property (X_("invert"), (*x)->polarity == 1.0f ? "no" : "yes");
+ chn_node->add_property (X_("cut"), (*x)->cut == GAIN_COEFF_UNITY ? "no" : "yes");
+ chn_node->add_property (X_("invert"), (*x)->polarity == GAIN_COEFF_UNITY ? "no" : "yes");
chn_node->add_property (X_("dim"), (*x)->dim ? "yes" : "no");
chn_node->add_property (X_("solo"), (*x)->soloed ? "yes" : "no");
@@ -273,21 +273,21 @@ MonitorProcessor::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /
uint32_t chn = 0;
gain_t target_gain;
gain_t dim_level_this_time = _dim_level;
- gain_t global_cut = (_cut_all ? 0.0f : 1.0f);
- gain_t global_dim = (_dim_all ? dim_level_this_time : 1.0);
+ gain_t global_cut = (_cut_all ? GAIN_COEFF_ZERO : GAIN_COEFF_UNITY);
+ gain_t global_dim = (_dim_all ? dim_level_this_time : GAIN_COEFF_UNITY);
gain_t solo_boost;
if (_session.listening() || _session.soloing()) {
solo_boost = _solo_boost_level;
} else {
- solo_boost = 1.0;
+ solo_boost = GAIN_COEFF_UNITY;
}
for (BufferSet::audio_iterator b = bufs.audio_begin(); b != bufs.audio_end(); ++b) {
/* don't double-scale by both track dim and global dim coefficients */
- gain_t dim_level = (global_dim == 1.0 ? (_channels[chn]->dim ? dim_level_this_time : 1.0) : 1.0);
+ gain_t dim_level = (global_dim == GAIN_COEFF_UNITY ? (_channels[chn]->dim ? dim_level_this_time : GAIN_COEFF_UNITY) : GAIN_COEFF_UNITY);
if (_channels[chn]->soloed) {
target_gain = _channels[chn]->polarity * _channels[chn]->cut * dim_level * global_cut * global_dim * solo_boost;
@@ -295,11 +295,11 @@ MonitorProcessor::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /
if (solo_cnt == 0) {
target_gain = _channels[chn]->polarity * _channels[chn]->cut * dim_level * global_cut * global_dim * solo_boost;
} else {
- target_gain = 0.0;
+ target_gain = GAIN_COEFF_ZERO;
}
}
- if (target_gain != _channels[chn]->current_gain || target_gain != 1.0f) {
+ if (target_gain != _channels[chn]->current_gain || target_gain != GAIN_COEFF_UNITY) {
_channels[chn]->current_gain = Amp::apply_gain (*b, _session.nominal_frame_rate(), nframes, _channels[chn]->current_gain, target_gain);
}
@@ -312,7 +312,7 @@ MonitorProcessor::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /
/* chn is now the number of channels, use as a scaling factor when mixing
*/
- gain_t scale = 1.0/chn;
+ gain_t scale = 1.f / (float)chn;
BufferSet::audio_iterator b = bufs.audio_begin();
AudioBuffer& ab (*b);
Sample* buf = ab.data();
@@ -380,9 +380,9 @@ void
MonitorProcessor::set_cut (uint32_t chn, bool yn)
{
if (yn) {
- _channels[chn]->cut = 0.0f;
+ _channels[chn]->cut = GAIN_COEFF_ZERO;
} else {
- _channels[chn]->cut = 1.0f;
+ _channels[chn]->cut = GAIN_COEFF_UNITY;
}
}
@@ -443,7 +443,7 @@ MonitorProcessor::inverted (uint32_t chn) const
bool
MonitorProcessor::cut (uint32_t chn) const
{
- return _channels[chn]->cut == 0.0f;
+ return _channels[chn]->cut == GAIN_COEFF_ZERO;
}
bool
@@ -507,7 +507,7 @@ MonitorProcessor::channel_solo_control (uint32_t chn) const
}
MonitorProcessor::ChannelRecord::ChannelRecord (uint32_t chn)
- : current_gain (1.0)
+ : current_gain (GAIN_COEFF_UNITY)
, cut_ptr (new MPControl<gain_t> (1.0, string_compose (_("cut control %1"), chn), PBD::Controllable::GainLike))
, dim_ptr (new MPControl<bool> (false, string_compose (_("dim control"), chn), PBD::Controllable::Toggle))
, polarity_ptr (new MPControl<gain_t> (1.0, string_compose (_("polarity control"), chn), PBD::Controllable::Toggle, -1, 1))
diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc
index 5734af8..4c23855 100644
--- a/libs/ardour/mute_master.cc
+++ b/libs/ardour/mute_master.cc
@@ -90,26 +90,26 @@ MuteMaster::mute_gain_at (MutePoint mp) const
if (Config->get_solo_mute_override()) {
if (_soloed) {
- gain = 1.0;
+ gain = GAIN_COEFF_UNITY;
} else if (muted_by_self_at (mp)) {
- gain = 0.0;
+ gain = GAIN_COEFF_ZERO;
} else {
if (muted_by_others_at (mp)) {
gain = Config->get_solo_mute_gain ();
} else {
- gain = 1.0;
+ gain = GAIN_COEFF_UNITY;
}
}
} else {
if (muted_by_self_at (mp)) {
- gain = 0.0;
+ gain = GAIN_COEFF_ZERO;
} else if (_soloed) {
- gain = 1.0;
+ gain = GAIN_COEFF_UNITY;
} else {
if (muted_by_others_at (mp)) {
gain = Config->get_solo_mute_gain ();
} else {
- gain = 1.0;
+ gain = GAIN_COEFF_UNITY;
}
}
}
diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc
index 7b19977..fd5564b 100644
--- a/libs/ardour/panner_shell.cc
+++ b/libs/ardour/panner_shell.cc
@@ -284,13 +284,13 @@ PannerShell::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, pf
AudioBuffer& dst = outbufs.get_audio(0);
- if (gain_coeff == 0.0f) {
+ if (gain_coeff == GAIN_COEFF_ZERO) {
/* gain was zero, so make it silent */
dst.silence (nframes);
- } else if (gain_coeff == 1.0f){
+ } else if (gain_coeff == GAIN_COEFF_UNITY){
/* mix all input buffers into the output */
@@ -386,7 +386,7 @@ PannerShell::run (BufferSet& inbufs, BufferSet& outbufs, framepos_t start_frame,
if (!(as & Play || ((as & Touch) && !_panner->touching()))) {
// Speed quietning
- gain_t gain_coeff = 1.0;
+ gain_t gain_coeff = GAIN_COEFF_UNITY;
if (fabsf(_session.transport_speed()) > 1.5f && Config->get_quieten_at_speed ()) {
gain_coeff = speed_quietning;
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc
index 6191500..67ea267 100644
--- a/libs/ardour/parameter_descriptor.cc
+++ b/libs/ardour/parameter_descriptor.cc
@@ -48,6 +48,11 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter)
upper = Config->get_max_gain();
normal = 1.0f;
break;
+ case TrimAutomation:
+ upper = 10; // +20dB
+ lower = .1; // -20dB
+ normal = 1.0f;
+ break;
case PanAzimuthAutomation:
normal = 0.5f; // there really is no _normal but this works for stereo, sort of
upper = 1.0f;
@@ -116,7 +121,7 @@ ParameterDescriptor::update_steps()
if (unit == ParameterDescriptor::MIDI_NOTE) {
step = smallstep = 1; // semitone
largestep = 12; // octave
- } else if (type == GainAutomation) {
+ } else if (type == GainAutomation || type == TrimAutomation) {
/* dB_coeff_step gives a step normalized for [0, max_gain]. This is
like "slider position", so we convert from "slider position" to gain
to have the correct unit here. */
diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index d121ee0..20a2ef0 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -2333,7 +2333,10 @@ struct RelayerSort {
void
Playlist::set_layer (boost::shared_ptr<Region> region, double new_layer)
{
- /* Remove the layer we are setting from our region list, and sort it */
+ /* Remove the layer we are setting from our region list, and sort it
+ * using the layer indeces.
+ */
+
RegionList copy = regions.rlist();
copy.remove (region);
copy.sort (RelayerSort ());
@@ -2362,6 +2365,12 @@ Playlist::setup_layering_indices (RegionList const & regions)
}
}
+struct LaterHigherSort {
+ bool operator () (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
+ return a->position() < b->position();
+ }
+};
+
/** Take the layering indices of each of our regions, compute the layers
* that they should be on, and write the layers back to the regions.
*/
@@ -2396,9 +2405,16 @@ Playlist::relayer ()
vector<vector<RegionList> > layers;
layers.push_back (vector<RegionList> (divisions));
- /* Sort our regions into layering index order */
+ /* Sort our regions into layering index order (for manual layering) or position order (for later is higher)*/
RegionList copy = regions.rlist();
- copy.sort (RelayerSort ());
+ switch (Config->get_layer_model()) {
+ case LaterHigher:
+ copy.sort (LaterHigherSort ());
+ break;
+ case Manual:
+ copy.sort (RelayerSort ());
+ break;
+ }
DEBUG_TRACE (DEBUG::Layering, "relayer() using:\n");
for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 599a929..8da0abb 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -601,6 +601,69 @@ PluginInsert::default_parameter_value (const Evoral::Parameter& param)
return _plugins[0]->default_value (param.id());
}
+
+bool
+PluginInsert::can_reset_all_parameters ()
+{
+ bool all = true;
+ uint32_t params = 0;
+ for (uint32_t par = 0; par < _plugins[0]->parameter_count(); ++par) {
+ bool ok=false;
+ const uint32_t cid = _plugins[0]->nth_parameter (par, ok);
+
+ if (!ok || !_plugins[0]->parameter_is_input(cid)) {
+ continue;
+ }
+
+ boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter(PluginAutomation, 0, cid));
+ if (!ac) {
+ continue;
+ }
+
+ ++params;
+ if (ac->automation_state() & Play) {
+ all = false;
+ break;
+ }
+ }
+ return all && (params > 0);
+}
+
+bool
+PluginInsert::reset_parameters_to_default ()
+{
+ bool all = true;
+
+ for (uint32_t par = 0; par < _plugins[0]->parameter_count(); ++par) {
+ bool ok=false;
+ const uint32_t cid = _plugins[0]->nth_parameter (par, ok);
+
+ if (!ok || !_plugins[0]->parameter_is_input(cid)) {
+ continue;
+ }
+
+ const float dflt = _plugins[0]->default_value (cid);
+ const float curr = _plugins[0]->get_parameter (cid);
+
+ if (dflt == curr) {
+ continue;
+ }
+
+ boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter(PluginAutomation, 0, cid));
+ if (!ac) {
+ continue;
+ }
+
+ if (ac->automation_state() & Play) {
+ all = false;
+ continue;
+ }
+
+ ac->set_value (dflt);
+ }
+ return all;
+}
+
boost::shared_ptr<Plugin>
PluginInsert::plugin_factory (boost::shared_ptr<Plugin> other)
{
@@ -1126,7 +1189,7 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
boost::shared_ptr<AutomationControl> c = boost::dynamic_pointer_cast<AutomationControl>(
control(Evoral::Parameter(PluginAutomation, 0, port_id), true));
- if (c) {
+ if (c && c->alist()) {
if (!child->children().empty()) {
c->alist()->set_state (*child->children().front(), version);
@@ -1233,38 +1296,6 @@ PluginInsert::PluginControl::set_value (double user_val)
AutomationControl::set_value (user_val);
}
-double
-PluginInsert::PluginControl::internal_to_interface (double val) const
-{
- val = Controllable::internal_to_interface(val);
-
- if (_desc.logarithmic) {
- if (val > 0) {
- val = pow (val, 1/1.5);
- } else {
- val = 0;
- }
- }
-
- return val;
-}
-
-double
-PluginInsert::PluginControl::interface_to_internal (double val) const
-{
- if (_desc.logarithmic) {
- if (val <= 0) {
- val = 0;
- } else {
- val = pow (val, 1.5);
- }
- }
-
- val = Controllable::interface_to_internal(val);
-
- return val;
-}
-
XMLNode&
PluginInsert::PluginControl::get_state ()
{
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index e885413..37eb61e 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -686,8 +686,7 @@ PluginManager::windows_vst_refresh (bool cache_only)
static bool windows_vst_filter (const string& str, void * /*arg*/)
{
/* Not a dotfile, has a prefix before a period, suffix is "dll" */
-
- return str[0] != '.' && (str.length() > 4 && str.find (".dll") == (str.length() - 4));
+ return str[0] != '.' && str.length() > 4 && strings_equal_ignore_case (".dll", str.substr(str.length() - 4));
}
int
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index de78dfd..f2f2334 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -261,6 +261,8 @@ PortManager::get_ports (DataType type, PortList& pl)
int
PortManager::get_ports (const string& port_name_pattern, DataType type, PortFlags flags, vector<string>& s)
{
+ s.clear();
+
if (!_backend) {
return 0;
}
@@ -639,6 +641,45 @@ PortManager::silence (pframes_t nframes)
}
void
+PortManager::silence_outputs (pframes_t nframes)
+{
+ std::vector<std::string> port_names;
+ if (get_ports("", DataType::AUDIO, IsOutput, port_names)) {
+ for (std::vector<std::string>::iterator p = port_names.begin(); p != port_names.end(); ++p) {
+ if (!port_is_mine(*p)) {
+ continue;
+ }
+ PortEngine::PortHandle ph = _backend->get_port_by_name (*p);
+ if (!ph) {
+ continue;
+ }
+ void *buf = _backend->get_buffer(ph, nframes);
+ if (!buf) {
+ continue;
+ }
+ memset (buf, 0, sizeof(float) * nframes);
+ }
+ }
+
+ if (get_ports("", DataType::MIDI, IsOutput, port_names)) {
+ for (std::vector<std::string>::iterator p = port_names.begin(); p != port_names.end(); ++p) {
+ if (!port_is_mine(*p)) {
+ continue;
+ }
+ PortEngine::PortHandle ph = _backend->get_port_by_name (*p);
+ if (!ph) {
+ continue;
+ }
+ void *buf = _backend->get_buffer(ph, nframes);
+ if (!buf) {
+ continue;
+ }
+ _backend->midi_clear (buf);
+ }
+ }
+}
+
+void
PortManager::check_monitoring ()
{
for (Ports::iterator i = _cycle_ports->begin(); i != _cycle_ports->end(); ++i) {
diff --git a/libs/ardour/process_thread.cc b/libs/ardour/process_thread.cc
index d4a3d2f..cf48c50 100644
--- a/libs/ardour/process_thread.cc
+++ b/libs/ardour/process_thread.cc
@@ -169,6 +169,17 @@ ProcessThread::gain_automation_buffer()
}
gain_t*
+ProcessThread::trim_automation_buffer()
+{
+ ThreadBuffers* tb = _private_thread_buffers.get();
+ assert (tb);
+
+ gain_t *g = tb->trim_automation_buffer;
+ assert (g);
+ return g;
+}
+
+gain_t*
ProcessThread::send_gain_automation_buffer()
{
ThreadBuffers* tb = _private_thread_buffers.get();
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 36adbfa..be7174f 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -26,6 +26,7 @@
#include <cassert>
#include <algorithm>
+#include <glibmm.h>
#include <boost/algorithm/string.hpp>
#include "pbd/xml++.h"
@@ -37,6 +38,7 @@
#include "ardour/amp.h"
#include "ardour/audio_buffer.h"
+#include "ardour/audio_track.h"
#include "ardour/audio_port.h"
#include "ardour/audioengine.h"
#include "ardour/buffer.h"
@@ -81,11 +83,14 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
, _active (true)
, _signal_latency (0)
, _signal_latency_at_amp_position (0)
+ , _signal_latency_at_trim_position (0)
, _initial_delay (0)
, _roll_delay (0)
+ , _pending_process_reorder (0)
, _flags (flg)
, _pending_declick (true)
, _meter_point (MeterPostFader)
+ , _pending_meter_point (MeterPostFader)
, _meter_type (MeterPeak)
, _self_solo (false)
, _soloed_by_others_upstream (0)
@@ -106,7 +111,6 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
, _in_configure_processors (false)
, _initial_io_setup (false)
, _custom_meter_position_noted (false)
- , _last_custom_meter_was_at_end (false)
{
if (is_master()) {
_meter_type = MeterK20;
@@ -157,6 +161,21 @@ Route::init ()
_amp.reset (new Amp (_session));
add_processor (_amp, PostFader);
+ /* and input trim */
+ _trim.reset (new Amp (_session, "trim"));
+ _trim->set_display_to_user (false);
+
+ if (dynamic_cast<AudioTrack*>(this)) {
+ /* we can't do this in the AudioTrack's constructor
+ * because _trim does not exit then
+ */
+ _trim->activate();
+ }
+ else if (!dynamic_cast<Track*>(this) && ! ( is_monitor() || is_auditioner() )) {
+ /* regular bus */
+ _trim->activate();
+ }
+
/* create standard processors: meter, main outs, monitor out;
they will be added to _processors by setup_invisible_processors ()
*/
@@ -187,8 +206,6 @@ Route::init ()
/* now that we have _meter, its safe to connect to this */
- Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this)));
-
{
Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
configure_processors (0);
@@ -344,7 +361,6 @@ Route::ensure_track_or_route_name(string name, Session &session)
return newname;
}
-
void
Route::inc_gain (gain_t fraction, void *src)
{
@@ -407,6 +423,19 @@ Route::set_gain (gain_t val, void *src)
}
void
+Route::inc_trim (gain_t fraction, void *src)
+{
+ _trim->inc_gain (fraction, src);
+}
+
+void
+Route::set_trim (gain_t val, void * /* src */)
+{
+ // TODO route group, see set_gain()
+ _trim->set_gain (val, 0);
+}
+
+void
Route::maybe_declick (BufferSet&, framecnt_t, int)
{
/* this is the "bus" implementation and they never declick.
@@ -434,6 +463,8 @@ Route::process_output_buffers (BufferSet& bufs,
Glib::Threads::RWLock::ReaderLock lm (_processor_lock, Glib::Threads::TRY_LOCK);
if (!lm.locked()) {
+ // can this actually happen? functions calling process_output_buffers()
+ // already take a reader-lock.
bufs.silence (nframes, 0);
return;
}
@@ -445,8 +476,15 @@ Route::process_output_buffers (BufferSet& bufs,
start_frame + _signal_latency_at_amp_position,
end_frame + _signal_latency_at_amp_position,
nframes);
+
+ _trim->set_gain_automation_buffer (_session.trim_automation_buffer ());
+ _trim->setup_gain_automation (
+ start_frame + _signal_latency_at_trim_position,
+ end_frame + _signal_latency_at_trim_position,
+ nframes);
} else {
_amp->apply_gain_automation (false);
+ _trim->apply_gain_automation (false);
}
/* Tell main outs what to do about monitoring. We do this so that
@@ -529,7 +567,7 @@ Route::process_output_buffers (BufferSet& bufs,
framecnt_t latency = 0;
- for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
if (meter_already_run && boost::dynamic_pointer_cast<PeakMeter> (*i)) {
/* don't ::run() the meter, otherwise it will have its previous peak corrupted */
@@ -581,6 +619,10 @@ Route::bounce_process (BufferSet& buffers, framepos_t start, framecnt_t nframes,
_amp->set_gain_automation_buffer (_session.gain_automation_buffer ());
_amp->setup_gain_automation (start - latency, start - latency + nframes, nframes);
+ /* trim is always at the top, for bounce no latency compensation is needed */
+ _trim->set_gain_automation_buffer (_session.trim_automation_buffer ());
+ _trim->setup_gain_automation (start, start + nframes, nframes);
+
latency = 0;
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
@@ -991,6 +1033,17 @@ Route::muted () const
return _mute_master->muted_by_self();
}
+bool
+Route::muted_by_others () const
+{
+ //master is never muted by others
+ if (is_master())
+ return false;
+
+ //now check to see if something is soloed (and I am not)
+ return (_session.soloing() && !self_soloed() && !solo_isolated());
+}
+
#if 0
static void
dump_processors(const string& name, const list<boost::shared_ptr<Processor> >& procs)
@@ -1480,7 +1533,7 @@ Route::clear_processors (Placement p)
seen_amp = true;
}
- if ((*i) == _amp || (*i) == _meter || (*i) == _main_outs || (*i) == _delayline) {
+ if ((*i) == _amp || (*i) == _meter || (*i) == _main_outs || (*i) == _delayline || (*i) == _trim) {
/* you can't remove these */
@@ -1547,7 +1600,7 @@ Route::remove_processor (boost::shared_ptr<Processor> processor, ProcessorStream
/* these can never be removed */
- if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline) {
+ if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline || processor == _trim) {
return 0;
}
@@ -1664,7 +1717,7 @@ Route::remove_processors (const ProcessorList& to_be_deleted, ProcessorStreams*
/* these can never be removed */
- if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline) {
+ if (processor == _amp || processor == _meter || processor == _main_outs || processor == _delayline || processor == _trim) {
++i;
continue;
}
@@ -1854,6 +1907,14 @@ Route::configure_processors_unlocked (ProcessorStreams* err)
(*p)->configure_io(c->first, c->second);
processor_max_streams = ChanCount::max(processor_max_streams, c->first);
processor_max_streams = ChanCount::max(processor_max_streams, c->second);
+
+ boost::shared_ptr<PluginInsert> pi;
+ if ((pi = boost::dynamic_pointer_cast<PluginInsert>(*p)) != 0) {
+ /* plugins connected via Split Match may have more channels.
+ * route/scratch buffers are needed for all of them*/
+ processor_max_streams = ChanCount::max(processor_max_streams, pi->input_streams());
+ processor_max_streams = ChanCount::max(processor_max_streams, pi->natural_input_streams());
+ }
out = c->second;
if (boost::dynamic_pointer_cast<Delivery> (*p)
@@ -1871,7 +1932,7 @@ Route::configure_processors_unlocked (ProcessorStreams* err)
if (_meter) {
- _meter->reset_max_channels (processor_max_streams);
+ _meter->set_max_channels (processor_max_streams);
}
/* make sure we have sufficient scratch buffers to cope with the new processor
@@ -1912,86 +1973,175 @@ Route::all_visible_processors_active (bool state)
_session.set_dirty ();
}
-int
-Route::reorder_processors (const ProcessorList& new_order, ProcessorStreams* err)
+bool
+Route::processors_reorder_needs_configure (const ProcessorList& new_order)
{
+ /* check if re-order requires re-configuration of any processors
+ * -> compare channel configuration for all processors
+ */
+ Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
+ ChanCount c = input_streams ();
+
+ for (ProcessorList::const_iterator j = new_order.begin(); j != new_order.end(); ++j) {
+ bool found = false;
+ if (c != (*j)->input_streams()) {
+ return true;
+ }
+ for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ if (*i == *j) {
+ found = true;
+ if ((*i)->input_streams() != c) {
+ return true;
+ }
+ c = (*i)->output_streams();
+ break;
+ }
+ }
+ if (!found) {
+ return true;
+ }
+ }
+ return false;
+}
+
+#ifdef __clang__
+__attribute__((annotate("realtime")))
+#endif
+void
+Route::apply_processor_order (const ProcessorList& new_order)
+{
+ /* need to hold processor_lock; either read or write lock
+ * and the engine process_lock.
+ * Due to r/w lock ambiguity we can only assert the latter
+ */
+ assert (!AudioEngine::instance()->process_lock().trylock());
+
+
/* "new_order" is an ordered list of processors to be positioned according to "placement".
- NOTE: all processors in "new_order" MUST be marked as display_to_user(). There maybe additional
- processors in the current actual processor list that are hidden. Any visible processors
- in the current list but not in "new_order" will be assumed to be deleted.
- */
+ * NOTE: all processors in "new_order" MUST be marked as display_to_user(). There maybe additional
+ * processors in the current actual processor list that are hidden. Any visible processors
+ * in the current list but not in "new_order" will be assumed to be deleted.
+ */
- {
- Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
- Glib::Threads::RWLock::WriterLock lm (_processor_lock);
- ProcessorState pstate (this);
+ /* "as_it_will_be" and "_processors" are lists of shared pointers.
+ * actual memory usage is small, but insert/erase is not actually rt-safe :(
+ * (note though that ::processors_reorder_needs_configure() ensured that
+ * this function will only ever be called from the rt-thread if no processor were removed)
+ *
+ * either way, I can't proove it, but an x-run due to re-order here is less likley
+ * than an x-run-less 'ardour-silent cycle' both of which effectively "click".
+ */
- ProcessorList::iterator oiter;
- ProcessorList::const_iterator niter;
- ProcessorList as_it_will_be;
+ ProcessorList as_it_will_be;
+ ProcessorList::iterator oiter;
+ ProcessorList::const_iterator niter;
- oiter = _processors.begin();
- niter = new_order.begin();
+ oiter = _processors.begin();
+ niter = new_order.begin();
- while (niter != new_order.end()) {
+ while (niter != new_order.end()) {
- /* if the next processor in the old list is invisible (i.e. should not be in the new order)
- then append it to the temp list.
+ /* if the next processor in the old list is invisible (i.e. should not be in the new order)
+ then append it to the temp list.
- Otherwise, see if the next processor in the old list is in the new list. if not,
- its been deleted. If its there, append it to the temp list.
- */
+ Otherwise, see if the next processor in the old list is in the new list. if not,
+ its been deleted. If its there, append it to the temp list.
+ */
- if (oiter == _processors.end()) {
+ if (oiter == _processors.end()) {
- /* no more elements in the old list, so just stick the rest of
- the new order onto the temp list.
- */
+ /* no more elements in the old list, so just stick the rest of
+ the new order onto the temp list.
+ */
- as_it_will_be.insert (as_it_will_be.end(), niter, new_order.end());
- while (niter != new_order.end()) {
- ++niter;
- }
- break;
+ as_it_will_be.insert (as_it_will_be.end(), niter, new_order.end());
+ while (niter != new_order.end()) {
+ ++niter;
+ }
+ break;
- } else {
+ } else {
- if (!(*oiter)->display_to_user()) {
+ if (!(*oiter)->display_to_user()) {
- as_it_will_be.push_back (*oiter);
+ as_it_will_be.push_back (*oiter);
- } else {
+ } else {
- /* visible processor: check that its in the new order */
+ /* visible processor: check that its in the new order */
- if (find (new_order.begin(), new_order.end(), (*oiter)) == new_order.end()) {
- /* deleted: do nothing, shared_ptr<> will clean up */
- } else {
- /* ignore this one, and add the next item from the new order instead */
- as_it_will_be.push_back (*niter);
- ++niter;
- }
+ if (find (new_order.begin(), new_order.end(), (*oiter)) == new_order.end()) {
+ /* deleted: do nothing, shared_ptr<> will clean up */
+ } else {
+ /* ignore this one, and add the next item from the new order instead */
+ as_it_will_be.push_back (*niter);
+ ++niter;
}
-
- /* now remove from old order - its taken care of no matter what */
- oiter = _processors.erase (oiter);
}
+ /* now remove from old order - its taken care of no matter what */
+ oiter = _processors.erase (oiter);
}
- _processors.insert (oiter, as_it_will_be.begin(), as_it_will_be.end());
+ }
+ _processors.insert (oiter, as_it_will_be.begin(), as_it_will_be.end());
- /* If the meter is in a custom position, find it and make a rough note of its position */
- maybe_note_meter_position ();
+ /* If the meter is in a custom position, find it and make a rough note of its position */
+ maybe_note_meter_position ();
+}
+
+int
+Route::reorder_processors (const ProcessorList& new_order, ProcessorStreams* err)
+{
+ // it a change is already queued, wait for it
+ // (unless engine is stopped. apply immediately and proceed
+ while (g_atomic_int_get (&_pending_process_reorder)) {
+ if (!AudioEngine::instance()->running()) {
+ DEBUG_TRACE (DEBUG::Processors, "offline apply queued processor re-order.\n");
+ Glib::Threads::RWLock::WriterLock lm (_processor_lock);
+
+ apply_processor_order(_pending_processor_order);
+ setup_invisible_processors ();
+
+ g_atomic_int_set (&_pending_process_reorder, 0);
+
+ processors_changed (RouteProcessorChange ()); /* EMIT SIGNAL */
+ set_processor_positions ();
+ } else {
+ // TODO rather use a semaphore or something.
+ // but since ::reorder_processors() is called
+ // from the GUI thread, this is fine..
+ Glib::usleep(500);
+ }
+ }
+
+ if (processors_reorder_needs_configure (new_order) || !AudioEngine::instance()->running()) {
+
+ Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
+ Glib::Threads::RWLock::WriterLock lm (_processor_lock);
+ ProcessorState pstate (this);
+
+ apply_processor_order (new_order);
if (configure_processors_unlocked (err)) {
pstate.restore ();
return -1;
}
- }
- processors_changed (RouteProcessorChange ()); /* EMIT SIGNAL */
- set_processor_positions ();
+ lm.release();
+ lx.release();
+
+ processors_changed (RouteProcessorChange ()); /* EMIT SIGNAL */
+ set_processor_positions ();
+
+ } else {
+ DEBUG_TRACE (DEBUG::Processors, "Queue clickless processor re-order.\n");
+ Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
+
+ // _pending_processor_order is protected by _processor_lock
+ _pending_processor_order = new_order;
+ g_atomic_int_set (&_pending_process_reorder, 1);
+ }
return 0;
}
@@ -2103,8 +2253,6 @@ Route::state(bool full_state)
after->id().print (buf, sizeof (buf));
node->add_property (X_("processor-after-last-custom-meter"), buf);
}
-
- node->add_property (X_("last-custom-meter-was-at-end"), _last_custom_meter_was_at_end ? "yes" : "no");
}
return *node;
@@ -2297,10 +2445,6 @@ Route::set_state (const XMLNode& node, int version)
}
}
- if ((prop = node.property (X_("last-custom-meter-was-at-end"))) != 0) {
- _last_custom_meter_was_at_end = string_is_affirmative (prop->value ());
- }
-
for (niter = nlist.begin(); niter != nlist.end(); ++niter){
child = *niter;
@@ -2634,6 +2778,9 @@ Route::set_processor_state (const XMLNode& node)
if (prop->value() == "amp") {
_amp->set_state (**niter, Stateful::current_state_version);
new_order.push_back (_amp);
+ } else if (prop->value() == "trim") {
+ _trim->set_state (**niter, Stateful::current_state_version);
+ new_order.push_back (_trim);
} else if (prop->value() == "meter") {
_meter->set_state (**niter, Stateful::current_state_version);
new_order.push_back (_meter);
@@ -2751,7 +2898,7 @@ Route::set_processor_state (const XMLNode& node)
}
reset_instrument_info ();
- processors_changed (RouteProcessorChange ());
+ processors_changed (RouteProcessorChange ()); /* EMIT SIGNAL */
set_processor_positions ();
}
@@ -3096,6 +3243,11 @@ Route::output_change_handler (IOChange change, void * /*src*/)
*/
need_to_queue_solo_change = false;
configure_processors (0);
+
+ if (is_master()) {
+ _session.reset_monitor_section();
+ }
+
io_changed (); /* EMIT SIGNAL */
}
@@ -3172,6 +3324,7 @@ Route::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
}
_amp->apply_gain_automation (false);
+ _trim->apply_gain_automation (false);
passthru (bufs, start_frame, end_frame, nframes, 0);
return 0;
@@ -3236,78 +3389,164 @@ Route::flush_processors ()
}
}
+#ifdef __clang__
+__attribute__((annotate("realtime")))
+#endif
+bool
+Route::apply_processor_changes_rt ()
+{
+ int emissions = EmitNone;
+
+ if (_pending_meter_point != _meter_point) {
+ Glib::Threads::RWLock::WriterLock pwl (_processor_lock, Glib::Threads::TRY_LOCK);
+ if (pwl.locked()) {
+ /* meters always have buffers for 'processor_max_streams'
+ * they can be re-positioned without re-allocation */
+ if (set_meter_point_unlocked()) {
+ emissions |= EmitMeterChanged | EmitMeterVisibilityChange;;
+ } else {
+ emissions |= EmitMeterChanged;
+ }
+ }
+ }
+
+ bool changed = false;
+
+ if (g_atomic_int_get (&_pending_process_reorder)) {
+ Glib::Threads::RWLock::WriterLock pwl (_processor_lock, Glib::Threads::TRY_LOCK);
+ if (pwl.locked()) {
+ apply_processor_order (_pending_processor_order);
+ setup_invisible_processors ();
+ changed = true;
+ g_atomic_int_set (&_pending_process_reorder, 0);
+ emissions |= EmitRtProcessorChange;
+ }
+ }
+ if (changed) {
+ set_processor_positions ();
+ }
+ if (emissions != 0) {
+ g_atomic_int_set (&_pending_signals, emissions);
+ return true;
+ }
+ return false;
+}
+
+void
+Route::emit_pending_signals ()
+{
+
+ int sig = g_atomic_int_and (&_pending_signals, 0);
+ if (sig & EmitMeterChanged) {
+ _meter->emit_configuration_changed();
+ meter_change (); /* EMIT SIGNAL */
+ if (sig & EmitMeterVisibilityChange) {
+ processors_changed (RouteProcessorChange (RouteProcessorChange::MeterPointChange, true)); /* EMIT SIGNAL */
+ } else {
+ processors_changed (RouteProcessorChange (RouteProcessorChange::MeterPointChange, false)); /* EMIT SIGNAL */
+ }
+ }
+ if (sig & EmitRtProcessorChange) {
+ processors_changed (RouteProcessorChange (RouteProcessorChange::RealTimeChange)); /* EMIT SIGNAL */
+ }
+}
+
void
Route::set_meter_point (MeterPoint p, bool force)
{
- if (_meter_point == p && !force) {
+ if (_pending_meter_point == p && !force) {
return;
}
- bool meter_was_visible_to_user = _meter->display_to_user ();
-
- {
+ if (force || !AudioEngine::instance()->running()) {
Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
Glib::Threads::RWLock::WriterLock lm (_processor_lock);
+ _pending_meter_point = p;
+ _meter->emit_configuration_changed();
+ meter_change (); /* EMIT SIGNAL */
+ if (set_meter_point_unlocked()) {
+ processors_changed (RouteProcessorChange (RouteProcessorChange::MeterPointChange, true)); /* EMIT SIGNAL */
+ } else {
+ processors_changed (RouteProcessorChange (RouteProcessorChange::MeterPointChange, false)); /* EMIT SIGNAL */
+ }
+ } else {
+ _pending_meter_point = p;
+ }
+}
- maybe_note_meter_position ();
- _meter_point = p;
+#ifdef __clang__
+__attribute__((annotate("realtime")))
+#endif
+bool
+Route::set_meter_point_unlocked ()
+{
+#ifndef NDEBUG
+ /* Caller must hold process and processor write lock */
+ assert (!AudioEngine::instance()->process_lock().trylock());
+ Glib::Threads::RWLock::WriterLock lm (_processor_lock, Glib::Threads::TRY_LOCK);
+ assert (!lm.locked ());
+#endif
- if (_meter_point != MeterCustom) {
+ _meter_point = _pending_meter_point;
- _meter->set_display_to_user (false);
+ bool meter_was_visible_to_user = _meter->display_to_user ();
- setup_invisible_processors ();
+ if (!_custom_meter_position_noted) {
+ maybe_note_meter_position ();
+ }
- } else {
+ if (_meter_point != MeterCustom) {
- _meter->set_display_to_user (true);
+ _meter->set_display_to_user (false);
- /* If we have a previous position for the custom meter, try to put it there */
- if (_custom_meter_position_noted) {
- boost::shared_ptr<Processor> after = _processor_after_last_custom_meter.lock ();
-
- if (after) {
- ProcessorList::iterator i = find (_processors.begin(), _processors.end(), after);
- if (i != _processors.end ()) {
- _processors.remove (_meter);
- _processors.insert (i, _meter);
- }
- } else if (_last_custom_meter_was_at_end) {
- _processors.remove (_meter);
- _processors.push_back (_meter);
- }
+ setup_invisible_processors ();
+
+ } else {
+ _meter->set_display_to_user (true);
+
+ /* If we have a previous position for the custom meter, try to put it there */
+ boost::shared_ptr<Processor> after = _processor_after_last_custom_meter.lock ();
+ if (after) {
+ ProcessorList::iterator i = find (_processors.begin(), _processors.end(), after);
+ if (i != _processors.end ()) {
+ _processors.remove (_meter);
+ _processors.insert (i, _meter);
}
+ } else {// at end, right before the mains_out/panner
+ _processors.remove (_meter);
+ ProcessorList::iterator main = _processors.end();
+ _processors.insert (--main, _meter);
}
+ }
- /* Set up the meter for its new position */
+ /* Set up the meter for its new position */
- ProcessorList::iterator loc = find (_processors.begin(), _processors.end(), _meter);
-
- ChanCount m_in;
-
- if (loc == _processors.begin()) {
- m_in = _input->n_ports();
- } else {
- ProcessorList::iterator before = loc;
- --before;
- m_in = (*before)->output_streams ();
- }
-
- _meter->reflect_inputs (m_in);
-
- /* we do not need to reconfigure the processors, because the meter
- (a) is always ready to handle processor_max_streams
- (b) is always an N-in/N-out processor, and thus moving
- it doesn't require any changes to the other processors.
- */
+ ProcessorList::iterator loc = find (_processors.begin(), _processors.end(), _meter);
+
+ ChanCount m_in;
+
+ if (loc == _processors.begin()) {
+ m_in = _input->n_ports();
+ } else {
+ ProcessorList::iterator before = loc;
+ --before;
+ m_in = (*before)->output_streams ();
}
- meter_change (); /* EMIT SIGNAL */
+ _meter->reflect_inputs (m_in);
- bool const meter_visibly_changed = (_meter->display_to_user() != meter_was_visible_to_user);
+ /* we do not need to reconfigure the processors, because the meter
+ (a) is always ready to handle processor_max_streams
+ (b) is always an N-in/N-out processor, and thus moving
+ it doesn't require any changes to the other processors.
+ */
- processors_changed (RouteProcessorChange (RouteProcessorChange::MeterPointChange, meter_visibly_changed)); /* EMIT SIGNAL */
+ /* these should really be done after releasing the lock
+ * but all those signals are subscribed to with gui_thread()
+ * so we're safe.
+ */
+ return (_meter->display_to_user() != meter_was_visible_to_user);
}
void
@@ -3354,6 +3593,8 @@ Route::update_signal_latency ()
framecnt_t l = _output->user_latency();
framecnt_t lamp = 0;
bool before_amp = true;
+ framecnt_t ltrim = 0;
+ bool before_trim = true;
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
if ((*i)->active ()) {
@@ -3362,14 +3603,23 @@ Route::update_signal_latency ()
if ((*i) == _amp) {
before_amp = false;
}
+ if ((*i) == _trim) {
+ before_amp = false;
+ }
if (before_amp) {
lamp = l;
}
+ if (before_trim) {
+ lamp = l;
+ }
}
DEBUG_TRACE (DEBUG::Latency, string_compose ("%1: internal signal latency = %2\n", _name, l));
+ // TODO: (lamp - _signal_latency) to sync to output (read-ahed), currently _roll_delay shifts this around
_signal_latency_at_amp_position = lamp;
+ _signal_latency_at_trim_position = ltrim;
+
if (_signal_latency != l) {
_signal_latency = l;
signal_latency_changed (); /* EMIT SIGNAL */
@@ -3452,9 +3702,9 @@ Route::SoloControllable::get_value () const
}
if (Config->get_solo_control_is_listen_control()) {
- return r->listening_via_monitor() ? 1.0f : 0.0f;
+ return r->listening_via_monitor() ? GAIN_COEFF_UNITY : GAIN_COEFF_ZERO;
} else {
- return r->self_soloed() ? 1.0f : 0.0f;
+ return r->self_soloed() ? GAIN_COEFF_UNITY : GAIN_COEFF_ZERO;
}
}
@@ -3516,7 +3766,7 @@ Route::MuteControllable::get_value () const
// Not playing back automation, get the actual route mute value
boost::shared_ptr<Route> r = _route.lock ();
- return (r && r->muted()) ? 1.0 : 0.0;
+ return (r && r->muted()) ? GAIN_COEFF_UNITY : GAIN_COEFF_ZERO;
}
void
@@ -3572,6 +3822,18 @@ Route::shift (framepos_t pos, framecnt_t frames)
_session.add_command (new MementoCommand<AutomationList> (*gc->alist().get(), &before, &after));
}
+ /* gain automation */
+ {
+ boost::shared_ptr<AutomationControl> gc = _trim->gain_control();
+
+ XMLNode &before = gc->alist()->get_state ();
+ gc->alist()->shift (pos, frames);
+ XMLNode &after = gc->alist()->get_state ();
+ _session.add_command (new MementoCommand<AutomationList> (*gc->alist().get(), &before, &after));
+ }
+
+ // TODO mute automation ??
+
/* pan automation */
if (_pannable) {
ControlSet::Controls& c (_pannable->controls());
@@ -3776,28 +4038,6 @@ Route::set_active (bool yn, void* src)
}
}
-void
-Route::meter ()
-{
- Glib::Threads::RWLock::ReaderLock rm (_processor_lock);
-
- assert (_meter);
-
- _meter->meter ();
-
- for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
-
- boost::shared_ptr<Send> s;
- boost::shared_ptr<Return> r;
-
- if ((s = boost::dynamic_pointer_cast<Send> (*i)) != 0) {
- s->meter()->meter();
- } else if ((r = boost::dynamic_pointer_cast<Return> (*i)) != 0) {
- r->meter()->meter ();
- }
- }
-}
-
boost::shared_ptr<Pannable>
Route::pannable() const
{
@@ -3917,7 +4157,7 @@ Route::set_processor_positions ()
Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
bool had_amp = false;
- for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
(*i)->set_pre_fader (!had_amp);
if (boost::dynamic_pointer_cast<Amp> (*i)) {
had_amp = true;
@@ -4080,6 +4320,9 @@ Route::set_public_port_latencies (framecnt_t value, bool playback) const
/** Put the invisible processors in the right place in _processors.
* Must be called with a writer lock on _processor_lock held.
*/
+#ifdef __clang__
+__attribute__((annotate("realtime")))
+#endif
void
Route::setup_invisible_processors ()
{
@@ -4093,7 +4336,10 @@ Route::setup_invisible_processors ()
return;
}
- /* we'll build this new list here and then use it */
+ /* we'll build this new list here and then use it
+ *
+ * TODO put the ProcessorList is on the stack for RT-safety.
+ */
ProcessorList new_processors;
@@ -4228,6 +4474,10 @@ Route::setup_invisible_processors ()
new_processors.push_front (_intreturn);
}
+ if (_trim && _trim->active()) {
+ assert (!_trim->display_to_user ());
+ new_processors.push_front (_trim);
+ }
/* EXPORT PROCESSOR */
if (_capturing_processor) {
@@ -4274,18 +4524,32 @@ Route::maybe_note_meter_position ()
}
_custom_meter_position_noted = true;
+ /* custom meter points range from after trim to before panner/main_outs
+ * this is a limitation by the current processor UI
+ */
+ bool seen_trim = false;
+ _processor_after_last_custom_meter.reset();
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ if ((*i) == _trim) {
+ seen_trim = true;
+ }
+ if ((*i) == _main_outs) {
+ _processor_after_last_custom_meter = *i;
+ break;
+ }
if (boost::dynamic_pointer_cast<PeakMeter> (*i)) {
- ProcessorList::iterator j = i;
- ++j;
- if (j != _processors.end ()) {
- _processor_after_last_custom_meter = *j;
- _last_custom_meter_was_at_end = false;
+ if (!seen_trim) {
+ _processor_after_last_custom_meter = _trim;
} else {
- _last_custom_meter_was_at_end = true;
+ ProcessorList::iterator j = i;
+ ++j;
+ assert(j != _processors.end ()); // main_outs should be before
+ _processor_after_last_custom_meter = *j;
}
+ break;
}
}
+ assert(_processor_after_last_custom_meter.lock());
}
boost::shared_ptr<Processor>
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index a45175c..71ad0bd 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -66,6 +66,7 @@
#include "ardour/control_protocol_manager.h"
#include "ardour/data_type.h"
#include "ardour/debug.h"
+#include "ardour/directory_names.h"
#include "ardour/filename_extensions.h"
#include "ardour/graph.h"
#include "ardour/midiport_manager.h"
@@ -172,6 +173,7 @@ Session::Session (AudioEngine &eng,
, _writable (false)
, _was_seamless (Config->get_seamless_loop ())
, _under_nsm_control (false)
+ , _xrun_count (0)
, delta_accumulator_cnt (0)
, average_slave_delta (1800) // !!! why 1800 ???
, average_dir (0)
@@ -212,6 +214,8 @@ Session::Session (AudioEngine &eng,
, rf_scale (1.0)
, _locations (new Locations (*this))
, _ignore_skips_updates (false)
+ , _rt_thread_active (false)
+ , _rt_emit_pending (false)
, step_speed (0)
, outbound_mtc_timecode_frame (0)
, next_quarter_frame_to_send (-1)
@@ -275,6 +279,9 @@ Session::Session (AudioEngine &eng,
{
uint32_t sr = 0;
+ pthread_mutex_init (&_rt_emit_mutex, 0);
+ pthread_cond_init (&_rt_emit_cond, 0);
+
pre_engine_init (fullpath);
if (_is_new) {
@@ -353,6 +360,8 @@ Session::Session (AudioEngine &eng,
_is_new = false;
+ emit_thread_start ();
+
/* hook us up to the engine since we are now completely constructed */
BootMessage (_("Connect to engine"));
@@ -570,6 +579,11 @@ Session::destroy ()
/* not strictly necessary, but doing it here allows the shared_ptr debugging to work */
playlists.reset ();
+ emit_thread_terminate ();
+
+ pthread_cond_destroy (&_rt_emit_cond);
+ pthread_mutex_destroy (&_rt_emit_mutex);
+
delete _scene_changer; _scene_changer = 0;
delete midi_control_ui; midi_control_ui = 0;
@@ -1061,6 +1075,121 @@ Session::add_monitor_section ()
}
void
+Session::reset_monitor_section ()
+{
+ /* Process lock should be held by the caller.*/
+
+ if (!_monitor_out) {
+ return;
+ }
+
+ uint32_t limit = _master_out->n_outputs().n_audio();
+
+ /* connect the inputs to the master bus outputs. this
+ * represents a separate data feed from the internal sends from
+ * each route. as of jan 2011, it allows the monitor section to
+ * conditionally ignore either the internal sends or the normal
+ * input feed, but we should really find a better way to do
+ * this, i think.
+ */
+
+ _master_out->output()->disconnect (this);
+ _monitor_out->output()->disconnect (this);
+
+ _monitor_out->input()->ensure_io (_master_out->output()->n_ports(), false, this);
+ _monitor_out->output()->ensure_io (_master_out->output()->n_ports(), false, this);
+
+ for (uint32_t n = 0; n < limit; ++n) {
+ boost::shared_ptr<AudioPort> p = _monitor_out->input()->ports().nth_audio_port (n);
+ boost::shared_ptr<AudioPort> o = _master_out->output()->ports().nth_audio_port (n);
+
+ if (o) {
+ string connect_to = o->name();
+ if (_monitor_out->input()->connect (p, connect_to, this)) {
+ error << string_compose (_("cannot connect control input %1 to %2"), n, connect_to)
+ << endmsg;
+ break;
+ }
+ }
+ }
+
+ /* connect monitor section to physical outs
+ */
+
+ if (Config->get_auto_connect_standard_busses()) {
+
+ if (!Config->get_monitor_bus_preferred_bundle().empty()) {
+
+ boost::shared_ptr<Bundle> b = bundle_by_name (Config->get_monitor_bus_preferred_bundle());
+
+ if (b) {
+ _monitor_out->output()->connect_ports_to_bundle (b, true, this);
+ } else {
+ warning << string_compose (_("The preferred I/O for the monitor bus (%1) cannot be found"),
+ Config->get_monitor_bus_preferred_bundle())
+ << endmsg;
+ }
+
+ } else {
+
+ /* Monitor bus is audio only */
+
+ vector<string> outputs[DataType::num_types];
+
+ for (uint32_t i = 0; i < DataType::num_types; ++i) {
+ _engine.get_physical_outputs (DataType (DataType::Symbol (i)), outputs[i]);
+ }
+
+ uint32_t mod = outputs[DataType::AUDIO].size();
+ uint32_t limit = _monitor_out->n_outputs().get (DataType::AUDIO);
+
+ if (mod != 0) {
+
+ for (uint32_t n = 0; n < limit; ++n) {
+
+ boost::shared_ptr<Port> p = _monitor_out->output()->ports().port(DataType::AUDIO, n);
+ string connect_to;
+ if (outputs[DataType::AUDIO].size() > (n % mod)) {
+ connect_to = outputs[DataType::AUDIO][n % mod];
+ }
+
+ if (!connect_to.empty()) {
+ if (_monitor_out->output()->connect (p, connect_to, this)) {
+ error << string_compose (
+ _("cannot connect control output %1 to %2"),
+ n, connect_to)
+ << endmsg;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Connect tracks to monitor section. Note that in an
+ existing session, the internal sends will already exist, but we want the
+ routes to notice that they connect to the control out specifically.
+ */
+
+
+ boost::shared_ptr<RouteList> rls = routes.reader ();
+
+ PBD::Unwinder<bool> uw (ignore_route_processor_changes, true);
+
+ for (RouteList::iterator x = rls->begin(); x != rls->end(); ++x) {
+
+ if ((*x)->is_monitor()) {
+ /* relax */
+ } else if ((*x)->is_master()) {
+ /* relax */
+ } else {
+ (*x)->enable_monitor_send ();
+ }
+ }
+}
+
+void
Session::hookup_io ()
{
/* stop graph reordering notifications from
@@ -1217,10 +1346,10 @@ Session::auto_loop_changed (Location* location)
framepos_t dcp;
framecnt_t dcl;
auto_loop_declick_range (location, dcp, dcl);
- replace_event (SessionEvent::AutoLoopDeclick, dcp, dcl);
if (transport_rolling() && play_loop) {
+ replace_event (SessionEvent::AutoLoopDeclick, dcp, dcl);
// if (_transport_frame > location->end()) {
@@ -1244,6 +1373,9 @@ Session::auto_loop_changed (Location* location)
}
}
+ } else {
+ clear_events (SessionEvent::AutoLoopDeclick);
+ clear_events (SessionEvent::AutoLoop);
}
last_loopend = location->end();
@@ -2660,7 +2792,7 @@ Session::globally_set_send_gains_to_zero (boost::shared_ptr<Route> dest)
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((s = (*i)->internal_send_for (dest)) != 0) {
- s->amp()->gain_control()->set_value (0.0);
+ s->amp()->gain_control()->set_value (GAIN_COEFF_ZERO);
}
}
}
@@ -2673,7 +2805,7 @@ Session::globally_set_send_gains_to_unity (boost::shared_ptr<Route> dest)
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((s = (*i)->internal_send_for (dest)) != 0) {
- s->amp()->gain_control()->set_value (1.0);
+ s->amp()->gain_control()->set_value (GAIN_COEFF_UNITY);
}
}
}
@@ -3617,6 +3749,41 @@ Session::count_sources_by_origin (const string& path)
string
Session::peak_path (string base) const
{
+ if (Glib::path_is_absolute (base)) {
+
+ /* rip the session dir from the audiofile source */
+
+ string session_path;
+ string interchange_dir_string = string (interchange_dir_name) + G_DIR_SEPARATOR;
+ bool in_another_session = true;
+
+ if (base.find (interchange_dir_string) != string::npos) {
+
+ session_path = Glib::path_get_dirname (base); /* now ends in audiofiles */
+ session_path = Glib::path_get_dirname (session_path); /* now ends in session name */
+ session_path = Glib::path_get_dirname (session_path); /* now ends in interchange */
+ session_path = Glib::path_get_dirname (session_path); /* now has session path */
+
+ /* see if it is within our session */
+
+ for (vector<space_and_path>::const_iterator i = session_dirs.begin(); i != session_dirs.end(); ++i) {
+ if (i->path == session_path) {
+ in_another_session = false;
+ break;
+ }
+ }
+ } else {
+ in_another_session = false;
+ }
+
+
+ if (in_another_session) {
+ SessionDirectory sd (session_path);
+ return Glib::build_filename (sd.peak_path(), Glib::path_get_basename (base) + peakfile_suffix);
+ }
+ }
+
+ base = Glib::path_get_basename (base);
return Glib::build_filename (_session_dir->peak_path(), base + peakfile_suffix);
}
@@ -4696,6 +4863,12 @@ Session::gain_automation_buffer() const
}
gain_t*
+Session::trim_automation_buffer() const
+{
+ return ProcessThread::trim_automation_buffer ();
+}
+
+gain_t*
Session::send_gain_automation_buffer() const
{
return ProcessThread::send_gain_automation_buffer ();
diff --git a/libs/ardour/session_directory.cc b/libs/ardour/session_directory.cc
index 9d0be41..b6536eb 100644
--- a/libs/ardour/session_directory.cc
+++ b/libs/ardour/session_directory.cc
@@ -176,6 +176,7 @@ SessionDirectory::sub_directories () const
tmp_paths.push_back (sound_path ());
tmp_paths.push_back (midi_path ());
+ tmp_paths.push_back (video_path ());
tmp_paths.push_back (peak_path ());
tmp_paths.push_back (dead_path ());
tmp_paths.push_back (export_path ());
diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc
index d41b9c5..53a2636 100644
--- a/libs/ardour/session_events.cc
+++ b/libs/ardour/session_events.cc
@@ -74,11 +74,6 @@ SessionEvent::operator new (size_t)
DEBUG_TRACE (DEBUG::SessionEvents, string_compose ("%1 Allocating SessionEvent from %2 ev @ %3 pool size %4 free %5 used %6\n", pthread_name(), p->name(), ev,
p->total(), p->available(), p->used()));
-#ifndef NDEBUG
- if (DEBUG::SessionEvents & PBD::debug_bits) {
- // stacktrace (cerr, 40);
- }
-#endif
ev->own_pool = p;
return ev;
}
@@ -94,12 +89,6 @@ SessionEvent::operator delete (void *ptr, size_t /*size*/)
pthread_name(), ev, enum_2_string (ev->type), enum_2_string (ev->action), p->name(), ev->own_pool->name(), ev->own_pool->total(), ev->own_pool->available(), ev->own_pool->used()
));
-#ifndef NDEBUG
- if (DEBUG::SessionEvents & PBD::debug_bits) {
- // stacktrace (cerr, 40);
- }
-#endif
-
if (p && p == ev->own_pool) {
p->release (ptr);
} else {
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 86f427f..404f061 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -75,6 +75,29 @@ Session::process (pframes_t nframes)
(this->*process_function) (nframes);
+ /* realtime-safe meter-position and processor-order changes
+ *
+ * ideally this would be done in
+ * Route::process_output_buffers() but various functions
+ * callig it hold a _processor_lock reader-lock
+ */
+ boost::shared_ptr<RouteList> r = routes.reader ();
+ for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->apply_processor_changes_rt()) {
+ _rt_emit_pending = true;
+ }
+ }
+ if (_rt_emit_pending) {
+ if (!_rt_thread_active) {
+ emit_route_signals ();
+ }
+ if (pthread_mutex_trylock (&_rt_emit_mutex) == 0) {
+ pthread_cond_signal (&_rt_emit_cond);
+ pthread_mutex_unlock (&_rt_emit_mutex);
+ _rt_emit_pending = false;
+ }
+ }
+
_engine.main_thread()->drop_buffers ();
/* deliver MIDI clock. Note that we need to use the transport frame
@@ -373,6 +396,8 @@ Session::process_with_events (pframes_t nframes)
send_midi_time_code_for_cycle (_transport_frame, end_frame, nframes);
}
+ ltc_tx_send_time_code_for_cycle (_transport_frame, end_frame, _target_transport_speed, _transport_speed, nframes);
+
framepos_t stop_limit = compute_stop_limit ();
if (maybe_stop (stop_limit)) {
@@ -1213,3 +1238,79 @@ Session::compute_stop_limit () const
return current_end_frame ();
}
+
+
+
+/* dedicated thread for signal emission.
+ *
+ * while sending cross-thread signals from the process thread
+ * is fine in general, PBD::Signal's use of boost::function and
+ * boost:bind can produce a vast overhead which is not
+ * acceptable for low latency.
+ *
+ * This works around the issue by moving the boost overhead
+ * out of the RT thread. The overall load is probably higher but
+ * the realtime thread remains unaffected.
+ */
+
+void
+Session::emit_route_signals ()
+{
+ // TODO use RAII to allow using these signals in other places
+ BatchUpdateStart(); /* EMIT SIGNAL */
+ boost::shared_ptr<RouteList> r = routes.reader ();
+ for (RouteList::const_iterator ci = r->begin(); ci != r->end(); ++ci) {
+ (*ci)->emit_pending_signals ();
+ }
+ BatchUpdateEnd(); /* EMIT SIGNAL */
+}
+
+void
+Session::emit_thread_start ()
+{
+ if (_rt_thread_active) {
+ return;
+ }
+ _rt_thread_active = true;
+
+ if (pthread_create (&_rt_emit_thread, NULL, emit_thread, this)) {
+ _rt_thread_active = false;
+ }
+}
+
+void
+Session::emit_thread_terminate ()
+{
+ if (!_rt_thread_active) {
+ return;
+ }
+ _rt_thread_active = false;
+
+ if (pthread_mutex_lock (&_rt_emit_mutex) == 0) {
+ pthread_cond_signal (&_rt_emit_cond);
+ pthread_mutex_unlock (&_rt_emit_mutex);
+ }
+
+ void *status;
+ pthread_join (_rt_emit_thread, &status);
+}
+
+void *
+Session::emit_thread (void *arg)
+{
+ Session *s = static_cast<Session *>(arg);
+ s->emit_thread_run ();
+ pthread_exit (0);
+ return 0;
+}
+
+void
+Session::emit_thread_run ()
+{
+ pthread_mutex_lock (&_rt_emit_mutex);
+ while (_rt_thread_active) {
+ emit_route_signals();
+ pthread_cond_wait (&_rt_emit_cond, &_rt_emit_mutex);
+ }
+ pthread_mutex_unlock (&_rt_emit_mutex);
+}
diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc
index 4bd7c2d..11d8319 100644
--- a/libs/ardour/session_rtevents.cc
+++ b/libs/ardour/session_rtevents.cc
@@ -197,7 +197,7 @@ Session::set_record_enabled (boost::shared_ptr<RouteList> rl, bool yn, SessionEv
*/
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
- if ((*i)->is_auditioner()) {
+ if ((*i)->is_auditioner() || (*i)->record_safe ()) {
continue;
}
@@ -215,7 +215,7 @@ void
Session::rt_set_record_enabled (boost::shared_ptr<RouteList> rl, bool yn, bool group_override)
{
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
- if ((*i)->is_auditioner()) {
+ if ((*i)->is_auditioner() || (*i)->record_safe ()) {
continue;
}
@@ -229,6 +229,32 @@ Session::rt_set_record_enabled (boost::shared_ptr<RouteList> rl, bool yn, bool g
set_dirty ();
}
+
+void
+Session::set_record_safe (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeventCallback after, bool group_override)
+{
+ set_record_enabled (rl, false, after, group_override);
+ queue_event (get_rt_event (rl, yn, after, group_override, &Session::rt_set_record_safe));
+}
+
+void
+Session::rt_set_record_safe (boost::shared_ptr<RouteList> rl, bool yn, bool group_override)
+{
+ for (RouteList::iterator i = rl->begin (); i != rl->end (); ++i) {
+ if ((*i)->is_auditioner ()) { // REQUIRES REVIEW Can audiotioner be in Record Safe mode?
+ continue;
+ }
+
+ boost::shared_ptr<Track> t;
+
+ if ((t = boost::dynamic_pointer_cast<Track>(*i)) != 0) {
+ t->set_record_safe (yn, (group_override ? (void*) t->route_group () : (void *) this));
+ }
+ }
+
+ set_dirty ();
+}
+
void
Session::process_rtop (SessionEvent* ev)
{
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 3f1fd7b..f11ba77 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -54,6 +54,7 @@
#include <glibmm.h>
#include <glibmm/threads.h>
+#include <glibmm/fileutils.h>
#include <boost/algorithm/string.hpp>
@@ -139,12 +140,6 @@ Session::pre_engine_init (string fullpath)
_path = canonical_path(fullpath);
- /* we require _path to end with a dir separator */
-
- if (_path[_path.length()-1] != G_DIR_SEPARATOR) {
- _path += G_DIR_SEPARATOR;
- }
-
/* is it new ? */
_is_new = !Glib::file_test (_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
@@ -663,7 +658,7 @@ Session::remove_state (string snapshot_name)
/** @param snapshot_name Name to save under, without .ardour / .pending prefix */
int
-Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot)
+Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot, bool template_only)
{
XMLTree tree;
std::string xml_path(_session_dir->root_path());
@@ -701,7 +696,11 @@ Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot
SessionSaveUnderway (); /* EMIT SIGNAL */
- tree.set_root (&get_state());
+ if (template_only) {
+ tree.set_root (&get_template());
+ } else {
+ tree.set_root (&get_state());
+ }
if (snapshot_name.empty()) {
snapshot_name = _current_snapshot_name;
@@ -731,8 +730,8 @@ Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot
std::string tmp_path(_session_dir->root_path());
tmp_path = Glib::build_filename (tmp_path, legalize_for_path (snapshot_name) + temp_suffix);
- // cerr << "actually writing state to " << xml_path << endl;
-
+ cerr << "actually writing state to " << tmp_path << endl;
+
if (!tree.write (tmp_path)) {
error << string_compose (_("state could not be saved to %1"), tmp_path) << endmsg;
if (g_remove (tmp_path.c_str()) != 0) {
@@ -743,6 +742,8 @@ Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot
} else {
+ cerr << "renaming state to " << xml_path << endl;
+
if (::g_rename (tmp_path.c_str(), xml_path.c_str()) != 0) {
error << string_compose (_("could not rename temporary session file %1 to %2 (%3)"),
tmp_path, xml_path, g_strerror(errno)) << endmsg;
@@ -1852,6 +1853,22 @@ Session::get_sources_as_xml ()
return *node;
}
+void
+Session::reset_write_sources (bool mark_write_complete, bool force)
+{
+ boost::shared_ptr<RouteList> rl = routes.reader();
+ for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+ boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+ if (tr) {
+
+ // block state saving
+ _state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup);
+ tr->reset_write_sources(mark_write_complete, force);
+ _state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup);
+ }
+ }
+}
+
int
Session::load_sources (const XMLNode& node)
{
@@ -2772,6 +2789,16 @@ Session::cleanup_sources (CleanupReport& rep)
RegionFactory::remove_regions_using_source (i->second);
sources.erase (i);
+
+ // also remove source from all_sources
+
+ for (set<string>::iterator j = all_sources.begin(); j != all_sources.end(); ++j) {
+ spath = Glib::path_get_basename (*j);
+ if ( spath == i->second->name () ) {
+ all_sources.erase (j);
+ break;
+ }
+ }
}
}
}
@@ -3064,6 +3091,10 @@ Session::controllable_by_descriptor (const ControllableDescriptor& desc)
c = r->gain_control ();
break;
+ case ControllableDescriptor::Trim:
+ c = r->trim()->gain_control ();
+ break;
+
case ControllableDescriptor::Solo:
c = r->solo_control();
break;
@@ -3617,7 +3648,7 @@ int
Session::rename (const std::string& new_name)
{
string legal_name = legalize_for_path (new_name);
- string newpath;
+ string new_path;
string oldstr;
string newstr;
bool first = true;
@@ -3645,128 +3676,163 @@ Session::rename (const std::string& new_name)
* Backup files are left unchanged and not renamed.
*/
+ /* Windows requires that we close all files before attempting the
+ * rename. This works on other platforms, but isn't necessary there.
+ * Leave it in place for all platforms though, since it may help
+ * catch issues that could arise if the way Source files work ever
+ * change (since most developers are not using Windows).
+ */
+
+ for (SourceMap::const_iterator i = sources.begin(); i != sources.end(); ++i) {
+ boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource> (i->second);
+ if (fs) {
+ fs->close ();
+ }
+ }
+
/* pass one: not 100% safe check that the new directory names don't
* already exist ...
*/
- vector<space_and_path> new_session_dirs;
-
for (vector<space_and_path>::const_iterator i = session_dirs.begin(); i != session_dirs.end(); ++i) {
- vector<string> v;
-
+
oldstr = (*i).path;
-
+
/* this is a stupid hack because Glib::path_get_dirname() is
* lexical-only, and so passing it /a/b/c/ gives a different
* result than passing it /a/b/c ...
*/
-
+
if (oldstr[oldstr.length()-1] == G_DIR_SEPARATOR) {
oldstr = oldstr.substr (0, oldstr.length() - 1);
}
-
+
string base = Glib::path_get_dirname (oldstr);
- string p = Glib::path_get_basename (oldstr);
-
+
newstr = Glib::build_filename (base, legal_name);
+ cerr << "Looking for " << newstr << endl;
+
if (Glib::file_test (newstr, Glib::FILE_TEST_EXISTS)) {
+ cerr << " exists\n";
return -1;
}
-
- space_and_path sp;
- sp.path = newstr;
- sp.blocks = 0; // not needed
- new_session_dirs.push_back(sp);
}
/* Session dirs */
- for (vector<space_and_path>::const_iterator i = session_dirs.begin(); i != session_dirs.end(); ++i) {
+ first = true;
+
+ for (vector<space_and_path>::iterator i = session_dirs.begin(); i != session_dirs.end(); ++i) {
+
vector<string> v;
oldstr = (*i).path;
-
+
/* this is a stupid hack because Glib::path_get_dirname() is
* lexical-only, and so passing it /a/b/c/ gives a different
* result than passing it /a/b/c ...
*/
-
+
if (oldstr[oldstr.length()-1] == G_DIR_SEPARATOR) {
oldstr = oldstr.substr (0, oldstr.length() - 1);
}
string base = Glib::path_get_dirname (oldstr);
- string p = Glib::path_get_basename (oldstr);
-
newstr = Glib::build_filename (base, legal_name);
+ cerr << "for " << oldstr << " new dir = " << newstr << endl;
+
cerr << "Rename " << oldstr << " => " << newstr << endl;
-
if (::g_rename (oldstr.c_str(), newstr.c_str()) != 0) {
- error << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endmsg;
+ cerr << string_compose (_("renaming %s as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endl;
+ error << string_compose (_("renaming %s as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endmsg;
return 1;
}
+ /* Reset path in "session dirs" */
+
+ (*i).path = newstr;
+ (*i).blocks = 0;
+
+ /* reset primary SessionDirectory object */
+
if (first) {
(*_session_dir) = newstr;
- newpath = newstr;
- first = 1;
+ new_path = newstr;
+ first = false;
}
- /* directory below interchange */
+ /* now rename directory below session_dir/interchange */
- v.push_back (newstr);
+ string old_interchange_dir;
+ string new_interchange_dir;
+
+ /* use newstr here because we renamed the path
+ * (folder/directory) that used to be oldstr to newstr above
+ */
+
+ v.push_back (newstr);
v.push_back (interchange_dir_name);
- v.push_back (p);
+ v.push_back (Glib::path_get_basename (oldstr));
- oldstr = Glib::build_filename (v);
+ old_interchange_dir = Glib::build_filename (v);
v.clear ();
v.push_back (newstr);
v.push_back (interchange_dir_name);
v.push_back (legal_name);
-
- newstr = Glib::build_filename (v);
- cerr << "Rename " << oldstr << " => " << newstr << endl;
+ new_interchange_dir = Glib::build_filename (v);
- if (::g_rename (oldstr.c_str(), newstr.c_str()) != 0) {
- error << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endmsg;
+ cerr << "Rename " << old_interchange_dir << " => " << new_interchange_dir << endl;
+
+ if (::g_rename (old_interchange_dir.c_str(), new_interchange_dir.c_str()) != 0) {
+ cerr << string_compose (_("renaming %s as %2 failed (%3)"),
+ old_interchange_dir, new_interchange_dir,
+ g_strerror (errno))
+ << endl;
+ error << string_compose (_("renaming %s as %2 failed (%3)"),
+ old_interchange_dir, new_interchange_dir,
+ g_strerror (errno))
+ << endmsg;
return 1;
}
}
- session_dirs = new_session_dirs;
-
/* state file */
- oldstr = Glib::build_filename (newpath, _current_snapshot_name) + statefile_suffix;
- newstr= Glib::build_filename (newpath, legal_name) + statefile_suffix;
+ oldstr = Glib::build_filename (new_path, _current_snapshot_name + statefile_suffix);
+ newstr= Glib::build_filename (new_path, legal_name + statefile_suffix);
cerr << "Rename " << oldstr << " => " << newstr << endl;
if (::g_rename (oldstr.c_str(), newstr.c_str()) != 0) {
+ cerr << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endl;
error << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endmsg;
return 1;
}
/* history file */
-
- oldstr = Glib::build_filename (newpath, _current_snapshot_name) + history_suffix;
+ oldstr = Glib::build_filename (new_path, _current_snapshot_name) + history_suffix;
if (Glib::file_test (oldstr, Glib::FILE_TEST_EXISTS)) {
- newstr = Glib::build_filename (newpath, legal_name) + history_suffix;
+ newstr = Glib::build_filename (new_path, legal_name) + history_suffix;
cerr << "Rename " << oldstr << " => " << newstr << endl;
if (::g_rename (oldstr.c_str(), newstr.c_str()) != 0) {
+ cerr << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endl;
error << string_compose (_("renaming %1 as %2 failed (%3)"), oldstr, newstr, g_strerror (errno)) << endmsg;
return 1;
}
}
+ /* remove old name from recent sessions */
+ remove_recent_sessions (_path);
+ _path = new_path;
+
/* update file source paths */
for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) {
@@ -3779,26 +3845,15 @@ Session::rename (const std::string& new_name)
}
}
- /* remove old name from recent sessions */
-
- remove_recent_sessions (_path);
-
- _path = newpath;
_current_snapshot_name = new_name;
_name = new_name;
-
- /* re-add directory separator - reverse hack to oldstr above */
- if (_path[_path.length()-1] != G_DIR_SEPARATOR) {
- _path += G_DIR_SEPARATOR;
- }
-
+
set_dirty ();
/* save state again to get everything just right */
save_state (_current_snapshot_name);
-
/* add to recent sessions */
store_recent_sessions (new_name, _path);
@@ -3898,7 +3953,6 @@ Session::bring_all_sources_into_session (boost::function<void(uint32_t,uint32_t,
}
if (fs->within_session()) {
- cerr << "skip " << fs->name() << endl;
continue;
}
@@ -3933,9 +3987,14 @@ Session::bring_all_sources_into_session (boost::function<void(uint32_t,uint32_t,
break;
case DataType::MIDI:
+ /* XXX not implemented yet */
break;
}
+ if (new_path.empty()) {
+ continue;
+ }
+
cerr << "Move " << old_path << " => " << new_path << endl;
if (!copy_file (old_path, new_path)) {
@@ -3959,3 +4018,430 @@ Session::bring_all_sources_into_session (boost::function<void(uint32_t,uint32_t,
return ret;
}
+
+static
+bool accept_all_files (string const &, void *)
+{
+ return true;
+}
+
+void
+Session::save_as_bring_callback (uint32_t,uint32_t,string)
+{
+ /* It would be good if this did something useful vis-a-vis save-as, but the arguments doesn't provide the correct information right now to do this.
+ */
+}
+
+static string
+make_new_media_path (string old_path, string new_session_folder, string new_session_path)
+{
+ /* typedir is the "midifiles" or "audiofiles" etc. part of the path. */
+
+ string typedir = Glib::path_get_basename (Glib::path_get_dirname (old_path));
+ vector<string> v;
+ v.push_back (new_session_folder); /* full path */
+ v.push_back (interchange_dir_name);
+ v.push_back (new_session_path); /* just one directory/folder */
+ v.push_back (typedir);
+ v.push_back (Glib::path_get_basename (old_path));
+
+ return Glib::build_filename (v);
+}
+
+int
+Session::save_as (SaveAs& saveas)
+{
+ vector<string> files;
+ string current_folder = Glib::path_get_dirname (_path);
+ string new_folder = legalize_for_path (saveas.new_name);
+ string to_dir = Glib::build_filename (saveas.new_parent_folder, new_folder);
+ int64_t total_bytes = 0;
+ int64_t copied = 0;
+ int64_t cnt = 0;
+ int64_t all = 0;
+ int32_t internal_file_cnt = 0;
+
+ vector<string> do_not_copy_extensions;
+ do_not_copy_extensions.push_back (statefile_suffix);
+ do_not_copy_extensions.push_back (pending_suffix);
+ do_not_copy_extensions.push_back (backup_suffix);
+ do_not_copy_extensions.push_back (temp_suffix);
+ do_not_copy_extensions.push_back (history_suffix);
+
+ /* get total size */
+
+ for (vector<space_and_path>::const_iterator sd = session_dirs.begin(); sd != session_dirs.end(); ++sd) {
+
+ /* need to clear this because
+ * find_files_matching_filter() is cumulative
+ */
+
+ files.clear ();
+
+ find_files_matching_filter (files, (*sd).path, accept_all_files, 0, false, true, true);
+
+ all += files.size();
+
+ for (vector<string>::iterator i = files.begin(); i != files.end(); ++i) {
+ GStatBuf gsb;
+ g_stat ((*i).c_str(), &gsb);
+ total_bytes += gsb.st_size;
+ }
+ }
+
+ /* save old values so we can switch back if we are not switching to the new session */
+
+ string old_path = _path;
+ string old_name = _name;
+ string old_snapshot = _current_snapshot_name;
+ string old_sd = _session_dir->root_path();
+ vector<string> old_search_path[DataType::num_types];
+ string old_config_search_path[DataType::num_types];
+
+ old_search_path[DataType::AUDIO] = source_search_path (DataType::AUDIO);
+ old_search_path[DataType::MIDI] = source_search_path (DataType::MIDI);
+ old_config_search_path[DataType::AUDIO] = config.get_audio_search_path ();
+ old_config_search_path[DataType::MIDI] = config.get_midi_search_path ();
+
+ /* switch session directory */
+
+ (*_session_dir) = to_dir;
+
+ /* create new tree */
+
+ if (!_session_dir->create()) {
+ saveas.failure_message = string_compose (_("Cannot create new session folder %1"), to_dir);
+ return -1;
+ }
+
+ try {
+ /* copy all relevant files. Find each location in session_dirs,
+ * and copy files from there to target.
+ */
+
+ for (vector<space_and_path>::const_iterator sd = session_dirs.begin(); sd != session_dirs.end(); ++sd) {
+
+ /* need to clear this because
+ * find_files_matching_filter() is cumulative
+ */
+
+ files.clear ();
+
+ const size_t prefix_len = (*sd).path.size();
+
+ /* Work just on the files within this session dir */
+
+ find_files_matching_filter (files, (*sd).path, accept_all_files, 0, false, true, true);
+
+ /* add dir separator to protect against collisions with
+ * track names (e.g. track named "audiofiles" or
+ * "analysis".
+ */
+
+ static const std::string audiofile_dir_string = string (sound_dir_name) + G_DIR_SEPARATOR;
+ static const std::string midifile_dir_string = string (midi_dir_name) + G_DIR_SEPARATOR;
+ static const std::string analysis_dir_string = analysis_dir() + G_DIR_SEPARATOR;
+
+ /* copy all the files. Handling is different for media files
+ than others because of the *silly* subtree we have below the interchange
+ folder. That really was a bad idea, but I'm not fixing it as part of
+ implementing ::save_as().
+ */
+
+ for (vector<string>::iterator i = files.begin(); i != files.end(); ++i) {
+
+ std::string from = *i;
+
+ if ((*i).find (audiofile_dir_string) != string::npos) {
+
+ /* audio file: only copy if asked */
+
+ if (saveas.include_media && saveas.copy_media) {
+
+ string to = make_new_media_path (*i, to_dir, new_folder);
+
+ info << "media file copying from " << from << " to " << to << endmsg;
+
+ if (!copy_file (from, to)) {
+ throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
+ }
+ }
+
+ /* we found media files inside the session folder */
+
+ internal_file_cnt++;
+
+ } else if ((*i).find (midifile_dir_string) != string::npos) {
+
+ /* midi file: always copy unless
+ * creating an empty new session
+ */
+
+ if (saveas.include_media) {
+
+ string to = make_new_media_path (*i, to_dir, new_folder);
+
+ info << "media file copying from " << from << " to " << to << endmsg;
+
+ if (!copy_file (from, to)) {
+ throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
+ }
+ }
+
+ /* we found media files inside the session folder */
+
+ internal_file_cnt++;
+
+ } else if ((*i).find (analysis_dir_string) != string::npos) {
+
+ /* make sure analysis dir exists in
+ * new session folder, but we're not
+ * copying analysis files here, see
+ * below
+ */
+
+ (void) g_mkdir_with_parents (analysis_dir().c_str(), 775);
+ continue;
+
+ } else {
+
+ /* normal non-media file. Don't copy state, history, etc.
+ */
+
+ bool do_copy = true;
+
+ for (vector<string>::iterator v = do_not_copy_extensions.begin(); v != do_not_copy_extensions.end(); ++v) {
+ if (((*i).length() > (*v).length()) && ((*i).find (*v) == (*i).length() - (*v).length())) {
+ /* end of filename matches extension, do not copy file */
+ do_copy = false;
+ break;
+ }
+ }
+
+ if (!saveas.copy_media && (*i).find (peakfile_suffix) != string::npos) {
+ /* don't copy peakfiles if
+ * we're not copying media
+ */
+ do_copy = false;
+ }
+
+ if (do_copy) {
+ string to = Glib::build_filename (to_dir, (*i).substr (prefix_len));
+
+ info << "attempting to make directory/folder " << to << endmsg;
+
+ if (g_mkdir_with_parents (Glib::path_get_dirname (to).c_str(), 0755)) {
+ throw Glib::FileError (Glib::FileError::IO_ERROR, "cannot create required directory");
+ }
+
+ info << "attempting to copy " << from << " to " << to << endmsg;
+
+ if (!copy_file (from, to)) {
+ throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
+ }
+ }
+ }
+
+ /* measure file size even if we're not going to copy so that our Progress
+ signals are correct, since we included these do-not-copy files
+ in the computation of the total size and file count.
+ */
+
+ GStatBuf gsb;
+ g_stat ((*i).c_str(), &gsb);
+ copied += gsb.st_size;
+ cnt++;
+
+ double fraction = (double) copied / total_bytes;
+
+ bool keep_going = true;
+
+ if (saveas.copy_media) {
+
+ /* no need or expectation of this if
+ * media is not being copied, because
+ * it will be fast(ish).
+ */
+
+ /* tell someone "X percent, file M of N"; M is one-based */
+
+ boost::optional<bool> res = saveas.Progress (fraction, cnt, all);
+
+ if (res) {
+ keep_going = *res;
+ }
+ }
+
+ if (!keep_going) {
+ throw Glib::FileError (Glib::FileError::FAILED, "copy cancelled");
+ }
+ }
+
+ }
+
+ /* copy optional folders, if any */
+
+ string old = plugins_dir ();
+ if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
+ string newdir = Glib::build_filename (to_dir, Glib::path_get_basename (old));
+ copy_files (old, newdir);
+ }
+
+ old = externals_dir ();
+ if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
+ string newdir = Glib::build_filename (to_dir, Glib::path_get_basename (old));
+ copy_files (old, newdir);
+ }
+
+ old = automation_dir ();
+ if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
+ string newdir = Glib::build_filename (to_dir, Glib::path_get_basename (old));
+ copy_files (old, newdir);
+ }
+
+ if (saveas.include_media) {
+
+ if (saveas.copy_media) {
+#ifndef PLATFORM_WINDOWS
+ /* There are problems with analysis files on
+ * Windows, because they used a colon in their
+ * names as late as 4.0. Colons are not legal
+ * under Windows even if NTFS allows them.
+ *
+ * This is a tricky problem to solve so for
+ * just don't copy these files. They will be
+ * regenerated as-needed anyway, subject to the
+ * existing issue that the filenames will be
+ * rejected by Windows, which is a separate
+ * problem (though related).
+ */
+
+ /* only needed if we are copying media, since the
+ * analysis data refers to media data
+ */
+
+ old = analysis_dir ();
+ if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
+ string newdir = Glib::build_filename (to_dir, "analysis");
+ copy_files (old, newdir);
+ }
+#endif /* PLATFORM_WINDOWS */
+ }
+ }
+
+
+ _path = to_dir;
+ _current_snapshot_name = saveas.new_name;
+ _name = saveas.new_name;
+
+ if (saveas.include_media && !saveas.copy_media) {
+
+ /* reset search paths of the new session (which we're pretending to be right now) to
+ include the original session search path, so we can still find all audio.
+ */
+
+ if (internal_file_cnt) {
+ for (vector<string>::iterator s = old_search_path[DataType::AUDIO].begin(); s != old_search_path[DataType::AUDIO].end(); ++s) {
+ ensure_search_path_includes (*s, DataType::AUDIO);
+ }
+
+ /* we do not do this for MIDI because we copy
+ all MIDI files if saveas.include_media is
+ true
+ */
+ }
+ }
+
+ bool was_dirty = dirty ();
+
+ save_state ("", false, false, !saveas.include_media);
+ save_default_options ();
+
+ if (saveas.copy_media && saveas.copy_external) {
+ if (bring_all_sources_into_session (boost::bind (&Session::save_as_bring_callback, this, _1, _2, _3))) {
+ throw Glib::FileError (Glib::FileError::NO_SPACE_LEFT, "consolidate failed");
+ }
+ }
+
+ saveas.final_session_folder_name = _path;
+
+ if (!saveas.switch_to) {
+
+ /* switch back to the way things were */
+
+ _path = old_path;
+ _name = old_name;
+ _current_snapshot_name = old_snapshot;
+
+ (*_session_dir) = old_sd;
+
+ if (was_dirty) {
+ set_dirty ();
+ }
+
+ if (internal_file_cnt) {
+ /* reset these to their original values */
+ config.set_audio_search_path (old_config_search_path[DataType::AUDIO]);
+ config.set_midi_search_path (old_config_search_path[DataType::MIDI]);
+ }
+
+ } else {
+
+ /* prune session dirs, and update disk space statistics
+ */
+
+ space_and_path sp;
+ sp.path = _path;
+ session_dirs.clear ();
+ session_dirs.push_back (sp);
+ refresh_disk_space ();
+
+ /* ensure that all existing tracks reset their current capture source paths
+ */
+ reset_write_sources (true, true);
+
+ /* the copying above was based on actually discovering files, not just iterating over the sources list.
+ But if we're going to switch to the new (copied) session, we need to change the paths in the sources also.
+ */
+
+ for (SourceMap::const_iterator i = sources.begin(); i != sources.end(); ++i) {
+ boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource> (i->second);
+
+ if (!fs) {
+ continue;
+ }
+
+ if (fs->within_session()) {
+ string newpath = make_new_media_path (fs->path(), to_dir, new_folder);
+ fs->set_path (newpath);
+ }
+ }
+ }
+
+ } catch (Glib::FileError& e) {
+
+ saveas.failure_message = e.what();
+
+ /* recursively remove all the directories */
+
+ remove_directory (to_dir);
+
+ /* return error */
+
+ return -1;
+
+ } catch (...) {
+
+ saveas.failure_message = _("unknown reason");
+
+ /* recursively remove all the directories */
+
+ remove_directory (to_dir);
+
+ /* return error */
+
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index b392dab..d5adbc5 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -1806,6 +1806,8 @@ Session::engine_halted ()
void
Session::xrun_recovery ()
{
+ ++_xrun_count;
+
Xrun (_transport_frame); /* EMIT SIGNAL */
if (Config->get_stop_recording_on_xrun() && actively_recording()) {
@@ -1826,6 +1828,12 @@ Session::route_processors_changed (RouteProcessorChange c)
}
if (c.type == RouteProcessorChange::MeterPointChange) {
+ set_dirty ();
+ return;
+ }
+
+ if (c.type == RouteProcessorChange::RealTimeChange) {
+ set_dirty ();
return;
}
diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc
index d5c89b5..cc547ed 100644
--- a/libs/ardour/smf_source.cc
+++ b/libs/ardour/smf_source.cc
@@ -202,6 +202,12 @@ SMFSource::open_for_write ()
return 0;
}
+void
+SMFSource::close ()
+{
+ /* nothing to do: file descriptor is never kept open */
+}
+
/** All stamps in audio frames */
framecnt_t
SMFSource::read_unlocked (const Lock& lock,
@@ -546,7 +552,7 @@ SMFSource::mark_midi_streaming_write_completed (const Lock& lm, Evoral::Sequence
_model->set_edited(false);
}
- Evoral::SMF::end_write ();
+ Evoral::SMF::end_write (_path);
/* data in the file now, not removable */
@@ -726,7 +732,7 @@ SMFSource::flush_midi (const Lock& lock)
ensure_disk_file (lock);
- Evoral::SMF::end_write ();
+ Evoral::SMF::end_write (_path);
/* data in the file means its no longer removable */
mark_nonremovable ();
@@ -737,7 +743,6 @@ void
SMFSource::set_path (const string& p)
{
FileSource::set_path (p);
- SMF::set_path (_path);
}
/** Ensure that this source has some file on disk, even if it's just a SMF header */
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index cc6cfdb..5acfe7b 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -180,7 +180,7 @@ SndFileSource::SndFileSource (Session& s, const string& path, const string& orig
throw failed_constructor();
}
} else {
- /* normal mode: do not open the file here - do that in write_unlocked() as needed
+ /* normal mode: do not open the file here - do that in {read,write}_unlocked() as needed
*/
}
}
@@ -230,6 +230,15 @@ SndFileSource::init_sndfile ()
AudioFileSource::HeaderPositionOffsetChanged.connect_same_thread (header_position_connection, boost::bind (&SndFileSource::handle_header_position_change, this));
}
+void
+SndFileSource::close ()
+{
+ if (_sndfile) {
+ sf_close (_sndfile);
+ _sndfile = 0;
+ }
+}
+
int
SndFileSource::open ()
{
@@ -334,10 +343,7 @@ SndFileSource::open ()
SndFileSource::~SndFileSource ()
{
- if (_sndfile) {
- sf_close (_sndfile);
- _sndfile = 0;
- }
+ close ();
delete _broadcast_info;
delete [] xfade_buf;
}
@@ -364,10 +370,10 @@ SndFileSource::read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) con
return cnt;
}
- if (_sndfile == 0) {
- error << string_compose (_("could not allocate file %1 for reading."), _path) << endmsg;
+ if (const_cast<SndFileSource*>(this)->open()) {
+ error << string_compose (_("could not open file %1 for reading."), _path) << endmsg;
return 0;
- }
+ }
if (start > _length) {
diff --git a/libs/ardour/srcfilesource.cc b/libs/ardour/srcfilesource.cc
index e54afbf..276a31e 100644
--- a/libs/ardour/srcfilesource.cc
+++ b/libs/ardour/srcfilesource.cc
@@ -84,6 +84,15 @@ SrcFileSource::~SrcFileSource ()
delete [] _src_buffer;
}
+void
+SrcFileSource::close ()
+{
+ boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource> (_source);
+ if (fs) {
+ fs->close ();
+ }
+}
+
framecnt_t
SrcFileSource::read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const
{
diff --git a/libs/ardour/sse_functions_64bit.s b/libs/ardour/sse_functions_64bit_win.s
similarity index 77%
copy from libs/ardour/sse_functions_64bit.s
copy to libs/ardour/sse_functions_64bit_win.s
index 0242db3..78c5093 100644
--- a/libs/ardour/sse_functions_64bit.s
+++ b/libs/ardour/sse_functions_64bit_win.s
@@ -21,14 +21,23 @@
$Id$
*/
+#; Microsoft version of SSE sample processing functions
#; void x86_sse_mix_buffers_with_gain (float *dst, float *src, unsigned int nframes, float gain);
.globl x86_sse_mix_buffers_with_gain
- .type x86_sse_mix_buffers_with_gain, at function
+ .def x86_sse_mix_buffers_with_gain; .scl 2; .type 32;
+.endef
x86_sse_mix_buffers_with_gain:
+#; due to Microsoft calling convention
+#; %rcx float *dst
+#; %rdx float *src
+#; %r8 unsigned int nframes
+#; %xmm3 float gain
+
+#; due to System V AMD64 (Linux) calling convention
#; %rdi float *dst
#; %rsi float *src
#; %rdx unsigned int nframes
@@ -38,10 +47,18 @@ x86_sse_mix_buffers_with_gain:
movq %rsp, %rbp
#; save the registers
- pushq %rbx
- pushq %rdi
- pushq %rsi
-
+ pushq %rbx #; must be preserved
+ pushq %rcx
+ pushq %rdx
+ pushq %rdi #; must be preserved
+ pushq %rsi #; must be preserved
+
+ #; to keep algorithms universal - move input params into Linux specific registers
+ movq %rcx, %rdi
+ movq %rdx, %rsi
+ movq %r8, %rdx
+ movss %xmm3, %xmm0
+
#; if nframes == 0, go to end
cmp $0, %rdx
je .MBWG_END
@@ -134,22 +151,29 @@ x86_sse_mix_buffers_with_gain:
popq %rsi
popq %rdi
+ popq %rdx
+ popq %rcx
popq %rbx
-
+
#; return
leave
ret
-.size x86_sse_mix_buffers_with_gain, .-x86_sse_mix_buffers_with_gain
-
#; void x86_sse_mix_buffers_no_gain (float *dst, float *src, unsigned int nframes);
.globl x86_sse_mix_buffers_no_gain
- .type x86_sse_mix_buffers_no_gain, at function
+ .def x86_sse_mix_buffers_no_gain; .scl 2; .type 32;
+.endef
x86_sse_mix_buffers_no_gain:
+#; due to Microsoft calling convention
+#; %rcx float *dst
+#; %rdx float *src
+#; %r8 unsigned int nframes
+
+#; due to System V AMD64 (Linux) calling convention
#; %rdi float *dst
#; %rsi float *src
#; %rdx unsigned int nframes
@@ -158,14 +182,21 @@ x86_sse_mix_buffers_no_gain:
movq %rsp, %rbp
#; save the registers
- pushq %rbx
- pushq %rdi
- pushq %rsi
+ pushq %rbx #; must be preserved
+ pushq %rcx
+ pushq %rdx
+ pushq %rdi #; must be preserved
+ pushq %rsi #; must be preserved
+ #; to keep algorithms universal - move input params into Linux specific registers
+ movq %rcx, %rdi
+ movq %rdx, %rsi
+ movq %r8, %rdx
+
#; the real function
#; if nframes == 0, go to end
- cmp $0, %rdx
+ cmp $0, %r8
je .MBNG_END
#; Check for alignment
@@ -241,34 +272,49 @@ x86_sse_mix_buffers_no_gain:
popq %rsi
popq %rdi
+ popq %rdx
+ popq %rcx
popq %rbx
-
+
#; return
leave
ret
-.size x86_sse_mix_buffers_no_gain, .-x86_sse_mix_buffers_no_gain
-
#; void x86_sse_apply_gain_to_buffer (float *buf, unsigned int nframes, float gain);
.globl x86_sse_apply_gain_to_buffer
- .type x86_sse_apply_gain_to_buffer, at function
+ .def x86_sse_apply_gain_to_buffer; .scl 2; .type 32;
+.endef
x86_sse_apply_gain_to_buffer:
-#; %rdi float *buf 32(%rbp)
+#; due to Microsoft calling convention
+#; %rcx float *buf 32(%rbp)
+#; %rdx unsigned int nframes
+#; %xmm2 float gain
+#; %xmm1 float buf[0]
+
+#; due to System V AMD64 (Linux) calling convention
+#; %rdi float *buf 32(%rbp)
#; %rsi unsigned int nframes
-#; %xmm0 float gain
-#; %xmm1 float buf[0]
+#; %xmm0 float gain
+#; %xmm1 float buf[0]
pushq %rbp
movq %rsp, %rbp
- #; save %rdi
- pushq %rdi
-
- #; the real function
+ #; save the registers
+ pushq %rcx
+ pushq %rdi #; must be preserved
+ pushq %rsi #; must be preserved
+
+ #; to keep algorithms universal - move input params into Linux specific registers
+ movq %rcx, %rdi
+ movq %rdx, %rsi
+ movss %xmm2, %xmm0
+
+ #; the real function
#; if nframes == 0, go to end
movq %rsi, %rcx #; nframes
@@ -300,7 +346,7 @@ x86_sse_apply_gain_to_buffer:
decq %rcx #; nframes--
jz .AG_END #; if we run out of frames, we go to the end
-
+
addq $4, %rdx #; one non-aligned byte less
cmp $16, %rdx
jne .AGLP_START #; if more non-aligned frames exist, we do a do-over
@@ -311,26 +357,20 @@ x86_sse_apply_gain_to_buffer:
#; Figure out how many loops we should do
movq %rcx, %rax #; copy remaining nframes to %rax for division
- movq $0, %rdx #; 0 the edx register
-
-
- pushq %rdi
- movq $4, %rdi
- divq %rdi #; %rdx = remainder == 0
- popq %rdi
+
+ shr $2,%rax #; unsigned divide by 4
#; %rax = SSE iterations
cmp $0, %rax
je .AGPOST_START
-
.AGLP_SSE:
movaps (%rdi), %xmm1
mulps %xmm0, %xmm1
movaps %xmm1, (%rdi)
- addq $16, %rdi
+ addq $16, %rdi #; buf + 4
subq $4, %rcx #; nframes-=4
decq %rax
@@ -339,10 +379,8 @@ x86_sse_apply_gain_to_buffer:
#; Next we need to post-process all remaining frames
#; the remaining frame count is in %rcx
- #; if no remaining frames, jump to the end
- cmp $0, %rcx
andq $3, %rcx #; nframes % 4
- je .AG_END
+ jz .AG_END
.AGPOST_START:
@@ -358,24 +396,32 @@ x86_sse_apply_gain_to_buffer:
.AG_END:
-
+ popq %rsi
popq %rdi
-
+ popq %rcx
+
#; return
leave
ret
-.size x86_sse_apply_gain_to_buffer, .-x86_sse_apply_gain_to_buffer
#; end proc
#; x86_sse_apply_gain_vector(float *buf, float *gain_vector, unsigned int nframes)
.globl x86_sse_apply_gain_vector
- .type x86_sse_apply_gain_vector, at function
+ .def x86_sse_apply_gain_vector; .scl 2; .type 32;
+.endef
+
x86_sse_apply_gain_vector:
+#; due to Microsoft calling convention
+#; %rcx float *buf
+#; %rdx float *gain_vector
+#; %r8 unsigned int nframes
+
+#; due to System V AMD64 (Linux) calling convention
#; %rdi float *buf
#; %rsi float *gain_vector
#; %rdx unsigned int nframes
@@ -383,10 +429,17 @@ x86_sse_apply_gain_vector:
pushq %rbp
movq %rsp, %rbp
- #; Save registers
- pushq %rdi
- pushq %rsi
- pushq %rbx
+ #; save the registers
+ pushq %rbx #; must be preserved
+ pushq %rcx
+ pushq %rdx
+ pushq %rdi #; must be preserved
+ pushq %rsi #; must be preserved
+
+ #; to keep algorithms universal - move input params into Linux specific registers
+ movq %rcx, %rdi
+ movq %rdx, %rsi
+ movq %r8, %rdx
#; if nframes == 0 go to end
cmp $0, %rdx
@@ -431,7 +484,7 @@ x86_sse_apply_gain_vector:
movq %rdx, %rax #; nframes => %rax
shr $2, %rax #; unsigned divide by 4
- cmp $0, %rax #; Jos toimii ilman tätä, niin kiva
+ cmp $0, %rax
je .AGA_ENDLOOP
.AGA_SSELOOP:
@@ -466,36 +519,52 @@ x86_sse_apply_gain_vector:
.AGA_END:
- popq %rbx
popq %rsi
popq %rdi
+ popq %rdx
+ popq %rcx
+ popq %rbx
leave
ret
-.size x86_sse_apply_gain_vector, .-x86_sse_apply_gain_vector
#; end proc
#; float x86_sse_compute_peak(float *buf, long nframes, float current);
.globl x86_sse_compute_peak
- .type x86_sse_compute_peak, at function
+ .def x86_sse_compute_peak; .scl 2; .type 32;
+.endef
x86_sse_compute_peak:
-#; %rdi float *buf 32(%rbp)
+#; due to Microsoft calling convention
+#; %rcx float* buf 32(%rbp)
+#; %rdx unsigned int nframes
+#; %xmm2 float current
+#; %xmm1 float buf[0]
+
+#; due to System V AMD64 (Linux) calling convention
+#; %rdi float* buf 32(%rbp)
#; %rsi unsigned int nframes
-#; %xmm0 float current
-#; %xmm1 float buf[0]
+#; %xmm0 float current
+#; %xmm1 float buf[0]
pushq %rbp
movq %rsp, %rbp
- #; save %rdi
- pushq %rdi
-
+ #; save registers
+ pushq %rcx
+ pushq %rdi #; must be preserved
+ pushq %rsi #; must be preserved
+
+ #; to keep algorithms universal - move input params into Linux specific registers
+ movq %rcx, %rdi
+ movq %rdx, %rsi
+ movss %xmm2, %xmm0
+
#; if nframes == 0, go to end
movq %rsi, %rcx #; nframes
cmp $0, %rcx
@@ -560,6 +629,8 @@ x86_sse_compute_peak:
addq $16, %rdi
+ subq $4, %rcx #; nframes-=4
+
decq %rax
jnz .LP_SSE
@@ -594,16 +665,15 @@ x86_sse_compute_peak:
.CP_END:
+ #; restore registers
+ popq %rsi
popq %rdi
-
+ popq %rcx
+
+ #; return value is in xmm0
+
#; return
leave
ret
-.size x86_sse_compute_peak, .-x86_sse_compute_peak
-#; end proc
-
-#ifdef __ELF__
-.section .note.GNU-stack,"",%progbits
-#endif
-
+#; end proc
\ No newline at end of file
diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc
index 521b911..244c050 100644
--- a/libs/ardour/tempo.cc
+++ b/libs/ardour/tempo.cc
@@ -1620,6 +1620,33 @@ TempoMap::tempo_at (framepos_t frame) const
return m.tempo();
}
+const MeterSection&
+TempoMap::meter_section_at (framepos_t frame) const
+{
+ Glib::Threads::RWLock::ReaderLock lm (lock);
+ Metrics::const_iterator i;
+ MeterSection* prev = 0;
+
+ for (i = metrics.begin(); i != metrics.end(); ++i) {
+ MeterSection* t;
+
+ if ((t = dynamic_cast<MeterSection*> (*i)) != 0) {
+
+ if ((*i)->frame() > frame) {
+ break;
+ }
+
+ prev = t;
+ }
+ }
+
+ if (prev == 0) {
+ fatal << endmsg;
+ abort(); /*NOTREACHED*/
+ }
+
+ return *prev;
+}
const Meter&
TempoMap::meter_at (framepos_t frame) const
@@ -1710,11 +1737,13 @@ TempoMap::set_state (const XMLNode& node, int /*version*/)
if (prev != metrics.end()) {
if (dynamic_cast<MeterSection*>(*prev) && dynamic_cast<MeterSection*>(*i)) {
if ((*prev)->start() == (*i)->start()) {
+ cerr << string_compose (_("Multiple meter definitions found at %1"), (*prev)->start()) << endmsg;
error << string_compose (_("Multiple meter definitions found at %1"), (*prev)->start()) << endmsg;
return -1;
}
} else if (dynamic_cast<TempoSection*>(*prev) && dynamic_cast<TempoSection*>(*i)) {
if ((*prev)->start() == (*i)->start()) {
+ cerr << string_compose (_("Multiple tempo definitions found at %1"), (*prev)->start()) << endmsg;
error << string_compose (_("Multiple tempo definitions found at %1"), (*prev)->start()) << endmsg;
return -1;
}
@@ -1873,6 +1902,58 @@ TempoMap::insert_time (framepos_t where, framecnt_t amount)
PropertyChanged (PropertyChange ());
}
+bool
+TempoMap::cut_time (framepos_t where, framecnt_t amount)
+{
+ bool moved = false;
+
+ std::list<MetricSection*> metric_kill_list;
+
+ TempoSection* last_tempo = NULL;
+ MeterSection* last_meter = NULL;
+ {
+ Glib::Threads::RWLock::WriterLock lm (lock);
+ for (Metrics::iterator i = metrics.begin(); i != metrics.end(); ++i) {
+ if ((*i)->frame() >= where && (*i)->frame() < where+amount) {
+ metric_kill_list.push_back(*i);
+ TempoSection *lt = dynamic_cast<TempoSection*> (*i);
+ if (lt)
+ last_tempo = lt;
+ MeterSection *lm = dynamic_cast<MeterSection*> (*i);
+ if (lm)
+ last_meter = lm;
+ }
+ else if ((*i)->frame() >= where) {
+ (*i)->set_frame ((*i)->frame() - amount);
+ moved = true;
+ }
+ }
+
+ //find the last TEMPO and METER metric (if any) and move it to the cut point so future stuff is correct
+ if (last_tempo) {
+ metric_kill_list.remove(last_tempo);
+ last_tempo->set_frame(where);
+ moved = true;
+ }
+ if (last_meter) {
+ metric_kill_list.remove(last_meter);
+ last_meter->set_frame(where);
+ moved = true;
+ }
+
+ //remove all the remaining metrics
+ for (std::list<MetricSection*>::iterator i = metric_kill_list.begin(); i != metric_kill_list.end(); ++i) {
+ metrics.remove(*i);
+ moved = true;
+ }
+
+ if (moved) {
+ recompute_map (true);
+ }
+ }
+ PropertyChanged (PropertyChange ());
+ return moved;
+}
/** Add some (fractional) beats to a session frame position, and return the result in frames.
* pos can be -ve, if required.
diff --git a/libs/ardour/thread_buffers.cc b/libs/ardour/thread_buffers.cc
index b51576b..2336ee5 100644
--- a/libs/ardour/thread_buffers.cc
+++ b/libs/ardour/thread_buffers.cc
@@ -33,6 +33,7 @@ ThreadBuffers::ThreadBuffers ()
, route_buffers (new BufferSet)
, mix_buffers (new BufferSet)
, gain_automation_buffer (0)
+ , trim_automation_buffer (0)
, send_gain_automation_buffer (0)
, pan_automation_buffer (0)
, npan_buffers (0)
@@ -79,6 +80,8 @@ ThreadBuffers::ensure_buffers (ChanCount howmany, size_t custom)
delete [] gain_automation_buffer;
gain_automation_buffer = new gain_t[audio_buffer_size];
+ delete [] trim_automation_buffer;
+ trim_automation_buffer = new gain_t[audio_buffer_size];
delete [] send_gain_automation_buffer;
send_gain_automation_buffer = new gain_t[audio_buffer_size];
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 1426c39..92ea993 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -232,6 +232,10 @@ Track::can_record()
void
Track::prep_record_enabled (bool yn, void *src)
{
+ if (yn && record_safe ()) {
+ return;
+ }
+
if (!_session.writable()) {
return;
}
@@ -272,6 +276,10 @@ Track::prep_record_enabled (bool yn, void *src)
void
Track::set_record_enabled (bool yn, void *src)
{
+ if (_diskstream->record_safe ()) {
+ return;
+ }
+
if (!_session.writable()) {
return;
}
@@ -290,6 +298,31 @@ Track::set_record_enabled (bool yn, void *src)
_rec_enable_control->Changed ();
}
+bool
+Track::record_safe () const
+{
+ return _diskstream && _diskstream->record_safe ();
+}
+
+void
+Track::set_record_safe (bool yn, void *src)
+{
+ if (!_session.writable()) { /* REQUIRES REVIEW */
+ return;
+ }
+
+ if (_freeze_record.state == Frozen) { /* REQUIRES REVIEW */
+ return;
+ }
+
+ if (_route_group && src != _route_group && _route_group->is_active() && _route_group->is_recenable()) {
+ _route_group->apply (&Track::set_record_safe, yn, _route_group);
+ return;
+ }
+
+ _diskstream->set_record_safe (yn);
+}
+
void
Track::parameter_changed (string const & p)
{
@@ -558,6 +591,7 @@ Track::set_diskstream (boost::shared_ptr<Diskstream> ds)
ds->PlaylistChanged.connect_same_thread (*this, boost::bind (&Track::diskstream_playlist_changed, this));
diskstream_playlist_changed ();
ds->RecordEnableChanged.connect_same_thread (*this, boost::bind (&Track::diskstream_record_enable_changed, this));
+ ds->RecordSafeChanged.connect_same_thread (*this, boost::bind (&Track::diskstream_record_safe_changed, this));
ds->SpeedChanged.connect_same_thread (*this, boost::bind (&Track::diskstream_speed_changed, this));
ds->AlignmentStyleChanged.connect_same_thread (*this, boost::bind (&Track::diskstream_alignment_style_changed, this));
}
@@ -575,6 +609,12 @@ Track::diskstream_record_enable_changed ()
}
void
+Track::diskstream_record_safe_changed ()
+{
+ RecordSafeChanged (); /* EMIT SIGNAL */
+}
+
+void
Track::diskstream_speed_changed ()
{
SpeedChanged (); /* EMIT SIGNAL */
diff --git a/libs/ardour/vst_info_file.cc b/libs/ardour/vst_info_file.cc
index 2d68421..3b56876 100644
--- a/libs/ardour/vst_info_file.cc
+++ b/libs/ardour/vst_info_file.cc
@@ -351,9 +351,15 @@ vstfx_write_info_file (FILE* fp, vector<VSTInfo *> *infos)
static bool
vstfx_blacklist_stat (const char *dllpath, int personal)
{
- if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
+ const size_t slen = strlen (dllpath);
+ if (
+ (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+ &&
+ (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+ ) {
return true;
}
+
string const path = vstfx_blacklist_path (dllpath, personal);
if (Glib::file_test (path, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR))) {
@@ -435,7 +441,12 @@ vstfx_remove_infofile (const char *dllpath)
static char *
vstfx_infofile_stat (const char *dllpath, struct stat* statbuf, int personal)
{
- if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
+ const size_t slen = strlen (dllpath);
+ if (
+ (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+ &&
+ (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+ ) {
return 0;
}
@@ -494,8 +505,13 @@ vstfx_infofile_for_read (const char* dllpath)
static FILE *
vstfx_infofile_create (const char* dllpath, int personal)
{
- if (strstr (dllpath, ".so" ) == 0 && strstr(dllpath, ".dll") == 0) {
- return 0;
+ const size_t slen = strlen (dllpath);
+ if (
+ (slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+ &&
+ (slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+ ) {
+ return NULL;
}
string const path = vstfx_infofile_path (dllpath, personal);
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 41d0edc..918408c 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -408,6 +408,12 @@ def build(bld):
obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s' ]
elif bld.env['build_target'] == 'x86_64':
obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s' ]
+ elif bld.env['build_target'] == 'mingw':
+ # usability of the 64 bit windows assembler depends on the compiler target,
+ # not the build host, which in turn can only be inferred from the name
+ # of the compiler.
+ if re.search ('/^x86_64/', str(bld.env['CC'])):
+ obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit_win.s' ]
# i18n
if bld.is_defined('ENABLE_NLS'):
diff --git a/libs/ardouralsautil/ardouralsautil/devicelist.h b/libs/ardouralsautil/ardouralsautil/devicelist.h
index 2f8c2c4..b68a44c 100644
--- a/libs/ardouralsautil/ardouralsautil/devicelist.h
+++ b/libs/ardouralsautil/ardouralsautil/devicelist.h
@@ -23,8 +23,13 @@
#include <string>
#include <map>
namespace ARDOUR {
+ enum AlsaDuplex {
+ HalfDuplexIn = 1,
+ HalfDuplexOut = 2,
+ FullDuplex = 3,
+ };
- void get_alsa_audio_device_names (std::map<std::string, std::string>& devices);
+ void get_alsa_audio_device_names (std::map<std::string, std::string>& devices, AlsaDuplex duplex = FullDuplex);
void get_alsa_rawmidi_device_names (std::map<std::string, std::string>& devices);
void get_alsa_sequencer_names (std::map<std::string, std::string>& devices);
int card_to_num(const char* device_name);
diff --git a/libs/ardouralsautil/devicelist.cc b/libs/ardouralsautil/devicelist.cc
index b20df10..3fdb140 100644
--- a/libs/ardouralsautil/devicelist.cc
+++ b/libs/ardouralsautil/devicelist.cc
@@ -24,7 +24,7 @@
using namespace std;
void
-ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices)
+ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices, AlsaDuplex duplex)
{
snd_ctl_t *handle;
snd_ctl_card_info_t *info;
@@ -35,6 +35,8 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices
int cardnum = -1;
int device = -1;
+ assert (duplex > 0);
+
while (snd_card_next (&cardnum) >= 0 && cardnum >= 0) {
devname = "hw:";
@@ -63,7 +65,7 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices
snd_pcm_info_set_subdevice (pcminfo, 0);
snd_pcm_info_set_stream (pcminfo, SND_PCM_STREAM_CAPTURE);
- if (snd_ctl_pcm_info (handle, pcminfo) < 0) {
+ if (snd_ctl_pcm_info (handle, pcminfo) < 0 && (duplex & HalfDuplexIn)) {
continue;
}
@@ -71,7 +73,7 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices
snd_pcm_info_set_subdevice (pcminfo, 0);
snd_pcm_info_set_stream (pcminfo, SND_PCM_STREAM_PLAYBACK);
- if (snd_ctl_pcm_info (handle, pcminfo) < 0) {
+ if (snd_ctl_pcm_info (handle, pcminfo) < 0 && (duplex & HalfDuplexOut)) {
continue;
}
devname += ',';
diff --git a/libs/audiographer/MSVCaudiographer/audiographer.vcproj b/libs/audiographer/MSVCaudiographer/audiographer.vcproj
index 3a80dcb..70e55fe 100644
--- a/libs/audiographer/MSVCaudiographer/audiographer.vcproj
+++ b/libs/audiographer/MSVCaudiographer/audiographer.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -122,7 +122,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -201,7 +201,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_AUDIOGRAPHER;LIBAUDIOGRAPHER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"audiographer\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/audiographer/audiographer/sndfile/tmp_file.h b/libs/audiographer/audiographer/sndfile/tmp_file.h
index 8ea676c..24caf5a 100644
--- a/libs/audiographer/audiographer/sndfile/tmp_file.h
+++ b/libs/audiographer/audiographer/sndfile/tmp_file.h
@@ -37,8 +37,8 @@ class TmpFile : public SndfileWriter<T>, public SndfileReader<T>
/* explicitly close first, some OS (yes I'm looking at you windows)
* cannot delet files that are still open
*/
- SndfileBase::close();
if (!filename.empty()) {
+ SndfileBase::close();
std::remove(filename.c_str());
}
}
diff --git a/libs/backends/MSVCbackends/dummy_audiobackend.vcproj b/libs/backends/MSVCbackends/dummy_audiobackend.vcproj
index ff839a0..f7f45c2 100644
--- a/libs/backends/MSVCbackends/dummy_audiobackend.vcproj
+++ b/libs/backends/MSVCbackends/dummy_audiobackend.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\dummy;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\dummy;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -206,7 +206,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\dummy;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_DUMMY_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_dummy\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/backends/MSVCbackends/jack_audiobackend.vcproj b/libs/backends/MSVCbackends/jack_audiobackend.vcproj
index ff37541..2c22fe8 100644
--- a/libs/backends/MSVCbackends/jack_audiobackend.vcproj
+++ b/libs/backends/MSVCbackends/jack_audiobackend.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3JackPortaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3JackPortaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3JackPortaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_JACK_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_jack\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;NO_JACK_METADATA=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj b/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
index 7036ed2..610891a 100644
--- a/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
+++ b/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -206,7 +206,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/backends/MSVCbackends/waves_audiobackend.vcproj b/libs/backends/MSVCbackends/waves_audiobackend.vcproj
index 6321fa7..06f4ae1 100644
--- a/libs/backends/MSVCbackends/waves_audiobackend.vcproj
+++ b/libs/backends/MSVCbackends/waves_audiobackend.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\wavesaudio;..\wavesaudio\wavesapi;..\wavesaudio\wavesapi\wavespublicapi;..\wavesaudio\wavesapi\devicemanager;..\wavesaudio\wavesapi\refmanager;..\wavesaudio\wavesapi\threads;..\wavesaudio\wavesapi\miscutils;..\wavesaudio\portmidi\src\pm_common;..\wavesaudio\portmidi;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3WavesPortaudio\include;..\..\..\..\support\MB3WavesPortaudio\src\hostapi\asio\ASIOSDK\common;..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\wavesaudio;..\wavesaudio\wavesapi;..\wavesaudio\wavesapi\wavespublicapi;..\wavesaudio\wavesapi\devicemanager;..\wavesaudio\wavesapi\refmanager;..\wavesaudio\wavesapi\threads;..\wavesaudio\wavesapi\miscutils;..\wavesaudio\portmidi\src\pm_common;..\wavesaudio\portmidi;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3WavesPortaudio\include;..\..\..\..\support\MB3WavesPortaudio\src\hostapi\asio\ASIOSDK\common;..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\wavesaudio;..\wavesaudio\wavesapi;..\wavesaudio\wavesapi\wavespublicapi;..\wavesaudio\wavesapi\devicemanager;..\wavesaudio\wavesapi\refmanager;..\wavesaudio\wavesapi\threads;..\wavesaudio\wavesapi\miscutils;..\wavesaudio\portmidi\src\pm_common;..\wavesaudio\portmidi;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";..\..\..\..\support\MB3WavesPortaudio\include;..\..\..\..\support\MB3WavesPortaudio\src\hostapi\asio\ASIOSDK\common;..\.."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_WAVES_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_waves\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc
index cc0054b..ab6c029 100644
--- a/libs/backends/alsa/alsa_audiobackend.cc
+++ b/libs/backends/alsa/alsa_audiobackend.cc
@@ -39,7 +39,9 @@ using namespace ARDOUR;
static std::string s_instance_name;
size_t AlsaAudioBackend::_max_buffer_size = 8192;
std::vector<std::string> AlsaAudioBackend::_midi_options;
-std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_input_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_output_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_duplex_audio_device_status;
std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_midi_device_status;
AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
@@ -51,7 +53,8 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
, _freewheeling (false)
, _measure_latency (false)
, _last_process_start (0)
- , _audio_device("")
+ , _input_audio_device("")
+ , _output_audio_device("")
, _midi_driver_option(_("None"))
, _device_reservation(0)
, _samplerate (48000)
@@ -91,14 +94,43 @@ AlsaAudioBackend::is_realtime () const
std::vector<AudioBackend::DeviceStatus>
AlsaAudioBackend::enumerate_devices () const
{
- _audio_device_status.clear();
+ _duplex_audio_device_status.clear();
std::map<std::string, std::string> devices;
get_alsa_audio_device_names(devices);
for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
- if (_audio_device == "") _audio_device = i->first;
- _audio_device_status.push_back (DeviceStatus (i->first, true));
+ if (_input_audio_device == "") _input_audio_device = i->first;
+ if (_output_audio_device == "") _output_audio_device = i->first;
+ _duplex_audio_device_status.push_back (DeviceStatus (i->first, true));
}
- return _audio_device_status;
+ return _duplex_audio_device_status;
+}
+
+std::vector<AudioBackend::DeviceStatus>
+AlsaAudioBackend::enumerate_input_devices () const
+{
+ _input_audio_device_status.clear();
+ std::map<std::string, std::string> devices;
+ get_alsa_audio_device_names(devices, HalfDuplexIn);
+ _input_audio_device_status.push_back (DeviceStatus (_("None"), true));
+ for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+ if (_input_audio_device == "") _input_audio_device = i->first;
+ _input_audio_device_status.push_back (DeviceStatus (i->first, true));
+ }
+ return _input_audio_device_status;
+}
+
+std::vector<AudioBackend::DeviceStatus>
+AlsaAudioBackend::enumerate_output_devices () const
+{
+ _output_audio_device_status.clear();
+ std::map<std::string, std::string> devices;
+ get_alsa_audio_device_names(devices, HalfDuplexOut);
+ _output_audio_device_status.push_back (DeviceStatus (_("None"), true));
+ for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+ if (_output_audio_device == "") _output_audio_device = i->first;
+ _output_audio_device_status.push_back (DeviceStatus (i->first, true));
+ }
+ return _output_audio_device_status;
}
void
@@ -235,13 +267,29 @@ AlsaAudioBackend::can_change_buffer_size_when_running () const
}
int
-AlsaAudioBackend::set_device_name (const std::string& d)
+AlsaAudioBackend::set_input_device_name (const std::string& d)
+{
+ _input_audio_device = d;
+ return 0;
+}
+
+int
+AlsaAudioBackend::set_output_device_name (const std::string& d)
{
- _audio_device = d;
+ _output_audio_device = d;
return 0;
}
int
+AlsaAudioBackend::set_device_name (const std::string& d)
+{
+ int rv = 0;
+ rv |= set_input_device_name (d);
+ rv |= set_output_device_name (d);
+ return rv;
+}
+
+int
AlsaAudioBackend::set_sample_rate (float sr)
{
if (sr <= 0) { return -1; }
@@ -321,7 +369,25 @@ AlsaAudioBackend::set_systemic_midi_output_latency (std::string const device, ui
std::string
AlsaAudioBackend::device_name () const
{
- return _audio_device;
+ if (_input_audio_device != _("None")) {
+ return _input_audio_device;
+ }
+ if (_output_audio_device != _("None")) {
+ return _output_audio_device;
+ }
+ return "";
+}
+
+std::string
+AlsaAudioBackend::input_device_name () const
+{
+ return _input_audio_device;
+}
+
+std::string
+AlsaAudioBackend::output_device_name () const
+{
+ return _output_audio_device;
}
float
@@ -516,18 +582,52 @@ AlsaAudioBackend::_start (bool for_latency_measurement)
assert(_rmidi_out.size() == 0);
assert(_pcmi == 0);
+ int duplex = 0;
+ std::string audio_device;
std::string alsa_device;
std::map<std::string, std::string> devices;
- get_alsa_audio_device_names(devices);
+
+ if (_input_audio_device == _("None") && _output_audio_device == _("None")) {
+ PBD::error << _("AlsaAudioBackend: At least one of input or output device needs to be set.");
+ return -1;
+ }
+
+ if (_input_audio_device != _output_audio_device) {
+ if (_input_audio_device != _("None") && _output_audio_device != _("None")) {
+ PBD::error << _("AlsaAudioBackend: Cannot use two different devices.");
+ return -1;
+ }
+ if (_input_audio_device != _("None")) {
+ get_alsa_audio_device_names(devices, HalfDuplexIn);
+ audio_device = _input_audio_device;
+ duplex = 1;
+ } else {
+ get_alsa_audio_device_names(devices, HalfDuplexOut);
+ audio_device = _output_audio_device;
+ duplex = 2;
+ }
+ } else {
+ get_alsa_audio_device_names(devices);
+ audio_device = _input_audio_device;
+ duplex = 3;
+ }
+
for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
- if (i->first == _audio_device) {
+ if (i->first == audio_device) {
alsa_device = i->second;
break;
}
}
+ if (alsa_device == "") {
+ PBD::error << _("AlsaAudioBackend: Cannot find configured device. Is it still connected?");
+ return -1;
+ }
acquire_device(alsa_device.c_str());
- _pcmi = new Alsa_pcmi (alsa_device.c_str(), alsa_device.c_str(), 0, _samplerate, _samples_per_period, _periods_per_cycle, 0);
+ _pcmi = new Alsa_pcmi (
+ (duplex & 2) ? alsa_device.c_str() : NULL,
+ (duplex & 1) ? alsa_device.c_str() : NULL,
+ 0, _samplerate, _samples_per_period, _periods_per_cycle, 0);
switch (_pcmi->state ()) {
case 0: /* OK */ break;
case -1: PBD::error << _("AlsaAudioBackend: failed to open device.") << endmsg; break;
@@ -675,7 +775,7 @@ AlsaAudioBackend::freewheel (bool onoff)
float
AlsaAudioBackend::dsp_load () const
{
- return 100.f * _dsp_load;
+ return std::min(100.f, 100.f * _dsp_load);
}
size_t
@@ -868,7 +968,7 @@ AlsaAudioBackend::get_ports (
}
for (size_t i = 0; i < _ports.size (); ++i) {
AlsaPort* port = _ports[i];
- if ((port->type () == type) && (port->flags () & flags)) {
+ if ((port->type () == type) && flags == (port->flags () & flags)) {
if (!use_regexp || !regexec (&port_regex, port->name ().c_str (), 0, NULL, 0)) {
port_names.push_back (port->name ());
++rv;
@@ -953,8 +1053,8 @@ AlsaAudioBackend::register_system_audio_ports()
{
LatencyRange lr;
- const int a_ins = _n_inputs > 0 ? _n_inputs : 2;
- const int a_out = _n_outputs > 0 ? _n_outputs : 2;
+ const int a_ins = _n_inputs;
+ const int a_out = _n_outputs;
/* audio ports */
lr.min = lr.max = (_measure_latency ? 0 : _systemic_audio_input_latency);
@@ -1433,7 +1533,7 @@ AlsaAudioBackend::main_process_thread ()
_pcmi->pcm_start ();
int no_proc_errors = 0;
const int bailout = 2 * _samplerate / _samples_per_period;
- const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
+ const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate;
manager.registration_callback();
manager.graph_order_callback();
@@ -1539,7 +1639,14 @@ AlsaAudioBackend::main_process_thread ()
/* calculate DSP load */
clock2 = g_get_monotonic_time();
const int64_t elapsed_time = clock2 - clock1;
- _dsp_load = elapsed_time / (float) nomial_time;
+ // low pass filter
+ const float load = elapsed_time / (float) nominal_time;
+ if (load > _dsp_load) {
+ _dsp_load = load;
+ } else {
+ const float a = .2 * _samples_per_period / _samplerate;
+ _dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
+ }
}
if (xrun && (_pcmi->capt_xrun() > 0 || _pcmi->play_xrun() > 0)) {
diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h
index 6c47b62..49066e3 100644
--- a/libs/backends/alsa/alsa_audiobackend.h
+++ b/libs/backends/alsa/alsa_audiobackend.h
@@ -164,7 +164,10 @@ class AlsaAudioBackend : public AudioBackend {
std::string name () const;
bool is_realtime () const;
+ bool use_separate_input_and_output_devices () const { return true; }
std::vector<DeviceStatus> enumerate_devices () const;
+ std::vector<DeviceStatus> enumerate_input_devices () const;
+ std::vector<DeviceStatus> enumerate_output_devices () const;
std::vector<float> available_sample_rates (const std::string& device) const;
std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
uint32_t available_input_channel_count (const std::string& device) const;
@@ -174,6 +177,8 @@ class AlsaAudioBackend : public AudioBackend {
bool can_change_buffer_size_when_running () const;
int set_device_name (const std::string&);
+ int set_input_device_name (const std::string&);
+ int set_output_device_name (const std::string&);
int set_sample_rate (float);
int set_buffer_size (uint32_t);
int set_interleaved (bool yn);
@@ -188,6 +193,8 @@ class AlsaAudioBackend : public AudioBackend {
/* Retrieving parameters */
std::string device_name () const;
+ std::string input_device_name () const;
+ std::string output_device_name () const;
float sample_rate () const;
uint32_t buffer_size () const;
bool interleaved () const;
@@ -308,10 +315,13 @@ class AlsaAudioBackend : public AudioBackend {
uint64_t _last_process_start;
static std::vector<std::string> _midi_options;
- static std::vector<AudioBackend::DeviceStatus> _audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _input_audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _output_audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _duplex_audio_device_status;
static std::vector<AudioBackend::DeviceStatus> _midi_device_status;
- mutable std::string _audio_device;
+ mutable std::string _input_audio_device;
+ mutable std::string _output_audio_device;
std::string _midi_driver_option;
/* audio device reservation */
diff --git a/libs/backends/alsa/zita-alsa-pcmi.cc b/libs/backends/alsa/zita-alsa-pcmi.cc
index 6eead7e..3c271b6 100644
--- a/libs/backends/alsa/zita-alsa-pcmi.cc
+++ b/libs/backends/alsa/zita-alsa-pcmi.cc
@@ -270,6 +270,9 @@ int Alsa_pcmi::play_init (snd_pcm_uframes_t len)
const snd_pcm_channel_area_t *a;
int err;
+ if (!_play_handle) {
+ return 0;
+ }
if ((err = snd_pcm_mmap_begin (_play_handle, &a, &_play_offs, &len)) < 0)
{
if (_debug & DEBUG_DATA) fprintf (stderr, "Alsa_pcmi: snd_pcm_mmap_begin(play): %s.\n", snd_strerror (err));
@@ -291,6 +294,10 @@ int Alsa_pcmi::capt_init (snd_pcm_uframes_t len)
const snd_pcm_channel_area_t *a;
int err;
+ if (!_capt_handle) {
+ return 0;
+ }
+
if ((err = snd_pcm_mmap_begin (_capt_handle, &a, &_capt_offs, &len)) < 0)
{
if (_debug & DEBUG_DATA) fprintf (stderr, "Alsa_pcmi: snd_pcm_mmap_begin(capt): %s.\n", snd_strerror (err));
@@ -326,12 +333,14 @@ void Alsa_pcmi::capt_chan (int chan, float *dst, int len, int step)
int Alsa_pcmi::play_done (int len)
{
+ if (!_play_handle) return 0;
return snd_pcm_mmap_commit (_play_handle, _play_offs, len);
}
int Alsa_pcmi::capt_done (int len)
{
+ if (!_capt_handle) return 0;
return snd_pcm_mmap_commit (_capt_handle, _capt_offs, len);
}
@@ -394,7 +403,7 @@ void Alsa_pcmi::initialise (const char *play_name, const char *capt_name, const
}
}
- if (! _play_handle || ! _capt_handle) return;
+ if (! _play_handle && ! _capt_handle) return;
if (ctrl_name)
{
diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc
index 60835e4..09bab52 100644
--- a/libs/backends/coreaudio/coreaudio_backend.cc
+++ b/libs/backends/coreaudio/coreaudio_backend.cc
@@ -38,7 +38,9 @@ using namespace ARDOUR;
static std::string s_instance_name;
size_t CoreAudioBackend::_max_buffer_size = 8192;
std::vector<std::string> CoreAudioBackend::_midi_options;
-std::vector<AudioBackend::DeviceStatus> CoreAudioBackend::_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> CoreAudioBackend::_duplex_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> CoreAudioBackend::_input_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> CoreAudioBackend::_output_audio_device_status;
/* static class instance access */
@@ -90,7 +92,8 @@ CoreAudioBackend::CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info)
, _reinit_thread_callback (false)
, _measure_latency (false)
, _last_process_start (0)
- , _audio_device("")
+ , _input_audio_device("")
+ , _output_audio_device("")
, _midi_driver_option(_("None"))
, _samplerate (48000)
, _samples_per_period (1024)
@@ -142,30 +145,80 @@ CoreAudioBackend::is_realtime () const
std::vector<AudioBackend::DeviceStatus>
CoreAudioBackend::enumerate_devices () const
{
- _audio_device_status.clear();
+ _duplex_audio_device_status.clear();
std::map<size_t, std::string> devices;
- _pcmio->device_list(devices);
+ _pcmio->duplex_device_list(devices);
+
+ for (std::map<size_t, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+ if (_input_audio_device == "") _input_audio_device = i->second;
+ if (_output_audio_device == "") _output_audio_device = i->second;
+ _duplex_audio_device_status.push_back (DeviceStatus (i->second, true));
+ }
+ return _duplex_audio_device_status;
+}
+
+std::vector<AudioBackend::DeviceStatus>
+CoreAudioBackend::enumerate_input_devices () const
+{
+ _input_audio_device_status.clear();
+ std::map<size_t, std::string> devices;
+ _pcmio->input_device_list(devices);
+ _input_audio_device_status.push_back (DeviceStatus (_("None"), true));
for (std::map<size_t, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
- if (_audio_device == "") _audio_device = i->second;
- _audio_device_status.push_back (DeviceStatus (i->second, true));
+ if (_input_audio_device == "") _input_audio_device = i->second;
+ _input_audio_device_status.push_back (DeviceStatus (i->second, true));
}
- return _audio_device_status;
+ return _input_audio_device_status;
+}
+
+
+std::vector<AudioBackend::DeviceStatus>
+CoreAudioBackend::enumerate_output_devices () const
+{
+ _output_audio_device_status.clear();
+ std::map<size_t, std::string> devices;
+ _pcmio->output_device_list(devices);
+
+ _output_audio_device_status.push_back (DeviceStatus (_("None"), true));
+ for (std::map<size_t, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+ if (_output_audio_device == "") _output_audio_device = i->second;
+ _output_audio_device_status.push_back (DeviceStatus (i->second, true));
+ }
+ return _output_audio_device_status;
}
std::vector<float>
CoreAudioBackend::available_sample_rates (const std::string&) const
{
std::vector<float> sr;
- _pcmio->available_sample_rates(name_to_id(_audio_device), sr);
- return sr;
+ std::vector<float> sr_in;
+ std::vector<float> sr_out;
+
+ const uint32_t inp = name_to_id(_input_audio_device);
+ const uint32_t out = name_to_id(_output_audio_device);
+ if (inp == UINT32_MAX && out == UINT32_MAX) {
+ return sr;
+ } else if (inp == UINT32_MAX) {
+ _pcmio->available_sample_rates(out, sr_out);
+ return sr_out;
+ } else if (out == UINT32_MAX) {
+ _pcmio->available_sample_rates(inp, sr_in);
+ return sr_in;
+ } else {
+ _pcmio->available_sample_rates(inp, sr_in);
+ _pcmio->available_sample_rates(out, sr_out);
+ // TODO allow to use different SR per device, tweak aggregate
+ std::set_intersection(sr_in.begin(), sr_in.end(), sr_out.begin(), sr_out.end(), std::back_inserter(sr));
+ return sr;
+ }
}
std::vector<uint32_t>
-CoreAudioBackend::available_buffer_sizes (const std::string&) const
+CoreAudioBackend::available_buffer_sizes (const std::string& device) const
{
std::vector<uint32_t> bs;
- _pcmio->available_buffer_sizes(name_to_id(_audio_device), bs);
+ _pcmio->available_buffer_sizes(name_to_id(device), bs);
return bs;
}
@@ -196,8 +249,27 @@ CoreAudioBackend::can_change_buffer_size_when_running () const
int
CoreAudioBackend::set_device_name (const std::string& d)
{
- _audio_device = d;
- const float sr = _pcmio->current_sample_rate(name_to_id(_audio_device));
+ int rv = 0;
+ rv |= set_input_device_name (d);
+ rv |= set_output_device_name (d);
+ return rv;
+}
+
+int
+CoreAudioBackend::set_input_device_name (const std::string& d)
+{
+ _input_audio_device = d;
+ const float sr = _pcmio->current_sample_rate(name_to_id(_input_audio_device));
+ if (sr > 0) { set_sample_rate(sr); }
+ return 0;
+}
+
+int
+CoreAudioBackend::set_output_device_name (const std::string& d)
+{
+ _output_audio_device = d;
+ // TODO check SR.
+ const float sr = _pcmio->current_sample_rate(name_to_id(_output_audio_device));
if (sr > 0) { set_sample_rate(sr); }
return 0;
}
@@ -205,8 +277,10 @@ CoreAudioBackend::set_device_name (const std::string& d)
int
CoreAudioBackend::set_sample_rate (float sr)
{
- if (sr <= 0) { return -1; }
- // TODO check if it's in the list of valid SR
+ std::vector<float> srs = available_sample_rates (/* really ignored */_input_audio_device);
+ if (std::find(srs.begin(), srs.end(), sr) == srs.end()) {
+ return -1;
+ }
_samplerate = sr;
engine.sample_rate_change (sr);
return 0;
@@ -263,7 +337,19 @@ CoreAudioBackend::set_systemic_output_latency (uint32_t sl)
std::string
CoreAudioBackend::device_name () const
{
- return _audio_device;
+ return "";
+}
+
+std::string
+CoreAudioBackend::input_device_name () const
+{
+ return _input_audio_device;
+}
+
+std::string
+CoreAudioBackend::output_device_name () const
+{
+ return _output_audio_device;
}
float
@@ -339,7 +425,7 @@ CoreAudioBackend::midi_option () const
void
CoreAudioBackend::launch_control_app ()
{
- _pcmio->launch_control_app(name_to_id(_audio_device));
+ _pcmio->launch_control_app(name_to_id(_input_audio_device));
}
/* State Control */
@@ -380,8 +466,8 @@ CoreAudioBackend::_start (bool for_latency_measurement)
_ports.clear();
}
- uint32_t device1 = name_to_id(_audio_device); // usually input, but in an aggregate, 1st defines the clock
- uint32_t device2 = name_to_id(_audio_device); // usually output
+ uint32_t device1 = name_to_id(_input_audio_device);
+ uint32_t device2 = name_to_id(_output_audio_device);
assert(_active_ca == false);
assert(_active_fw == false);
@@ -395,6 +481,7 @@ CoreAudioBackend::_start (bool for_latency_measurement)
_pcmio->set_sample_rate_callback (sample_rate_callback_ptr, this);
_pcmio->pcm_start (device1, device2, _samplerate, _samples_per_period, process_callback_ptr, this);
+ printf("STATE: %d\n", _pcmio->state ());
switch (_pcmio->state ()) {
case 0: /* OK */ break;
@@ -554,7 +641,7 @@ CoreAudioBackend::freewheel (bool onoff)
float
CoreAudioBackend::dsp_load () const
{
- return 100.f * _dsp_load;
+ return std::min(100.f, 100.f * _dsp_load);
}
size_t
@@ -779,7 +866,7 @@ CoreAudioBackend::get_ports (
}
for (size_t i = 0; i < _ports.size (); ++i) {
CoreBackendPort* port = _ports[i];
- if ((port->type () == type) && (port->flags () & flags)) {
+ if ((port->type () == type) && flags == (port->flags () & flags)) {
if (!use_regexp || !regexec (&port_regex, port->name ().c_str (), 0, NULL, 0)) {
port_names.push_back (port->name ());
++rv;
@@ -867,8 +954,8 @@ CoreAudioBackend::register_system_audio_ports()
const uint32_t a_ins = _n_inputs;
const uint32_t a_out = _n_outputs;
- const uint32_t coreaudio_reported_input_latency = _pcmio->get_latency(name_to_id(_audio_device), true);
- const uint32_t coreaudio_reported_output_latency = _pcmio->get_latency(name_to_id(_audio_device), false);
+ const uint32_t coreaudio_reported_input_latency = _pcmio->get_latency(name_to_id(_input_audio_device), true);
+ const uint32_t coreaudio_reported_output_latency = _pcmio->get_latency(name_to_id(_output_audio_device), false);
#ifndef NDEBUG
printf("COREAUDIO LATENCY: i:%d, o:%d\n",
@@ -1584,7 +1671,14 @@ CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t hos
/* calc DSP load. */
clock2 = g_get_monotonic_time();
const int64_t elapsed_time = clock2 - clock1;
- _dsp_load = elapsed_time / nominal_time;
+ // low pass filter
+ const float load = elapsed_time / (float) nominal_time;
+ if (load > _dsp_load) {
+ _dsp_load = load;
+ } else {
+ const float a = .2 * _samples_per_period / _samplerate;
+ _dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
+ }
pthread_mutex_unlock (&_process_callback_mutex);
return 0;
@@ -1621,6 +1715,12 @@ CoreAudioBackend::buffer_size_callback ()
void
CoreAudioBackend::sample_rate_callback ()
{
+ if (_preinit) {
+#ifndef NDEBUG
+ printf("Samplerate change during initialization.\n");
+#endif
+ return;
+ }
_pcmio->set_error_callback (NULL, NULL);
_pcmio->set_sample_rate_callback (NULL, NULL);
_pcmio->set_xrun_callback (NULL, NULL);
diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h
index 7ac8e1c..3300fc4 100644
--- a/libs/backends/coreaudio/coreaudio_backend.h
+++ b/libs/backends/coreaudio/coreaudio_backend.h
@@ -165,7 +165,11 @@ class CoreAudioBackend : public AudioBackend {
std::string name () const;
bool is_realtime () const;
+ bool use_separate_input_and_output_devices () const { return true; }
std::vector<DeviceStatus> enumerate_devices () const;
+ std::vector<DeviceStatus> enumerate_input_devices () const;
+ std::vector<DeviceStatus> enumerate_output_devices () const;
+
std::vector<float> available_sample_rates (const std::string& device) const;
std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
uint32_t available_input_channel_count (const std::string& device) const;
@@ -175,6 +179,8 @@ class CoreAudioBackend : public AudioBackend {
bool can_change_buffer_size_when_running () const;
int set_device_name (const std::string&);
+ int set_input_device_name (const std::string&);
+ int set_output_device_name (const std::string&);
int set_sample_rate (float);
int set_buffer_size (uint32_t);
int set_interleaved (bool yn);
@@ -189,6 +195,8 @@ class CoreAudioBackend : public AudioBackend {
/* Retrieving parameters */
std::string device_name () const;
+ std::string input_device_name () const;
+ std::string output_device_name () const;
float sample_rate () const;
uint32_t buffer_size () const;
bool interleaved () const;
@@ -336,10 +344,13 @@ class CoreAudioBackend : public AudioBackend {
pthread_cond_t _freewheel_signal;
static std::vector<std::string> _midi_options;
- static std::vector<AudioBackend::DeviceStatus> _audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _input_audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _output_audio_device_status;
+ static std::vector<AudioBackend::DeviceStatus> _duplex_audio_device_status;
static std::vector<AudioBackend::DeviceStatus> _midi_device_status;
- mutable std::string _audio_device;
+ mutable std::string _input_audio_device;
+ mutable std::string _output_audio_device;
std::string _midi_driver_option;
/* audio settings */
diff --git a/libs/backends/coreaudio/coreaudio_pcmio.cc b/libs/backends/coreaudio/coreaudio_pcmio.cc
index 0b31a9a..b6105c9 100644
--- a/libs/backends/coreaudio/coreaudio_pcmio.cc
+++ b/libs/backends/coreaudio/coreaudio_pcmio.cc
@@ -480,6 +480,15 @@ CoreAudioPCM::get_latency(uint32_t device_id, bool input)
}
uint32_t
+CoreAudioPCM::get_latency(bool input)
+{
+ if (_active_device_id == 0) {
+ return 0;
+ }
+ return get_latency (_active_device_id, input);
+}
+
+uint32_t
CoreAudioPCM::current_buffer_size_id(AudioDeviceID id) {
UInt32 buffer_size;
UInt32 size = sizeof(UInt32);
@@ -562,6 +571,9 @@ CoreAudioPCM::set_device_sample_rate_id (AudioDeviceID id, float rate, bool inpu
int
CoreAudioPCM::set_device_sample_rate (uint32_t device_id, float rate, bool input)
{
+ if (device_id >= _n_devices) {
+ return 0;
+ }
return set_device_sample_rate_id(_device_ids[device_id], rate, input);
}
@@ -629,6 +641,15 @@ CoreAudioPCM::discover()
if (outputChannelCount > 0 || inputChannelCount > 0) {
_devices.insert (std::pair<size_t, std::string> (idx, dn));
}
+ if (inputChannelCount > 0) {
+ _input_devices.insert (std::pair<size_t, std::string> (idx, dn));
+ }
+ if (outputChannelCount > 0) {
+ _output_devices.insert (std::pair<size_t, std::string> (idx, dn));
+ }
+ if (outputChannelCount > 0 && inputChannelCount > 0) {
+ _duplex_devices.insert (std::pair<size_t, std::string> (idx, dn));
+ }
}
}
pthread_mutex_unlock (&_discovery_lock);
@@ -695,6 +716,7 @@ CoreAudioPCM::pcm_stop ()
}
if (_aggregate_plugin_id) {
destroy_aggregate_device();
+ discover();
}
AudioUnitUninitialize(_auhal);
@@ -774,9 +796,8 @@ CoreAudioPCM::pcm_start (
std::string errorMsg;
_state = -2;
- // TODO add "none' device to force half-duplex
-
- if (device_id_out >= _n_devices || device_id_in >= _n_devices) {
+ // "None" = UINT32_MAX
+ if (device_id_out >= _n_devices && device_id_in >= _n_devices) {
return -1;
}
@@ -790,8 +811,8 @@ CoreAudioPCM::pcm_start (
_capture_channels = 0;
_playback_channels = 0;
- const uint32_t chn_in = _device_ins[device_id_in] + ((device_id_out != device_id_in) ? _device_ins[device_id_out] : 0);
- const uint32_t chn_out = _device_outs[device_id_out] + ((device_id_out != device_id_in) ? _device_outs[device_id_in] : 0);
+ const uint32_t chn_in = (device_id_in < _n_devices ? _device_ins[device_id_in] : 0) + ((device_id_out != device_id_in && device_id_out < _n_devices) ? _device_ins[device_id_out] : 0);
+ const uint32_t chn_out =(device_id_out < _n_devices ? _device_outs[device_id_out] : 0) + ((device_id_out != device_id_in && device_id_in < _n_devices) ? _device_outs[device_id_in] : 0);
assert (chn_in > 0 || chn_out > 0);
@@ -811,7 +832,7 @@ CoreAudioPCM::pcm_start (
err = AudioUnitInitialize(_auhal);
if (err != noErr) { errorMsg="AudioUnitInitialize"; goto error; }
- // explicitly change samplerate of the device
+ // explicitly change samplerate of the devices, TODO allow separate rates with aggregates
if (set_device_sample_rate(device_id_in, sample_rate, true)) {
errorMsg="Failed to set SampleRate, Capture Device"; goto error;
}
@@ -820,15 +841,15 @@ CoreAudioPCM::pcm_start (
}
// explicitly request device buffer size
- if (set_device_buffer_size_id(_device_ids[device_id_in], samples_per_period)) {
+ if (device_id_in < _n_devices && set_device_buffer_size_id(_device_ids[device_id_in], samples_per_period)) {
errorMsg="kAudioDevicePropertyBufferFrameSize, Input"; goto error;
}
- if (set_device_buffer_size_id(_device_ids[device_id_out], samples_per_period)) {
+ if (device_id_out < _n_devices && set_device_buffer_size_id(_device_ids[device_id_out], samples_per_period)) {
errorMsg="kAudioDevicePropertyBufferFrameSize, Output"; goto error;
}
// create aggregate device..
- if (_device_ids[device_id_in] != _device_ids[device_id_out]) {
+ if (device_id_in < _n_devices && device_id_out < _n_devices && _device_ids[device_id_in] != _device_ids[device_id_out]) {
if (0 == create_aggregate_device(_device_ids[device_id_in], _device_ids[device_id_out], sample_rate, &_aggregate_device_id)) {
device_id = _aggregate_device_id;
} else {
@@ -836,12 +857,15 @@ CoreAudioPCM::pcm_start (
_aggregate_plugin_id = 0;
errorMsg="Cannot create Aggregate Device"; goto error;
}
- } else {
+ } else if (device_id_out < _n_devices) {
device_id = _device_ids[device_id_out];
+ } else {
+ assert (device_id_in < _n_devices);
+ device_id = _device_ids[device_id_in];
}
if (device_id_out != device_id_in) {
- assert(_aggregate_device_id > 0);
+ assert(_aggregate_device_id > 0 || device_id_in >= _n_devices || device_id_out >= _n_devices);
}
// enableIO to progress further
diff --git a/libs/backends/coreaudio/coreaudio_pcmio.h b/libs/backends/coreaudio/coreaudio_pcmio.h
index 76b5e76..5f9778e 100644
--- a/libs/backends/coreaudio/coreaudio_pcmio.h
+++ b/libs/backends/coreaudio/coreaudio_pcmio.h
@@ -48,12 +48,16 @@ public:
void discover();
void device_list (std::map<size_t, std::string> &devices) const { devices = _devices;}
+ void input_device_list (std::map<size_t, std::string> &devices) const { devices = _input_devices;}
+ void output_device_list (std::map<size_t, std::string> &devices) const { devices = _output_devices;}
+ void duplex_device_list (std::map<size_t, std::string> &devices) const { devices = _duplex_devices;}
int available_sample_rates (uint32_t device_id, std::vector<float>& sampleRates);
int available_buffer_sizes (uint32_t device_id, std::vector<uint32_t>& sampleRates);
uint32_t available_channels (uint32_t device_id, bool input);
float current_sample_rate (uint32_t device_id, bool input = false);
uint32_t get_latency (uint32_t device_id, bool input);
+ uint32_t get_latency (bool input);
std::string cached_port_name (uint32_t portnum, bool input) const;
@@ -186,6 +190,9 @@ private:
// TODO proper device info struct
std::map<size_t, std::string> _devices;
+ std::map<size_t, std::string> _input_devices;
+ std::map<size_t, std::string> _output_devices;
+ std::map<size_t, std::string> _duplex_devices;
uint32_t * _device_ins;
uint32_t * _device_outs;
std::vector<std::string> _input_names;
diff --git a/libs/backends/coreaudio/coreaudio_pcmio_aggregate.cc b/libs/backends/coreaudio/coreaudio_pcmio_aggregate.cc
index 84e3732..7c2d0fe 100644
--- a/libs/backends/coreaudio/coreaudio_pcmio_aggregate.cc
+++ b/libs/backends/coreaudio/coreaudio_pcmio_aggregate.cc
@@ -32,7 +32,7 @@ CoreAudioPCM::destroy_aggregate_device ()
property_address.mSelector = kAudioPlugInDestroyAggregateDevice;
property_address.mScope = kAudioObjectPropertyScopeGlobal;
property_address.mElement = kAudioObjectPropertyElementMaster;
- UInt32 outDataSize;
+ UInt32 outDataSize = 0;
err = AudioObjectGetPropertyDataSize(_aggregate_plugin_id, &property_address, 0, NULL, &outDataSize);
if (err != noErr) {
@@ -223,17 +223,19 @@ CoreAudioPCM::create_aggregate_device (
pluginAOPA.mSelector = kAudioPlugInCreateAggregateDevice;
pluginAOPA.mScope = kAudioObjectPropertyScopeGlobal;
pluginAOPA.mElement = kAudioObjectPropertyElementMaster;
- UInt32 outDataSize;
+ UInt32 outDataSize = 0;
err = AudioObjectGetPropertyDataSize(_aggregate_plugin_id, &pluginAOPA, 0, NULL, &outDataSize);
if (err != noErr) {
- fprintf(stderr, "AggregateDevice: AudioObjectGetPropertyDataSize error\n");
+ char *rv = (char*)&err;
+ fprintf(stderr, "AggregateDevice: AudioObjectGetPropertyDataSize error '%c%c%c%c' 0x%08x\n", rv[0], rv[1], rv[2], rv[3], err);
goto error;
}
err = AudioObjectGetPropertyData(_aggregate_plugin_id, &pluginAOPA, sizeof(aggDeviceDict), &aggDeviceDict, &outDataSize, created_device);
if (err != noErr) {
- fprintf(stderr, "AggregateDevice: AudioObjectGetPropertyData error\n");
+ char *rv = (char*)&err;
+ fprintf(stderr, "AggregateDevice: AudioObjectGetPropertyData error '%c%c%c%c' 0x%08x\n", rv[0], rv[1], rv[2], rv[3], err);
goto error;
}
diff --git a/libs/backends/coreaudio/wscript b/libs/backends/coreaudio/wscript
index 9fcc678..75bed91 100644
--- a/libs/backends/coreaudio/wscript
+++ b/libs/backends/coreaudio/wscript
@@ -29,7 +29,12 @@ def build(bld):
obj.name = 'coreaudio_backend'
obj.target = 'coreaudio_backend'
obj.use = 'libardour libpbd'
- obj.framework = [ 'CoreAudio', 'AudioToolbox', 'CoreServices', 'CoreMidi' ]
+ obj.framework = [ 'CoreAudio', 'AudioToolbox', 'CoreServices' ]
+ if bld.env['build_target'] not in [ 'lion' ]:
+ obj.framework += [ 'CoreMidi' ]
+ else:
+ obj.framework += [ 'CoreMIDI' ]
+
obj.install_path = os.path.join(bld.env['LIBDIR'], 'backends')
obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"',
'ARDOURBACKEND_DLL_EXPORTS'
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index 050e994..680c5a6 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -640,7 +640,7 @@ DummyAudioBackend::get_ports (
}
for (size_t i = 0; i < _ports.size (); ++i) {
DummyPort* port = _ports[i];
- if ((port->type () == type) && (port->flags () & flags)) {
+ if ((port->type () == type) && flags == (port->flags () & flags)) {
if (!use_regexp || !regexec (&port_regex, port->name ().c_str (), 0, NULL, 0)) {
port_names.push_back (port->name ());
++rv;
@@ -1174,7 +1174,7 @@ DummyAudioBackend::main_process_thread ()
manager.graph_order_callback();
int64_t clock1, clock2;
- clock1 = _x_get_monotonic_usec();
+ clock1 = -1;
while (_running) {
if (_freewheeling != _freewheel) {
@@ -1224,31 +1224,37 @@ DummyAudioBackend::main_process_thread ()
}
if (!_freewheel) {
- const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
+ const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate;
clock2 = _x_get_monotonic_usec();
-#ifdef PLATFORM_WINDOWS
- bool win_timers_ok = true;
+ bool timers_ok = true;
+
/* querying the performance counter can fail occasionally (-1).
* Also on some multi-core systems, timers are CPU specific and not
* synchronized. We assume they differ more than a few milliseconds
* (4 * nominal cycle time) and simply ignore cases where the
* execution switches cores.
*/
- if (clock1 < 0 || clock2 < 0 || (clock1 > clock2) || (clock2 - clock1) > 4 * nomial_time) {
- clock2 = clock1 = 0;
- win_timers_ok = false;
+ if (clock1 < 0 || clock2 < 0 || (clock1 > clock2) || (clock2 - clock1) > 4 * nominal_time) {
+ clock1 = 0;
+ clock2 = nominal_time;
+ timers_ok = false;
}
-#endif
+
const int64_t elapsed_time = clock2 - clock1;
-#ifdef PLATFORM_WINDOWS
- if (win_timers_ok)
-#endif
+
+ if (timers_ok)
{ // low pass filter
- _dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
+ const float load = elapsed_time / (float) nominal_time;
+ if (load > _dsp_load) {
+ _dsp_load = load;
+ } else {
+ const float a = .2 * _samples_per_period / _samplerate;
+ _dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
+ }
}
- if (elapsed_time < nomial_time) {
- Glib::usleep (nomial_time - elapsed_time);
+ if (elapsed_time < nominal_time) {
+ Glib::usleep (nominal_time - elapsed_time);
} else {
Glib::usleep (100); // don't hog cpu
}
@@ -1257,7 +1263,7 @@ DummyAudioBackend::main_process_thread ()
Glib::usleep (100); // don't hog cpu
}
- /* beginning of netx cycle */
+ /* beginning of next cycle */
clock1 = _x_get_monotonic_usec();
bool connections_changed = false;
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index dea2d2e..d66055d 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -362,7 +362,7 @@ JACKAudioBackend::sample_rate () const
if (available()) {
return _current_sample_rate;
} else {
- return 0;
+ return _jack_connection->probed_sample_rate ();
}
}
return _target_sample_rate;
@@ -375,7 +375,7 @@ JACKAudioBackend::buffer_size () const
if (available()) {
return _current_buffer_size;
} else {
- return 0;
+ return _jack_connection->probed_buffer_size ();
}
}
return _target_buffer_size;
diff --git a/libs/backends/jack/jack_connection.cc b/libs/backends/jack/jack_connection.cc
index f982414..af938ad 100644
--- a/libs/backends/jack/jack_connection.cc
+++ b/libs/backends/jack/jack_connection.cc
@@ -56,6 +56,8 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
: _jack (0)
, _client_name (arg1)
, session_uuid (arg2)
+ , _probed_buffer_size (0)
+ , _probed_sample_rate (0)
{
/* See if the server is already up
*/
@@ -77,6 +79,8 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
jack_client_t* c = jack_client_open ("ardourprobe", JackNoStartServer, &status);
if (status == 0) {
+ _probed_buffer_size = jack_get_buffer_size(c);
+ _probed_sample_rate = jack_get_sample_rate(c);
jack_client_close (c);
_in_control = false;
} else {
diff --git a/libs/backends/jack/jack_connection.h b/libs/backends/jack/jack_connection.h
index a746234..3b0ccb8 100644
--- a/libs/backends/jack/jack_connection.h
+++ b/libs/backends/jack/jack_connection.h
@@ -29,11 +29,16 @@ class JackConnection {
static bool in_control() { return _in_control; }
+ uint32_t probed_buffer_size () const { assert (!connected ()); return _probed_buffer_size; }
+ uint32_t probed_sample_rate () const { assert (!connected ()); return _probed_sample_rate; }
+
private:
jack_client_t* volatile _jack;
std::string _client_name;
std::string session_uuid;
static bool _in_control;
+ uint32_t _probed_buffer_size; // when not in control
+ uint32_t _probed_sample_rate; // when not in control
};
} // namespace
diff --git a/libs/backends/jack/jack_portengine.cc b/libs/backends/jack/jack_portengine.cc
index caa9626..1f0515b 100644
--- a/libs/backends/jack/jack_portengine.cc
+++ b/libs/backends/jack/jack_portengine.cc
@@ -118,7 +118,7 @@ JACKAudioBackend::get_port_name (PortHandle port) const
int
JACKAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
{
-#ifndef NO_JACK_METADATA // really everyone ought to have this by now.
+#ifdef HAVE_JACK_METADATA // really everyone ought to have this by now.
int rv = -1;
char *cvalue = NULL;
char *ctype = NULL;
diff --git a/libs/backends/jack/weak_libjack.c b/libs/backends/jack/weak_libjack.c
index 7754102..885ca60 100644
--- a/libs/backends/jack/weak_libjack.c
+++ b/libs/backends/jack/weak_libjack.c
@@ -110,7 +110,7 @@ static void init_weak_jack(void)
lib = lib_open("/usr/local/lib/libjack.dylib");
}
#elif (defined PLATFORM_WINDOWS)
-# ifdef __x86_64__
+# if ( defined(__x86_64__) || defined(_M_X64) )
lib = lib_open("libjack64.dll");
# else
lib = lib_open("libjack.dll");
diff --git a/libs/backends/jack/weak_libjack.def b/libs/backends/jack/weak_libjack.def
index 9abbaf4..5a3e080 100644
--- a/libs/backends/jack/weak_libjack.def
+++ b/libs/backends/jack/weak_libjack.def
@@ -121,7 +121,7 @@ JVFUN(0, set_thread_creator, (jack_thread_creator_t c), (c),)
JPFUN(1, int, client_create_thread, \
(jack_client_t* c, jack_native_thread_t *t, int p, int r, void *(*f)(void*), void *a), (c,t,p,r,f,a), 0)
-#ifndef NO_JACK_METADATA
+#ifdef HAVE_JACK_METADATA
/* <jack/uuid.h> - TODO*/
/* <jack/jack.h> */
diff --git a/libs/backends/jack/weak_libjack.h b/libs/backends/jack/weak_libjack.h
index e18687b..abfe3af 100644
--- a/libs/backends/jack/weak_libjack.h
+++ b/libs/backends/jack/weak_libjack.h
@@ -155,7 +155,7 @@ int have_libjack(void);
#define jack_client_open WJACK_client_client_openXXX
-#ifndef NO_JACK_METADATA
+#ifdef HAVE_JACK_METADATA
/* <jack/metadata.h> */
#define jack_get_uuid_for_client_name WJACK_get_uuid_for_client_name
#define jack_get_client_name_by_uuid WJACK_get_client_name_by_uuid
@@ -181,7 +181,7 @@ int have_libjack(void);
#include <jack/session.h>
#include <jack/thread.h>
-#ifndef NO_JACK_METADATA
+#ifdef HAVE_JACK_METADATA
#include <jack/metadata.h>
#endif
diff --git a/libs/backends/jack/wscript b/libs/backends/jack/wscript
index 752682f..fca2230 100644
--- a/libs/backends/jack/wscript
+++ b/libs/backends/jack/wscript
@@ -37,10 +37,15 @@ def configure(conf):
else:
conf.env['libjack_link'] = "link"
- if not Options.options.libjack_meta:
- conf.define ('NO_JACK_METADATA', 1)
-
-
+ # Check that metadata API is available and working
+ conf.check_cxx(fragment = "#include <jack/jack.h>\n#include <jack/metadata.h>\nint main(void) { jack_port_uuid(NULL); return 0; }\n",
+ mandatory = False,
+ msg = 'Checking for JACK metadata API',
+ okmsg = 'ok',
+ errmsg = 'not found (or broken). JACK metadata API will not be used',
+ define_name = 'HAVE_JACK_METADATA',
+ uselib = 'JACK')
+
def build(bld):
obj = bld(features = 'c cxx cxxshlib')
obj.source = [
@@ -64,6 +69,10 @@ def build(bld):
obj.cxxflags = [ '-fPIC' ]
obj.cflags = [ '-fPIC' ]
+ if bld.is_defined ('HAVE_JACK_METADATA'):
+ obj.cxxflags += [ '-DHAVE_JACK_METADATA' ]
+ obj.cflags += [ '-DHAVE_JACK_METADATA' ]
+
if (bld.env['build_target'] == 'mingw'):
obj.uselib = [ 'PORTAUDIO' ]
else:
diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc
index f94c819..0277ca1 100644
--- a/libs/backends/portaudio/portaudio_backend.cc
+++ b/libs/backends/portaudio/portaudio_backend.cc
@@ -649,7 +649,7 @@ PortAudioBackend::get_ports (
}
for (size_t i = 0; i < _ports.size (); ++i) {
PamPort* port = _ports[i];
- if ((port->type () == type) && (port->flags () & flags)) {
+ if ((port->type () == type) && flags == (port->flags () & flags)) {
if (!use_regexp || !regexec (&port_regex, port->name ().c_str (), 0, NULL, 0)) {
port_names.push_back (port->name ());
++rv;
diff --git a/libs/backends/wavesaudio/waves_audiobackend.port_engine.cc b/libs/backends/wavesaudio/waves_audiobackend.port_engine.cc
index 556e38d..8434095 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.port_engine.cc
+++ b/libs/backends/wavesaudio/waves_audiobackend.port_engine.cc
@@ -96,7 +96,7 @@ WavesAudioBackend::get_ports (const std::string& port_name_pattern, DataType typ
for (size_t i = 0; i < _ports.size (); ++i) {
WavesDataPort* port = _ports[i];
- if ((port->type () == type) && (port->flags () & flags)) {
+ if ((port->type () == type) && flags == (port->flags () & flags)) {
port_names.push_back (port->name ());
found_ports++;
}
diff --git a/libs/canvas/MSVCcanvas/cairocanvas.vcproj b/libs/canvas/MSVCcanvas/cairocanvas.vcproj
index f5a7dd7..56f3fb1 100644
--- a/libs/canvas/MSVCcanvas/cairocanvas.vcproj
+++ b/libs/canvas/MSVCcanvas/cairocanvas.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;..\..\gtkmm2ext;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;CANVAS_DEBUG;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;CANVAS_DEBUG;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -110,7 +110,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;..\..\gtkmm2ext;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -175,7 +175,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;..\..\gtkmm2ext;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;CANVAS_DEBUG;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_CAIROCANVAS;CANVAS_COMPATIBILITY;USE_CAIRO_IMAGE_SURFACE;CANVAS_DEBUG;LIBCANVAS_STATIC;RUBBERBAND_IS_IN_WIN_STATIC_LIB;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"cairocanvas\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc
index 72acbd4..7f9c8fa 100644
--- a/libs/canvas/canvas.cc
+++ b/libs/canvas/canvas.cc
@@ -18,6 +18,10 @@
*/
+#if !defined USE_CAIRO_IMAGE_SURFACE && !defined NDEBUG
+#define OPTIONAL_CAIRO_IMAGE_SURFACE
+#endif
+
/** @file canvas/canvas.cc
* @brief Implementation of the main canvas classes.
*/
@@ -754,12 +758,18 @@ void
GtkCanvas::on_size_allocate (Gtk::Allocation& a)
{
EventBox::on_size_allocate (a);
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+#endif
+#if defined USE_CAIRO_IMAGE_SURFACE || defined OPTIONAL_CAIRO_IMAGE_SURFACE
/* allocate an image surface as large as the canvas itself */
canvas_image.clear ();
canvas_image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, a.get_width(), a.get_height());
#endif
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ }
+#endif
}
/** Handler for GDK expose events.
@@ -769,7 +779,19 @@ GtkCanvas::on_size_allocate (Gtk::Allocation& a)
bool
GtkCanvas::on_expose_event (GdkEventExpose* ev)
{
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ Cairo::RefPtr<Cairo::Context> draw_context;
+ Cairo::RefPtr<Cairo::Context> window_context;
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+ if (!canvas_image) {
+ canvas_image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height());
+ }
+ draw_context = Cairo::Context::create (canvas_image);
+ window_context = get_window()->create_cairo_context ();
+ } else {
+ draw_context = get_window()->create_cairo_context ();
+ }
+#elif defined USE_CAIRO_IMAGE_SURFACE
if (!canvas_image) {
canvas_image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height());
}
@@ -803,7 +825,10 @@ GtkCanvas::on_expose_event (GdkEventExpose* ev)
g_free (rects);
}
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+#endif
+#if defined USE_CAIRO_IMAGE_SURFACE || defined OPTIONAL_CAIRO_IMAGE_SURFACE
/* now blit our private surface back to the GDK one */
window_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
@@ -812,6 +837,9 @@ GtkCanvas::on_expose_event (GdkEventExpose* ev)
window_context->set_operator (Cairo::OPERATOR_SOURCE);
window_context->paint ();
#endif
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ }
+#endif
return true;
}
diff --git a/libs/canvas/canvas/debug.h b/libs/canvas/canvas/debug.h
index 49290e5..ecf7eee 100644
--- a/libs/canvas/canvas/debug.h
+++ b/libs/canvas/canvas/debug.h
@@ -28,11 +28,12 @@
namespace PBD {
namespace DEBUG {
- LIBCANVAS_API extern uint64_t CanvasItems;
- LIBCANVAS_API extern uint64_t CanvasItemsDirtied;
- LIBCANVAS_API extern uint64_t CanvasEvents;
- LIBCANVAS_API extern uint64_t CanvasRender;
- LIBCANVAS_API extern uint64_t CanvasEnterLeave;
+ LIBCANVAS_API extern DebugBits CanvasItems;
+ LIBCANVAS_API extern DebugBits CanvasItemsDirtied;
+ LIBCANVAS_API extern DebugBits CanvasEvents;
+ LIBCANVAS_API extern DebugBits CanvasRender;
+ LIBCANVAS_API extern DebugBits CanvasEnterLeave;
+ LIBCANVAS_API extern DebugBits WaveView;
}
}
diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h
index 60fadab..228a03f 100644
--- a/libs/canvas/canvas/item.h
+++ b/libs/canvas/canvas/item.h
@@ -86,6 +86,10 @@ public:
*/
virtual void add_items_at_point (Duple /*point*/, std::vector<Item const *>& items) const;
+ /** Return true if the item covers @param point, false otherwise.
+ *
+ * The point is in window coordinates
+ */
virtual bool covers (Duple const &) const;
/** Update _bounding_box and _bounding_box_dirty */
diff --git a/libs/canvas/canvas/rectangle.h b/libs/canvas/canvas/rectangle.h
index 5df10fb..b979a24 100644
--- a/libs/canvas/canvas/rectangle.h
+++ b/libs/canvas/canvas/rectangle.h
@@ -64,6 +64,17 @@ public:
void set_x1 (Coord);
void set_y1 (Coord);
+ /** return @param y as a floating point fraction of the overall
+ * height of the rectangle. @param y is in canvas coordinate space.
+ *
+ * A value of zero indicates that y is at the bottom of the
+ * rectangle; a value of 1 indicates that y is at the top.
+ *
+ * Will return zero if there is no bounding box or if y
+ * is outside the bounding box.
+ */
+ double vertical_fraction (double y) const;
+
enum What {
NOTHING = 0x0,
LEFT = 0x1,
diff --git a/libs/canvas/canvas/ruler.h b/libs/canvas/canvas/ruler.h
index 56876e7..0a6a13e 100644
--- a/libs/canvas/canvas/ruler.h
+++ b/libs/canvas/canvas/ruler.h
@@ -65,7 +65,9 @@ public:
void set_metric (const Metric&);
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
-
+
+ void set_divide_colors (Color top, Color bottom);
+ void set_divide_height (double);
private:
const Metric* _metric;
@@ -74,6 +76,9 @@ private:
Coord _lower;
Coord _upper;
+ double _divide_height;
+ Color _divider_color_top;
+ Color _divider_color_bottom;
Pango::FontDescription* _font_description;
mutable std::vector<Mark> marks;
diff --git a/libs/canvas/canvas/text.h b/libs/canvas/canvas/text.h
index f72c088..3dfe985 100644
--- a/libs/canvas/canvas/text.h
+++ b/libs/canvas/canvas/text.h
@@ -51,6 +51,7 @@ public:
void dump (std::ostream&) const;
std::string text() const { return _text; }
+ double text_width() const;
private:
std::string _text;
@@ -64,10 +65,10 @@ private:
mutable bool _need_redraw;
mutable double _width_correction;
double _clamped_width;
-
- void redraw (Cairo::RefPtr<Cairo::Context>) const;
- void redraw (Glib::RefPtr<Pango::Context>) const;
- void _redraw (Glib::RefPtr<Pango::Layout>) const;
+
+ void _redraw (Cairo::RefPtr<Cairo::Context>) const;
+ void _redraw (Glib::RefPtr<Pango::Context>) const;
+ void __redraw (Glib::RefPtr<Pango::Layout>) const;
};
}
diff --git a/libs/canvas/canvas/wave_view.h b/libs/canvas/canvas/wave_view.h
index 9ace148..c4e19ec 100644
--- a/libs/canvas/canvas/wave_view.h
+++ b/libs/canvas/canvas/wave_view.h
@@ -45,51 +45,174 @@ class WaveViewTest;
namespace ArdourCanvas {
-class LIBCANVAS_API WaveView : public Item
+struct LIBCANVAS_API WaveViewThreadRequest
{
-public:
-
- enum Shape {
- Normal,
- Rectified
+ public:
+ enum RequestType {
+ Quit,
+ Cancel,
+ Draw
};
+
+ WaveViewThreadRequest () : stop (0) {}
+
+ bool should_stop () const { return (bool) g_atomic_int_get (const_cast<gint*>(&stop)); }
+ void cancel() { g_atomic_int_set (&stop, 1); }
+
+ RequestType type;
+ framepos_t start;
+ framepos_t end;
+ double width;
+ double height;
+ double samples_per_pixel;
+ uint16_t channel;
+ double amplitude;
+ Color fill_color;
+ boost::weak_ptr<const ARDOUR::Region> region;
+
+ /* resulting image, after request has been satisfied */
+
+ Cairo::RefPtr<Cairo::ImageSurface> image;
+
+ private:
+ gint stop; /* intended for atomic access */
+};
+
+class LIBCANVAS_API WaveView;
+
+class LIBCANVAS_API WaveViewCache
+{
+ public:
+ WaveViewCache();
+ ~WaveViewCache();
+
+ struct Entry {
+
+ /* these properties define the cache entry as unique.
+
+ If an image is in use by a WaveView and any of these
+ properties are modified on the WaveView, the image can no
+ longer be used (or may no longer be usable for start/end
+ parameters). It will remain in the cache until flushed for
+ some reason (typically the cache is full).
+ */
- struct CacheEntry {
int channel;
Coord height;
float amplitude;
Color fill_color;
+ double samples_per_pixel;
framepos_t start;
framepos_t end;
+
+ /* the actual image referred to by the cache entry */
+
Cairo::RefPtr<Cairo::ImageSurface> image;
- CacheEntry(int chan, Coord hght, float amp, Color fcl, framepos_t strt, framepos_t ed, Cairo::RefPtr<Cairo::ImageSurface> img) :
+ /* last time the cache entry was used */
+ uint64_t timestamp;
- channel (chan), height (hght), amplitude (amp), fill_color (fcl),
- start (strt), end (ed), image (img) {}
+ Entry (int chan, Coord hght, float amp, Color fcl, double spp, framepos_t strt, framepos_t ed,
+ Cairo::RefPtr<Cairo::ImageSurface> img)
+ : channel (chan)
+ , height (hght)
+ , amplitude (amp)
+ , fill_color (fcl)
+ , samples_per_pixel (spp)
+ , start (strt)
+ , end (ed)
+ , image (img) {}
};
- /* final ImageSurface rendered with colours */
- Cairo::RefPtr<Cairo::ImageSurface> _image;
+ uint64_t image_cache_threshold () const { return _image_cache_threshold; }
+ void set_image_cache_threshold (uint64_t);
+
+ void add (boost::shared_ptr<ARDOUR::AudioSource>, boost::shared_ptr<Entry>);
+ void use (boost::shared_ptr<ARDOUR::AudioSource>, boost::shared_ptr<Entry>);
- /* Displays a single channel of waveform data for the given Region.
+ void consolidate_image_cache (boost::shared_ptr<ARDOUR::AudioSource>,
+ int channel,
+ Coord height,
+ float amplitude,
+ Color fill_color,
+ double samples_per_pixel);
+
+ boost::shared_ptr<Entry> lookup_image (boost::shared_ptr<ARDOUR::AudioSource>,
+ framepos_t start, framepos_t end,
+ int _channel,
+ Coord height,
+ float amplitude,
+ Color fill_color,
+ double samples_per_pixel,
+ bool& full_image);
+
+ private:
+ /* an unsorted, unindexd collection of cache entries associated with
+ a particular AudioSource. All cache Entries in the collection
+ share the AudioSource in common, but represent different parameter
+ settings (e.g. height, color, samples per pixel etc.)
+ */
+ typedef std::vector<boost::shared_ptr<Entry> > CacheLine;
+ /* Indexed, non-sortable structure used to lookup images associated
+ * with a particular AudioSource
+ */
+ typedef std::map <boost::shared_ptr<ARDOUR::AudioSource>,CacheLine> ImageCache;
+ ImageCache cache_map;
+
+ /* Linear, sortable structure used when we need to do a timestamp-based
+ * flush of entries from the cache.
+ */
+ typedef std::pair<boost::shared_ptr<ARDOUR::AudioSource>,boost::shared_ptr<Entry> > ListEntry;
+ typedef std::vector<ListEntry> CacheList;
+
+ struct SortByTimestamp {
+ bool operator() (const WaveViewCache::ListEntry& a, const WaveViewCache::ListEntry& b) {
+ return a.second->timestamp < b.second->timestamp;
+ }
+ };
+ friend struct SortByTimestamp;
+
+ uint64_t image_cache_size;
+ uint64_t _image_cache_threshold;
+
+ uint64_t compute_image_cache_size ();
+ void cache_flush ();
+ bool cache_full ();
+};
- x = 0 in the waveview corresponds to the first waveform datum taken
- from region->start() samples into the source data.
+class LIBCANVAS_API WaveView : public Item, public sigc::trackable
+{
+public:
- x = N in the waveview corresponds to the (N * spp)'th sample
- measured from region->start() into the source data.
+ enum Shape {
+ Normal,
+ Rectified
+ };
- when drawing, we will map the zeroth-pixel of the waveview
- into a window.
+ std::string debug_name() const;
- The waveview itself contains a set of pre-rendered Cairo::ImageSurfaces
- that cache sections of the display. This is filled on-demand and
- never cleared until something explicitly marks the cache invalid
- (such as a change in samples_per_pixel, the log scaling, rectified or
- other view parameters).
- */
+ /* final ImageSurface rendered with colours */
+ Cairo::RefPtr<Cairo::ImageSurface> _image;
+ PBD::Signal0<void> ImageReady;
+
+ /* Displays a single channel of waveform data for the given Region.
+
+ x = 0 in the waveview corresponds to the first waveform datum taken
+ from region->start() samples into the source data.
+
+ x = N in the waveview corresponds to the (N * spp)'th sample
+ measured from region->start() into the source data.
+
+ when drawing, we will map the zeroth-pixel of the waveview
+ into a window.
+
+ The waveview itself contains a set of pre-rendered Cairo::ImageSurfaces
+ that cache sections of the display. This is filled on-demand and
+ never cleared until something explicitly marks the cache invalid
+ (such as a change in samples_per_pixel, the log scaling, rectified or
+ other view parameters).
+ */
WaveView (Canvas *, boost::shared_ptr<ARDOUR::AudioRegion>);
WaveView (Item*, boost::shared_ptr<ARDOUR::AudioRegion>);
@@ -127,6 +250,8 @@ public:
double gradient_depth() const { return _gradient_depth; }
void set_shape (Shape);
+ void set_always_get_image_in_thread (bool yn);
+
/* currently missing because we don't need them (yet):
set_shape_independent();
set_logscaled_independent()
@@ -147,6 +272,11 @@ public:
static void set_clip_level (double dB);
static PBD::Signal0<void> ClipLevelChanged;
+ static void start_drawing_thread ();
+ static void stop_drawing_thread ();
+
+ static void set_image_cache_size (uint64_t);
+
#ifdef CANVAS_COMPATIBILITY
void*& property_gain_src () {
return _foo_void;
@@ -154,17 +284,16 @@ public:
void*& property_gain_function () {
return _foo_void;
}
-private:
+ private:
void* _foo_void;
#endif
+ private:
friend class ::WaveViewTest;
+ friend class WaveViewThreadClient;
- static std::map <boost::shared_ptr<ARDOUR::AudioSource>, std::vector <CacheEntry> > _image_cache;
- void consolidate_image_cache () const;
- void invalidate_source (boost::weak_ptr<ARDOUR::AudioSource>);
- void invalidate_image_cache ();
+ void invalidate_image_cache ();
boost::shared_ptr<ARDOUR::AudioRegion> _region;
int _channel;
@@ -188,8 +317,38 @@ private:
*/
ARDOUR::frameoffset_t _region_start;
+ /** Under almost conditions, this is going to return _region->length(),
+ * but if _region_start has been reset, then we need
+ * to use this modified computation.
+ */
+ ARDOUR::framecnt_t region_length() const;
+ /** Under almost conditions, this is going to return _region->start() +
+ * _region->length(), but if _region_start has been reset, then we need
+ * to use this modified computation.
+ */
+ ARDOUR::framepos_t region_end() const;
+
+ /** If true, calls to get_image() will render a missing wave image
+ in the calling thread. Generally set to false, but true after a
+ call to set_height().
+ */
+ mutable bool get_image_in_thread;
+
+ /** If true, calls to get_image() will render a missing wave image
+ in the calling thread. Set true for waveviews we expect to
+ keep updating (e.g. while recording)
+ */
+ bool always_get_image_in_thread;
+
+ /** Set to true by render(). Used so that we know if the wave view
+ * has actually been displayed on screen. ::set_height() when this
+ * is true does not use get_image_in_thread, because it implies
+ * that the height is being set BEFORE the waveview is drawn.
+ */
+ mutable bool rendered;
+
PBD::ScopedConnectionList invalidation_connection;
- PBD::ScopedConnection _source_invalidated_connection;
+ PBD::ScopedConnection image_ready_connection;
static double _global_gradient_depth;
static bool _global_logscaled;
@@ -202,11 +361,49 @@ private:
void handle_visual_property_change ();
void handle_clip_level_change ();
- void get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start, framepos_t end, double& image_offset) const;
+ boost::shared_ptr<WaveViewCache::Entry> get_image (framepos_t start, framepos_t end, bool& full_image) const;
+ boost::shared_ptr<WaveViewCache::Entry> get_image_from_cache (framepos_t start, framepos_t end, bool& full_image) const;
+
+ struct LineTips {
+ double top;
+ double bot;
+ double spread;
+ bool clip_max;
+ bool clip_min;
+
+ LineTips() : top (0.0), bot (0.0), clip_max (false), clip_min (false) {}
+ };
+
+ ArdourCanvas::Coord y_extent (double) const;
+ void compute_tips (ARDOUR::PeakData const & peak, LineTips& tips) const;
- ArdourCanvas::Coord y_extent (double, bool) const;
+ ARDOUR::framecnt_t desired_image_width () const;
+
+ void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int n_peaks, boost::shared_ptr<WaveViewThreadRequest>) const;
void draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
- void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
+
+ void cancel_my_render_request () const;
+
+ void queue_get_image (boost::shared_ptr<const ARDOUR::Region> region, framepos_t start, framepos_t end) const;
+ void generate_image (boost::shared_ptr<WaveViewThreadRequest>, bool in_render_thread) const;
+ boost::shared_ptr<WaveViewCache::Entry> cache_request_result (boost::shared_ptr<WaveViewThreadRequest> req) const;
+
+ void image_ready ();
+
+ mutable boost::shared_ptr<WaveViewCache::Entry> _current_image;
+
+ mutable boost::shared_ptr<WaveViewThreadRequest> current_request;
+
+ static WaveViewCache* images;
+
+ static void drawing_thread ();
+
+ static gint drawing_thread_should_quit;
+ static Glib::Threads::Mutex request_queue_lock;
+ static Glib::Threads::Cond request_cond;
+ static Glib::Threads::Thread* _drawing_thread;
+ typedef std::set<WaveView const *> DrawingRequestQueue;
+ static DrawingRequestQueue request_queue;
};
}
diff --git a/libs/canvas/canvas/xfade_curve.h b/libs/canvas/canvas/xfade_curve.h
index c63e47c..60c1c45 100644
--- a/libs/canvas/canvas/xfade_curve.h
+++ b/libs/canvas/canvas/xfade_curve.h
@@ -40,7 +40,8 @@ public:
XFadeCurve (Item*, XFadePosition);
void set_fade_position (XFadePosition xfp) { _xfadeposition = xfp; }
-
+ void set_show_background_fade (bool show) { show_background_fade = show; }
+
void compute_bounding_box () const;
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
@@ -79,6 +80,8 @@ private:
Color _outline_color;
Color _fill_color;
+ bool show_background_fade;
+
void interpolate ();
};
diff --git a/libs/canvas/debug.cc b/libs/canvas/debug.cc
index 1f5de7f..be5b3a0 100644
--- a/libs/canvas/debug.cc
+++ b/libs/canvas/debug.cc
@@ -24,11 +24,12 @@
using namespace std;
-uint64_t PBD::DEBUG::CanvasItems = PBD::new_debug_bit ("canvasitems");
-uint64_t PBD::DEBUG::CanvasItemsDirtied = PBD::new_debug_bit ("canvasitemsdirtied");
-uint64_t PBD::DEBUG::CanvasEvents = PBD::new_debug_bit ("canvasevents");
-uint64_t PBD::DEBUG::CanvasRender = PBD::new_debug_bit ("canvasrender");
-uint64_t PBD::DEBUG::CanvasEnterLeave = PBD::new_debug_bit ("canvasenterleave");
+PBD::DebugBits PBD::DEBUG::CanvasItems = PBD::new_debug_bit ("canvasitems");
+PBD::DebugBits PBD::DEBUG::CanvasItemsDirtied = PBD::new_debug_bit ("canvasitemsdirtied");
+PBD::DebugBits PBD::DEBUG::CanvasEvents = PBD::new_debug_bit ("canvasevents");
+PBD::DebugBits PBD::DEBUG::CanvasRender = PBD::new_debug_bit ("canvasrender");
+PBD::DebugBits PBD::DEBUG::CanvasEnterLeave = PBD::new_debug_bit ("canvasenterleave");
+PBD::DebugBits PBD::DEBUG::WaveView = PBD::new_debug_bit ("waveview");
struct timeval ArdourCanvas::epoch;
map<string, struct timeval> ArdourCanvas::last_time;
diff --git a/libs/canvas/rectangle.cc b/libs/canvas/rectangle.cc
index 07288d5..cdc8d22 100644
--- a/libs/canvas/rectangle.cc
+++ b/libs/canvas/rectangle.cc
@@ -266,3 +266,26 @@ Rectangle::set_outline_what (What what)
end_visual_change ();
}
}
+
+double
+Rectangle::vertical_fraction (double y) const
+{
+ /* y is in canvas coordinates */
+
+ Duple i (canvas_to_item (Duple (0, y)));
+ boost::optional<Rect> r = bounding_box();
+ if (!r) {
+ return 0; /* not really correct, but what else can we do? */
+ }
+
+ Rect bbox (r.get());
+
+ if (i.y < bbox.y0 || i.y >= bbox.y1) {
+ return 0;
+ }
+
+ /* convert to fit Cairo origin model (origin at upper left)
+ */
+
+ return 1.0 - ((i.y - bbox.y0) / bbox.height());
+}
diff --git a/libs/canvas/ruler.cc b/libs/canvas/ruler.cc
index b11793c..5fa9cb5 100644
--- a/libs/canvas/ruler.cc
+++ b/libs/canvas/ruler.cc
@@ -36,6 +36,7 @@ Ruler::Ruler (Canvas* c, const Metric& m)
, _metric (&m)
, _lower (0)
, _upper (0)
+ , _divide_height (-1.0)
, _need_marks (true)
{
}
@@ -45,6 +46,7 @@ Ruler::Ruler (Canvas* c, const Metric& m, Rect const& r)
, _metric (&m)
, _lower (0)
, _upper (0)
+ , _divide_height (-1.0)
, _need_marks (true)
{
}
@@ -54,6 +56,7 @@ Ruler::Ruler (Item* parent, const Metric& m)
, _metric (&m)
, _lower (0)
, _upper (0)
+ , _divide_height (-1.0)
, _need_marks (true)
{
}
@@ -63,6 +66,7 @@ Ruler::Ruler (Item* parent, const Metric& m, Rect const& r)
, _metric (&m)
, _lower (0)
, _upper (0)
+ , _divide_height (-1.0)
, _need_marks (true)
{
}
@@ -154,13 +158,17 @@ Ruler::render (Rect const & area, Cairo::RefPtr<Cairo::Context> cr) const
switch (m->style) {
case Mark::Major:
- cr->rel_line_to (0, -height);
+ if (_divide_height >= 0) {
+ cr->rel_line_to (0, -_divide_height);
+ } else {
+ cr->rel_line_to (0, -height);
+ }
break;
case Mark::Minor:
- cr->rel_line_to (0, -height/2.0);
+ cr->rel_line_to (0, -height/4.0);
break;
case Mark::Micro:
- cr->rel_line_to (0, -height/4.0);
+ cr->rel_line_to (0, -height/16.0);
break;
}
cr->stroke ();
@@ -173,15 +181,49 @@ Ruler::render (Rect const & area, Cairo::RefPtr<Cairo::Context> cr) const
layout->set_text (m->label);
logical = layout->get_pixel_logical_extents ();
- cr->move_to (pos.x + 2.0, self.y0 + logical.get_y());
+ if (_divide_height >= 0) {
+ cr->move_to (pos.x + 2.0, self.y0 + _divide_height + logical.get_y() + 2.0); /* 2 pixel padding below divider */
+ } else {
+ cr->move_to (pos.x + 2.0, self.y0 + logical.get_y());
+ }
layout->show_in_cairo_context (cr);
}
}
+ if (_divide_height >= 0.0) {
+
+ cr->set_line_width (1.0);
+
+ set_source_rgba (cr, _divider_color_top);
+ cr->move_to (self.x0, self.y0 + _divide_height-1.0+0.5);
+ cr->line_to (self.x1, self.y0 + _divide_height-1.0+0.5);
+ cr->stroke ();
+
+ set_source_rgba (cr, _divider_color_bottom);
+ cr->move_to (self.x0, self.y0 + _divide_height+0.5);
+ cr->line_to (self.x1, self.y0 + _divide_height+0.5);
+ cr->stroke ();
+
+
+ }
+
/* done! */
}
void
+Ruler::set_divide_height (double h)
+{
+ _divide_height = h;
+}
+
+void
+Ruler::set_divide_colors (Color t, Color b)
+{
+ _divider_color_bottom = b;
+ _divider_color_top = t;
+}
+
+void
Ruler::set_metric (const Metric& m)
{
_metric = &m;
diff --git a/libs/canvas/text.cc b/libs/canvas/text.cc
index 8744a7f..a77e030 100644
--- a/libs/canvas/text.cc
+++ b/libs/canvas/text.cc
@@ -20,6 +20,7 @@
#include <gdk/gdk.h>
#include <cairomm/cairomm.h>
+#include <gtkmm/window.h>
#include <gtkmm/label.h>
#include "pbd/stacktrace.h"
@@ -32,6 +33,7 @@
using namespace std;
using namespace ArdourCanvas;
+
Text::Text (Canvas* c)
: Item (c)
, _color (0x000000ff)
@@ -40,6 +42,7 @@ Text::Text (Canvas* c)
, _width (0)
, _height (0)
, _need_redraw (false)
+ , _width_correction (-1)
, _clamped_width (COORD_MAX)
{
_outline = false;
@@ -53,6 +56,7 @@ Text::Text (Item* parent)
, _width (0)
, _height (0)
, _need_redraw (false)
+ , _width_correction (-1)
, _clamped_width (COORD_MAX)
{
_outline = false;
@@ -77,7 +81,7 @@ Text::set (string const & text)
}
void
-Text::redraw (Cairo::RefPtr<Cairo::Context> context) const
+Text::_redraw (Cairo::RefPtr<Cairo::Context> context) const
{
if (_text.empty()) {
return;
@@ -85,23 +89,48 @@ Text::redraw (Cairo::RefPtr<Cairo::Context> context) const
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create (context);
- _redraw (layout);
+ __redraw (layout);
}
void
-Text::redraw (Glib::RefPtr<Pango::Context> context) const
+Text::_redraw (Glib::RefPtr<Pango::Context> context) const
{
if (_text.empty()) {
return;
}
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create (context);
- _redraw (layout);
+ __redraw (layout);
}
void
-Text::_redraw (Glib::RefPtr<Pango::Layout> layout) const
+Text::__redraw (Glib::RefPtr<Pango::Layout> layout) const
{
+#ifdef __APPLE__
+ if (_width_correction < 0.0) {
+ // Pango returns incorrect text width on some OS X
+ // So we have to make a correction
+ // To determine the correct indent take the largest symbol for which the width is correct
+ // and make the calculation
+ Gtk::Window win;
+ Gtk::Label foo;
+ win.add (foo);
+
+ int width = 0;
+ int height = 0;
+ Glib::RefPtr<Pango::Layout> test_layout = foo.create_pango_layout ("H");
+ if (_font_description) {
+ test_layout->set_font_description (*_font_description);
+ }
+ test_layout->get_pixel_size (width, height);
+
+ _width_correction = width*1.5;
+ }
+#else
+ /* don't bother with a conditional here */
+ _width_correction = 0.0;
+#endif
+
layout->set_text (_text);
if (_font_description) {
@@ -109,19 +138,29 @@ Text::_redraw (Glib::RefPtr<Pango::Layout> layout) const
}
layout->set_alignment (_alignment);
-
+
int w;
int h;
layout->get_pixel_size (w, h);
- _width = w;
+ _width = w + _width_correction;
_height = h;
+#ifdef __APPLE__
+ _image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, _width * 2, _height * 2);
+#else
_image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, _width, _height);
-
+#endif
+
Cairo::RefPtr<Cairo::Context> img_context = Cairo::Context::create (_image);
+#ifdef __APPLE__
+ /* Below, the rendering scaling is set to support retina display
+ */
+ img_context->scale (2, 2);
+#endif
+
/* and draw, in the appropriate color of course */
if (_outline) {
@@ -158,14 +197,24 @@ Text::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
}
if (_need_redraw) {
- redraw (context);
+ _redraw (context);
}
Rect intersection (i.get());
context->rectangle (intersection.x0, intersection.y0, intersection.width(), intersection.height());
+#ifdef __APPLE__
+ /* Below, the rendering scaling is set to support retina display
+ */
+ Cairo::Matrix original_matrix = context->get_matrix();
+ context->scale (0.5, 0.5);
+ context->set_source (_image, self.x0 * 2, self.y0 * 2);
+ context->fill ();
+ context->set_matrix (original_matrix);
+#else
context->set_source (_image, self.x0, self.y0);
context->fill ();
+#endif
}
void
@@ -189,7 +238,7 @@ Text::compute_bounding_box () const
if (_bounding_box_dirty) {
if (_need_redraw || !_image) {
Glib::RefPtr<Pango::Context> context = Glib::wrap (gdk_pango_context_get()); // context now owns C object and will free it
- redraw (context);
+ _redraw (context);
}
_bounding_box = Rect (0, 0, min (_clamped_width, (double) _image->get_width()), _image->get_height());
_bounding_box_dirty = false;
@@ -214,6 +263,7 @@ Text::set_font_description (Pango::FontDescription font_description)
_font_description = new Pango::FontDescription (font_description);
_need_redraw = true;
+ _width_correction = -1.0;
_bounding_box_dirty = true;
end_change ();
@@ -244,3 +294,14 @@ Text::dump (ostream& o) const
o << endl;
}
+
+
+double
+Text::text_width() const
+{
+ if (_need_redraw) {
+ redraw ();
+ }
+
+ return _width;
+}
diff --git a/libs/canvas/tracking_text.cc b/libs/canvas/tracking_text.cc
index ea44102..c5f7540 100644
--- a/libs/canvas/tracking_text.cc
+++ b/libs/canvas/tracking_text.cc
@@ -128,17 +128,23 @@ TrackingText::show_and_track (bool tx, bool ty)
void
TrackingText::set_x_offset (double o)
{
+ begin_change ();
offset.x = o;
+ end_change ();
}
void
TrackingText::set_y_offset (double o)
{
+ begin_change ();
offset.y = o;
+ end_change ();
}
void
TrackingText::set_offset (Duple const & d)
{
+ begin_change ();
offset = d;
+ end_change ();
}
diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc
index 8fda5ff..809ea4e 100644
--- a/libs/canvas/wave_view.cc
+++ b/libs/canvas/wave_view.cc
@@ -21,9 +21,14 @@
#include <cmath>
#include <cairomm/cairomm.h>
+#include <glibmm/threads.h>
+
#include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/gui_thread.h"
+#include "pbd/base_ui.h"
#include "pbd/compose.h"
+#include "pbd/convert.h"
#include "pbd/signals.h"
#include "pbd/stacktrace.h"
@@ -31,11 +36,16 @@
#include "ardour/dB.h"
#include "ardour/lmath.h"
#include "ardour/audioregion.h"
+#include "ardour/audiosource.h"
+#include "ardour/session.h"
-#include "canvas/wave_view.h"
-#include "canvas/utils.h"
#include "canvas/canvas.h"
#include "canvas/colors.h"
+#include "canvas/debug.h"
+#include "canvas/utils.h"
+#include "canvas/wave_view.h"
+
+#include "evoral/Range.hpp"
#include <gdkmm/general.h>
@@ -43,17 +53,22 @@
using namespace std;
using namespace ARDOUR;
+using namespace PBD;
using namespace ArdourCanvas;
-#define CACHE_HIGH_WATER (2)
-
-std::map <boost::shared_ptr<AudioSource>, std::vector<WaveView::CacheEntry> > WaveView::_image_cache;
double WaveView::_global_gradient_depth = 0.6;
bool WaveView::_global_logscaled = false;
WaveView::Shape WaveView::_global_shape = WaveView::Normal;
bool WaveView::_global_show_waveform_clipping = true;
double WaveView::_clip_level = 0.98853;
+WaveViewCache* WaveView::images = 0;
+gint WaveView::drawing_thread_should_quit = 0;
+Glib::Threads::Mutex WaveView::request_queue_lock;
+Glib::Threads::Cond WaveView::request_cond;
+Glib::Threads::Thread* WaveView::_drawing_thread = 0;
+WaveView::DrawingRequestQueue WaveView::request_queue;
+
PBD::Signal0<void> WaveView::VisualPropertiesChanged;
PBD::Signal0<void> WaveView::ClipLevelChanged;
@@ -73,16 +88,21 @@ WaveView::WaveView (Canvas* c, boost::shared_ptr<ARDOUR::AudioRegion> region)
, _logscaled_independent (false)
, _gradient_depth_independent (false)
, _amplitude_above_axis (1.0)
- , _region_amplitude (_region->scale_amplitude ())
+ , _region_amplitude (region->scale_amplitude ())
, _start_shift (0.0)
, _region_start (region->start())
+ , get_image_in_thread (false)
+ , always_get_image_in_thread (false)
+ , rendered (false)
{
- _region->DropReferences.connect (_source_invalidated_connection, MISSING_INVALIDATOR,
- boost::bind (&ArdourCanvas::WaveView::invalidate_source,
- this, boost::weak_ptr<AudioSource>(_region->audio_source())), gui_context());
+ if (!images) {
+ images = new WaveViewCache;
+ }
VisualPropertiesChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_visual_property_change, this));
ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this));
+
+ ImageReady.connect (image_ready_connection, invalidator (*this), boost::bind (&WaveView::image_ready, this), gui_context());
}
WaveView::WaveView (Item* parent, boost::shared_ptr<ARDOUR::AudioRegion> region)
@@ -101,23 +121,47 @@ WaveView::WaveView (Item* parent, boost::shared_ptr<ARDOUR::AudioRegion> region)
, _logscaled_independent (false)
, _gradient_depth_independent (false)
, _amplitude_above_axis (1.0)
- , _region_amplitude (_region->scale_amplitude ())
+ , _region_amplitude (region->scale_amplitude ())
+ , _start_shift (0.0)
, _region_start (region->start())
+ , get_image_in_thread (false)
+ , always_get_image_in_thread (false)
+ , rendered (false)
{
- _region->DropReferences.connect (_source_invalidated_connection, MISSING_INVALIDATOR,
- boost::bind (&ArdourCanvas::WaveView::invalidate_source,
- this, boost::weak_ptr<AudioSource>(_region->audio_source())), gui_context());
+ if (!images) {
+ images = new WaveViewCache;
+ }
VisualPropertiesChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_visual_property_change, this));
ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this));
+
+ ImageReady.connect (image_ready_connection, invalidator (*this), boost::bind (&WaveView::image_ready, this), gui_context());
}
WaveView::~WaveView ()
{
- _source_invalidated_connection.disconnect();
invalidate_image_cache ();
}
+string
+WaveView::debug_name() const
+{
+ return _region->name() + string (":") + PBD::to_string (_channel+1, std::dec);
+}
+
+void
+WaveView::image_ready ()
+{
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("queue draw for %1 at %2 (vis = %3 bbox = %4 CR %5)\n", this, g_get_monotonic_time(), visible(), _bounding_box, current_request));
+ redraw ();
+}
+
+void
+WaveView::set_always_get_image_in_thread (bool yn)
+{
+ always_get_image_in_thread = yn;
+}
+
void
WaveView::handle_visual_property_change ()
{
@@ -189,12 +233,6 @@ WaveView::set_samples_per_pixel (double samples_per_pixel)
}
}
-static inline double
-window_to_image (double wave_origin, double image_start)
-{
- return image_start - wave_origin;
-}
-
static inline float
_log_meter (float power, double lower_db, double upper_db, double non_linearity)
{
@@ -218,166 +256,73 @@ WaveView::set_clip_level (double dB)
}
void
-WaveView::invalidate_source (boost::weak_ptr<AudioSource> src)
-{
- if (boost::shared_ptr<AudioSource> source = src.lock()) {
-
- std::map <boost::shared_ptr<ARDOUR::AudioSource>, std::vector <CacheEntry> >::iterator i;
- for (i = _image_cache.begin (); i != _image_cache.end (); ++i) {
- if (i->first == source) {
- for (uint32_t n = 0; n < i->second.size (); ++n) {
- i->second[n].image.clear ();
- }
- i->second.clear ();
- _image_cache.erase (i->first);
- }
- }
- }
-}
-
-void
WaveView::invalidate_image_cache ()
{
- vector <uint32_t> deletion_list;
- vector <CacheEntry> caches;
-
- /* The source may have disappeared.*/
-
- if (_region->n_channels() == 0) {
- return;
- }
-
- if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
- caches = _image_cache.find (_region->audio_source ())->second;
- } else {
- return;
- }
-
- for (uint32_t i = 0; i < caches.size (); ++i) {
-
- if (_channel != caches[i].channel
- || _height != caches[i].height
- || _region_amplitude != caches[i].amplitude
- || _fill_color != caches[i].fill_color) {
-
- continue;
- }
-
- deletion_list.push_back (i);
- }
-
- while (deletion_list.size() > 0) {
- caches[deletion_list.back ()].image.clear ();
- caches.erase (caches.begin() + deletion_list.back());
- deletion_list.pop_back();
- }
-
- if (caches.size () == 0) {
- _image_cache.erase(_region->audio_source ());
- } else {
- _image_cache[_region->audio_source ()] = caches;
- }
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 invalidates image cache and cancels current request\n", this));
+ cancel_my_render_request ();
+ _current_image.reset ();
}
void
-WaveView::consolidate_image_cache () const
+WaveView::compute_tips (PeakData const & peak, WaveView::LineTips& tips) const
{
- list <uint32_t> deletion_list;
- vector <CacheEntry> caches;
- uint32_t other_entries = 0;
-
- if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
- caches = _image_cache.find (_region->audio_source ())->second;
- }
+ const double effective_height = _height;
- for (uint32_t i = 0; i < caches.size (); ++i) {
-
- if (_channel != caches[i].channel
- || _height != caches[i].height
- || _region_amplitude != caches[i].amplitude
- || _fill_color != caches[i].fill_color) {
-
- other_entries++;
- continue;
- }
+ /* remember: canvas (and cairo) coordinate space puts the origin at the upper left.
+
+ So, a sample value of 1.0 (0dbFS) will be computed as:
- framepos_t segment_start = caches[i].start;
- framepos_t segment_end = caches[i].end;
+ (1.0 - 1.0) * 0.5 * effective_height
- for (uint32_t j = i; j < caches.size (); ++j) {
+ which evaluates to 0, or the top of the image.
- if (i == j || _channel != caches[j].channel
- || _height != caches[i].height
- || _region_amplitude != caches[i].amplitude
- || _fill_color != caches[i].fill_color) {
+ A sample value of -1.0 will be computed as
- continue;
- }
+ (1.0 + 1.0) * 0.5 * effective height
- if (caches[j].start >= segment_start && caches[j].end <= segment_end) {
+ which evaluates to effective height, or the bottom of the image.
+ */
- deletion_list.push_back (j);
- }
- }
- }
+ const double pmax = (1.0 - peak.max) * 0.5 * effective_height;
+ const double pmin = (1.0 - peak.min) * 0.5 * effective_height;
- deletion_list.sort ();
- deletion_list.unique ();
+ /* remember that the bottom of the image (pmin) has larger y-coordinates
+ than the top (pmax).
+ */
- while (deletion_list.size() > 0) {
- caches[deletion_list.back ()].image.clear ();
- caches.erase (caches.begin() + deletion_list.back ());
- deletion_list.pop_back();
- }
+ double spread = (pmin - pmax) * 0.5;
- /* We don't care if this channel/height/amplitude has anything in the cache - just drop the Last Added entries
- until we reach a size where there is a maximum of CACHE_HIGH_WATER + other entries.
- */
+ /* find the nearest pixel to the nominal center. */
+ const double center = round (pmin - spread);
- while (caches.size() > CACHE_HIGH_WATER + other_entries) {
- caches.front ().image.clear ();
- caches.erase(caches.begin ());
- }
+ if (spread < 1.0) {
+ /* minimum distance between line ends is 1 pixel, and we want it "centered" on a pixel,
+ as per cairo single-pixel line issues.
- if (caches.size () == 0) {
- _image_cache.erase (_region->audio_source ());
+ NOTE: the caller will not draw a line between these two points if the spread is
+ less than 2 pixels. So only the tips.top value matters, which is where we will
+ draw a single pixel as part of the outline.
+ */
+ tips.top = center;
+ tips.bot = center + 1.0;
} else {
- _image_cache[_region->audio_source ()] = caches;
+ /* round spread above and below center to an integer number of pixels */
+ spread = round (spread);
+ /* top and bottom are located equally either side of the center */
+ tips.top = center - spread;
+ tips.bot = center + spread;
}
+
+ tips.top = min (effective_height, max (0.0, tips.top));
+ tips.bot = min (effective_height, max (0.0, tips.bot));
}
+
Coord
-WaveView::y_extent (double s, bool /*round_to_lower_edge*/) const
+WaveView::y_extent (double s) const
{
- /* it is important that this returns an integral value, so that we
- * can ensure correct single pixel behaviour.
- *
- * we need (_height - max(wave_line_width))
- * wave_line_width == 1 IFF top==bottom (1 sample per pixel or flat line)
- * wave_line_width == 2 otherwise
- * then round away from the zero line, towards peak
- */
- if (_shape == Rectified) {
- // we only ever have 1 point and align to the bottom (not center)
- return floor ((1.0 - s) * (_height - 2.0));
- } else {
- /* currently canvas rectangle is off-by-one and we
- * cannot draw a pixel at 0 (-.5 .. +.5) without it being
- * clipped. A value 1.0 (ideally one point at y=0) ends
- * up a pixel down. and a value of -1.0 (ideally y = _height-1)
- * currently is on the bottom separator line :(
- * So to make the complete waveform appear centered in
- * a region, we translate by +1.5 (instead of -.5)
- * and scale to height - 2.5 (if we scale to height - 2.0
- * then the bottom most pixel may bleed into the selection rect
- * by 0.5 px)
- *
- */
- Coord pos;
- pos = floor ((1.0 - s) * .5 * (_height - 2.5));
-
- return min (_height - 2.5, (max (0.0, pos)));
- }
+ assert (_shape == Rectified);
+ return floor ((1.0 - s) * _height);
}
void
@@ -412,16 +357,6 @@ WaveView::draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData
context->fill ();
}
-struct LineTips {
- double top;
- double bot;
- double spread;
- bool clip_max;
- bool clip_min;
-
- LineTips() : top (0.0), bot (0.0), clip_max (false), clip_min (false) {}
-};
-
struct ImageSet {
Cairo::RefPtr<Cairo::ImageSurface> wave;
Cairo::RefPtr<Cairo::ImageSurface> outline;
@@ -433,7 +368,7 @@ struct ImageSet {
};
void
-WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peaks, int n_peaks) const
+WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peaks, int n_peaks, boost::shared_ptr<WaveViewThreadRequest> req) const
{
ImageSet images;
@@ -478,8 +413,8 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
tips[i].bot = height() - 1.0;
const double p = alt_log_meter (fast_coefficient_to_dB (max (fabs (_peaks[i].max), fabs (_peaks[i].min))));
- tips[i].top = y_extent (p, false);
- tips[i].spread = p * (_height - 1.0);
+ tips[i].top = y_extent (p);
+ tips[i].spread = p * _height;
if (_peaks[i].max >= clip_level) {
tips[i].clip_max = true;
@@ -495,8 +430,8 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
tips[i].bot = height() - 1.0;
const double p = max(fabs (_peaks[i].max), fabs (_peaks[i].min));
- tips[i].top = y_extent (p, false);
- tips[i].spread = p * (_height - 2.0);
+ tips[i].top = y_extent (p);
+ tips[i].spread = p * _height;
if (p >= clip_level) {
tips[i].clip_max = true;
}
@@ -508,34 +443,34 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
if (_logscaled) {
for (int i = 0; i < n_peaks; ++i) {
- double top = _peaks[i].max;
- double bot = _peaks[i].min;
+ PeakData p;
+ p.max = _peaks[i].max;
+ p.min = _peaks[i].min;
if (_peaks[i].max >= clip_level) {
- tips[i].clip_max = true;
+ tips[i].clip_max = true;
}
if (-(_peaks[i].min) >= clip_level) {
tips[i].clip_min = true;
}
- if (top > 0.0) {
- top = alt_log_meter (fast_coefficient_to_dB (top));
- } else if (top < 0.0) {
- top =-alt_log_meter (fast_coefficient_to_dB (-top));
+ if (p.max > 0.0) {
+ p.max = alt_log_meter (fast_coefficient_to_dB (p.max));
+ } else if (p.max < 0.0) {
+ p.max =-alt_log_meter (fast_coefficient_to_dB (-p.max));
} else {
- top = 0.0;
+ p.max = 0.0;
}
- if (bot > 0.0) {
- bot = alt_log_meter (fast_coefficient_to_dB (bot));
- } else if (bot < 0.0) {
- bot = -alt_log_meter (fast_coefficient_to_dB (-bot));
+ if (p.min > 0.0) {
+ p.min = alt_log_meter (fast_coefficient_to_dB (p.min));
+ } else if (p.min < 0.0) {
+ p.min = -alt_log_meter (fast_coefficient_to_dB (-p.min));
} else {
- bot = 0.0;
+ p.min = 0.0;
}
-
- tips[i].top = y_extent (top, false);
- tips[i].bot = y_extent (bot, true);
+
+ compute_tips (p, tips[i]);
tips[i].spread = tips[i].bot - tips[i].top;
}
@@ -548,13 +483,17 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
tips[i].clip_min = true;
}
- tips[i].top = y_extent (_peaks[i].max, false);
- tips[i].bot = y_extent (_peaks[i].min, true);
+ compute_tips (_peaks[i], tips[i]);
tips[i].spread = tips[i].bot - tips[i].top;
}
}
}
+
+ if (req->should_stop()) {
+ return;
+ }
+
Color alpha_one = rgba_to_color (0, 0, 0, 1.0);
set_source_rgba (wave_context, alpha_one);
@@ -565,16 +504,16 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
/* ensure single-pixel lines */
wave_context->set_line_width (1.0);
- wave_context->translate (0.5, +1.5);
+ wave_context->translate (0.5, 0.5);
outline_context->set_line_width (1.0);
- outline_context->translate (0.5, +1.5);
+ outline_context->translate (0.5, 0.5);
clip_context->set_line_width (1.0);
- clip_context->translate (0.5, +1.5);
+ clip_context->translate (0.5, 0.5);
zero_context->set_line_width (1.0);
- zero_context->translate (0.5, +1.5);
+ zero_context->translate (0.5, 0.5);
/* the height of the clip-indicator should be at most 7 pixels,
* or 5% of the height of the waveview item.
@@ -636,7 +575,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
outline_context->stroke ();
} else {
- const double height_2 = (_height - 2.5) * .5;
+ const int height_zero = floor( _height * .5);
for (int i = 0; i < n_peaks; ++i) {
@@ -646,6 +585,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
wave_context->move_to (i, tips[i].top);
wave_context->line_to (i, tips[i].bot);
}
+
/* draw square waves and other discontiguous points clearly */
if (i > 0) {
if (tips[i-1].top + 2 < tips[i].top) {
@@ -661,10 +601,11 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
}
}
- /* zero line */
+ /* zero line, show only if there is enough spread
+ or the waveform line does not cross zero line */
- if (tips[i].spread >= 5.0 && show_zero_line()) {
- zero_context->move_to (i, floor(height_2));
+ if (show_zero_line() && ((tips[i].spread >= 5.0) || (tips[i].top > height_zero ) || (tips[i].bot < height_zero)) ) {
+ zero_context->move_to (i, height_zero);
zero_context->rel_line_to (1.0, 0);
}
@@ -685,13 +626,17 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
clipped = true;
}
- if (!clipped) {
- outline_context->move_to (i, tips[i].bot + 1.0);
- /* normal lower terminal dot */
+ if (!clipped && tips[i].spread > 2.0) {
+ /* only draw the outline if the spread
+ implies 3 or more pixels (so that we see 1
+ white pixel in the middle).
+ */
+ outline_context->move_to (i, tips[i].bot);
+ /* normal lower terminal dot; line moves up */
outline_context->rel_line_to (0, -1.0);
- outline_context->move_to (i, tips[i].top - 1.0);
- /* normal upper terminal dot */
+ outline_context->move_to (i, tips[i].top);
+ /* normal upper terminal dot, line moves down */
outline_context->rel_line_to (0, 1.0);
}
} else {
@@ -705,10 +650,15 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
}
if (!clipped) {
+ /* special case where only 1 pixel of
+ * the waveform line is drawn (and
+ * nothing else).
+ *
+ * we draw a 1px "line", pretending
+ * that the span is 1.0 (whether it is
+ * zero or 1.0)
+ */
wave_context->move_to (i, tips[i].top);
- /* special case where outline only is drawn.
- * we draw a 1px "line", pretending that the span is 1.0
- */
wave_context->rel_line_to (0, 1.0);
}
}
@@ -720,6 +670,10 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
zero_context->stroke ();
}
+ if (req->should_stop()) {
+ return;
+ }
+
Cairo::RefPtr<Cairo::Context> context = Cairo::Context::create (image);
/* Here we set a source colour and use the various components as a mask. */
@@ -760,6 +714,10 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
set_source_rgba (context, _fill_color);
}
+ if (req->should_stop()) {
+ return;
+ }
+
context->mask (images.wave, 0, 0);
context->fill ();
@@ -774,94 +732,327 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
set_source_rgba (context, _zero_color);
context->mask (images.zero, 0, 0);
context->fill ();
-
}
-void
-WaveView::get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start, framepos_t end, double& image_offset) const
+boost::shared_ptr<WaveViewCache::Entry>
+WaveView::cache_request_result (boost::shared_ptr<WaveViewThreadRequest> req) const
{
- vector <CacheEntry> caches;
+ boost::shared_ptr<WaveViewCache::Entry> ret (new WaveViewCache::Entry (req->channel,
+ req->height,
+ req->amplitude,
+ req->fill_color,
+ req->samples_per_pixel,
+ req->start,
+ req->end,
+ req->image));
+ images->add (_region->audio_source (_channel), ret);
+
+ /* consolidate cache first (removes fully-contained
+ * duplicate images)
+ */
+
+ images->consolidate_image_cache (_region->audio_source (_channel),
+ req->channel, req->height, req->amplitude,
+ req->fill_color, req->samples_per_pixel);
- if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
+ return ret;
+}
- caches = _image_cache.find (_region->audio_source ())->second;
- }
+boost::shared_ptr<WaveViewCache::Entry>
+WaveView::get_image (framepos_t start, framepos_t end, bool& full_image) const
+{
+ boost::shared_ptr<WaveViewCache::Entry> ret;
- /* Find a suitable ImageSurface.
+ full_image = true;
+
+ /* this is called from a ::render() call, when we need an image to
+ draw with.
*/
- for (uint32_t i = 0; i < caches.size (); ++i) {
- if (_channel != caches[i].channel
- || _height != caches[i].height
- || _region_amplitude != caches[i].amplitude
- || _fill_color != caches[i].fill_color) {
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 needs image from %2 .. %3\n", name, start, end));
+
+
+ {
+ Glib::Threads::Mutex::Lock lmq (request_queue_lock);
- continue;
+ /* if there's a draw request outstanding, check to see if we
+ * have an image there. if so, use it (and put it in the cache
+ * while we're here.
+ */
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 CR %2 stop? %3 image %4\n", this, current_request,
+ (current_request ? current_request->should_stop() : false),
+ (current_request ? current_request->image : 0)));
+
+ if (current_request && !current_request->should_stop() && current_request->image) {
+
+ /* put the image into the cache so that other
+ * WaveViews can use it if it is useful
+ */
+
+ if (current_request->start <= start && current_request->end >= end) {
+
+ ret.reset (new WaveViewCache::Entry (current_request->channel,
+ current_request->height,
+ current_request->amplitude,
+ current_request->fill_color,
+ current_request->samples_per_pixel,
+ current_request->start,
+ current_request->end,
+ current_request->image));
+
+ cache_request_result (current_request);
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1: got image from completed request, spans %2..%3\n",
+ name, current_request->start, current_request->end));
+ }
+
+ /* drop our handle on the current request */
+ current_request.reset ();
}
+ }
- framepos_t segment_start = caches[i].start;
- framepos_t segment_end = caches[i].end;
+ if (!ret) {
- if (end <= segment_end && start >= segment_start) {
- image_offset = (segment_start - _region_start) / _samples_per_pixel;
- image = caches[i].image;
+ /* no current image draw request, so look in the cache */
+
+ ret = get_image_from_cache (start, end, full_image);
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1: lookup from cache gave %2 (full %3)\n",
+ name, ret, full_image));
- return;
+ }
+
+
+
+ if (!ret || !full_image) {
+
+ if ((rendered && get_image_in_thread) || always_get_image_in_thread) {
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1: generating image in caller thread\n", name));
+
+ boost::shared_ptr<WaveViewThreadRequest> req (new WaveViewThreadRequest);
+
+ req->type = WaveViewThreadRequest::Draw;
+ req->start = start;
+ req->end = end;
+ req->samples_per_pixel = _samples_per_pixel;
+ req->region = _region; /* weak ptr, to avoid storing a reference in the request queue */
+ req->channel = _channel;
+ req->height = _height;
+ req->fill_color = _fill_color;
+ req->amplitude = _region_amplitude * _amplitude_above_axis;
+ req->width = desired_image_width ();
+
+ /* draw image in this (the GUI thread) */
+
+ generate_image (req, false);
+
+ /* cache the result */
+
+ ret = cache_request_result (req);
+
+ /* reset this so that future missing images are
+ * generated in a a worker thread.
+ */
+
+ get_image_in_thread = false;
+
+ } else {
+ queue_get_image (_region, start, end);
}
}
- consolidate_image_cache ();
+ if (ret) {
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 got an image from %2 .. %3 (full ? %4)\n", name, ret->start, ret->end, full_image));
+ } else {
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 no useful image available\n", name));
+ }
- /* sample position is canonical here, and we want to generate
- * an image that spans about twice the canvas width
- */
+ return ret;
+}
- const framepos_t center = start + ((end - start) / 2);
- const framecnt_t canvas_samples = _canvas->visible_area().width() * _samples_per_pixel; /* one canvas width */
+boost::shared_ptr<WaveViewCache::Entry>
+WaveView::get_image_from_cache (framepos_t start, framepos_t end, bool& full) const
+{
+ if (!images) {
+ return boost::shared_ptr<WaveViewCache::Entry>();
+ }
- /* we can request data from anywhere in the Source, between 0 and its length
- */
+ return images->lookup_image (_region->audio_source (_channel), start, end, _channel,
+ _height, _region_amplitude * _amplitude_above_axis, _fill_color, _samples_per_pixel, full);
+}
- framepos_t sample_start = max ((framepos_t) 0, (center - canvas_samples));
- framepos_t sample_end = min (center + canvas_samples, _region->source_length (0));
+framecnt_t
+WaveView::desired_image_width () const
+{
+ /* compute how wide the image should be, in samples.
+ *
+ * We want at least 1 canvas width's worth, but if that
+ * represents less than 1/10th of a second, use 1/10th of
+ * a second instead.
+ */
+
+ framecnt_t canvas_width_samples = _canvas->visible_area().width() * _samples_per_pixel;
+ const framecnt_t one_tenth_of_second = _region->session().frame_rate() / 10;
+
+ if (canvas_width_samples > one_tenth_of_second) {
+ return canvas_width_samples;
+ }
+
+ return one_tenth_of_second;
+}
- const int n_peaks = llrintf ((sample_end - sample_start)/ (double) _samples_per_pixel);
+void
+WaveView::queue_get_image (boost::shared_ptr<const ARDOUR::Region> region, framepos_t start, framepos_t end) const
+{
+ boost::shared_ptr<WaveViewThreadRequest> req (new WaveViewThreadRequest);
+
+ req->type = WaveViewThreadRequest::Draw;
+ req->start = start;
+ req->end = end;
+ req->samples_per_pixel = _samples_per_pixel;
+ req->region = _region; /* weak ptr, to avoid storing a reference in the request queue */
+ req->channel = _channel;
+ req->height = _height;
+ req->fill_color = _fill_color;
+ req->amplitude = _region_amplitude * _amplitude_above_axis;
+ req->width = desired_image_width ();
+
+ if (current_request) {
+ /* this will stop rendering in progress (which might otherwise
+ be long lived) for any current request.
+ */
+ current_request->cancel ();
+ }
- boost::scoped_array<ARDOUR::PeakData> peaks (new PeakData[n_peaks]);
+ start_drawing_thread ();
- framecnt_t peaks_read;
- peaks_read = _region->read_peaks (peaks.get(), n_peaks,
- sample_start, sample_end - sample_start,
- _channel,
- _samples_per_pixel);
+ /* swap requests (protected by lock) */
- image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, _height);
+ {
+ Glib::Threads::Mutex::Lock lm (request_queue_lock);
+ current_request = req;
- if (peaks_read > 0) {
- draw_image (image, peaks.get(), n_peaks);
- } else {
- draw_absent_image (image, peaks.get(), n_peaks);
- }
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 now has current request %2\n", this, req));
- _image_cache[_region->audio_source ()].push_back (CacheEntry (_channel, _height, _region_amplitude, _fill_color, sample_start, sample_end, image));
+ if (request_queue.insert (this).second) {
+ /* this waveview was not already in the request queue, make sure we wake
+ the rendering thread in case it is asleep.
+ */
+ request_cond.signal ();
+ }
+ }
+}
- image_offset = (sample_start - _region->start()) / _samples_per_pixel;
+void
+WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_render_thread) const
+{
+ if (!req->should_stop()) {
- //cerr << "_image_cache size is : " << _image_cache.size() << " entries for this audiosource : " << _image_cache.find (_region->audio_source ())->second.size() << endl;
+ /* sample position is canonical here, and we want to generate
+ * an image that spans about 3x the canvas width. We get to that
+ * width by using an image sample count of the screen width added
+ * on each side of the desired image center.
+ */
+
+ const framepos_t center = req->start + ((req->end - req->start) / 2);
+ const framecnt_t image_samples = req->width;
+
+ /* we can request data from anywhere in the Source, between 0 and its length
+ */
+
+ framepos_t sample_start = max (_region_start, (center - image_samples));
+ framepos_t sample_end = min (center + image_samples, region_end());
+ const int n_peaks = llrintf ((sample_end - sample_start)/ (req->samples_per_pixel));
+
+ boost::scoped_array<ARDOUR::PeakData> peaks (new PeakData[n_peaks]);
+
+ /* Note that Region::read_peaks() takes a start position based on an
+ offset into the Region's **SOURCE**, rather than an offset into
+ the Region itself.
+ */
+
+ framecnt_t peaks_read = _region->read_peaks (peaks.get(), n_peaks,
+ sample_start, sample_end - sample_start,
+ req->channel,
+ req->samples_per_pixel);
+
+ req->image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, req->height);
+ /* make sure we record the sample positions that were actually used */
+ req->start = sample_start;
+ req->end = sample_end;
+
+ if (peaks_read > 0) {
+
+ if (_amplitude_above_axis != 1.0) {
+ for (framecnt_t i = 0; i < n_peaks; ++i) {
+ peaks[i].max *= _amplitude_above_axis;
+ peaks[i].min *= _amplitude_above_axis;
+ }
+ }
+ draw_image (req->image, peaks.get(), n_peaks, req);
+ } else {
+ draw_absent_image (req->image, peaks.get(), n_peaks);
+ }
+ }
+
+ if (in_render_thread && !req->should_stop()) {
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("done with request for %1 at %2 CR %3 req %4 range %5 .. %6\n", this, g_get_monotonic_time(), current_request, req, req->start, req->end));
+ const_cast<WaveView*>(this)->ImageReady (); /* emit signal */
+ }
+
return;
}
+/** Given a waveform that starts at window x-coordinate @param wave_origin
+ * and the first pixel that we will actually draw @param draw_start, return
+ * the offset into an image of the entire waveform that we will need to use.
+ *
+ * Note: most of our cached images are NOT of the entire waveform, this is just
+ * computationally useful when determining which the sample range span for
+ * the image we need.
+ */
+static inline double
+window_to_image (double wave_origin, double image_start)
+{
+ return image_start - wave_origin;
+}
+
void
WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
{
assert (_samples_per_pixel != 0);
-
+
if (!_region) {
return;
}
- Rect self = item_to_window (Rect (0.0, 0.0, _region->length() / _samples_per_pixel, _height));
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("render %1 at %2\n", this, g_get_monotonic_time()));
+
+ /* a WaveView is intimately connected to an AudioRegion. It will
+ * display the waveform within the region, anywhere from the start of
+ * the region to its end.
+ *
+ * the area we've been aked to render may overlap with area covered
+ * by the region in any of the normal ways:
+ *
+ * - it may begin and end within the area covered by the region
+ * - it may start before and end after the area covered by region
+ * - it may start before and end within the area covered by the region
+ * - it may start within and end after the area covered by the region
+ * - it may be precisely coincident with the area covered by region.
+ *
+ * So let's start by determining the area covered by the region, in
+ * window coordinates. It begins at zero (in item coordinates for this
+ * waveview, and extends to region_length() / _samples_per_pixel.
+ */
+
+ Rect self = item_to_window (Rect (0.0, 0.0, region_length() / _samples_per_pixel, _height));
+
+ // cerr << name << " RENDER " << area << " self = " << self << endl;
+
+ /* Now lets get the intersection with the area we've been asked to draw */
+
boost::optional<Rect> d = self.intersection (area);
if (!d) {
@@ -870,6 +1061,10 @@ WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
Rect draw = d.get();
+ /* "draw" is now a rectangle that defines the rectangle we need to
+ * update/render the waveview into, in window coordinate space.
+ */
+
/* window coordinates - pixels where x=0 is the left edge of the canvas
* window. We round down in case we were asked to
* draw "between" pixels at the start and/or end.
@@ -878,32 +1073,86 @@ WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
double draw_start = floor (draw.x0);
const double draw_end = floor (draw.x1);
- // cerr << "Need to draw " << draw_start << " .. " << draw_end << endl;
-
+ // cerr << "Need to draw " << draw_start << " .. " << draw_end << " vs. " << area << " and self = " << self << endl;
+
/* image coordnates: pixels where x=0 is the start of this waveview,
* wherever it may be positioned. thus image_start=N means "an image
- * that beings N pixels after the start of region that this waveview is
+ * that begins N pixels after the start of region that this waveview is
* representing.
*/
const framepos_t image_start = window_to_image (self.x0, draw_start);
const framepos_t image_end = window_to_image (self.x0, draw_end);
-
+
// cerr << "Image/WV space: " << image_start << " .. " << image_end << endl;
-
- /* sample coordinates - note, these are not subject to rounding error */
+
+ /* sample coordinates - note, these are not subject to rounding error
+ *
+ * "sample_start = N" means "the first sample we need to represent is N
+ * samples after the first sample of the region"
+ */
+
framepos_t sample_start = _region_start + (image_start * _samples_per_pixel);
framepos_t sample_end = _region_start + (image_end * _samples_per_pixel);
- // cerr << "Sample space: " << sample_start << " .. " << sample_end << endl;
+ // cerr << "Sample space: " << sample_start << " .. " << sample_end << " @ " << _samples_per_pixel << " rs = " << _region_start << endl;
- Cairo::RefPtr<Cairo::ImageSurface> image;
- double image_offset = 0;
+ /* sample_start and sample_end are bounded by the region
+ * limits. sample_start, because of the was just computed, must already
+ * be greater than or equal to the _region_start value.
+ */
- get_image (image, sample_start, sample_end, image_offset);
+ sample_end = min (region_end(), sample_end);
+
+ // cerr << debug_name() << " will need image spanning " << sample_start << " .. " << sample_end << " region spans " << _region_start << " .. " << region_end() << endl;
- // cerr << "Offset into image to place at zero: " << image_offset << endl;
+ double image_origin_in_self_coordinates;
+ boost::shared_ptr<WaveViewCache::Entry> image_to_draw;
+
+ if (_current_image) {
+ /* check it covers the right sample range */
+
+ if (_current_image->start > sample_start || _current_image->end < sample_end) {
+ /* doesn't cover the area we need ... reset */
+ _current_image.reset ();
+ } else {
+ /* timestamp our continuing use of this image/cache entry */
+ images->use (_region->audio_source (_channel), _current_image);
+ image_to_draw = _current_image;
+ }
+ }
+
+ if (!image_to_draw) {
+
+ /* look it up */
+
+ bool full_image;
+ image_to_draw = get_image (sample_start, sample_end, full_image);
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 image to draw = %2 (full? %3)\n", name, image_to_draw, full_image));
+
+ if (!image_to_draw) {
+ /* image not currently available. A redraw will be scheduled
+ when it is ready.
+ */
+ return;
+ }
+
+ if (full_image) {
+ /* found an image that covers our entire sample range,
+ * so keep a reference to it.
+ */
+ _current_image = image_to_draw;
+ }
+ }
+
+ /* compute the first pixel of the image that should be used when we
+ * render the specified range.
+ */
+
+ image_origin_in_self_coordinates = (image_to_draw->start - _region_start) / _samples_per_pixel;
+
if (_start_shift && (sample_start == _region_start) && (self.x0 == draw.x0)) {
/* we are going to draw the first pixel for this region, but
we may not want this to overlap a border around the
@@ -911,32 +1160,72 @@ WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
*/
//cerr << name.substr (23) << " ss = " << sample_start << " rs = " << _region_start << " sf = " << _start_shift << " ds = " << draw_start << " self = " << self << " draw = " << draw << endl;
//draw_start += _start_shift;
- //image_offset += _start_shift;
+ //image_origin_in_self_coordinates += _start_shift;
}
- context->rectangle (draw_start, draw.y0, draw_end - draw_start, draw.height());
+ /* the image may only be a best-effort ... it may not span the entire
+ * range requested, though it is guaranteed to cover the start. So
+ * determine how many pixels we can actually draw.
+ */
+
+ double draw_width;
+
+ if (image_to_draw != _current_image) {
+
+ /* the image is guaranteed to start at or before
+ * draw_start. But if it starts before draw_start, that reduces
+ * the maximum available width we can render with.
+ *
+ * so .. clamp the draw width to the smaller of what we need to
+ * draw or the available width of the image.
+ */
+
+ draw_width = min ((double) image_to_draw->image->get_width() - (draw_start - image_to_draw->start),
+ (draw_end - draw_start));
+
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 draw just %2 of %3 (iwidth %4 off %5 img @ %6 rs @ %7)\n", name, draw_width, (draw_end - draw_start),
+ image_to_draw->image->get_width(), image_origin_in_self_coordinates,
+ image_to_draw->start, _region_start));
+ } else {
+ draw_width = draw_end - draw_start;
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("use current image, span entire render width %1..%2\n", draw_start, draw_end));
+ }
+
+ context->rectangle (draw_start, draw.y0, draw_width, draw.height());
/* round image origin position to an exact pixel in device space to
* avoid blurring
*/
- double x = self.x0 + image_offset;
+ double x = self.x0 + image_origin_in_self_coordinates;
double y = self.y0;
context->user_to_device (x, y);
x = round (x);
y = round (y);
context->device_to_user (x, y);
- context->set_source (image, x, y);
+ /* the coordinates specify where in "user coordinates" (i.e. what we
+ * generally call "canvas coordinates" in this code) the image origin
+ * will appear. So specifying (10,10) will put the upper left corner of
+ * the image at (10,10) in user space.
+ */
+
+ context->set_source (image_to_draw->image, x, y);
context->fill ();
+ /* image obtained, some of it painted to display: we are rendered.
+ Future calls to get_image_in_thread are now meaningful.
+ */
+
+ rendered = true;
}
void
WaveView::compute_bounding_box () const
{
if (_region) {
- _bounding_box = Rect (0.0, 0.0, _region->length() / _samples_per_pixel, _height);
+ _bounding_box = Rect (0.0, 0.0, region_length() / _samples_per_pixel, _height);
} else {
_bounding_box = boost::optional<Rect> ();
}
@@ -952,7 +1241,8 @@ WaveView::set_height (Distance height)
invalidate_image_cache ();
_height = height;
-
+ get_image_in_thread = true;
+
_bounding_box_dirty = true;
end_change ();
}
@@ -989,6 +1279,7 @@ WaveView::gain_changed ()
begin_visual_change ();
invalidate_image_cache ();
_region_amplitude = _region->scale_amplitude ();
+ get_image_in_thread = true;
end_visual_change ();
}
@@ -1039,10 +1330,11 @@ WaveView::set_shape (Shape s)
void
WaveView::set_amplitude_above_axis (double a)
{
- if (_amplitude_above_axis != a) {
+ if (fabs (_amplitude_above_axis - a) > 0.01) {
begin_visual_change ();
invalidate_image_cache ();
_amplitude_above_axis = a;
+ get_image_in_thread = true;
end_visual_change ();
}
}
@@ -1065,6 +1357,18 @@ WaveView::set_global_logscaled (bool yn)
}
}
+framecnt_t
+WaveView::region_length() const
+{
+ return _region->length() - (_region_start - _region->start());
+}
+
+framepos_t
+WaveView::region_end() const
+{
+ return _region_start + region_length();
+}
+
void
WaveView::set_region_start (frameoffset_t start)
{
@@ -1127,4 +1431,399 @@ WaveView::set_start_shift (double pixels)
_start_shift = pixels;
end_visual_change ();
}
+
+void
+WaveView::cancel_my_render_request () const
+{
+ if (!images) {
+ return;
+ }
+
+ /* try to stop any current rendering of the request, or prevent it from
+ * ever starting up.
+ */
+
+ if (current_request) {
+ current_request->cancel ();
+ }
+ Glib::Threads::Mutex::Lock lm (request_queue_lock);
+
+ /* now remove it from the queue and reset our request pointer so that
+ have no outstanding request (that we know about)
+ */
+
+ request_queue.erase (this);
+ current_request.reset ();
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 now has no request %2\n", this));
+
+}
+
+void
+WaveView::set_image_cache_size (uint64_t sz)
+{
+ if (!images) {
+ images = new WaveViewCache;
+ }
+
+ images->set_image_cache_threshold (sz);
+}
+
+/*-------------------------------------------------*/
+
+void
+WaveView::start_drawing_thread ()
+{
+ if (!_drawing_thread) {
+ _drawing_thread = Glib::Threads::Thread::create (sigc::ptr_fun (WaveView::drawing_thread));
+ }
+}
+
+void
+WaveView::stop_drawing_thread ()
+{
+ if (_drawing_thread) {
+ Glib::Threads::Mutex::Lock lm (request_queue_lock);
+ g_atomic_int_set (&drawing_thread_should_quit, 1);
+ request_cond.signal ();
+ }
+}
+
+void
+WaveView::drawing_thread ()
+{
+ using namespace Glib::Threads;
+
+ WaveView const * requestor;
+ Mutex::Lock lm (request_queue_lock);
+ bool run = true;
+
+ while (run) {
+
+ /* remember that we hold the lock at this point, no matter what */
+
+ if (g_atomic_int_get (&drawing_thread_should_quit)) {
+ break;
+ }
+
+ if (request_queue.empty()) {
+ request_cond.wait (request_queue_lock);
+ }
+
+ /* remove the request from the queue (remember: the "request"
+ * is just a pointer to a WaveView object)
+ */
+
+ requestor = *(request_queue.begin());
+ request_queue.erase (request_queue.begin());
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("start request for %1 at %2\n", requestor, g_get_monotonic_time()));
+
+ boost::shared_ptr<WaveViewThreadRequest> req = requestor->current_request;
+
+ if (!req) {
+ continue;
+ }
+
+ /* Generate an image. Unlock the request queue lock
+ * while we do this, so that other things can happen
+ * as we do rendering.
+ */
+
+ request_queue_lock.unlock (); /* some RAII would be good here */
+
+ try {
+ requestor->generate_image (req, true);
+ } catch (...) {
+ req->image.clear(); /* just in case it was set before the exception, whatever it was */
+ }
+
+ request_queue_lock.lock ();
+
+ req.reset (); /* drop/delete request as appropriate */
+ }
+
+ /* thread is vanishing */
+ _drawing_thread = 0;
+}
+
+/*-------------------------------------------------*/
+
+WaveViewCache::WaveViewCache ()
+ : image_cache_size (0)
+ , _image_cache_threshold (100 * 1048576) /* bytes */
+{
+}
+
+WaveViewCache::~WaveViewCache ()
+{
+}
+
+
+boost::shared_ptr<WaveViewCache::Entry>
+WaveViewCache::lookup_image (boost::shared_ptr<ARDOUR::AudioSource> src,
+ framepos_t start, framepos_t end,
+ int channel,
+ Coord height,
+ float amplitude,
+ Color fill_color,
+ double samples_per_pixel,
+ bool& full_coverage)
+{
+ ImageCache::iterator x;
+
+ if ((x = cache_map.find (src)) == cache_map.end ()) {
+ /* nothing in the cache for this audio source at all */
+ return boost::shared_ptr<WaveViewCache::Entry> ();
+ }
+
+ CacheLine& caches = x->second;
+ boost::shared_ptr<Entry> best_partial;
+ framecnt_t max_coverage = 0;
+
+ /* Find a suitable ImageSurface, if it exists.
+ */
+
+ for (CacheLine::iterator c = caches.begin(); c != caches.end(); ++c) {
+
+ boost::shared_ptr<Entry> e (*c);
+
+ if (channel != e->channel
+ || height != e->height
+ || amplitude != e->amplitude
+ || samples_per_pixel != e->samples_per_pixel
+ || fill_color != e->fill_color) {
+ continue;
+ }
+
+ switch (Evoral::coverage (start, end, e->start, e->end)) {
+ case Evoral::OverlapExternal: /* required range is inside image range */
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("found image spanning %1..%2 covers %3..%4\n",
+ e->start, e->end, start, end));
+ use (src, e);
+ full_coverage = true;
+ return e;
+
+ case Evoral::OverlapStart: /* required range start is covered by image range */
+ if ((e->end - start) > max_coverage) {
+ best_partial = e;
+ max_coverage = e->end - start;
+ }
+ break;
+
+ case Evoral::OverlapNone:
+ case Evoral::OverlapEnd:
+ case Evoral::OverlapInternal:
+ break;
+ }
+ }
+
+ if (best_partial) {
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("found PARTIAL image spanning %1..%2 partially covers %3..%4\n",
+ best_partial->start, best_partial->end, start, end));
+ use (src, best_partial);
+ full_coverage = false;
+ return best_partial;
+ }
+
+ return boost::shared_ptr<Entry> ();
+}
+
+void
+WaveViewCache::consolidate_image_cache (boost::shared_ptr<ARDOUR::AudioSource> src,
+ int channel,
+ Coord height,
+ float amplitude,
+ Color fill_color,
+ double samples_per_pixel)
+{
+ list <uint32_t> deletion_list;
+ uint32_t other_entries = 0;
+ ImageCache::iterator x;
+
+ /* MUST BE CALLED FROM (SINGLE) GUI THREAD */
+
+ if ((x = cache_map.find (src)) == cache_map.end ()) {
+ return;
+ }
+
+ CacheLine& caches = x->second;
+
+ for (CacheLine::iterator c1 = caches.begin(); c1 != caches.end(); ) {
+
+ CacheLine::iterator nxt = c1;
+ ++nxt;
+
+ boost::shared_ptr<Entry> e1 (*c1);
+
+ if (channel != e1->channel
+ || height != e1->height
+ || amplitude != e1->amplitude
+ || samples_per_pixel != e1->samples_per_pixel
+ || fill_color != e1->fill_color) {
+
+ /* doesn't match current properties, ignore and move on
+ * to the next one.
+ */
+
+ other_entries++;
+ c1 = nxt;
+ continue;
+ }
+
+ /* c1 now points to a cached image entry that matches current
+ * properties. Check all subsequent cached imaged entries to
+ * see if there are others that also match but represent
+ * subsets of the range covered by this one.
+ */
+
+ for (CacheLine::iterator c2 = c1; c2 != caches.end(); ) {
+
+ CacheLine::iterator nxt2 = c2;
+ ++nxt2;
+
+ boost::shared_ptr<Entry> e2 (*c2);
+
+ if (e1 == e2 || channel != e2->channel
+ || height != e2->height
+ || amplitude != e2->amplitude
+ || samples_per_pixel != e2->samples_per_pixel
+ || fill_color != e2->fill_color) {
+
+ /* properties do not match, ignore for the
+ * purposes of consolidation.
+ */
+ c2 = nxt2;
+ continue;
+ }
+
+ if (e2->start >= e1->start && e2->end <= e1->end) {
+ /* c2 is fully contained by c1, so delete it */
+ caches.erase (c2);
+
+ /* and re-start the whole iteration */
+ nxt = caches.begin ();
+ break;
+ }
+
+ c2 = nxt2;
+ }
+
+ c1 = nxt;
+ }
+}
+
+void
+WaveViewCache::use (boost::shared_ptr<ARDOUR::AudioSource> src, boost::shared_ptr<Entry> ce)
+{
+ ce->timestamp = g_get_monotonic_time ();
+}
+
+void
+WaveViewCache::add (boost::shared_ptr<ARDOUR::AudioSource> src, boost::shared_ptr<Entry> ce)
+{
+ /* MUST BE CALLED FROM (SINGLE) GUI THREAD */
+
+ Cairo::RefPtr<Cairo::ImageSurface> img (ce->image);
+
+ image_cache_size += img->get_height() * img->get_width () * 4; /* 4 = bytes per FORMAT_ARGB32 pixel */
+
+ if (cache_full()) {
+ cache_flush ();
+ }
+
+ ce->timestamp = g_get_monotonic_time ();
+
+ cache_map[src].push_back (ce);
+}
+
+uint64_t
+WaveViewCache::compute_image_cache_size()
+{
+ uint64_t total = 0;
+ for (ImageCache::iterator s = cache_map.begin(); s != cache_map.end(); ++s) {
+ CacheLine& per_source_cache (s->second);
+ for (CacheLine::iterator c = per_source_cache.begin(); c != per_source_cache.end(); ++c) {
+ Cairo::RefPtr<Cairo::ImageSurface> img ((*c)->image);
+ total += img->get_height() * img->get_width() * 4; /* 4 = bytes per FORMAT_ARGB32 pixel */
+ }
+ }
+ return total;
+}
+
+bool
+WaveViewCache::cache_full()
+{
+ return image_cache_size > _image_cache_threshold;
+}
+
+void
+WaveViewCache::cache_flush ()
+{
+ /* Build a sortable list of all cache entries */
+
+ CacheList cache_list;
+
+ for (ImageCache::const_iterator cm = cache_map.begin(); cm != cache_map.end(); ++cm) {
+ for (CacheLine::const_iterator cl = cm->second.begin(); cl != cm->second.end(); ++cl) {
+ cache_list.push_back (make_pair (cm->first, *cl));
+ }
+ }
+
+ /* sort list in LRU order */
+ SortByTimestamp sorter;
+ sort (cache_list.begin(), cache_list.end(), sorter);
+
+ while (image_cache_size > _image_cache_threshold && !cache_map.empty() && !cache_list.empty()) {
+
+ ListEntry& le (cache_list.front());
+
+ ImageCache::iterator x;
+
+ if ((x = cache_map.find (le.first)) != cache_map.end ()) {
+
+ CacheLine& cl = x->second;
+
+ for (CacheLine::iterator c = cl.begin(); c != cl.end(); ++c) {
+
+ if (*c == le.second) {
+
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("Removing cache line entry for %1\n", x->first->name()));
+
+ /* Remove this entry from this cache line */
+ cl.erase (c);
+
+ if (cl.empty()) {
+ /* remove cache line from main cache: no more entries */
+ cache_map.erase (x);
+ }
+
+ break;
+ }
+ }
+
+ Cairo::RefPtr<Cairo::ImageSurface> img (le.second->image);
+ uint64_t size = img->get_height() * img->get_width() * 4; /* 4 = bytes per FORMAT_ARGB32 pixel */
+
+ if (image_cache_size > size) {
+ image_cache_size -= size;
+ } else {
+ image_cache_size = 0;
+ }
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("cache shrunk to %1\n", image_cache_size));
+ }
+
+ /* Remove from the linear list, even if we didn't find it in
+ * the actual cache_mao
+ */
+ cache_list.erase (cache_list.begin());
+ }
+}
+
+void
+WaveViewCache::set_image_cache_threshold (uint64_t sz)
+{
+ DEBUG_TRACE (DEBUG::WaveView, string_compose ("new image cache size \n", sz));
+ _image_cache_threshold = sz;
+ cache_flush ();
+}
diff --git a/libs/canvas/wscript b/libs/canvas/wscript
index 2c4cca8..3d741ec 100644
--- a/libs/canvas/wscript
+++ b/libs/canvas/wscript
@@ -84,7 +84,7 @@ def build(bld):
obj.export_includes = ['.']
obj.includes = ['.']
obj.uselib = 'SIGCPP CAIROMM GTKMM BOOST'
- obj.use = [ 'libpbd', 'libevoral', 'libardour', 'libgtkmm2ext' ]
+ obj.use = [ 'libpbd', 'libevoral', 'libardour', 'libgtkmm2ext', 'libevoral' ]
obj.name = 'libcanvas'
obj.target = 'canvas'
obj.vnum = CANVAS_LIB_VERSION
diff --git a/libs/canvas/xfade_curve.cc b/libs/canvas/xfade_curve.cc
index f97cd23..d82e6ab 100644
--- a/libs/canvas/xfade_curve.cc
+++ b/libs/canvas/xfade_curve.cc
@@ -1,20 +1,20 @@
/*
- Copyright (C) 2013 Paul Davis
- Copyright (C) 2014 Robin Gareus <robin at gareus.org>
+ Copyright (C) 2013 Paul Davis
+ Copyright (C) 2014 Robin Gareus <robin at gareus.org>
- 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 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.
+ 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.
+ 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.
*/
@@ -36,6 +36,7 @@ XFadeCurve::XFadeCurve (Canvas* c)
, _xfadeposition (Start)
, _outline_color (0x000000ff)
, _fill_color (0x22448880)
+ , show_background_fade (true)
{
}
@@ -45,6 +46,7 @@ XFadeCurve::XFadeCurve (Canvas* c, XFadePosition pos)
, _xfadeposition (pos)
, _outline_color (0x000000ff)
, _fill_color (0x22448880)
+ , show_background_fade (true)
{
}
@@ -54,6 +56,7 @@ XFadeCurve::XFadeCurve (Item* parent)
, _xfadeposition (Start)
, _outline_color (0x000000ff)
, _fill_color (0x22448880)
+ , show_background_fade (true)
{
}
@@ -63,6 +66,7 @@ XFadeCurve::XFadeCurve (Item* parent, XFadePosition pos)
, _xfadeposition (pos)
, _outline_color (0x000000ff)
, _fill_color (0x22448880)
+ , show_background_fade (true)
{
}
@@ -166,23 +170,29 @@ XFadeCurve::get_path(Rect const & area, Cairo::RefPtr<Cairo::Context> context, C
/* find left and right-most sample */
Points::size_type left = 0;
- Points::size_type right = c.n_samples;
+ Points::size_type right = c.n_samples - 1;
+ // we should really really do a binary search rather than iterate
for (Points::size_type idx = 0; idx < c.n_samples - 1; ++idx) {
left = idx;
window_space = item_to_window (Duple (c.samples[idx].x, 0.0), false);
if (window_space.x >= area.x0) break;
}
- for (Points::size_type idx = c.n_samples; idx > left + 1; --idx) {
+ for (Points::size_type idx = c.n_samples; idx >= left;) {
+ --idx;
window_space = item_to_window (Duple (c.samples[idx].x, 0.0), false);
if (window_space.x <= area.x1) break;
right = idx;
}
+ assert(left < right);
+ assert(left < c.n_samples);
+ assert(right < c.n_samples);
+
/* draw line between samples */
window_space = item_to_window (Duple (c.samples[left].x, c.samples[left].y), false);
context->move_to (window_space.x, window_space.y);
- for (uint32_t idx = left + 1; idx < right; ++idx) {
+ for (uint32_t idx = left + 1; idx <= right; ++idx) {
window_space = item_to_window (Duple (c.samples[idx].x, c.samples[idx].y), false);
context->line_to (window_space.x, window_space.y);
}
@@ -239,44 +249,52 @@ XFadeCurve::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) co
Color fill_shaded = _fill_color;
fill_shaded = 0.5 * (fill_shaded & 0xff) + (fill_shaded & ~0xff);
-#define IS (_xfadeposition == Start)
+#define IS_START (_xfadeposition == Start)
/* fill primary fade */
context->begin_new_path ();
- context->append_path (IS ? *path_in : *path_out);
- close_path(draw, context, IS ?_in : _out, false);
+ context->append_path (IS_START ? *path_in : *path_out);
+ close_path(draw, context, IS_START ?_in : _out, false);
set_source_rgba (context, _fill_color);
context->fill ();
- /* fill background fade */
- context->save ();
- context->begin_new_path ();
- context->append_path (IS ? *path_in : *path_out);
- close_path(draw, context, IS ? _in : _out, true);
- context->set_fill_rule (Cairo::FILL_RULE_EVEN_ODD);
- context->clip ();
- context->begin_new_path ();
- context->append_path (IS ? *path_out: *path_in);
- close_path(draw, context, IS ? _out : _in, true);
- set_source_rgba (context, fill_shaded);
- context->set_fill_rule (Cairo::FILL_RULE_WINDING);
- context->fill ();
- context->restore ();
+ if (show_background_fade) {
+ /* fill background fade */
+ context->save ();
+ context->begin_new_path ();
+ context->append_path (IS_START ? *path_in : *path_out);
+ close_path(draw, context, IS_START ? _in : _out, true);
+ context->set_fill_rule (Cairo::FILL_RULE_EVEN_ODD);
+ context->clip ();
+ context->begin_new_path ();
+ context->append_path (IS_START ? *path_out: *path_in);
+ close_path(draw, context, IS_START ? _out : _in, true);
+ set_source_rgba (context, fill_shaded);
+ context->set_fill_rule (Cairo::FILL_RULE_WINDING);
+ context->fill ();
+ context->restore ();
+ }
/* draw lines over fills */
- set_source_rgba (context, IS ? _outline_color : outline_shaded);
- context->set_line_width (IS ? 1.0 : .5);
-
- context->begin_new_path ();
- context->append_path (*path_in);
- context->stroke();
+ /* fade in line */
+ if (IS_START || show_background_fade) {
+ set_source_rgba (context, IS_START ? _outline_color : outline_shaded);
+ context->set_line_width (IS_START ? 1.0 : .5);
+
+ context->begin_new_path ();
+ context->append_path (*path_in);
+ context->stroke();
+ }
- set_source_rgba (context, IS ? outline_shaded :_outline_color);
- context->set_line_width (IS ? .5 : 1.0);
+ /* fade out line */
+ if (!IS_START || show_background_fade) {
+ set_source_rgba (context, IS_START ? outline_shaded :_outline_color);
+ context->set_line_width (IS_START ? .5 : 1.0);
- context->begin_new_path ();
- context->append_path (*path_out);
- context->stroke();
+ context->begin_new_path ();
+ context->append_path (*path_out);
+ context->stroke();
+ }
context->restore ();
diff --git a/libs/clearlooks-newer/MSVCclearlooks/clearlooks.vcproj b/libs/clearlooks-newer/MSVCclearlooks/clearlooks.vcproj
index 9857680..2d0bda0 100644
--- a/libs/clearlooks-newer/MSVCclearlooks/clearlooks.vcproj
+++ b/libs/clearlooks-newer/MSVCclearlooks/clearlooks.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -123,7 +123,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -202,7 +202,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_CLEARLOOKS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/evoral/MSVCevoral/evoral.vcproj b/libs/evoral/MSVCevoral/evoral.vcproj
index 45d99fe..e80bee5 100644
--- a/libs/evoral/MSVCevoral/evoral.vcproj
+++ b/libs/evoral/MSVCevoral/evoral.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -121,7 +121,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -200,7 +200,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_EVORAL;LIBEVORAL_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libevoral\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/evoral/evoral/SMF.hpp b/libs/evoral/evoral/SMF.hpp
index 9d43426..fd7263b 100644
--- a/libs/evoral/evoral/SMF.hpp
+++ b/libs/evoral/evoral/SMF.hpp
@@ -58,8 +58,6 @@ public:
int create(const std::string& path, int track=1, uint16_t ppqn=19200) THROW_FILE_ERROR;
void close() THROW_FILE_ERROR;
- const std::string& file_path() const { return _file_path; };
-
void seek_to_start() const;
int seek_to_track(int track);
@@ -71,17 +69,13 @@ public:
void begin_write();
void append_event_delta(uint32_t delta_t, uint32_t size, const uint8_t* buf, event_id_t note_id);
- void end_write() THROW_FILE_ERROR;
+ void end_write(std::string const &) THROW_FILE_ERROR;
void flush() {};
double round_to_file_precision (double val) const;
-protected:
- void set_path (const std::string& p);
-
private:
- std::string _file_path;
smf_t* _smf;
smf_track_t* _smf_track;
bool _empty; ///< true iff file contains(non-empty) events
diff --git a/libs/evoral/evoral/types.hpp b/libs/evoral/evoral/types.hpp
index 1951fb8..7d3f415 100644
--- a/libs/evoral/evoral/types.hpp
+++ b/libs/evoral/evoral/types.hpp
@@ -27,6 +27,8 @@
#include <limits>
#include <list>
+#include "pbd/debug.h"
+
#include "evoral/Beats.hpp"
#include "evoral/visibility.h"
@@ -46,9 +48,9 @@ typedef uint32_t EventType;
namespace PBD {
namespace DEBUG {
- LIBEVORAL_API extern uint64_t Sequence;
- LIBEVORAL_API extern uint64_t Note;
- LIBEVORAL_API extern uint64_t ControlList;
+ LIBEVORAL_API extern DebugBits Sequence;
+ LIBEVORAL_API extern DebugBits Note;
+ LIBEVORAL_API extern DebugBits ControlList;
}
}
diff --git a/libs/evoral/src/Event.cpp b/libs/evoral/src/Event.cpp
index da31662..45935cc 100644
--- a/libs/evoral/src/Event.cpp
+++ b/libs/evoral/src/Event.cpp
@@ -86,7 +86,7 @@ Event<Timestamp>::Event(const Event& copy, bool owns_buf)
, _nominal_time(copy._nominal_time)
, _size(copy._size)
, _buf(copy._buf)
- , _id(copy.id())
+ , _id (next_event_id ())
, _owns_buf(owns_buf)
{
if (owns_buf) {
@@ -110,7 +110,7 @@ template<typename Timestamp>
const Event<Timestamp>&
Event<Timestamp>::operator=(const Event& copy)
{
- _id = copy.id(); // XXX is this right? do we want ID copy semantics?
+ _id = next_event_id ();
_type = copy._type;
_original_time = copy._original_time;
_nominal_time = copy._nominal_time;
diff --git a/libs/evoral/src/SMF.cpp b/libs/evoral/src/SMF.cpp
index 0a5bf58..b6ec8ec 100644
--- a/libs/evoral/src/SMF.cpp
+++ b/libs/evoral/src/SMF.cpp
@@ -108,9 +108,7 @@ SMF::open(const std::string& path, int track) THROW_FILE_ERROR
smf_delete(_smf);
}
- _file_path = path;
-
- FILE* f = fopen(_file_path.c_str(), "r");
+ FILE* f = fopen(path.c_str(), "r");
if (f == 0) {
return -1;
} else if ((_smf = smf_load(f)) == 0) {
@@ -151,8 +149,6 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
smf_delete(_smf);
}
- _file_path = path;
-
_smf = smf_new();
if (_smf == NULL) {
@@ -180,7 +176,7 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
{
/* put a stub file on disk */
- FILE* f = fopen (_file_path.c_str(), "w+");
+ FILE* f = fopen (path.c_str(), "w+");
if (f == 0) {
return -1;
}
@@ -401,17 +397,22 @@ SMF::begin_write()
}
void
-SMF::end_write() THROW_FILE_ERROR
+SMF::end_write(string const & path) THROW_FILE_ERROR
{
Glib::Threads::Mutex::Lock lm (_smf_lock);
- FILE* f = fopen (_file_path.c_str(), "w+");
+
+ if (!_smf) {
+ return;
+ }
+
+ FILE* f = fopen (path.c_str(), "w+");
if (f == 0) {
- throw FileError (_file_path);
+ throw FileError (path);
}
if (smf_save(_smf, f) != 0) {
fclose(f);
- throw FileError (_file_path);
+ throw FileError (path);
}
fclose(f);
@@ -425,10 +426,4 @@ SMF::round_to_file_precision (double val) const
return round (val * div) / div;
}
-void
-SMF::set_path (const std::string& p)
-{
- _file_path = p;
-}
-
} // namespace Evoral
diff --git a/libs/evoral/src/debug.cpp b/libs/evoral/src/debug.cpp
index 9e82b93..785c33b 100644
--- a/libs/evoral/src/debug.cpp
+++ b/libs/evoral/src/debug.cpp
@@ -1,6 +1,6 @@
#include "evoral/types.hpp"
-uint64_t PBD::DEBUG::Sequence = PBD::new_debug_bit ("sequence");
-uint64_t PBD::DEBUG::Note = PBD::new_debug_bit ("note");
-uint64_t PBD::DEBUG::ControlList = PBD::new_debug_bit ("controllist");
+PBD::DebugBits PBD::DEBUG::Sequence = PBD::new_debug_bit ("sequence");
+PBD::DebugBits PBD::DEBUG::Note = PBD::new_debug_bit ("note");
+PBD::DebugBits PBD::DEBUG::ControlList = PBD::new_debug_bit ("controllist");
diff --git a/libs/evoral/wscript b/libs/evoral/wscript
index f97096b..12ebffe 100644
--- a/libs/evoral/wscript
+++ b/libs/evoral/wscript
@@ -71,7 +71,7 @@ def build(bld):
libsmf.name = 'libsmf'
libsmf.target = 'smf'
libsmf.uselib = 'GLIB'
- libsmf.install_path = bld.env['LIBDIR']
+ libsmf.install_path = None
if bld.env['build_target'] != 'mingw':
libsmf.cxxflags = [ '-fPIC' ]
libsmf.cflags = [ '-fPIC' ]
diff --git a/libs/fst/scanner.cc b/libs/fst/scanner.cc
index c7cbd89..d56bdb1 100644
--- a/libs/fst/scanner.cc
+++ b/libs/fst/scanner.cc
@@ -3,6 +3,8 @@
#include <string.h>
#include <vector>
+#include <glib.h>
+
#include "pbd/pbd.h"
#include "pbd/transmitter.h"
#include "pbd/receiver.h"
@@ -75,7 +77,12 @@ int main (int argc, char **argv) {
char *dllpath = NULL;
if (argc == 3 && !strcmp("-f", argv[1])) {
dllpath = argv[2];
- if (strstr (dllpath, ".so" ) || strstr(dllpath, ".dll")) {
+ const size_t slen = strlen (dllpath);
+ if (
+ (slen > 3 && 0 == g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
+ ||
+ (slen > 4 && 0 == g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
+ ) {
vstfx_remove_infofile(dllpath);
vstfx_un_blacklist(dllpath);
}
@@ -97,15 +104,16 @@ int main (int argc, char **argv) {
std::vector<VSTInfo *> *infos = 0;
+ const size_t slen = strlen (dllpath);
if (0) { }
#ifdef LXVST_SUPPORT
- else if (strstr (dllpath, ".so")) {
+ else if (slen > 3 && 0 == g_ascii_strcasecmp (&dllpath[slen-3], ".so")) {
infos = vstfx_get_info_lx(dllpath);
}
#endif
#ifdef WINDOWS_VST_SUPPORT
- else if (strstr (dllpath, ".dll")) {
+ else if (slen > 4 && 0 == g_ascii_strcasecmp (&dllpath[slen-4], ".dll")) {
infos = vstfx_get_info_fst(dllpath);
}
#endif
diff --git a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
index 1b860a0..00513e6 100644
--- a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
+++ b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -122,7 +122,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -201,7 +201,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_GTKMM2EXT;LIBGTKMM2EXT_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"gtkmm2ext\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -270,6 +270,10 @@
>
</File>
<File
+ RelativePath="..\ardour_icon.cc"
+ >
+ </File>
+ <File
RelativePath="..\auto_spin.cc"
>
</File>
@@ -464,6 +468,10 @@
>
</File>
<File
+ RelativePath="..\gtkmm2ext\ardour_icon.h"
+ >
+ </File>
+ <File
RelativePath="..\gtkmm2ext\auto_spin.h"
>
</File>
diff --git a/libs/gtkmm2ext/ardour_icon.cc b/libs/gtkmm2ext/ardour_icon.cc
new file mode 100644
index 0000000..e06d489
--- /dev/null
+++ b/libs/gtkmm2ext/ardour_icon.cc
@@ -0,0 +1,1067 @@
+/*
+ Copyright (C) 2009 Paul Davis
+ Copyright (C) 2015 Robin Gareus <robin at gareus.org>
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+*/
+
+#include <math.h> // M_PI
+#include <assert.h>
+#include <algorithm> // std:min
+#include "gtkmm2ext/ardour_icon.h"
+
+using namespace Gtkmm2ext::ArdourIcon;
+
+/* general style info:
+ *
+ * - geometry: icons should be centered, spanning
+ * wh = std::min (width * .5, height *.5) * .55;
+ *
+ * - all shapes should have a contrasting outline
+ * (usually white foreground, black outline)
+ */
+
+#define OUTLINEWIDTH 1.5 // px
+
+#define VECTORICONSTROKEFILL(fillalpha) \
+ cairo_set_line_width (cr, OUTLINEWIDTH); \
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0); \
+ cairo_stroke_preserve (cr); \
+ cairo_set_source_rgba (cr, 1, 1, 1, (fillalpha)); \
+ cairo_fill (cr);
+
+#define VECTORICONSTROKEOUTLINE(LW, color) \
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); \
+ cairo_set_line_width (cr, (LW) + OUTLINEWIDTH); \
+ ardour_icon_set_source_inv_rgba (cr, color); \
+ cairo_stroke_preserve (cr); \
+ ardour_icon_set_source_rgba (cr, color); \
+ cairo_set_line_width (cr, (LW)); \
+ cairo_stroke (cr);
+
+
+/** convert 32bit 'RRGGBBAA' to cairo doubles
+ * from libs/canvas/utils.cc and canvas/types.h: typedef uint32_t Color;
+ */
+static void ardour_icon_set_source_rgba (cairo_t *cr, uint32_t color)
+{
+ cairo_set_source_rgba (cr,
+ ((color >> 24) & 0xff) / 255.0,
+ ((color >> 16) & 0xff) / 255.0,
+ ((color >> 8) & 0xff) / 255.0,
+ ((color >> 0) & 0xff) / 255.0
+ );
+}
+
+/** inverse color */
+static void ardour_icon_set_source_inv_rgba (cairo_t *cr, uint32_t color)
+{
+ cairo_set_source_rgba (cr,
+ 1.0 - ((color >> 24) & 0xff) / 255.0,
+ 1.0 - ((color >> 16) & 0xff) / 255.0,
+ 1.0 - ((color >> 8) & 0xff) / 255.0,
+ ((color >> 0) & 0xff) / 255.0
+ );
+}
+
+/*****************************************************************************
+ * Tool Icons.
+ * Foreground is always white, compatible with small un-blurred rendering.
+ */
+
+/** internal edit icon */
+static void icon_tool_content (cairo_t *cr, const int width, const int height) {
+#define EM_POINT(X,Y) round (x + (X) * em) + .5, round (y + (Y) * em) + .5
+
+ const double x = width * .5;
+ const double y = height * .5;
+ const double em = std::min (x, y) * .1; // 1px at 20x20
+
+ // draw dot outlines (control-points)
+ cairo_move_to (cr, EM_POINT(-6.0, 0.0));
+ cairo_close_path (cr);
+ cairo_move_to (cr, EM_POINT(-2.5, 4.0));
+ cairo_close_path (cr);
+ cairo_move_to (cr, EM_POINT( 5.0, -5.0));
+ cairo_close_path (cr);
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ ardour_icon_set_source_inv_rgba (cr, 0xffffffff);
+ cairo_set_line_width (cr, 3 * em + OUTLINEWIDTH);
+ cairo_stroke (cr);
+
+ // "midi note" lines
+ cairo_move_to (cr, EM_POINT(-7.0, -5.0));
+ cairo_line_to (cr, EM_POINT( 0.0, -5.0));
+
+ cairo_move_to (cr, EM_POINT( 2.0, 4.0));
+ cairo_line_to (cr, EM_POINT( 6.0, 4.0));
+
+ // automation line (connect control-points)
+ cairo_move_to (cr, EM_POINT(-6.0, 0.0));
+ cairo_line_to (cr, EM_POINT(-2.5, 4.0));
+ cairo_line_to (cr, EM_POINT( 5.0, -5.0));
+
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ VECTORICONSTROKEOUTLINE(1 * em, 0xffffffff);
+
+ // remove automation line outline at control-points
+ cairo_move_to (cr, EM_POINT(-6.0, 0.0));
+ cairo_close_path (cr);
+ cairo_move_to (cr, EM_POINT(-2.5, 4.0));
+ cairo_close_path (cr);
+ cairo_move_to (cr, EM_POINT( 5.0, -5.0));
+ cairo_close_path (cr);
+
+ ardour_icon_set_source_rgba (cr, 0xffffffff);
+ cairo_set_line_width (cr, 3 * em);
+ cairo_stroke (cr);
+#undef EM_POINT
+}
+
+/** range tool |<->| */
+static void icon_tool_range (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y) * .55;
+ const double lw = rint (wh / 6.0); // line width
+ const double ar = wh * .6; // arrow
+
+ const double bw = ceil (wh) - .5;
+ const double y0 = ceil (y);
+ const double ym = rint (y0 - wh * .1) + .5; // arrow-horizontal; slightly to the top, on a px
+ const double x0 = rint (x) - bw; // left arrow tip
+ const double x1 = rint (x) + bw; // right arrow tip
+
+ // left and right box
+ cairo_move_to (cr, x0, y0 - bw);
+ cairo_line_to (cr, x0, y0 + bw);
+ VECTORICONSTROKEOUTLINE(lw, 0xffffffff);
+ cairo_move_to (cr, x1, y0 - bw);
+ cairo_line_to (cr, x1, y0 + bw);
+ VECTORICONSTROKEOUTLINE(lw, 0xffffffff);
+
+ // arrows
+ cairo_move_to (cr, x0 + ar, ym - ar);
+ cairo_line_to (cr, x0 + .5, ym);
+ cairo_line_to (cr, x0 + ar, ym + ar);
+
+ cairo_move_to (cr, x1 - ar, ym - ar);
+ cairo_line_to (cr, x1 - .5, ym);
+ cairo_line_to (cr, x1 - ar, ym + ar);
+
+ // line connecting the arrows
+ cairo_move_to (cr, x0, ym);
+ cairo_line_to (cr, x1, ym);
+ VECTORICONSTROKEOUTLINE(lw, 0xffffffff);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, 1.0);
+ cairo_set_line_width (cr, lw);
+
+ cairo_move_to (cr, x0, y0 - bw);
+ cairo_line_to (cr, x0, y0 + bw);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, x1, y0 - bw);
+ cairo_line_to (cr, x1, y0 + bw);
+ cairo_stroke (cr);
+
+
+}
+
+/** Grab/Object tool - 6x8em "hand", with 'em' wide index finger. */
+static void icon_tool_grab (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double em = std::min (x, y) * .15; // 1.5px at 20x20
+
+#define EM_POINT(X,Y) x + (X) * em, y + (Y) * em
+
+ // wrist
+ cairo_move_to (cr, EM_POINT( 2.0, 4.0));
+ cairo_line_to (cr, EM_POINT(-1.5, 4.0));
+ cairo_line_to (cr, EM_POINT(-2.5, 2.0));
+ // thumb
+ cairo_line_to (cr, EM_POINT(-3.0, 1.0));
+
+ // index finger
+ cairo_line_to (cr, EM_POINT(-2.0, 0.0));
+ cairo_line_to (cr, EM_POINT(-2.1, -4.0));
+ cairo_line_to (cr, EM_POINT(-1.5, -4.5));
+ cairo_line_to (cr, EM_POINT(-1.1, -4.0));
+ cairo_line_to (cr, EM_POINT(-1.0, 0.1));
+
+ // middle finger knuckle
+ cairo_line_to (cr, EM_POINT(-0.6, 0.3));
+ cairo_line_to (cr, EM_POINT(-0.3, 0.0));
+ cairo_line_to (cr, EM_POINT(-0.2, -0.2));
+ cairo_line_to (cr, EM_POINT( 0.1, -0.3));
+ cairo_line_to (cr, EM_POINT( 0.4, -0.2));
+ cairo_line_to (cr, EM_POINT( 0.5, 0.1));
+
+ // ring finger knuckle
+ cairo_line_to (cr, EM_POINT( 0.8, 0.4));
+ cairo_line_to (cr, EM_POINT( 1.1, 0.2));
+ cairo_line_to (cr, EM_POINT( 1.2, 0.0));
+ cairo_line_to (cr, EM_POINT( 1.5, -0.1));
+ cairo_line_to (cr, EM_POINT( 1.8, 0.0));
+ cairo_line_to (cr, EM_POINT( 1.9, 0.4));
+
+ // pinky
+ cairo_line_to (cr, EM_POINT( 2.0, 0.6));
+ cairo_line_to (cr, EM_POINT( 2.4, 0.4));
+ cairo_line_to (cr, EM_POINT( 2.8, 0.5));
+ cairo_line_to (cr, EM_POINT( 3.0, 1.0));
+
+ // wrist
+ cairo_line_to (cr, EM_POINT( 3.0, 1.5));
+ cairo_line_to (cr, EM_POINT( 2.0, 4.0));
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ VECTORICONSTROKEFILL(1.0);
+#undef EM_POINT
+}
+
+/** cut icon - scissors */
+static void icon_tool_cut (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double em = std::min (x, y) * .1; // 1px at 20x20
+
+#define EM_POINT(X,Y) x + (X) * em, y + (Y) * em
+
+ cairo_save (cr);
+ cairo_translate (cr, EM_POINT(4, -3));
+ cairo_scale (cr, 1.6, 1.0); // ellipse
+ cairo_arc (cr, 0., 0., 1.5 * em, 0., 2 * M_PI);
+ cairo_restore (cr);
+
+ cairo_move_to (cr, EM_POINT(-6.0, 2.5));
+ cairo_line_to (cr, EM_POINT( 5.5, -2.0));
+
+ cairo_move_to (cr, EM_POINT(-6.0, -2.5));
+ cairo_line_to (cr, EM_POINT( 5.5, 2.0));
+
+ cairo_save (cr);
+ cairo_translate (cr, EM_POINT(4, 3));
+ cairo_scale (cr, 1.6, 1.0); // ellipse
+ cairo_arc (cr, 0., 0., 1.5 * em, 0., 2 * M_PI);
+ cairo_restore (cr);
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+
+ VECTORICONSTROKEOUTLINE (1.5 * em, 0xffffffff);
+#undef EM_POINT
+}
+
+/** time stretch icon */
+static void icon_tool_stretch (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y) * .55;
+
+ const double y0 = ceil (y);
+ const double bw = rint (wh);
+ const double lw = rint (wh / 3.0) / 2.0;
+ const double x0 = rint (x + lw) + .5;
+
+ // box indication region
+ cairo_rectangle (cr, x0 - lw - bw - .5, y0 - bw, lw + bw, 2 * bw);
+ VECTORICONSTROKEFILL (0.75);
+
+ cairo_set_line_width (cr, 1.0);
+
+ // inside/left arrow
+ cairo_move_to (cr, x0, y);
+ cairo_line_to (cr, x0 - lw * 2, y);
+ cairo_line_to (cr, x0 - lw * 2, y - lw * 3.5);
+ cairo_line_to (cr, x0 - lw * 6, y);
+ cairo_line_to (cr, x0 - lw * 2, y + lw * 3.5);
+ cairo_line_to (cr, x0 - lw * 2, y);
+
+ cairo_set_source_rgba (cr, 0, 0, 0, .5);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_fill (cr);
+
+ // outside/right arrow
+ cairo_move_to (cr, x0, y);
+ cairo_line_to (cr, x0 + lw * 2, y);
+ cairo_line_to (cr, x0 + lw * 2, y - lw * 4);
+ cairo_line_to (cr, x0 + lw * 6, y);
+ cairo_line_to (cr, x0 + lw * 2, y + lw * 4);
+ cairo_line_to (cr, x0 + lw * 2, y);
+
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 1, 1, 1, 1.0);
+ cairo_fill (cr);
+}
+
+/** audition - small speaker with sound-waves*/
+static void icon_tool_audition (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double em = std::min (x, y) * .1; // 1px at 20x20
+
+#define EM_POINT(X,Y) x + (X) * em, y + (Y) * em
+
+ cairo_move_to (cr, EM_POINT(-7.0, -2.0));
+ cairo_line_to (cr, EM_POINT(-7.0, 2.0));
+ cairo_line_to (cr, EM_POINT(-6.0, 3.0));
+ cairo_line_to (cr, EM_POINT(-3.0, 3.0));
+ cairo_line_to (cr, EM_POINT( 2.0, 6.0));
+ cairo_line_to (cr, EM_POINT( 2.0, -6.0));
+ cairo_line_to (cr, EM_POINT(-3.0, -3.0));
+ cairo_line_to (cr, EM_POINT(-6.0, -3.0));
+ cairo_close_path (cr);
+
+ cairo_pattern_t *speaker;
+ speaker = cairo_pattern_create_linear (EM_POINT(0, -3.0), EM_POINT(0, 3.0));
+ cairo_pattern_add_color_stop_rgba (speaker, 0.0, 0.8, 0.8, 0.8, 1.0);
+ cairo_pattern_add_color_stop_rgba (speaker, 0.25, 1.0, 1.0, 1.0, 1.0);
+ cairo_pattern_add_color_stop_rgba (speaker, 1.0, 0.6, 0.6, 0.6, 1.0);
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_set_line_width (cr, 1.5);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke_preserve (cr);
+ cairo_set_source (cr, speaker);
+ cairo_fill (cr);
+ cairo_pattern_destroy (speaker);
+
+ // TODO use a slight curve
+ cairo_move_to (cr, EM_POINT(-3.0, -3.0));
+ cairo_line_to (cr, EM_POINT(-3.5, 0.0));
+ cairo_line_to (cr, EM_POINT(-3.0, 3.0));
+ cairo_set_source_rgba (cr, 0, 0, 0, 0.7);
+ cairo_set_line_width (cr, 1.0);
+ cairo_stroke (cr);
+
+
+ cairo_save (cr);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ cairo_set_source_rgba (cr, 1, 1, 1, 1);
+
+ cairo_translate (cr, EM_POINT (4.0, 0));
+ cairo_scale (cr, 0.8, 1.25); // ellipse
+
+ cairo_arc (cr, 0, 0, 4 * em, -.5 * M_PI, .5 * M_PI);
+ cairo_set_line_width (cr, .8 * em);
+ cairo_stroke (cr);
+
+ cairo_arc (cr, 0, 0, 2 * em, -.5 * M_PI, .5 * M_PI);
+ cairo_set_line_width (cr, .5 * em);
+ cairo_stroke (cr);
+ cairo_restore (cr);
+#undef EM_POINT
+}
+
+/** pen top-left to bottom right */
+static void icon_tool_draw (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double em = std::min (x, y) * .1; // 1px at 20x20
+
+#define EM_POINT(X,Y) x + (X) * em, y + (Y) * em
+
+ // pen [6,-5] to [-3, 3]
+ // y = -8 * x / 9 + 1/3
+
+ // top-right end
+ cairo_move_to (cr, EM_POINT( 5.0, -6.11));
+ cairo_line_to (cr, EM_POINT( 6.4, -5.35)); // todo round properly.
+ cairo_line_to (cr, EM_POINT( 7.0, -3.88));
+
+ // bottom-left w/tip
+ cairo_line_to (cr, EM_POINT(-2.0, 4.11));
+ cairo_line_to (cr, EM_POINT(-6.0, 5.66)); // pen tip
+ cairo_line_to (cr, EM_POINT(-4.0, 1.88));
+ cairo_close_path (cr);
+
+ cairo_pattern_t *pen;
+ pen = cairo_pattern_create_linear (EM_POINT(-3.0, -6.0), EM_POINT(6.0, 4.0));
+ cairo_pattern_add_color_stop_rgba (pen, 0.4, 0.6, 0.6, 0.6, 1.0);
+ cairo_pattern_add_color_stop_rgba (pen, 0.5, 1.0, 1.0, 1.0, 1.0);
+ cairo_pattern_add_color_stop_rgba (pen, 0.6, 0.1, 0.1, 0.1, 1.0);
+
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_set_line_width (cr, em + .5);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke_preserve (cr);
+ cairo_set_source (cr, pen);
+ cairo_fill (cr);
+
+ // separate the tip
+ cairo_move_to (cr, EM_POINT(-2.0, 4.11));
+ cairo_line_to (cr, EM_POINT(-3.0, 2.8)); // slight curve [-3,3]
+ cairo_line_to (cr, EM_POINT(-4.0, 2.0));
+ cairo_set_line_width (cr, OUTLINEWIDTH);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_stroke (cr);
+
+ // pen tip
+ cairo_move_to (cr, EM_POINT(-5.0, 3.9));
+ cairo_line_to (cr, EM_POINT(-6.0, 5.66));
+ cairo_line_to (cr, EM_POINT(-4.1, 4.9));
+ cairo_close_path (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 0.7);
+ cairo_set_line_width (cr, em);
+ cairo_stroke_preserve (cr);
+ cairo_fill (cr);
+
+ cairo_pattern_destroy (pen);
+#undef EM_POINT
+}
+
+/** Toolbar icon - Time Axis View reduce height */
+static void icon_tav_shrink (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y) * .66;
+ const double ar = std::min (x, y) * .15;
+ const double tri = .7 * (wh - ar);
+
+ cairo_rectangle (cr, x - wh, y - ar, 2 * wh, 2 * ar);
+ VECTORICONSTROKEFILL(.75);
+
+ cairo_set_line_width (cr, 1.0);
+
+ cairo_move_to (cr, x, y - ar - 0.5);
+ cairo_line_to (cr, x - tri, y - wh + 0.5);
+ cairo_line_to (cr, x + tri, y - wh + 0.5);
+ cairo_close_path (cr);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, .75);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_fill (cr);
+
+ cairo_move_to (cr, x, y + ar + 0.5);
+ cairo_line_to (cr, x - tri, y + wh - 0.5);
+ cairo_line_to (cr, x + tri, y + wh - 0.5);
+ cairo_close_path (cr);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, .75);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_fill (cr);
+}
+
+/** Toolbar icon - Time Axis View increase height */
+static void icon_tav_expand (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y) * .66;
+ const double ar = std::min (x, y) * .15;
+ const double tri = .7 * (wh - ar);
+
+ cairo_rectangle (cr, x - wh, y - wh, 2 * wh, 2 * wh);
+ VECTORICONSTROKEFILL(.75);
+
+ cairo_set_line_width (cr, 1.0);
+
+ cairo_move_to (cr, x, y - wh + 0.5);
+ cairo_line_to (cr, x - tri, y - ar - 0.5);
+ cairo_line_to (cr, x + tri, y - ar - 0.5);
+ cairo_close_path (cr);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, .5);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_fill (cr);
+
+ cairo_move_to (cr, x , y + wh - 0.5);
+ cairo_line_to (cr, x - tri, y + ar + 0.5);
+ cairo_line_to (cr, x + tri, y + ar + 0.5);
+ cairo_close_path (cr);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, .5);
+ cairo_stroke_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_fill (cr);
+}
+
+
+/*****************************************************************************
+ * Record enable (transport & track header).
+ *
+ * hardcoded "red" #f46f6f
+ */
+
+/** standard rec-enable circle */
+static void icon_rec_enable (cairo_t *cr, const int width, const int height, const Gtkmm2ext::ActiveState state)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y) * .55;
+ cairo_arc (cr, x, y, r, 0, 2 * M_PI);
+ if (state == Gtkmm2ext::ExplicitActive)
+ cairo_set_source_rgba (cr, 0.95, 0.10, 0.10, 1.0);
+ else
+ cairo_set_source_rgba (cr, 0.95, 0.44, 0.44, 1.0); // #f46f6f
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8); // outline
+ cairo_set_line_width (cr, 1);
+ cairo_stroke (cr);
+}
+
+/** tape-mode, "reel" */
+static void icon_rec_tape (cairo_t *cr, const int width, const int height, const Gtkmm2ext::ActiveState state)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y) * .6;
+ const double slit = .11 * M_PI;
+ cairo_translate (cr, x, y);
+
+ cairo_arc (cr, 0, 0, r, 0, 2 * M_PI);
+ if (state == Gtkmm2ext::ExplicitActive) {
+ cairo_set_source_rgba (cr, .95, .1, .1, 1.);
+ } else {
+ cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f
+ }
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, .0, .0, .0, .5);
+ cairo_set_line_width (cr, 1);
+ cairo_stroke (cr);
+
+ cairo_save (cr);
+ cairo_set_source_rgba (cr, .15, .07, .07, 1.0);
+
+ cairo_rotate (cr, -.5 * M_PI);
+ cairo_move_to (cr, 0, 0);
+ cairo_arc (cr, 0, 0, r *.85, -slit, slit);
+ cairo_line_to (cr, 0, 0);
+ cairo_close_path (cr);
+
+ cairo_fill (cr);
+ cairo_rotate (cr, 2. * M_PI / 3.);
+
+ cairo_move_to (cr, 0, 0);
+ cairo_arc (cr, 0, 0, r *.85, -slit, slit);
+ cairo_line_to (cr, 0, 0);
+ cairo_close_path (cr);
+ cairo_fill (cr);
+
+ cairo_rotate (cr, 2. * M_PI / 3.);
+ cairo_move_to (cr, 0, 0);
+ cairo_arc (cr, 0, 0, r *.85, -slit, slit);
+ cairo_line_to (cr, 0, 0);
+ cairo_close_path (cr);
+ cairo_fill (cr);
+
+ cairo_restore (cr);
+
+ cairo_arc (cr, 0, 0, r * .3, 0, 2 * M_PI);
+ if (state == Gtkmm2ext::ExplicitActive)
+ cairo_set_source_rgba (cr, .95, .1, .1, 1.);
+ else
+ cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f
+ cairo_fill (cr);
+ cairo_set_source_rgba (cr, .0, .0, .0, 1.0);
+ cairo_arc (cr, 0, 0, r *.15, 0, 2 * M_PI); // hole in the middle
+ cairo_fill (cr);
+}
+
+
+/*****************************************************************************
+ * Transport buttons, foreground is always white
+ */
+
+/** stop square box */
+static void icon_transport_stop (cairo_t *cr, const int width, const int height)
+{
+ const int wh = std::min (width, height);
+ cairo_rectangle (cr,
+ (width - wh) * .5 + wh * .25,
+ (height - wh) * .5 + wh * .25,
+ wh * .5, wh * .5);
+ VECTORICONSTROKEFILL(0.9); // small 'shine'
+}
+
+/** play triangle */
+static void icon_transport_play (cairo_t *cr, const int width, const int height)
+{
+ const int wh = std::min (width, height) * .5;
+ const double y = height * .5;
+ const double x = width - wh;
+
+ const double tri = ceil (.577 * wh); // 1/sqrt(3)
+
+ cairo_move_to (cr, x + wh * .5, y);
+ cairo_line_to (cr, x - wh * .5, y - tri);
+ cairo_line_to (cr, x - wh * .5, y + tri);
+ cairo_close_path (cr);
+
+ VECTORICONSTROKEFILL(0.9);
+}
+
+/** Midi Panic "!" */
+static void icon_transport_panic (cairo_t *cr, const int width, const int height)
+{
+ const int wh = std::min (width, height) * .1;
+ const double xc = width * .5;
+ const double yh = height;
+ cairo_rectangle (cr,
+ xc - wh, yh *.19,
+ wh * 2, yh *.41);
+ VECTORICONSTROKEFILL(0.9);
+
+ cairo_arc (cr, xc, yh *.75, wh, 0, 2 * M_PI);
+ VECTORICONSTROKEFILL(0.9);
+}
+
+/** various combinations of lines and triangles "|>|", ">|" "|>" */
+static void icon_transport_ck (cairo_t *cr,
+ const enum Gtkmm2ext::ArdourIcon::Icon icon,
+ const int width, const int height)
+{
+ // small play triangle
+ int wh = std::min (width, height);
+ const double y = height * .5;
+ const double x = width - wh * .5;
+ wh *= .18;
+ const double tri = ceil (.577 * wh * 2); // 1/sqrt(3)
+
+ const float ln = std::min (width, height) * .07;
+
+ if (icon == TransportStart || icon == TransportRange) {
+ cairo_rectangle (cr,
+ x - wh - ln, y - tri * 1.7,
+ ln * 2, tri * 3.4);
+
+ VECTORICONSTROKEFILL(1.0);
+ }
+
+ if (icon == TransportEnd || icon == TransportRange) {
+ cairo_rectangle (cr,
+ x + wh - ln, y - tri * 1.7,
+ ln * 2, tri * 3.4);
+
+ VECTORICONSTROKEFILL(1.0);
+ }
+
+ if (icon == TransportStart) {
+ cairo_move_to (cr, x - wh, y);
+ cairo_line_to (cr, x + wh, y - tri);
+ cairo_line_to (cr, x + wh, y + tri);
+ } else {
+ cairo_move_to (cr, x + wh, y);
+ cairo_line_to (cr, x - wh, y - tri);
+ cairo_line_to (cr, x - wh, y + tri);
+ }
+
+ cairo_close_path (cr);
+ VECTORICONSTROKEFILL(1.0);
+}
+
+/** loop spiral */
+static void icon_transport_loop (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y);
+
+ cairo_arc (cr, x, y, r * .62, 0, 2 * M_PI);
+ cairo_arc_negative (cr, x, y, r * .35, 2 * M_PI, 0);
+
+ VECTORICONSTROKEFILL(1.0);
+
+#define ARCARROW(rad, ang) \
+ x + (rad) * sin ((ang) * 2.0 * M_PI), y + (rad) * cos ((ang) * 2.0 * M_PI)
+
+ cairo_move_to (cr, ARCARROW(r * .35, .72));
+ cairo_line_to (cr, ARCARROW(r * .15, .72));
+ cairo_line_to (cr, ARCARROW(r * .56, .60));
+ cairo_line_to (cr, ARCARROW(r * .75, .72));
+ cairo_line_to (cr, ARCARROW(r * .62, .72));
+
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke_preserve (cr);
+ cairo_close_path (cr);
+ cairo_set_source_rgba (cr, 1, 1, 1, 1.0);
+ cairo_fill (cr);
+#undef ARCARROW
+}
+
+/** de-construct thorwil's metronom */
+static void icon_transport_metronom (cairo_t *cr, const int width, const int height)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y);
+ const double h = wh * .85;
+ const double w = wh * .55;
+ const double lw = w * .34;
+
+ cairo_rectangle (cr,
+ x - w * .7, y + h * .25,
+ w * 1.4, lw);
+
+ VECTORICONSTROKEFILL(1.0);
+
+ cairo_move_to (cr, x - w, y + h);
+ cairo_line_to (cr, x + w, y + h);
+ cairo_line_to (cr, x + w * .35, y - h);
+ cairo_line_to (cr, x - w * .35, y - h);
+ cairo_line_to (cr, x - w, y + h);
+
+ cairo_move_to (cr, x - w + lw, y + h -lw);
+ cairo_line_to (cr, x - w * .35 + lw, y - h + lw);
+ cairo_line_to (cr, x + w * .35 - lw, y - h + lw);
+ cairo_line_to (cr, x + w - lw, y + h -lw);
+ cairo_line_to (cr, x - w + lw, y + h -lw);
+
+ VECTORICONSTROKEFILL(1.0);
+
+ // Pendulum
+ // ddx = .70 w = .75 * .5 wh = .375 wh
+ // ddy = .75 h - lw = .75 * .8 wh - wh .5 * .2 = .5 wh
+ // ang = (ddx/ddy):
+ // -> angle = atan (ang) = atan (375 / .5) ~= 36deg
+ const double dx = lw * .2; // 1 - cos(tan^-1(ang))
+ const double dy = lw * .4; // 1 - sin(tan^-1(ang))
+ cairo_move_to (cr, x - w * .3 , y + h * .25 + lw * .5);
+ cairo_line_to (cr, x - w + dx , y - h + lw + dy);
+ cairo_line_to (cr, x - w + lw , y - h + lw);
+ cairo_line_to (cr, x - w * .3 + lw, y + h * .25 + lw * .5);
+ cairo_close_path (cr);
+
+ VECTORICONSTROKEFILL(1.0);
+
+ cairo_rectangle (cr,
+ x - w * .7, y + h * .25,
+ w * 1.4, lw);
+ cairo_fill (cr);
+}
+
+
+/*****************************************************************************
+ * Zoom: In "+", Out "-" and Full "[]"
+ */
+static void icon_zoom (cairo_t *cr, const enum Gtkmm2ext::ArdourIcon::Icon icon, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y) * .7;
+ const double wh = std::min (x, y) * .45;
+
+ // draw handle first
+#define LINE45DEG(rad) \
+ x + r * (rad) * .707, y + r * (rad) * .707 // sin(45deg) = cos(45deg) = .707
+ cairo_move_to (cr, LINE45DEG(.9));
+ cairo_line_to (cr, LINE45DEG(1.3));
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ cairo_set_line_width (cr, 3.0);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke (cr);
+#undef LINE45DEG
+
+ // lens
+ ardour_icon_set_source_rgba (cr, fg_color);
+ cairo_arc (cr, x, y, r, 0, 2 * M_PI);
+ cairo_fill_preserve (cr);
+
+ // add a lens gradient
+ cairo_pattern_t *lens;
+ lens = cairo_pattern_create_radial (x - r, y - r, r * .5, x - r, y - r, r * 2);
+ cairo_pattern_add_color_stop_rgba (lens, 0, 1, 1, 1, .4);
+ cairo_pattern_add_color_stop_rgba (lens, 1, 0, 0, 0, .4);
+ cairo_set_source (cr, lens);
+ cairo_fill_preserve (cr);
+ cairo_pattern_destroy (lens);
+
+ // outline
+ cairo_set_line_width (cr, 1.5);
+ //ardour_icon_set_source_inv_rgba (cr, fg_color); // alpha
+ cairo_set_source_rgba (cr, .0, .0, .0, .8);
+ cairo_stroke (cr);
+
+ // add "+", "-" or "[]"
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_width (cr, 1.5);
+ ardour_icon_set_source_inv_rgba (cr, fg_color);
+
+ if (icon == ZoomIn || icon == ZoomOut) {
+ cairo_move_to (cr, x - wh, y);
+ cairo_line_to (cr, x + wh, y);
+ cairo_stroke (cr);
+ }
+ if (icon == ZoomIn) {
+ cairo_move_to (cr, x, y - wh);
+ cairo_line_to (cr, x, y + wh);
+ cairo_stroke (cr);
+ }
+ if (icon == ZoomFull) {
+ const double br0 = std::min (x, y) * .1;
+ const double br1 = std::min (x, y) * .3;
+ const double bry = std::min (x, y) * .3;
+ cairo_move_to (cr, x - br0, y - bry);
+ cairo_line_to (cr, x - br1, y - bry);
+ cairo_line_to (cr, x - br1, y + bry);
+ cairo_line_to (cr, x - br0, y + bry);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, x + br0, y - bry);
+ cairo_line_to (cr, x + br1, y - bry);
+ cairo_line_to (cr, x + br1, y + bry);
+ cairo_line_to (cr, x + br0, y + bry);
+ cairo_stroke (cr);
+ }
+}
+
+
+/*****************************************************************************
+ * Misc buttons
+ */
+
+/** "close" - "X" , no outline */
+static void icon_close_cross (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double o = .5 + std::min (x, y) * .4;
+ ardour_icon_set_source_rgba (cr, fg_color);
+ cairo_set_line_width (cr, 1);
+ cairo_move_to (cr, x-o, y-o);
+ cairo_line_to (cr, x+o, y+o);
+ cairo_move_to (cr, x+o, y-o);
+ cairo_line_to (cr, x-o, y+o);
+ cairo_stroke (cr);
+}
+
+/** "<" */
+static void icon_nudge_left (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y);
+
+ const double tri_x = .3 * wh;
+ const double tri_y = .6 * wh;
+
+ cairo_move_to (cr, x + tri_x, y - tri_y);
+ cairo_line_to (cr, x - tri_x, y);
+ cairo_line_to (cr, x + tri_x, y + tri_y);
+ VECTORICONSTROKEOUTLINE(1.5, fg_color);
+}
+
+/** ">" */
+static void icon_nudge_right (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+
+ const double x = width * .5;
+ const double y = height * .5;
+ const double wh = std::min (x, y);
+
+ const double tri_x = .3 * wh;
+ const double tri_y = .6 * wh;
+
+ cairo_move_to (cr, x - tri_x, y - tri_y);
+ cairo_line_to (cr, x + tri_x, y);
+ cairo_line_to (cr, x - tri_x, y + tri_y);
+ VECTORICONSTROKEOUTLINE(1.5, fg_color);
+
+}
+
+/** mixer strip narrow/wide */
+static void icon_strip_width (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x0 = width * .2;
+ const double x1 = width * .8;
+
+ const double y0 = height * .25;
+ const double y1= height * .75;
+
+ const double ym= height * .5;
+
+ // arrow
+ const double xa0= height * .39;
+ const double xa1= height * .61;
+ const double ya0= height * .35;
+ const double ya1= height * .65;
+
+ ardour_icon_set_source_rgba (cr, fg_color);
+ cairo_set_line_width (cr, 1);
+
+ // left + right
+ cairo_move_to (cr, x0, y0);
+ cairo_line_to (cr, x0, y1);
+ cairo_move_to (cr, x1, y0);
+ cairo_line_to (cr, x1, y1);
+
+ // horiz center line
+ cairo_move_to (cr, x0, ym);
+ cairo_line_to (cr, x1, ym);
+
+ // arrow left
+ cairo_move_to (cr, x0, ym);
+ cairo_line_to (cr, xa0, ya0);
+ cairo_move_to (cr, x0, ym);
+ cairo_line_to (cr, xa0, ya1);
+
+ // arrow right
+ cairo_move_to (cr, x1, ym);
+ cairo_line_to (cr, xa1, ya0);
+ cairo_move_to (cr, x1, ym);
+ cairo_line_to (cr, xa1, ya1);
+ cairo_stroke (cr);
+}
+
+/** 5-pin DIN MIDI socket */
+static void icon_din_midi (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y) * .75;
+ ardour_icon_set_source_rgba (cr, fg_color);
+ cairo_set_line_width (cr, 1);
+ cairo_arc (cr, x, y, r, .57 * M_PI, 2.43 * M_PI);
+ cairo_stroke (cr);
+
+ // pins equally spaced 45deg
+ cairo_arc (cr, x, y * 0.5, r * .15, 0, 2 * M_PI);
+ cairo_fill (cr);
+ cairo_arc (cr, x * 0.5, y, r * .15, 0, 2 * M_PI);
+ cairo_fill (cr);
+ cairo_arc (cr, x * 1.5, y, r * .15, 0, 2 * M_PI);
+ cairo_fill (cr);
+ // .5 + .5 * .5 * sin(45deg), 1.5 - .5 * .5 * cos(45deg)
+ cairo_arc (cr, x * 0.677, y * .677, r * .15, 0, 2 * M_PI);
+ cairo_fill (cr);
+ cairo_arc (cr, x * 1.323, y * .677, r * .15, 0, 2 * M_PI);
+ cairo_fill (cr);
+
+ // bottom notch
+ cairo_arc (cr, x, y+r, r * .26, 1.05 * M_PI, 1.95 * M_PI);
+ cairo_stroke (cr);
+}
+
+
+/*****************************************************************************/
+
+bool
+Gtkmm2ext::ArdourIcon::render (cairo_t *cr,
+ const enum Gtkmm2ext::ArdourIcon::Icon icon,
+ const int width, const int height,
+ const Gtkmm2ext::ActiveState state,
+ const uint32_t fg_color)
+{
+ bool rv = true;
+ cairo_save (cr);
+
+ if (width < 6 || height < 6) {
+ return false;
+ }
+
+ switch (icon) {
+ case TransportStop:
+ icon_transport_stop (cr, width, height);
+ break;
+ case TransportPlay:
+ icon_transport_play (cr, width, height);
+ break;
+ case TransportLoop:
+ icon_transport_loop (cr, width, height);
+ break;
+ case TransportMetronom:
+ icon_transport_metronom (cr, width, height);
+ break;
+ case TransportPanic:
+ icon_transport_panic (cr, width, height);
+ break;
+ case TransportStart: // no break
+ case TransportEnd: // no break
+ case TransportRange:
+ icon_transport_ck (cr, icon, width, height);
+ break;
+ case RecTapeMode:
+ icon_rec_tape (cr, width, height, state);
+ break;
+ case RecButton:
+ icon_rec_enable (cr, width, height, state);
+ break;
+ case CloseCross:
+ icon_close_cross (cr, width, height, fg_color);
+ break;
+ case StripWidth:
+ icon_strip_width (cr, width, height, fg_color);
+ break;
+ case DinMidi:
+ icon_din_midi (cr, width, height, fg_color);
+ break;
+ case NudgeLeft:
+ icon_nudge_left (cr, width, height, fg_color);
+ break;
+ case NudgeRight:
+ icon_nudge_right (cr, width, height, fg_color);
+ break;
+ case ZoomIn: // no break
+ case ZoomOut: // no break
+ case ZoomFull:
+ icon_zoom (cr, icon, width, height, fg_color);
+ break;
+ case TimeAxisShrink:
+ icon_tav_shrink (cr, width, height);
+ break;
+ case TimeAxisExpand:
+ icon_tav_expand (cr, width, height);
+ break;
+ case ToolRange:
+ icon_tool_range (cr, width, height);
+ break;
+ case ToolGrab:
+ icon_tool_grab (cr, width, height);
+ break;
+ case ToolCut:
+ icon_tool_cut (cr, width, height);
+ break;
+ case ToolStretch:
+ icon_tool_stretch (cr, width, height);
+ break;
+ case ToolAudition:
+ icon_tool_audition (cr, width, height);
+ break;
+ case ToolDraw:
+ icon_tool_draw (cr, width, height);
+ break;
+ case ToolContent:
+ icon_tool_content (cr, width, height);
+ break;
+ default:
+ rv = false;
+ break;
+ }
+ cairo_restore (cr);
+ return rv;
+}
+
+#undef VECTORICONSTROKEFILL
+#undef VECTORICONSTROKEOUTLINE
diff --git a/libs/gtkmm2ext/auto_spin.cc b/libs/gtkmm2ext/auto_spin.cc
index 5ab8852..0f4c371 100644
--- a/libs/gtkmm2ext/auto_spin.cc
+++ b/libs/gtkmm2ext/auto_spin.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1999 Paul Barton-Davis
+ Copyright (C) 1999 Paul Barton-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
@@ -34,12 +34,12 @@ const unsigned int AutoSpin::initial_timer_interval = 500; /* msecs */
const unsigned int AutoSpin::timer_interval = 20; /* msecs */
const unsigned int AutoSpin::climb_timer_calls = 5; /* between climbing */
-AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr, bool round_to_steps_yn)
+AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr, bool round_to_steps_yn)
: adjustment (adjr),
climb_rate (cr)
{
- initial = adjustment.get_value();
+ initial = adjustment.get_value ();
left_is_decrement = true;
wrap = false;
have_timer = false;
@@ -53,7 +53,7 @@ AutoSpin::stop_timer ()
{
if (have_timer) {
g_source_remove (timeout_tag);
- have_timer = false;
+ have_timer = false;
}
}
@@ -74,6 +74,10 @@ AutoSpin::button_press (GdkEventButton *ev)
stop_spinning (0);
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
+ return true;
+ }
+
if (ev->state & Keyboard::TertiaryModifier) {
/* use page shift */
@@ -89,51 +93,51 @@ AutoSpin::button_press (GdkEventButton *ev)
/* XXX should figure out which button is left/right */
switch (ev->button) {
- case 1:
- if (control) {
- set_value (left_is_decrement ? lower : upper);
- return TRUE;
- } else {
- if (left_is_decrement) {
- with_decrement = true;
+ case 1:
+ if (control) {
+ set_value (left_is_decrement ? lower : upper);
+ return TRUE;
} else {
- with_decrement = false;
+ if (left_is_decrement) {
+ with_decrement = true;
+ } else {
+ with_decrement = false;
+ }
}
- }
- break;
-
- case 2:
- if (!control) {
- set_value (initial);
- }
- return TRUE;
- break;
+ break;
- case 3:
- if (control) {
- set_value (left_is_decrement ? upper : lower);
+ case 2:
+ if (!control) {
+ set_value (initial);
+ }
return TRUE;
- }
- break;
+ break;
- case 4:
- if (!control) {
- adjust_value (shifted ? page_increment : step_increment);
- } else {
- set_value (upper);
- }
- return TRUE;
- break;
+ case 3:
+ if (control) {
+ set_value (left_is_decrement ? upper : lower);
+ return TRUE;
+ }
+ break;
- case 5:
- if (!control) {
- adjust_value (shifted ? -page_increment : -step_increment);
- } else {
- set_value (lower);
- }
- return TRUE;
- break;
- }
+ case 4:
+ if (!control) {
+ adjust_value (shifted ? page_increment : step_increment);
+ } else {
+ set_value (upper);
+ }
+ return TRUE;
+ break;
+
+ case 5:
+ if (!control) {
+ adjust_value (shifted ? -page_increment : -step_increment);
+ } else {
+ set_value (lower);
+ }
+ return TRUE;
+ break;
+ }
start_spinning (with_decrement, shifted);
return TRUE;
@@ -144,17 +148,17 @@ AutoSpin::start_spinning (bool decrement, bool page)
{
timer_increment = page ? page_increment : step_increment;
- if (decrement) {
+ if (decrement) {
timer_increment = -timer_increment;
}
adjust_value (timer_increment);
-
+
have_timer = true;
timer_calls = 0;
timeout_tag = g_timeout_add (initial_timer_interval,
- AutoSpin::_timer,
- this);
+ AutoSpin::_timer,
+ this);
}
gint
@@ -178,7 +182,7 @@ AutoSpin::adjust_value (gfloat increment)
gfloat val;
bool done = false;
- val = adjustment.get_value();
+ val = adjustment.get_value ();
val += increment;
@@ -198,7 +202,7 @@ AutoSpin::adjust_value (gfloat increment)
}
}
- set_value(val);
+ set_value (val);
return done;
}
@@ -215,22 +219,22 @@ AutoSpin::timer ()
/* we're in the initial call, which happened
after initial_timer_interval msecs. Now
request a much more frequent update.
- */
-
+ */
+
timeout_tag = g_timeout_add (timer_interval,
- _timer,
- this);
+ _timer,
+ this);
have_timer = true;
need_timer = false;
/* cancel this initial timeout */
-
+
retval = FALSE;
- } else {
+ } else {
/* this is the regular "fast" call after each
- timer_interval msecs.
- */
+ timer_interval msecs.
+ */
if (timer_calls < climb_timer_calls) {
timer_calls++;
@@ -251,19 +255,19 @@ AutoSpin::timer ()
}
return retval;
-}
+}
void
AutoSpin::set_bounds (gfloat init, gfloat up, gfloat down, bool with_reset)
{
- adjustment.set_upper(up);
- adjustment.set_lower(down);
+ adjustment.set_upper (up);
+ adjustment.set_lower (down);
initial = init;
-
+
adjustment.changed ();
-
+
if (with_reset) {
adjustment.set_value (init);
}
-}
+}
diff --git a/libs/gtkmm2ext/cairo_widget.cc b/libs/gtkmm2ext/cairo_widget.cc
index 98c7a30..2ffb2b4 100644
--- a/libs/gtkmm2ext/cairo_widget.cc
+++ b/libs/gtkmm2ext/cairo_widget.cc
@@ -16,6 +16,9 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#if !defined USE_CAIRO_IMAGE_SURFACE && !defined NDEBUG
+#define OPTIONAL_CAIRO_IMAGE_SURFACE
+#endif
#include "gtkmm2ext/cairo_widget.h"
#include "gtkmm2ext/gui_thread.h"
@@ -65,7 +68,17 @@ CairoWidget::on_button_press_event (GdkEventButton*)
bool
CairoWidget::on_expose_event (GdkEventExpose *ev)
{
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ Cairo::RefPtr<Cairo::Context> cr;
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+ if (!image_surface) {
+ image_surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height());
+ }
+ cr = Cairo::Context::create (image_surface);
+ } else {
+ cr = get_window()->create_cairo_context ();
+ }
+#elif defined USE_CAIRO_IMAGE_SURFACE
if (!image_surface) {
image_surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height());
@@ -95,7 +108,10 @@ CairoWidget::on_expose_event (GdkEventExpose *ev)
render (cr->cobj(), &expose_area);
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+#endif
+#if defined USE_CAIRO_IMAGE_SURFACE || defined OPTIONAL_CAIRO_IMAGE_SURFACE
image_surface->flush();
/* now blit our private surface back to the GDK one */
@@ -107,6 +123,9 @@ CairoWidget::on_expose_event (GdkEventExpose *ev)
cairo_context->set_operator (Cairo::OPERATOR_SOURCE);
cairo_context->paint ();
#endif
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ }
+#endif
return true;
}
@@ -130,9 +149,15 @@ CairoWidget::on_size_allocate (Gtk::Allocation& alloc)
{
Gtk::EventBox::on_size_allocate (alloc);
-#ifdef USE_CAIRO_IMAGE_SURFACE
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ if (getenv("ARDOUR_IMAGE_SURFACE")) {
+#endif
+#if defined USE_CAIRO_IMAGE_SURFACE || defined OPTIONAL_CAIRO_IMAGE_SURFACE
image_surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, alloc.get_width(), alloc.get_height());
#endif
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+ }
+#endif
set_dirty ();
}
diff --git a/libs/gtkmm2ext/debug.cc b/libs/gtkmm2ext/debug.cc
index 899c553..33262fd 100644
--- a/libs/gtkmm2ext/debug.cc
+++ b/libs/gtkmm2ext/debug.cc
@@ -20,5 +20,5 @@
#include "gtkmm2ext/debug.h"
#include "pbd/debug.h"
-uint64_t Gtkmm2ext::DEBUG::Keyboard = PBD::new_debug_bit ("keyboard");
-uint64_t Gtkmm2ext::DEBUG::Bindings = PBD::new_debug_bit ("bindings");
+PBD::DebugBits PBD::DEBUG::Keyboard = PBD::new_debug_bit ("keyboard");
+PBD::DebugBits PBD::DEBUG::Bindings = PBD::new_debug_bit ("bindings");
diff --git a/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h b/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h
new file mode 100644
index 0000000..df2fbbe
--- /dev/null
+++ b/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h
@@ -0,0 +1,47 @@
+#ifndef _gtkmm2ext_ardour_icon_h_
+#define _gtkmm2ext_ardour_icon_h_
+
+#include <stdint.h>
+#include <cairo.h>
+#include "gtkmm2ext/widget_state.h"
+
+namespace Gtkmm2ext { namespace ArdourIcon {
+ enum Icon {
+ NoIcon,
+ RecButton,
+ RecTapeMode,
+ CloseCross,
+ StripWidth,
+ DinMidi,
+ TransportStop,
+ TransportPlay,
+ TransportLoop,
+ TransportRange,
+ TransportStart,
+ TransportEnd,
+ TransportPanic,
+ TransportMetronom,
+ NudgeLeft,
+ NudgeRight,
+ ZoomIn,
+ ZoomOut,
+ ZoomFull,
+ TimeAxisShrink,
+ TimeAxisExpand,
+ ToolGrab,
+ ToolRange,
+ ToolCut,
+ ToolStretch,
+ ToolAudition,
+ ToolDraw,
+ ToolContent,
+ };
+
+ LIBGTKMM2EXT_API bool render (cairo_t *cr,
+ const enum Icon icon,
+ const int width, const int height,
+ const Gtkmm2ext::ActiveState state,
+ const uint32_t fg_color);
+}; };
+
+#endif
diff --git a/libs/gtkmm2ext/gtkmm2ext/debug.h b/libs/gtkmm2ext/gtkmm2ext/debug.h
index 8012742..1cb69be 100644
--- a/libs/gtkmm2ext/gtkmm2ext/debug.h
+++ b/libs/gtkmm2ext/gtkmm2ext/debug.h
@@ -20,14 +20,16 @@
#ifndef __libgtkmm2ext_debug_h__
#define __libgtkmm2ext_debug_h__
-#include "gtkmm2ext/visibility.h"
-
#include <stdint.h>
-namespace Gtkmm2ext {
+#include "pbd/debug.h"
+
+#include "gtkmm2ext/visibility.h"
+
+namespace PBD {
namespace DEBUG {
- LIBGTKMM2EXT_API extern uint64_t Keyboard;
- LIBGTKMM2EXT_API extern uint64_t Bindings;
+ LIBGTKMM2EXT_API extern DebugBits Keyboard;
+ LIBGTKMM2EXT_API extern DebugBits Bindings;
}
}
diff --git a/libs/gtkmm2ext/gtkmm2ext/keyboard.h b/libs/gtkmm2ext/gtkmm2ext/keyboard.h
index 3286383..73c9ad7 100644
--- a/libs/gtkmm2ext/gtkmm2ext/keyboard.h
+++ b/libs/gtkmm2ext/gtkmm2ext/keyboard.h
@@ -115,13 +115,22 @@ class LIBGTKMM2EXT_API Keyboard : public sigc::trackable, PBD::Stateful
static bool no_modifiers_active (guint state);
static void set_snap_modifier (guint);
-
/** @return Modifier mask to temporarily toggle grid setting; with this modifier
* - magnetic or normal grid should become no grid and
* - no grid should become normal grid
*/
static ModifierMask snap_modifier () { return ModifierMask (snap_mod); }
+ static void set_snap_delta_modifier (guint);
+ /** @return Modifier mask to temporarily toggle between relative and absolute grid setting.
+ * Absolute grid is for aligning objects with the grid lines.
+ * Relative grid is for maintaining an initial position relative to the grid lines.
+ * With this modifier:
+ * - magnetic or normal grid should snap relative to an initial grid offset
+ * - no grid should snap relative to the grid.
+ */
+ static ModifierMask snap_delta_modifier () { return ModifierMask (snap_delta_mod); }
+
static guint edit_button() { return edit_but; }
static void set_edit_button (guint);
static guint edit_modifier() { return edit_mod; }
@@ -186,6 +195,7 @@ class LIBGTKMM2EXT_API Keyboard : public sigc::trackable, PBD::Stateful
static guint insert_note_but;
static guint insert_note_mod;
static guint snap_mod;
+ static guint snap_delta_mod;
static guint button2_modifiers;
static Gtk::Window* current_window;
static std::string user_keybindings_path;
diff --git a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
index 840280f..6507bbb 100644
--- a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
+++ b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
@@ -32,7 +32,7 @@ namespace Gtkmm2ext {
class LIBGTKMM2EXT_API PersistentTooltip : public sigc::trackable
{
public:
- PersistentTooltip (Gtk::Widget *);
+ PersistentTooltip (Gtk::Widget *, int margin_y = 0);
virtual ~PersistentTooltip ();
void set_tip (std::string);
@@ -62,6 +62,7 @@ private:
sigc::connection _timeout;
/** The tip text */
std::string _tip;
+ int _margin_y;
};
}
diff --git a/libs/gtkmm2ext/keyboard.cc b/libs/gtkmm2ext/keyboard.cc
index 420d422..9091eb5 100644
--- a/libs/gtkmm2ext/keyboard.cc
+++ b/libs/gtkmm2ext/keyboard.cc
@@ -58,7 +58,6 @@ guint Keyboard::delete_but = 3;
guint Keyboard::delete_mod = GDK_SHIFT_MASK;
guint Keyboard::insert_note_but = 1;
guint Keyboard::insert_note_mod = GDK_CONTROL_MASK;
-guint Keyboard::snap_mod = GDK_MOD3_MASK;
#ifdef GTKOSX
@@ -77,6 +76,9 @@ const char* Keyboard::level4_modifier_name() { return _("Option"); }
const char* Keyboard::copy_modifier_name() { return _("Control"); }
const char* Keyboard::rangeselect_modifier_name() { return S_("Key|Shift"); }
+guint Keyboard::snap_mod = Keyboard::Level4Modifier|Keyboard::TertiaryModifier; // XXX this is probably completely wrong
+guint Keyboard::snap_delta_mod = Keyboard::Level4Modifier;
+
#else
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
@@ -94,6 +96,9 @@ const char* Keyboard::level4_modifier_name() { return _("Meta"); }
const char* Keyboard::copy_modifier_name() { return _("Control"); }
const char* Keyboard::rangeselect_modifier_name() { return S_("Key|Shift"); }
+guint Keyboard::snap_mod = Keyboard::SecondaryModifier;
+guint Keyboard::snap_delta_mod = Keyboard::SecondaryModifier|Keyboard::Level4Modifier;
+
#endif
guint Keyboard::GainFineScaleModifier = Keyboard::PrimaryModifier;
@@ -103,7 +108,6 @@ guint Keyboard::ScrollZoomVerticalModifier = Keyboard::SecondaryModifier;
guint Keyboard::ScrollZoomHorizontalModifier = Keyboard::PrimaryModifier;
guint Keyboard::ScrollHorizontalModifier = Keyboard::TertiaryModifier;
-
Keyboard* Keyboard::_the_keyboard = 0;
Gtk::Window* Keyboard::current_window = 0;
bool Keyboard::_some_magic_widget_has_focus = false;
@@ -169,6 +173,8 @@ Keyboard::get_state (void)
XMLNode* node = new XMLNode ("Keyboard");
char buf[32];
+ snprintf (buf, sizeof (buf), "%d", CopyModifier);
+ node->add_property ("copy-modifier", buf);
snprintf (buf, sizeof (buf), "%d", edit_but);
node->add_property ("edit-button", buf);
snprintf (buf, sizeof (buf), "%d", edit_mod);
@@ -179,6 +185,8 @@ Keyboard::get_state (void)
node->add_property ("delete-modifier", buf);
snprintf (buf, sizeof (buf), "%d", snap_mod);
node->add_property ("snap-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", snap_delta_mod);
+ node->add_property ("snap-delta-modifier", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_but);
node->add_property ("insert-note-button", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_mod);
@@ -192,6 +200,10 @@ Keyboard::set_state (const XMLNode& node, int /*version*/)
{
const XMLProperty* prop;
+ if ((prop = node.property ("copy-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &CopyModifier);
+ }
+
if ((prop = node.property ("edit-button")) != 0) {
sscanf (prop->value().c_str(), "%d", &edit_but);
}
@@ -212,6 +224,10 @@ Keyboard::set_state (const XMLNode& node, int /*version*/)
sscanf (prop->value().c_str(), "%d", &snap_mod);
}
+ if ((prop = node.property ("snap-delta-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &snap_delta_mod);
+ }
+
if ((prop = node.property ("insert-note-button")) != 0) {
sscanf (prop->value().c_str(), "%d", &insert_note_but);
}
@@ -466,6 +482,14 @@ Keyboard::set_snap_modifier (guint mod)
RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_mod);
}
+void
+Keyboard::set_snap_delta_modifier (guint mod)
+{
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~snap_delta_mod);
+ snap_delta_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_delta_mod);
+}
+
bool
Keyboard::is_edit_event (GdkEventButton *ev)
{
diff --git a/libs/gtkmm2ext/persistent_tooltip.cc b/libs/gtkmm2ext/persistent_tooltip.cc
index 77a8d94..d9ccfa1 100644
--- a/libs/gtkmm2ext/persistent_tooltip.cc
+++ b/libs/gtkmm2ext/persistent_tooltip.cc
@@ -28,11 +28,12 @@ using namespace Gtk;
using namespace Gtkmm2ext;
/** @param target The widget to provide the tooltip for */
-PersistentTooltip::PersistentTooltip (Gtk::Widget* target)
+PersistentTooltip::PersistentTooltip (Gtk::Widget* target, int margin_y)
: _target (target)
, _window (0)
, _label (0)
, _maybe_dragging (false)
+ , _margin_y (margin_y)
{
target->signal_enter_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::enter), false);
target->signal_leave_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::leave), false);
@@ -110,6 +111,9 @@ PersistentTooltip::hide ()
void
PersistentTooltip::show ()
{
+ if (_tip.empty()) {
+ return;
+ }
if (!_window) {
_window = new Window (WINDOW_POPUP);
_window->set_name (X_("ContrastingPopup"));
@@ -135,7 +139,7 @@ PersistentTooltip::show ()
int rx, ry, sw;
sw= gdk_screen_width();
_target->get_window()->get_origin (rx, ry);
- _window->move (rx, ry + _target->get_height());
+ _window->move (rx, ry + _target->get_height() + _margin_y);
_window->present ();
/* the window needs to be realized first
diff --git a/libs/gtkmm2ext/wscript b/libs/gtkmm2ext/wscript
index d9af1f8..bbe4ae5 100644
--- a/libs/gtkmm2ext/wscript
+++ b/libs/gtkmm2ext/wscript
@@ -23,6 +23,7 @@ I18N_PACKAGE = 'gtkmm2ext3'
gtkmm2ext_sources = [
'actions.cc',
'application.cc',
+ 'ardour_icon.cc',
'auto_spin.cc',
'barcontroller.cc',
'binding_proxy.cc',
diff --git a/libs/libltc/MSVCltc/ltc.vcproj b/libs/libltc/MSVCltc/ltc.vcproj
index 3d03872..654c953 100644
--- a/libs/libltc/MSVCltc/ltc.vcproj
+++ b/libs/libltc/MSVCltc/ltc.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -110,7 +110,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -176,7 +176,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_LIBLTC;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/midi++2/MSVCmidi++/midi++.vcproj b/libs/midi++2/MSVCmidi++/midi++.vcproj
index da0f47a..9325530 100644
--- a/libs/midi++2/MSVCmidi++/midi++.vcproj
+++ b/libs/midi++2/MSVCmidi++/midi++.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;..\..\evoral;..\..\timecode;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -122,7 +122,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\pbd;..\..\evoral;..\..\timecode;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -201,7 +201,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\pbd;..\..\evoral;..\..\timecode;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_MIDI;LIBMIDIPP_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/panners/MSVCpanners/panner_1in2out.vcproj b/libs/panners/MSVCpanners/panner_1in2out.vcproj
index 5c5f312..445f0f0 100644
--- a/libs/panners/MSVCpanners/panner_1in2out.vcproj
+++ b/libs/panners/MSVCpanners/panner_1in2out.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan1in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/panners/MSVCpanners/panner_2in2out.vcproj b/libs/panners/MSVCpanners/panner_2in2out.vcproj
index 27ddcb5..648d935 100644
--- a/libs/panners/MSVCpanners/panner_2in2out.vcproj
+++ b/libs/panners/MSVCpanners/panner_2in2out.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_pan2in2out\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/panners/MSVCpanners/panner_vbap.vcproj b/libs/panners/MSVCpanners/panner_vbap.vcproj
index ac0327a..894bbdf 100644
--- a/libs/panners/MSVCpanners/panner_vbap.vcproj
+++ b/libs/panners/MSVCpanners/panner_vbap.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\timecode;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURPANNERS;ARDOURPANNER_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_panvbap\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/pbd/MSVCpbd/pbd.vcproj b/libs/pbd/MSVCpbd/pbd.vcproj
index e926049..07bb5fa 100644
--- a/libs/pbd/MSVCpbd/pbd.vcproj
+++ b/libs/pbd/MSVCpbd/pbd.vcproj
@@ -44,7 +44,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\glibmm2;"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-$(GlibApiVersion)\include";"$(GenericIncludeFolder)\boost";."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="UINTSDEFINED=1;PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -126,7 +126,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\glibmm2;"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-$(GlibApiVersion)\include";"$(GenericIncludeFolder)\boost";."
- PreprocessorDefinitions="_SECURE_SCL=0;PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;_WIN32;WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="UINTSDEFINED=1;_SECURE_SCL=0;PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;_WIN32;WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -206,7 +206,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\glibmm2;"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-$(GlibApiVersion)\include";"$(GenericIncludeFolder)\boost";."
- PreprocessorDefinitions="_SECURE_SCL=0;PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="UINTSDEFINED=1;_SECURE_SCL=0;PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_PBD;BUILDING_GETOPT;LIBPBD_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;NO_POSIX_MEMALIGN;WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"libpbd4\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -490,34 +490,6 @@
Name="msvc"
>
<File
- RelativePath="..\msvc\fpu.cc"
- >
- <FileConfiguration
- Name="Debug 32|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\msvc\fpu.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release 32|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\msvc\fpu.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release 32 with Debugging Capability|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\msvc\fpu.obj"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="..\msvc\getopt.c"
>
<FileConfiguration
diff --git a/libs/pbd/controllable_descriptor.cc b/libs/pbd/controllable_descriptor.cc
index 392b917..63ecab1 100644
--- a/libs/pbd/controllable_descriptor.cc
+++ b/libs/pbd/controllable_descriptor.cc
@@ -72,6 +72,9 @@ ControllableDescriptor::set (const std::string& str)
if (path[1] == "gain") {
_subtype = Gain;
+ } else if (path[1] == "trim") {
+ _subtype = Trim;
+
} else if (path[1] == "solo") {
_subtype = Solo;
diff --git a/libs/pbd/debug.cc b/libs/pbd/debug.cc
index dfa1890..25ebb64 100644
--- a/libs/pbd/debug.cc
+++ b/libs/pbd/debug.cc
@@ -31,9 +31,11 @@
#include "i18n.h"
using namespace std;
-static uint64_t _debug_bit = 1;
+using PBD::DebugBits;
-typedef std::map<const char*,uint64_t> DebugMap;
+static uint64_t _debug_bit = 0;
+
+typedef std::map<const char*,DebugBits> DebugMap;
namespace PBD {
DebugMap & _debug_bit_map()
@@ -43,24 +45,23 @@ namespace PBD {
}
}
-uint64_t PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful");
-uint64_t PBD::DEBUG::Properties = PBD::new_debug_bit ("properties");
-uint64_t PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager");
-uint64_t PBD::DEBUG::Pool = PBD::new_debug_bit ("pool");
-uint64_t PBD::DEBUG::EventLoop = PBD::new_debug_bit ("eventloop");
-uint64_t PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui");
-uint64_t PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils");
-uint64_t PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration");
+DebugBits PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful");
+DebugBits PBD::DEBUG::Properties = PBD::new_debug_bit ("properties");
+DebugBits PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager");
+DebugBits PBD::DEBUG::Pool = PBD::new_debug_bit ("pool");
+DebugBits PBD::DEBUG::EventLoop = PBD::new_debug_bit ("eventloop");
+DebugBits PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui");
+DebugBits PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils");
+DebugBits PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration");
-uint64_t PBD::debug_bits = 0x0;
+DebugBits PBD::debug_bits;
-uint64_t
+DebugBits
PBD::new_debug_bit (const char* name)
{
- uint64_t ret;
- _debug_bit_map().insert (make_pair (name, _debug_bit));
- ret = _debug_bit;
- _debug_bit <<= 1;
+ DebugBits ret;
+ ret.set (_debug_bit++, 1);
+ _debug_bit_map().insert (make_pair (name, ret));
return ret;
}
@@ -70,12 +71,6 @@ PBD::debug_print (const char* prefix, string str)
cerr << prefix << ": " << str;
}
-void
-PBD::set_debug_bits (uint64_t bits)
-{
- debug_bits = bits;
-}
-
int
PBD::parse_debug_options (const char* str)
{
@@ -83,7 +78,7 @@ PBD::parse_debug_options (const char* str)
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep (",");
tokenizer tokens (in_str, sep);
- uint64_t bits = 0;
+ DebugBits bits;
for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) {
if (*tok_iter == "list") {
@@ -92,20 +87,22 @@ PBD::parse_debug_options (const char* str)
}
if (*tok_iter == "all") {
- PBD::set_debug_bits (~0ULL);
+ debug_bits.set (); /* sets all bits */
return 0;
}
- for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
+ for (map<const char*,DebugBits>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
const char* cstr = (*tok_iter).c_str();
if (strncasecmp (cstr, i->first, strlen (cstr)) == 0) {
- bits |= i->second;
+ bits |= i->second;
+ cerr << i->first << " set ... debug bits now set to " << bits << " using " << i->second << endl;
}
}
}
- PBD::set_debug_bits (bits);
+ debug_bits = bits;
+
return 0;
}
@@ -117,7 +114,7 @@ PBD::list_debug_options ()
vector<string> options;
- for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
+ for (map<const char*,DebugBits>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
options.push_back (i->first);
}
diff --git a/libs/pbd/fpu.cc b/libs/pbd/fpu.cc
index b12d341..4db7acd 100644
--- a/libs/pbd/fpu.cc
+++ b/libs/pbd/fpu.cc
@@ -16,7 +16,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#ifndef COMPILER_MSVC
+
#include "libpbd-config.h"
#define _XOPEN_SOURCE 600
@@ -25,6 +25,10 @@
#include <stdint.h>
#include <assert.h>
+#ifdef PLATFORM_WINDOWS
+#include <intrin.h>
+#endif
+
#include "pbd/fpu.h"
#include "pbd/error.h"
@@ -39,15 +43,26 @@ FPU::FPU ()
_flags = Flags (0);
-#if defined(__MINGW64__) // Vkamyshniy: under __MINGW64__ the assembler code below is not compiled
- return;
-#endif
-
-#if !( (defined __x86_64__) || (defined __i386__) ) // !ARCH_X86
+#if !( (defined __x86_64__) || (defined __i386__) || (defined _M_X64) || (defined _M_IX86) ) // !ARCH_X86
return;
#else
-#ifndef _LP64 //USE_X86_64_ASM
+#ifdef PLATFORM_WINDOWS
+
+ // Get CPU flags using Microsoft function
+ // It works for both 64 and 32 bit systems
+ // no need to use assembler for getting info from register, this function does this for us
+ int cpuInfo[4];
+ __cpuid (cpuInfo, 1);
+ cpuflags = cpuInfo[3];
+
+#else
+
+#ifndef _LP64 /* *nix; 32 bit version. This odd macro constant is required because we need something that identifies this as a 32 bit
+ build on Linux and on OS X. Anything that serves this purpose will do, but this is the best thing we've identified
+ so far.
+ */
+
asm volatile (
"mov $1, %%eax\n"
"pushl %%ebx\n"
@@ -59,7 +74,7 @@ FPU::FPU ()
: "%eax", "%ecx", "%edx"
);
-#else
+#else /* *nix; 64 bit version */
/* asm notes: although we explicitly save&restore rbx, we must tell
gcc that ebx,rbx is clobbered so that it doesn't try to use it as an intermediate
@@ -78,7 +93,8 @@ FPU::FPU ()
: "%rax", "%rbx", "%rcx", "%rdx"
);
-#endif /* USE_X86_64_ASM */
+#endif /* _LP64 */
+#endif /* PLATFORM_WINDOWS */
if (cpuflags & (1<<25)) {
_flags = Flags (_flags | (HasSSE|HasFlushToZero));
@@ -101,12 +117,20 @@ FPU::FPU ()
31 for the MXCSR_MASK value. If bit 6 is set, DAZ is
supported, otherwise, it isn't.
*/
-
+
#ifndef HAVE_POSIX_MEMALIGN
+# ifdef PLATFORM_WINDOWS
+ fxbuf = (char **) _aligned_malloc (sizeof (char *), 16);
+ assert (fxbuf);
+ *fxbuf = (char *) _aligned_malloc (512, 16);
+ assert (*fxbuf);
+# else
+# warning using default malloc for aligned memory
fxbuf = (char **) malloc (sizeof (char *));
assert (fxbuf);
*fxbuf = (char *) malloc (512);
assert (*fxbuf);
+# endif
#else
(void) posix_memalign ((void **) &fxbuf, 16, sizeof (char *));
assert (fxbuf);
@@ -116,12 +140,20 @@ FPU::FPU ()
memset (*fxbuf, 0, 512);
+#ifdef COMPILER_MSVC
+ char *buf = *fxbuf;
+ __asm {
+ mov eax, buf
+ fxsave [eax]
+ };
+#else
asm volatile (
"fxsave (%0)"
:
: "r" (*fxbuf)
: "memory"
);
+#endif
uint32_t mxcsr_mask = *((uint32_t*) &((*fxbuf)[28]));
@@ -135,8 +167,13 @@ FPU::FPU ()
_flags = Flags (_flags | HasDenormalsAreZero);
}
+#if !defined HAVE_POSIX_MEMALIGN && defined PLATFORM_WINDOWS
+ _aligned_free (*fxbuf);
+ _aligned_free (fxbuf);
+#else
free (*fxbuf);
free (fxbuf);
+#endif
}
#endif
}
@@ -144,7 +181,3 @@ FPU::FPU ()
FPU::~FPU ()
{
}
-
-#else // COMPILER_MSVC
- const char* pbd_fpu = "pbd/msvc/fpu.cc takes precedence over this file";
-#endif // COMPILER_MSVC
diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc
index 978ca00..a11a23f 100644
--- a/libs/pbd/malign.cc
+++ b/libs/pbd/malign.cc
@@ -29,7 +29,7 @@
using namespace PBD;
-#ifdef __x86_64__
+#if ( defined(__x86_64__) || defined(_M_X64) )
static const int CPU_CACHE_ALIGN = 64;
#else
static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it matters less */
diff --git a/libs/pbd/msvc/fpu.cc b/libs/pbd/msvc/fpu.cc
deleted file mode 100644
index 6997405..0000000
--- a/libs/pbd/msvc/fpu.cc
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifdef COMPILER_MSVC // Added by JE - 05-12-2009. Inline assembler instructions
- // have been changed to Intel format and (in the case of
- // cpuid) was replaced by the equivalent VC++ system call).
-#define _XOPEN_SOURCE 600
-#include <cstdlib>
-#include <stdint.h>
-#include <intrin.h> // Added by JE - 05-12-2009
-
-#include <pbd/fpu.h>
-#include <pbd/error.h>
-
-#include "i18n.h"
-
-using namespace PBD;
-using namespace std;
-
-FPU::FPU ()
-{
- unsigned long cpuflags = 0;
-
- _flags = (Flags)0;
-
-#ifndef ARCH_X86
- return;
-
-#else
-
-#ifndef USE_X86_64_ASM
-int cpuInfo[4];
-
- __cpuid (cpuInfo, 1);
- cpuflags = cpuInfo[3];
-/*
- __asm { // This is how the original section would look if converted to Intel syntax.
- // However, I have grave doubts about whether it's doing the right thing.
- // It seems as if the intention was to retrieve feature information from
- // the processor. However, feature information is returned in the ebx register
- // (if you believe Wikipedia) or in edx (if you believe Microsoft). Unfortunately,
- // both registers get ignored in the original code!! Confused?? Join the club!!
- mov eax, 1
- push ebx
- cpuid
- mov edx, 0
- pop ebx
- mov cpuflags, ecx // This can't be right, surely???
- }; */
-#else
-// Note that this syntax is currently still in AT&T format !
- asm volatile (
- "pushq %%rbx\n"
- "movq $1, %%rax\n"
- "cpuid\n"
- "movq %%rdx, %0\n"
- "popq %%rbx\n"
- : "=r" (cpuflags)
- :
- : "%rax", "%rcx", "%rdx", "memory"
- );
-
-#endif /* USE_X86_64_ASM */
-
- if (cpuflags & (1<<25)) {
- _flags = Flags (_flags | (HasSSE|HasFlushToZero));
- }
-
- if (cpuflags & (1<<26)) {
- _flags = Flags (_flags | HasSSE2);
- }
-
- if (cpuflags & (1 << 24)) {
- bool aligned_malloc = false; // Added by JE - 05-12-2009
- char* fxbuf = 0;
-// This section changed by JE - 05-12-2009
-#ifdef NO_POSIX_MEMALIGN
-#if defined(COMPILER_MSVC) || defined(COMPILER_MINGW) // All of these support '_aligned_malloc()'
- fxbuf = (char *) _aligned_malloc(512, 16); // (note that they all need at least MSVC runtime 7.0)
- aligned_malloc = true;
-#else
- fxbuf = (char *) malloc(512);
-#endif
-#else
- fxbuf = posix_memalign ((void**)&fxbuf, 16, 512);
-#endif
- // Verify that fxbuf is correctly aligned
- unsigned long buf_addr = (unsigned long)(void*)fxbuf;
- if ((0 == buf_addr) || (buf_addr % 16))
- error << _("cannot allocate 16 byte aligned buffer for h/w feature detection") << endmsg;
- else
- {
- memset(fxbuf, 0, 512); // Initialize the buffer !!! Added by JE - 12-12-2009
-
- __asm {
- mov eax, fxbuf
- fxsave [eax]
- };
-
- uint32_t mxcsr_mask = *((uint32_t*) &fxbuf[28]);
-
- /* if the mask is zero, set its default value (from intel specs) */
-
- if (mxcsr_mask == 0) {
- mxcsr_mask = 0xffbf;
- }
-
- if (mxcsr_mask & (1<<6)) {
- _flags = Flags (_flags | HasDenormalsAreZero);
- }
-
- if (aligned_malloc)
- _aligned_free (fxbuf);
- else
- free (fxbuf);
- }
- }
-#endif // ARCH_X86
-}
-
-FPU::~FPU ()
-{
-}
-
-#else // !COMPILER_MSVC
- const char* pbd_fpu = "original pbd/fpu.cc takes precedence over this file";
-#endif // COMPILER_MSVC
diff --git a/libs/pbd/pbd/controllable_descriptor.h b/libs/pbd/pbd/controllable_descriptor.h
index b234dbd..ddb29a2 100644
--- a/libs/pbd/pbd/controllable_descriptor.h
+++ b/libs/pbd/pbd/controllable_descriptor.h
@@ -36,6 +36,7 @@ public:
enum SubType {
Gain,
+ Trim,
Solo,
Mute,
Recenable,
diff --git a/libs/pbd/pbd/debug.h b/libs/pbd/pbd/debug.h
index f1776a2..e4fa525 100644
--- a/libs/pbd/pbd/debug.h
+++ b/libs/pbd/pbd/debug.h
@@ -20,6 +20,7 @@
#ifndef __libpbd_debug_h__
#define __libpbd_debug_h__
+#include <bitset>
#include <stdint.h>
#include <sstream>
@@ -29,10 +30,12 @@
namespace PBD {
- LIBPBD_API extern uint64_t debug_bits;
- LIBPBD_API uint64_t new_debug_bit (const char* name);
+ typedef std::bitset<64> DebugBits;
+
+ LIBPBD_API extern DebugBits debug_bits;
+ LIBPBD_API DebugBits new_debug_bit (const char* name);
LIBPBD_API void debug_print (const char* prefix, std::string str);
- LIBPBD_API void set_debug_bits (uint64_t bits);
+ LIBPBD_API void set_debug_bits (DebugBits bits);
LIBPBD_API int parse_debug_options (const char* str);
LIBPBD_API void list_debug_options ();
@@ -40,32 +43,32 @@ namespace PBD {
/* this namespace is so that we can write DEBUG::bit_name */
- LIBPBD_API extern uint64_t Stateful;
- LIBPBD_API extern uint64_t Properties;
- LIBPBD_API extern uint64_t FileManager;
- LIBPBD_API extern uint64_t Pool;
- LIBPBD_API extern uint64_t EventLoop;
- LIBPBD_API extern uint64_t AbstractUI;
- LIBPBD_API extern uint64_t Configuration;
- extern uint64_t FileUtils;
+ LIBPBD_API extern DebugBits Stateful;
+ LIBPBD_API extern DebugBits Properties;
+ LIBPBD_API extern DebugBits FileManager;
+ LIBPBD_API extern DebugBits Pool;
+ LIBPBD_API extern DebugBits EventLoop;
+ LIBPBD_API extern DebugBits AbstractUI;
+ LIBPBD_API extern DebugBits Configuration;
+ LIBPBD_API extern DebugBits FileUtils;
}
}
#ifndef NDEBUG
-#define DEBUG_TRACE(bits,str) if ((bits) & PBD::debug_bits) { PBD::debug_print (# bits, str); }
+#define DEBUG_TRACE(bits,str) if (((bits) & PBD::debug_bits).any()) { PBD::debug_print (# bits, str); }
#define DEBUG_STR_DECL(id) std::stringstream __debug_str ## id;
#define DEBUG_STR(id) __debug_str ## id
#define DEBUG_STR_APPEND(id,s) __debug_str ## id << s;
-#define DEBUG_ENABLED(bits) ((bits) & PBD::debug_bits)
+#define DEBUG_ENABLED(bits) (((bits) & PBD::debug_bits).any())
#ifdef PTW32_VERSION
#define DEBUG_THREAD_SELF pthread_self().p
#else
#define DEBUG_THREAD_SELF pthread_self()
#endif
-#define DEBUG_TIMING_START(bits,td) if ((bits) & PBD::debug_bits) { td.start_timing (); }
-#define DEBUG_TIMING_ADD_ELAPSED(bits,td) if ((bits) & PBD::debug_bits) { td.add_elapsed (); }
-#define DEBUG_TIMING_RESET(bits,td) if ((bits) & PBD::debug_bits) { td.reset (); }
+#define DEBUG_TIMING_START(bits,td) if (DEBUG_ENABLED (bits)) { td.start_timing (); }
+#define DEBUG_TIMING_ADD_ELAPSED(bits,td) if (DEBUG_ENABLED (bits)) { td.add_elapsed (); }
+#define DEBUG_TIMING_RESET(bits,td) if (DEBUG_ENABLED (bits)) { td.reset (); }
#else
#define DEBUG_TRACE(bits,fmt,...) /*empty*/
diff --git a/libs/pbd/pbd/signals.h b/libs/pbd/pbd/signals.h
index ef53770..983c56c 100644
--- a/libs/pbd/pbd/signals.h
+++ b/libs/pbd/pbd/signals.h
@@ -39,7 +39,9 @@
#include "pbd/libpbd_visibility.h"
#include "pbd/event_loop.h"
+#ifndef NDEBUG
#define DEBUG_PBD_SIGNAL_CONNECTIONS
+#endif
#ifdef DEBUG_PBD_SIGNAL_CONNECTIONS
#include "pbd/stacktrace.h"
@@ -53,7 +55,11 @@ class LIBPBD_API Connection;
class LIBPBD_API SignalBase
{
public:
- SignalBase () : _debug_connection (false) {}
+ SignalBase ()
+#ifdef DEBUG_PBD_SIGNAL_CONNECTIONS
+ : _debug_connection (false)
+#endif
+ {}
virtual ~SignalBase () {}
virtual void disconnect (boost::shared_ptr<Connection>) = 0;
#ifdef DEBUG_PBD_SIGNAL_CONNECTIONS
diff --git a/libs/pbd/pbd/signals.py b/libs/pbd/pbd/signals.py
index caf3128..9495b70 100644
--- a/libs/pbd/pbd/signals.py
+++ b/libs/pbd/pbd/signals.py
@@ -112,7 +112,7 @@ def signal(f, n, v):
print("\t\tGlib::Threads::Mutex::Lock lm (_mutex);", file=f)
print("\t\t/* Tell our connection objects that we are going away, so they don't try to call us */", file=f)
- print("\t\tfor (%sSlots::iterator i = _slots.begin(); i != _slots.end(); ++i) {" % typename, file=f)
+ print("\t\tfor (%sSlots::const_iterator i = _slots.begin(); i != _slots.end(); ++i) {" % typename, file=f)
print("\t\t\ti->first->signal_going_away ();", file=f)
print("\t\t}", file=f)
@@ -240,7 +240,7 @@ def signal(f, n, v):
print("", file=f)
if not v:
print("\t\tstd::list<R> r;", file=f)
- print("\t\tfor (%sSlots::iterator i = s.begin(); i != s.end(); ++i) {" % typename, file=f)
+ print("\t\tfor (%sSlots::const_iterator i = s.begin(); i != s.end(); ++i) {" % typename, file=f)
print("""
/* We may have just called a slot, and this may have resulted in
disconnection of other slots from us. The list copy means that
diff --git a/libs/pbd/system_exec.cc b/libs/pbd/system_exec.cc
index 60e73ba..721db98 100644
--- a/libs/pbd/system_exec.cc
+++ b/libs/pbd/system_exec.cc
@@ -671,6 +671,7 @@ SystemExec::terminate ()
wait();
if (thread_active) pthread_join(thread_id_tt, NULL);
thread_active = false;
+ assert(pid == 0);
::pthread_mutex_unlock(&write_lock);
}
diff --git a/libs/plugins/reasonablesynth.lv2/MSVCreasonablesynth/reasonablesynth.vcproj b/libs/plugins/reasonablesynth.lv2/MSVCreasonablesynth/reasonablesynth.vcproj
index f9a7e03..b97c721 100644
--- a/libs/plugins/reasonablesynth.lv2/MSVCreasonablesynth/reasonablesynth.vcproj
+++ b/libs/plugins/reasonablesynth.lv2/MSVCreasonablesynth/reasonablesynth.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include";."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include";."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\pbd;"$(GenericLibraryFolder)\glib-2.0\include";."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_REASONABLESYNTH;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/plugins/reasonablesynth.lv2/rsynth.c b/libs/plugins/reasonablesynth.lv2/rsynth.c
index 665ae13..5848bee 100644
--- a/libs/plugins/reasonablesynth.lv2/rsynth.c
+++ b/libs/plugins/reasonablesynth.lv2/rsynth.c
@@ -229,7 +229,7 @@ static void process_key (void *synth,
RSSynthChannel* sc = &rs->sc[chn];
const int8_t vel = sc->miditable[note];
const int8_t msg = sc->midimsgs[note];
- const float vol = /* master_volume */ 0.1 * fabsf(vel) / 127.0;
+ const float vol = /* master_volume */ 0.1f * abs(vel) / 127.f;
const float phase = sc->phase[note];
const int8_t sus = sc->sustain;
sc->midimsgs[note] &= ~3;
diff --git a/libs/qm-dsp/MSVCqm-dsp/qm-dsp.vcproj b/libs/qm-dsp/MSVCqm-dsp/qm-dsp.vcproj
index 06ed355..3d806e6 100644
--- a/libs/qm-dsp/MSVCqm-dsp/qm-dsp.vcproj
+++ b/libs/qm-dsp/MSVCqm-dsp/qm-dsp.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories=".."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -109,7 +109,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories=".."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -174,7 +174,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories=".."
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_QMDSP;INCLUDE_ARDOUR_MISCELLANEOUS=0;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/surfaces/control_protocol/MSVCardour_cp/ardour_cp.vcproj b/libs/surfaces/control_protocol/MSVCardour_cp/ardour_cp.vcproj
index 6059ce2..25878fc 100644
--- a/libs/surfaces/control_protocol/MSVCardour_cp/ardour_cp.vcproj
+++ b/libs/surfaces/control_protocol/MSVCardour_cp/ardour_cp.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOUR_CP;LIBCONTROLCP_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_cp\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc
index cd379b1..6ac6739 100644
--- a/libs/surfaces/control_protocol/control_protocol.cc
+++ b/libs/surfaces/control_protocol/control_protocol.cc
@@ -281,7 +281,7 @@ ControlProtocol::route_get_peak_input_power (uint32_t table_index, uint32_t whic
return 0.0f;
}
- return r->peak_meter().peak_power (which_input);
+ return r->peak_meter().meter_level (which_input, MeterPeak);
}
@@ -374,6 +374,19 @@ ControlProtocol::get_state ()
XMLNode* node = new XMLNode (state_node_name);
node->add_property ("name", _name);
+ node->add_property ("feedback", get_feedback() ? "yes" : "no");
return *node;
}
+
+int
+ControlProtocol::set_state (XMLNode const & node, int /* version */)
+{
+ const XMLProperty* prop;
+
+ if ((prop = node.property ("feedback")) != 0) {
+ set_feedback (string_is_affirmative (prop->value()));
+ }
+
+ return 0;
+}
diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
index f5af008..13b8dca 100644
--- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h
+++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
@@ -135,6 +135,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope
virtual void tear_down_gui() { }
XMLNode& get_state ();
+ int set_state (XMLNode const &, int version);
+
static const std::string state_node_name;
protected:
diff --git a/libs/surfaces/generic_midi/MSVCardour_genericmidi/ardour_genericmidi.vcproj b/libs/surfaces/generic_midi/MSVCardour_genericmidi/ardour_genericmidi.vcproj
index f50ea3a..860b5c4 100644
--- a/libs/surfaces/generic_midi/MSVCardour_genericmidi/ardour_genericmidi.vcproj
+++ b/libs/surfaces/generic_midi/MSVCardour_genericmidi/ardour_genericmidi.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_GENERICMIDI;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_genericmidi\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 702d361..85a8140 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -464,7 +464,6 @@ GenericMidiControlProtocol::get_state ()
XMLNode& node (ControlProtocol::get_state());
char buf[32];
- node.add_property (X_("feedback"), do_feedback ? "1" : "0");
snprintf (buf, sizeof (buf), "%" PRIu64, _feedback_interval);
node.add_property (X_("feedback_interval"), buf);
snprintf (buf, sizeof (buf), "%d", _threshold);
@@ -501,10 +500,8 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
XMLNodeConstIterator niter;
const XMLProperty* prop;
- if ((prop = node.property ("feedback")) != 0) {
- do_feedback = (bool) atoi (prop->value().c_str());
- } else {
- do_feedback = false;
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
}
if ((prop = node.property ("feedback_interval")) != 0) {
diff --git a/libs/surfaces/mackie/MSVCardour_mackie/ardour_mackie.vcproj b/libs/surfaces/mackie/MSVCardour_mackie/ardour_mackie.vcproj
index 5a1a153..a7ceed5 100644
--- a/libs/surfaces/mackie/MSVCardour_mackie/ardour_mackie.vcproj
+++ b/libs/surfaces/mackie/MSVCardour_mackie/ardour_mackie.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_ARDOURMACKIE;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_mackie\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/libs/surfaces/mackie/button.cc b/libs/surfaces/mackie/button.cc
index c4f68eb..c9ae1f5 100644
--- a/libs/surfaces/mackie/button.cc
+++ b/libs/surfaces/mackie/button.cc
@@ -40,18 +40,18 @@ Button::factory (Surface& surface, Button::ID bid, int id, const std::string& na
int
Button::name_to_id (const std::string& name)
{
- if (!g_ascii_strcasecmp (name.c_str(), "IO")) { return IO; }
- if (!g_ascii_strcasecmp (name.c_str(), "Sends")) { return Sends; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Track")) { return Track; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Send")) { return Send; }
if (!g_ascii_strcasecmp (name.c_str(), "Pan")) { return Pan; }
if (!g_ascii_strcasecmp (name.c_str(), "Plugin")) { return Plugin; }
if (!g_ascii_strcasecmp (name.c_str(), "Eq")) { return Eq; }
if (!g_ascii_strcasecmp (name.c_str(), "Dyn")) { return Dyn; }
- if (!g_ascii_strcasecmp (name.c_str(), "Left")) { return Left; }
- if (!g_ascii_strcasecmp (name.c_str(), "Right")) { return Right; }
- if (!g_ascii_strcasecmp (name.c_str(), "ChannelLeft")) { return ChannelLeft; }
- if (!g_ascii_strcasecmp (name.c_str(), "ChannelRight")) { return ChannelRight; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Bank Left")) { return Left; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Bank Right")) { return Right; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Channel Left")) { return ChannelLeft; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Channel Right")) { return ChannelRight; }
if (!g_ascii_strcasecmp (name.c_str(), "Flip")) { return Flip; }
- if (!g_ascii_strcasecmp (name.c_str(), "Edit")) { return Edit; }
+ if (!g_ascii_strcasecmp (name.c_str(), "View")) { return View; }
if (!g_ascii_strcasecmp (name.c_str(), "Name/Value")) { return NameValue; }
if (!g_ascii_strcasecmp (name.c_str(), "Timecode/Beats")) { return TimecodeBeats; }
if (!g_ascii_strcasecmp (name.c_str(), "F1")) { return F1; }
@@ -62,84 +62,61 @@ Button::name_to_id (const std::string& name)
if (!g_ascii_strcasecmp (name.c_str(), "F6")) { return F6; }
if (!g_ascii_strcasecmp (name.c_str(), "F7")) { return F7; }
if (!g_ascii_strcasecmp (name.c_str(), "F8")) { return F8; }
- if (!g_ascii_strcasecmp (name.c_str(), "F9")) { return F9; }
- if (!g_ascii_strcasecmp (name.c_str(), "F10")) { return F10; }
- if (!g_ascii_strcasecmp (name.c_str(), "F11")) { return F11; }
- if (!g_ascii_strcasecmp (name.c_str(), "F12")) { return F12; }
- if (!g_ascii_strcasecmp (name.c_str(), "F13")) { return F13; }
- if (!g_ascii_strcasecmp (name.c_str(), "F14")) { return F14; }
- if (!g_ascii_strcasecmp (name.c_str(), "F15")) { return F15; }
- if (!g_ascii_strcasecmp (name.c_str(), "F16")) { return F16; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Midi Tracks")) { return MidiTracks; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Inputs")) { return Inputs; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Audio Tracks")) { return AudioTracks; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Audio Instruments")) { return AudioInstruments; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Aux")) { return Aux; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Busses")) { return Busses; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Outputs")) { return Outputs; }
+ if (!g_ascii_strcasecmp (name.c_str(), "User")) { return User; }
if (!g_ascii_strcasecmp (name.c_str(), "Shift")) { return Shift; }
if (!g_ascii_strcasecmp (name.c_str(), "Option")) { return Option; }
if (!g_ascii_strcasecmp (name.c_str(), "Ctrl")) { return Ctrl; }
if (!g_ascii_strcasecmp (name.c_str(), "CmdAlt")) { return CmdAlt; }
- if (!g_ascii_strcasecmp (name.c_str(), "On")) { return On; }
- if (!g_ascii_strcasecmp (name.c_str(), "RecReady")) { return RecReady; }
- if (!g_ascii_strcasecmp (name.c_str(), "Undo")) { return Undo; }
- if (!g_ascii_strcasecmp (name.c_str(), "Save")) { return Save; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Read")) { return Read; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Write")) { return Write; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Trim")) { return Trim; }
if (!g_ascii_strcasecmp (name.c_str(), "Touch")) { return Touch; }
- if (!g_ascii_strcasecmp (name.c_str(), "Redo")) { return Redo; }
- if (!g_ascii_strcasecmp (name.c_str(), "Marker")) { return Marker; }
- if (!g_ascii_strcasecmp (name.c_str(), "Enter")) { return Enter; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Latch")) { return Latch; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Group")) { return Grp; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Save")) { return Save; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Undo")) { return Undo; }
if (!g_ascii_strcasecmp (name.c_str(), "Cancel")) { return Cancel; }
- if (!g_ascii_strcasecmp (name.c_str(), "Mixer")) { return Mixer; }
- if (!g_ascii_strcasecmp (name.c_str(), "FrmLeft")) { return FrmLeft; }
- if (!g_ascii_strcasecmp (name.c_str(), "FrmRight")) { return FrmRight; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Enter")) { return Enter; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Marker")) { return Marker; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Nudge")) { return Nudge; }
if (!g_ascii_strcasecmp (name.c_str(), "Loop")) { return Loop; }
- if (!g_ascii_strcasecmp (name.c_str(), "PunchIn")) { return PunchIn; }
- if (!g_ascii_strcasecmp (name.c_str(), "PunchOut")) { return PunchOut; }
- if (!g_ascii_strcasecmp (name.c_str(), "Home")) { return Home; }
- if (!g_ascii_strcasecmp (name.c_str(), "End")) { return End; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Drop")) { return Drop; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Replace")) { return Replace; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Click")) { return Click; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Clear Solo")) { return ClearSolo; }
if (!g_ascii_strcasecmp (name.c_str(), "Rewind")) { return Rewind; }
if (!g_ascii_strcasecmp (name.c_str(), "Ffwd")) { return Ffwd; }
if (!g_ascii_strcasecmp (name.c_str(), "Stop")) { return Stop; }
if (!g_ascii_strcasecmp (name.c_str(), "Play")) { return Play; }
if (!g_ascii_strcasecmp (name.c_str(), "Record")) { return Record; }
- if (!g_ascii_strcasecmp (name.c_str(), "CursorUp")) { return CursorUp; }
- if (!g_ascii_strcasecmp (name.c_str(), "CursorDown")) { return CursorDown; }
- if (!g_ascii_strcasecmp (name.c_str(), "CursorLeft")) { return CursorLeft; }
- if (!g_ascii_strcasecmp (name.c_str(), "CursorRight")) { return CursorRight; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Cursor Up")) { return CursorUp; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Cursor Down")) { return CursorDown; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Cursor Left")) { return CursorLeft; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Cursor Right")) { return CursorRight; }
if (!g_ascii_strcasecmp (name.c_str(), "Zoom")) { return Zoom; }
if (!g_ascii_strcasecmp (name.c_str(), "Scrub")) { return Scrub; }
- if (!g_ascii_strcasecmp (name.c_str(), "UserA")) { return UserA; }
- if (!g_ascii_strcasecmp (name.c_str(), "UserB")) { return UserB; }
- if (!g_ascii_strcasecmp (name.c_str(), "Snapshot")) { return Snapshot; }
- if (!g_ascii_strcasecmp (name.c_str(), "Read")) { return Read; }
- if (!g_ascii_strcasecmp (name.c_str(), "Write")) { return Write; }
- if (!g_ascii_strcasecmp (name.c_str(), "FdrGroup")) { return FdrGroup; }
- if (!g_ascii_strcasecmp (name.c_str(), "ClearSolo")) { return ClearSolo; }
- if (!g_ascii_strcasecmp (name.c_str(), "Track")) { return Track; }
- if (!g_ascii_strcasecmp (name.c_str(), "Send")) { return Send; }
- if (!g_ascii_strcasecmp (name.c_str(), "MidiTracks")) { return MidiTracks; }
- if (!g_ascii_strcasecmp (name.c_str(), "Inputs")) { return Inputs; }
- if (!g_ascii_strcasecmp (name.c_str(), "AudioTracks")) { return AudioTracks; }
- if (!g_ascii_strcasecmp (name.c_str(), "AudioInstruments")) { return AudioInstruments; }
- if (!g_ascii_strcasecmp (name.c_str(), "Aux")) { return Aux; }
- if (!g_ascii_strcasecmp (name.c_str(), "Busses")) { return Busses; }
- if (!g_ascii_strcasecmp (name.c_str(), "Outputs")) { return Outputs; }
- if (!g_ascii_strcasecmp (name.c_str(), "User")) { return User; }
- if (!g_ascii_strcasecmp (name.c_str(), "Trim")) { return Trim; }
- if (!g_ascii_strcasecmp (name.c_str(), "Latch")) { return Latch; }
- if (!g_ascii_strcasecmp (name.c_str(), "Grp")) { return Grp; }
- if (!g_ascii_strcasecmp (name.c_str(), "Nudge")) { return Nudge; }
- if (!g_ascii_strcasecmp (name.c_str(), "Drop")) { return Drop; }
- if (!g_ascii_strcasecmp (name.c_str(), "Replace")) { return Replace; }
- if (!g_ascii_strcasecmp (name.c_str(), "Click")) { return Click; }
- if (!g_ascii_strcasecmp (name.c_str(), "View")) { return View; }
+ if (!g_ascii_strcasecmp (name.c_str(), "User A")) { return UserA; }
+ if (!g_ascii_strcasecmp (name.c_str(), "User B")) { return UserB; }
/* Strip buttons */
- if (!g_ascii_strcasecmp (name.c_str(), "RecEnable")) { return RecEnable; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Record Enable")) { return RecEnable; }
if (!g_ascii_strcasecmp (name.c_str(), "Solo")) { return Solo; }
if (!g_ascii_strcasecmp (name.c_str(), "Mute")) { return Mute; }
if (!g_ascii_strcasecmp (name.c_str(), "Select")) { return Select; }
- if (!g_ascii_strcasecmp (name.c_str(), "VSelect")) { return VSelect; }
- if (!g_ascii_strcasecmp (name.c_str(), "FaderTouch")) { return FaderTouch; }
+ if (!g_ascii_strcasecmp (name.c_str(), "V-Pot")) { return VSelect; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Fader Touch")) { return FaderTouch; }
/* Master Fader button */
- if (!g_ascii_strcasecmp (name.c_str(), "MasterFaderTouch")) { return MasterFaderTouch; }
+ if (!g_ascii_strcasecmp (name.c_str(), "Master Fader Touch")) { return MasterFaderTouch; }
return -1;
}
@@ -147,8 +124,8 @@ Button::name_to_id (const std::string& name)
std::string
Button::id_to_name (Button::ID id)
{
- if (id == IO) { return "IO"; }
- if (id == Sends) { return "Sends"; }
+ if (id == Track) { return "Track"; }
+ if (id == Send) { return "Send"; }
if (id == Pan) { return "Pan"; }
if (id == Plugin) { return "Plugin"; }
if (id == Eq) { return "Eq"; }
@@ -158,7 +135,7 @@ Button::id_to_name (Button::ID id)
if (id == ChannelLeft) { return "Channel Left"; }
if (id == ChannelRight) { return "Channel Right"; }
if (id == Flip) { return "Flip"; }
- if (id == Edit) { return "Edit"; }
+ if (id == View) { return "View"; }
if (id == NameValue) { return "Name/Value"; }
if (id == TimecodeBeats) { return "Timecode/Beats"; }
if (id == F1) { return "F1"; }
@@ -169,35 +146,35 @@ Button::id_to_name (Button::ID id)
if (id == F6) { return "F6"; }
if (id == F7) { return "F7"; }
if (id == F8) { return "F8"; }
- if (id == F9) { return "F9"; }
- if (id == F10) { return "F10"; }
- if (id == F11) { return "F11"; }
- if (id == F12) { return "F12"; }
- if (id == F13) { return "F13"; }
- if (id == F14) { return "F14"; }
- if (id == F15) { return "F15"; }
- if (id == F16) { return "F16"; }
+ if (id == MidiTracks) { return "Midi Tracks"; }
+ if (id == Inputs) { return "Inputs"; }
+ if (id == AudioTracks) { return "Audio Tracks"; }
+ if (id == AudioInstruments) { return "Audio Instruments"; }
+ if (id == Aux) { return "Aux"; }
+ if (id == Busses) { return "Busses"; }
+ if (id == Outputs) { return "Outputs"; }
+ if (id == User) { return "User"; }
if (id == Shift) { return "Shift"; }
if (id == Option) { return "Option"; }
if (id == Ctrl) { return "Ctrl"; }
if (id == CmdAlt) { return "CmdAlt"; }
- if (id == On) { return "On"; }
- if (id == RecReady) { return "Record"; }
- if (id == Undo) { return "Undo"; }
- if (id == Save) { return "Save"; }
+ if (id == Read) { return "Read"; }
+ if (id == Write) { return "Write"; }
+ if (id == Trim) { return "Trim"; }
if (id == Touch) { return "Touch"; }
- if (id == Redo) { return "Redo"; }
- if (id == Marker) { return "Marker"; }
- if (id == Enter) { return "Enter"; }
+ if (id == Latch) { return "Latch"; }
+ if (id == Grp) { return "Group"; }
+ if (id == Save) { return "Save"; }
+ if (id == Undo) { return "Undo"; }
if (id == Cancel) { return "Cancel"; }
- if (id == Mixer) { return "Mixer"; }
- if (id == FrmLeft) { return "Frm Left"; }
- if (id == FrmRight) { return "Frm Right"; }
+ if (id == Enter) { return "Enter"; }
+ if (id == Marker) { return "Marker"; }
+ if (id == Nudge) { return "Nudge"; }
if (id == Loop) { return "Loop"; }
- if (id == PunchIn) { return "Punch In"; }
- if (id == PunchOut) { return "Punch Out"; }
- if (id == Home) { return "Home"; }
- if (id == End) { return "End"; }
+ if (id == Drop) { return "Drop"; }
+ if (id == Replace) { return "Replace"; }
+ if (id == Click) { return "Click"; }
+ if (id == ClearSolo) { return "Clear Solo"; }
if (id == Rewind) { return "Rewind"; }
if (id == Ffwd) { return "FFwd"; }
if (id == Stop) { return "Stop"; }
@@ -211,29 +188,6 @@ Button::id_to_name (Button::ID id)
if (id == Scrub) { return "Scrub"; }
if (id == UserA) { return "User A"; }
if (id == UserB) { return "User B"; }
- if (id == Snapshot) { return "Snapshot"; }
- if (id == Read) { return "Read"; }
- if (id == Write) { return "Write"; }
- if (id == FdrGroup) { return "Fader Group"; }
- if (id == ClearSolo) { return "Clear Solo"; }
- if (id == Track) { return "Track"; }
- if (id == Send) { return "Send"; }
- if (id == MidiTracks) { return "Midi Tracks"; }
- if (id == Inputs) { return "Inputs"; }
- if (id == AudioTracks) { return "Audio Tracks"; }
- if (id == AudioInstruments) { return "Audio Instruments"; }
- if (id == Aux) { return "Aux"; }
- if (id == Busses) { return "Busses"; }
- if (id == Outputs) { return "Outputs"; }
- if (id == User) { return "User"; }
- if (id == Trim) { return "Trim"; }
- if (id == Latch) { return "Latch"; }
- if (id == Grp) { return "Group"; }
- if (id == Nudge) { return "Nudge"; }
- if (id == Drop) { return "Drop"; }
- if (id == Replace) { return "Replace"; }
- if (id == Click) { return "Click"; }
- if (id == View) { return "View"; }
if (id == RecEnable) { return "Record Enable"; }
if (id == Solo) { return "Solo"; }
diff --git a/libs/surfaces/mackie/button.h b/libs/surfaces/mackie/button.h
index e836ff9..61f09d7 100644
--- a/libs/surfaces/mackie/button.h
+++ b/libs/surfaces/mackie/button.h
@@ -40,8 +40,8 @@ public:
enum ID {
/* Global Buttons */
- IO,
- Sends,
+ Track,
+ Send,
Pan,
Plugin,
Eq,
@@ -51,7 +51,7 @@ public:
ChannelLeft,
ChannelRight,
Flip,
- Edit,
+ View,
NameValue,
TimecodeBeats,
F1,
@@ -62,35 +62,31 @@ public:
F6,
F7,
F8,
- F9,
- F10,
- F11,
- F12,
- F13,
- F14,
- F15,
- F16,
- Shift,
- Option,
- Ctrl,
- CmdAlt,
- On,
- RecReady,
- Undo,
- Save,
+ MidiTracks,
+ Inputs,
+ AudioTracks,
+ AudioInstruments,
+ Aux,
+ Busses,
+ Outputs,
+ User,
+ Read,
+ Write,
+ Trim,
Touch,
- Redo,
- Marker,
- Enter,
+ Latch,
+ Grp,
+ Save,
+ Undo,
Cancel,
- Mixer,
- FrmLeft,
- FrmRight,
+ Enter,
+ Marker,
+ Nudge,
Loop,
- PunchIn,
- PunchOut,
- Home,
- End,
+ Drop,
+ Replace,
+ Click,
+ ClearSolo,
Rewind,
Ffwd,
Stop,
@@ -104,32 +100,16 @@ public:
Scrub,
UserA,
UserB,
- Snapshot,
- Read,
- Write,
- FdrGroup,
- ClearSolo,
- Track,
- Send,
- MidiTracks,
- Inputs,
- AudioTracks,
- AudioInstruments,
- Aux,
- Busses,
- Outputs,
- User,
- Trim,
- Latch,
- Grp,
- Nudge,
- Drop,
- Replace,
- Click,
- View,
FinalGlobalButton,
+ /* Global buttons that users should not redefine */
+
+ Shift,
+ Option,
+ Ctrl,
+ CmdAlt,
+
/* Strip buttons */
RecEnable,
diff --git a/libs/surfaces/mackie/device_info.cc b/libs/surfaces/mackie/device_info.cc
index 3ec1369..a50d256 100644
--- a/libs/surfaces/mackie/device_info.cc
+++ b/libs/surfaces/mackie/device_info.cc
@@ -46,6 +46,7 @@ std::map<std::string,DeviceInfo> DeviceInfo::device_info;
DeviceInfo::DeviceInfo()
: _strip_cnt (8)
, _extenders (0)
+ , _master_position (0)
, _has_two_character_display (true)
, _has_master_fader (true)
, _has_timecode_display (true)
@@ -241,6 +242,14 @@ DeviceInfo::set_state (const XMLNode& node, int /* version */)
}
}
+ if ((child = node.child ("MasterPosition")) != 0) {
+ if ((prop = child->property ("value")) != 0) {
+ if ((_master_position = atoi (prop->value().c_str())) == 0) {
+ _master_position = 0;
+ }
+ }
+ }
+
if ((child = node.child ("TwoCharacterDisplay")) != 0) {
if ((prop = child->property ("value")) != 0) {
_has_two_character_display = string_is_affirmative (prop->value());
@@ -387,6 +396,12 @@ DeviceInfo::extenders() const
return _extenders;
}
+uint32_t
+DeviceInfo::master_position() const
+{
+ return _master_position;
+}
+
bool
DeviceInfo::has_master_fader() const
{
@@ -510,6 +525,7 @@ std::ostream& operator<< (std::ostream& os, const Mackie::DeviceInfo& di)
os << di.name() << ' '
<< di.strip_cnt() << ' '
<< di.extenders() << ' '
+ << di.master_position() << ' '
;
return os;
}
diff --git a/libs/surfaces/mackie/device_info.h b/libs/surfaces/mackie/device_info.h
index 9a70852..ac24b1c 100644
--- a/libs/surfaces/mackie/device_info.h
+++ b/libs/surfaces/mackie/device_info.h
@@ -62,6 +62,7 @@ class DeviceInfo
uint32_t strip_cnt () const;
uint32_t extenders() const;
+ uint32_t master_position() const;
bool has_two_character_display() const;
bool has_master_fader () const;
bool has_timecode_display() const;
@@ -88,6 +89,7 @@ class DeviceInfo
private:
uint32_t _strip_cnt;
uint32_t _extenders;
+ uint32_t _master_position;
bool _has_two_character_display;
bool _has_master_fader;
bool _has_timecode_display;
diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc
index 105bac0..0df0935 100644
--- a/libs/surfaces/mackie/gui.cc
+++ b/libs/surfaces/mackie/gui.cc
@@ -242,6 +242,15 @@ MackieControlProtocolGUI::build_available_action_menu ()
available_action_model->clear ();
+ /* Because there are button bindings built in that are not
+ in the key binding map, there needs to be a way to undo
+ a profile edit. */
+ TreeIter rowp;
+ TreeModel::Row parent;
+ rowp = available_action_model->append();
+ parent = *(rowp);
+ parent[available_action_columns.name] = _("Remove Binding");
+
for (l = labels.begin(), k = keys.begin(), p = paths.begin(), t = tooltips.begin(); l != labels.end(); ++k, ++p, ++t, ++l) {
TreeModel::Row row;
@@ -451,6 +460,11 @@ MackieControlProtocolGUI::refresh_function_key_editor ()
void
MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib::ustring &text, TreeModelColumnBase col)
{
+ // Remove Binding is not in the action map but still valid
+ bool remove (false);
+ if ( text == "Remove Binding") {
+ remove = true;
+ }
Gtk::TreePath path(sPath);
Gtk::TreeModel::iterator row = function_key_model->get_iter(path);
@@ -459,17 +473,23 @@ MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib
std::map<std::string,std::string>::iterator i = action_map.find (text);
if (i == action_map.end()) {
- return;
+ if (!remove) {
+ return;
+ }
}
-
Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (i->second.c_str());
- if (act) {
+ if (act || remove) {
/* update visible text, using string supplied by
available action model so that it matches and is found
within the model.
*/
- (*row).set_value (col.index(), text);
+ if (remove) {
+ Glib::ustring dot = "\u2022";
+ (*row).set_value (col.index(), dot);
+ } else {
+ (*row).set_value (col.index(), text);
+ }
/* update the current DeviceProfile, using the full
* path
@@ -497,7 +517,12 @@ MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib
modifier = 0;
}
- _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, i->second);
+ if (remove) {
+ _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, "");
+ } else {
+ _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, i->second);
+ }
+
} else {
std::cerr << "no such action\n";
}
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index 76122d1..5d6e55e 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -827,6 +827,10 @@ MackieControlProtocol::set_state (const XMLNode & node, int version)
const XMLProperty* prop;
uint32_t bank = 0;
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
+ }
+
if ((prop = node.property (X_("ipmidi-base"))) != 0) {
set_ipmidi_base (atoi (prop->value()));
}
@@ -953,9 +957,11 @@ MackieControlProtocol::update_timecode_display()
void MackieControlProtocol::notify_parameter_changed (std::string const & p)
{
if (p == "punch-in") {
- update_global_button (Button::PunchIn, session->config.get_punch_in());
+ // no such button right now
+ // update_global_button (Button::PunchIn, session->config.get_punch_in());
} else if (p == "punch-out") {
- update_global_button (Button::PunchOut, session->config.get_punch_out());
+ // no such button right now
+ // update_global_button (Button::PunchOut, session->config.get_punch_out());
} else if (p == "clicking") {
// update_global_button (Button::RelayClick, Config->get_clicking());
} else {
@@ -1148,8 +1154,8 @@ MackieControlProtocol::build_button_map ()
#define DEFINE_BUTTON_HANDLER(b,p,r) button_map.insert (pair<Button::ID,ButtonHandlers> ((b), ButtonHandlers ((p),(r))));
- DEFINE_BUTTON_HANDLER (Button::IO, &MackieControlProtocol::io_press, &MackieControlProtocol::io_release);
- DEFINE_BUTTON_HANDLER (Button::Sends, &MackieControlProtocol::sends_press, &MackieControlProtocol::sends_release);
+ DEFINE_BUTTON_HANDLER (Button::Track, &MackieControlProtocol::track_press, &MackieControlProtocol::track_release);
+ DEFINE_BUTTON_HANDLER (Button::Send, &MackieControlProtocol::send_press, &MackieControlProtocol::send_release);
DEFINE_BUTTON_HANDLER (Button::Pan, &MackieControlProtocol::pan_press, &MackieControlProtocol::pan_release);
DEFINE_BUTTON_HANDLER (Button::Plugin, &MackieControlProtocol::plugin_press, &MackieControlProtocol::plugin_release);
DEFINE_BUTTON_HANDLER (Button::Eq, &MackieControlProtocol::eq_press, &MackieControlProtocol::eq_release);
@@ -1159,7 +1165,7 @@ MackieControlProtocol::build_button_map ()
DEFINE_BUTTON_HANDLER (Button::ChannelLeft, &MackieControlProtocol::channel_left_press, &MackieControlProtocol::channel_left_release);
DEFINE_BUTTON_HANDLER (Button::ChannelRight, &MackieControlProtocol::channel_right_press, &MackieControlProtocol::channel_right_release);
DEFINE_BUTTON_HANDLER (Button::Flip, &MackieControlProtocol::flip_press, &MackieControlProtocol::flip_release);
- DEFINE_BUTTON_HANDLER (Button::Edit, &MackieControlProtocol::edit_press, &MackieControlProtocol::edit_release);
+ DEFINE_BUTTON_HANDLER (Button::View, &MackieControlProtocol::view_press, &MackieControlProtocol::view_release);
DEFINE_BUTTON_HANDLER (Button::NameValue, &MackieControlProtocol::name_value_press, &MackieControlProtocol::name_value_release);
DEFINE_BUTTON_HANDLER (Button::TimecodeBeats, &MackieControlProtocol::timecode_beats_press, &MackieControlProtocol::timecode_beats_release);
DEFINE_BUTTON_HANDLER (Button::F1, &MackieControlProtocol::F1_press, &MackieControlProtocol::F1_release);
@@ -1170,35 +1176,35 @@ MackieControlProtocol::build_button_map ()
DEFINE_BUTTON_HANDLER (Button::F6, &MackieControlProtocol::F6_press, &MackieControlProtocol::F6_release);
DEFINE_BUTTON_HANDLER (Button::F7, &MackieControlProtocol::F7_press, &MackieControlProtocol::F7_release);
DEFINE_BUTTON_HANDLER (Button::F8, &MackieControlProtocol::F8_press, &MackieControlProtocol::F8_release);
- DEFINE_BUTTON_HANDLER (Button::F9, &MackieControlProtocol::F9_press, &MackieControlProtocol::F9_release);
- DEFINE_BUTTON_HANDLER (Button::F10, &MackieControlProtocol::F10_press, &MackieControlProtocol::F10_release);
- DEFINE_BUTTON_HANDLER (Button::F11, &MackieControlProtocol::F11_press, &MackieControlProtocol::F11_release);
- DEFINE_BUTTON_HANDLER (Button::F12, &MackieControlProtocol::F12_press, &MackieControlProtocol::F12_release);
- DEFINE_BUTTON_HANDLER (Button::F13, &MackieControlProtocol::F13_press, &MackieControlProtocol::F13_release);
- DEFINE_BUTTON_HANDLER (Button::F14, &MackieControlProtocol::F14_press, &MackieControlProtocol::F14_release);
- DEFINE_BUTTON_HANDLER (Button::F15, &MackieControlProtocol::F15_press, &MackieControlProtocol::F15_release);
- DEFINE_BUTTON_HANDLER (Button::F16, &MackieControlProtocol::F16_press, &MackieControlProtocol::F16_release);
+ DEFINE_BUTTON_HANDLER (Button::MidiTracks, &MackieControlProtocol::miditracks_press, &MackieControlProtocol::miditracks_release);
+ DEFINE_BUTTON_HANDLER (Button::Inputs, &MackieControlProtocol::inputs_press, &MackieControlProtocol::inputs_release);
+ DEFINE_BUTTON_HANDLER (Button::AudioTracks, &MackieControlProtocol::audiotracks_press, &MackieControlProtocol::audiotracks_release);
+ DEFINE_BUTTON_HANDLER (Button::AudioInstruments, &MackieControlProtocol::audioinstruments_press, &MackieControlProtocol::audioinstruments_release);
+ DEFINE_BUTTON_HANDLER (Button::Aux, &MackieControlProtocol::aux_press, &MackieControlProtocol::aux_release);
+ DEFINE_BUTTON_HANDLER (Button::Busses, &MackieControlProtocol::busses_press, &MackieControlProtocol::busses_release);
+ DEFINE_BUTTON_HANDLER (Button::Outputs, &MackieControlProtocol::outputs_press, &MackieControlProtocol::outputs_release);
+ DEFINE_BUTTON_HANDLER (Button::User, &MackieControlProtocol::user_press, &MackieControlProtocol::user_release);
DEFINE_BUTTON_HANDLER (Button::Shift, &MackieControlProtocol::shift_press, &MackieControlProtocol::shift_release);
DEFINE_BUTTON_HANDLER (Button::Option, &MackieControlProtocol::option_press, &MackieControlProtocol::option_release);
DEFINE_BUTTON_HANDLER (Button::Ctrl, &MackieControlProtocol::control_press, &MackieControlProtocol::control_release);
DEFINE_BUTTON_HANDLER (Button::CmdAlt, &MackieControlProtocol::cmd_alt_press, &MackieControlProtocol::cmd_alt_release);
- DEFINE_BUTTON_HANDLER (Button::On, &MackieControlProtocol::on_press, &MackieControlProtocol::on_release);
- DEFINE_BUTTON_HANDLER (Button::RecReady, &MackieControlProtocol::rec_ready_press, &MackieControlProtocol::rec_ready_release);
- DEFINE_BUTTON_HANDLER (Button::Undo, &MackieControlProtocol::undo_press, &MackieControlProtocol::undo_release);
- DEFINE_BUTTON_HANDLER (Button::Save, &MackieControlProtocol::save_press, &MackieControlProtocol::save_release);
+ DEFINE_BUTTON_HANDLER (Button::Read, &MackieControlProtocol::read_press, &MackieControlProtocol::read_release);
+ DEFINE_BUTTON_HANDLER (Button::Write, &MackieControlProtocol::write_press, &MackieControlProtocol::write_release);
+ DEFINE_BUTTON_HANDLER (Button::Trim, &MackieControlProtocol::trim_press, &MackieControlProtocol::trim_release);
DEFINE_BUTTON_HANDLER (Button::Touch, &MackieControlProtocol::touch_press, &MackieControlProtocol::touch_release);
- DEFINE_BUTTON_HANDLER (Button::Redo, &MackieControlProtocol::redo_press, &MackieControlProtocol::redo_release);
- DEFINE_BUTTON_HANDLER (Button::Marker, &MackieControlProtocol::marker_press, &MackieControlProtocol::marker_release);
- DEFINE_BUTTON_HANDLER (Button::Enter, &MackieControlProtocol::enter_press, &MackieControlProtocol::enter_release);
+ DEFINE_BUTTON_HANDLER (Button::Latch, &MackieControlProtocol::latch_press, &MackieControlProtocol::latch_release);
+ DEFINE_BUTTON_HANDLER (Button::Grp, &MackieControlProtocol::grp_press, &MackieControlProtocol::grp_release);
+ DEFINE_BUTTON_HANDLER (Button::Save, &MackieControlProtocol::save_press, &MackieControlProtocol::save_release);
+ DEFINE_BUTTON_HANDLER (Button::Undo, &MackieControlProtocol::undo_press, &MackieControlProtocol::undo_release);
DEFINE_BUTTON_HANDLER (Button::Cancel, &MackieControlProtocol::cancel_press, &MackieControlProtocol::cancel_release);
- DEFINE_BUTTON_HANDLER (Button::Mixer, &MackieControlProtocol::mixer_press, &MackieControlProtocol::mixer_release);
- DEFINE_BUTTON_HANDLER (Button::FrmLeft, &MackieControlProtocol::frm_left_press, &MackieControlProtocol::frm_left_release);
- DEFINE_BUTTON_HANDLER (Button::FrmRight, &MackieControlProtocol::frm_right_press, &MackieControlProtocol::frm_right_release);
+ DEFINE_BUTTON_HANDLER (Button::Enter, &MackieControlProtocol::enter_press, &MackieControlProtocol::enter_release);
+ DEFINE_BUTTON_HANDLER (Button::Marker, &MackieControlProtocol::marker_press, &MackieControlProtocol::marker_release);
+ DEFINE_BUTTON_HANDLER (Button::Nudge, &MackieControlProtocol::nudge_press, &MackieControlProtocol::nudge_release);
DEFINE_BUTTON_HANDLER (Button::Loop, &MackieControlProtocol::loop_press, &MackieControlProtocol::loop_release);
- DEFINE_BUTTON_HANDLER (Button::PunchIn, &MackieControlProtocol::punch_in_press, &MackieControlProtocol::punch_in_release);
- DEFINE_BUTTON_HANDLER (Button::PunchOut, &MackieControlProtocol::punch_out_press, &MackieControlProtocol::punch_out_release);
- DEFINE_BUTTON_HANDLER (Button::Home, &MackieControlProtocol::home_press, &MackieControlProtocol::home_release);
- DEFINE_BUTTON_HANDLER (Button::End, &MackieControlProtocol::end_press, &MackieControlProtocol::end_release);
+ DEFINE_BUTTON_HANDLER (Button::Drop, &MackieControlProtocol::drop_press, &MackieControlProtocol::drop_release);
+ DEFINE_BUTTON_HANDLER (Button::Replace, &MackieControlProtocol::replace_press, &MackieControlProtocol::replace_release);
+ DEFINE_BUTTON_HANDLER (Button::Click, &MackieControlProtocol::click_press, &MackieControlProtocol::click_release);
+ DEFINE_BUTTON_HANDLER (Button::ClearSolo, &MackieControlProtocol::clearsolo_press, &MackieControlProtocol::clearsolo_release);
DEFINE_BUTTON_HANDLER (Button::Rewind, &MackieControlProtocol::rewind_press, &MackieControlProtocol::rewind_release);
DEFINE_BUTTON_HANDLER (Button::Ffwd, &MackieControlProtocol::ffwd_press, &MackieControlProtocol::ffwd_release);
DEFINE_BUTTON_HANDLER (Button::Stop, &MackieControlProtocol::stop_press, &MackieControlProtocol::stop_release);
@@ -1214,29 +1220,6 @@ MackieControlProtocol::build_button_map ()
DEFINE_BUTTON_HANDLER (Button::UserB, &MackieControlProtocol::user_b_press, &MackieControlProtocol::user_b_release);
DEFINE_BUTTON_HANDLER (Button::MasterFaderTouch, &MackieControlProtocol::master_fader_touch_press, &MackieControlProtocol::master_fader_touch_release);
- DEFINE_BUTTON_HANDLER (Button::Snapshot, &MackieControlProtocol::snapshot_press, &MackieControlProtocol::snapshot_release);
- DEFINE_BUTTON_HANDLER (Button::Read, &MackieControlProtocol::read_press, &MackieControlProtocol::read_release);
- DEFINE_BUTTON_HANDLER (Button::Write, &MackieControlProtocol::write_press, &MackieControlProtocol::write_release);
- DEFINE_BUTTON_HANDLER (Button::FdrGroup, &MackieControlProtocol::fdrgroup_press, &MackieControlProtocol::fdrgroup_release);
- DEFINE_BUTTON_HANDLER (Button::ClearSolo, &MackieControlProtocol::clearsolo_press, &MackieControlProtocol::clearsolo_release);
- DEFINE_BUTTON_HANDLER (Button::Track, &MackieControlProtocol::track_press, &MackieControlProtocol::track_release);
- DEFINE_BUTTON_HANDLER (Button::Send, &MackieControlProtocol::send_press, &MackieControlProtocol::send_release);
- DEFINE_BUTTON_HANDLER (Button::MidiTracks, &MackieControlProtocol::miditracks_press, &MackieControlProtocol::miditracks_release);
- DEFINE_BUTTON_HANDLER (Button::Inputs, &MackieControlProtocol::inputs_press, &MackieControlProtocol::inputs_release);
- DEFINE_BUTTON_HANDLER (Button::AudioTracks, &MackieControlProtocol::audiotracks_press, &MackieControlProtocol::audiotracks_release);
- DEFINE_BUTTON_HANDLER (Button::AudioInstruments, &MackieControlProtocol::audioinstruments_press, &MackieControlProtocol::audioinstruments_release);
- DEFINE_BUTTON_HANDLER (Button::Aux, &MackieControlProtocol::aux_press, &MackieControlProtocol::aux_release);
- DEFINE_BUTTON_HANDLER (Button::Busses, &MackieControlProtocol::busses_press, &MackieControlProtocol::busses_release);
- DEFINE_BUTTON_HANDLER (Button::Outputs, &MackieControlProtocol::outputs_press, &MackieControlProtocol::outputs_release);
- DEFINE_BUTTON_HANDLER (Button::User, &MackieControlProtocol::user_press, &MackieControlProtocol::user_release);
- DEFINE_BUTTON_HANDLER (Button::Trim, &MackieControlProtocol::trim_press, &MackieControlProtocol::trim_release);
- DEFINE_BUTTON_HANDLER (Button::Latch, &MackieControlProtocol::latch_press, &MackieControlProtocol::latch_release);
- DEFINE_BUTTON_HANDLER (Button::Grp, &MackieControlProtocol::grp_press, &MackieControlProtocol::grp_release);
- DEFINE_BUTTON_HANDLER (Button::Nudge, &MackieControlProtocol::nudge_press, &MackieControlProtocol::nudge_release);
- DEFINE_BUTTON_HANDLER (Button::Drop, &MackieControlProtocol::drop_press, &MackieControlProtocol::drop_release);
- DEFINE_BUTTON_HANDLER (Button::Replace, &MackieControlProtocol::replace_press, &MackieControlProtocol::replace_release);
- DEFINE_BUTTON_HANDLER (Button::Click, &MackieControlProtocol::click_press, &MackieControlProtocol::click_release);
- DEFINE_BUTTON_HANDLER (Button::View, &MackieControlProtocol::view_press, &MackieControlProtocol::view_release);
}
void
diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h
index 1e15d8d..f521684 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.h
+++ b/libs/surfaces/mackie/mackie_control_protocol.h
@@ -140,7 +140,12 @@ class MackieControlProtocol
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
-
+
+ /* Note: because Mackie control is inherently a duplex protocol,
+ we do not implement get/set_feedback() since this aspect of
+ support for the protocol is not optional.
+ */
+
static bool probe();
Glib::Threads::Mutex surfaces_lock;
@@ -327,10 +332,6 @@ class MackieControlProtocol
void pull_route_range (DownButtonList&, ARDOUR::RouteList&);
/* implemented button handlers */
- Mackie::LedState frm_left_press(Mackie::Button &);
- Mackie::LedState frm_left_release(Mackie::Button &);
- Mackie::LedState frm_right_press(Mackie::Button &);
- Mackie::LedState frm_right_release(Mackie::Button &);
Mackie::LedState stop_press(Mackie::Button &);
Mackie::LedState stop_release(Mackie::Button &);
Mackie::LedState play_press(Mackie::Button &);
@@ -339,14 +340,6 @@ class MackieControlProtocol
Mackie::LedState record_release(Mackie::Button &);
Mackie::LedState loop_press(Mackie::Button &);
Mackie::LedState loop_release(Mackie::Button &);
- Mackie::LedState punch_in_press(Mackie::Button &);
- Mackie::LedState punch_in_release(Mackie::Button &);
- Mackie::LedState punch_out_press(Mackie::Button &);
- Mackie::LedState punch_out_release(Mackie::Button &);
- Mackie::LedState home_press(Mackie::Button &);
- Mackie::LedState home_release(Mackie::Button &);
- Mackie::LedState end_press(Mackie::Button &);
- Mackie::LedState end_release(Mackie::Button &);
Mackie::LedState rewind_press(Mackie::Button & button);
Mackie::LedState rewind_release(Mackie::Button & button);
Mackie::LedState ffwd_press(Mackie::Button & button);
@@ -383,8 +376,6 @@ class MackieControlProtocol
Mackie::LedState scrub_release(Mackie::Button &);
Mackie::LedState undo_press (Mackie::Button &);
Mackie::LedState undo_release (Mackie::Button &);
- Mackie::LedState redo_press (Mackie::Button &);
- Mackie::LedState redo_release (Mackie::Button &);
Mackie::LedState shift_press (Mackie::Button &);
Mackie::LedState shift_release (Mackie::Button &);
Mackie::LedState option_press (Mackie::Button &);
@@ -394,10 +385,6 @@ class MackieControlProtocol
Mackie::LedState cmd_alt_press (Mackie::Button &);
Mackie::LedState cmd_alt_release (Mackie::Button &);
- Mackie::LedState io_press (Mackie::Button &);
- Mackie::LedState io_release (Mackie::Button &);
- Mackie::LedState sends_press (Mackie::Button &);
- Mackie::LedState sends_release (Mackie::Button &);
Mackie::LedState pan_press (Mackie::Button &);
Mackie::LedState pan_release (Mackie::Button &);
Mackie::LedState plugin_press (Mackie::Button &);
@@ -408,8 +395,6 @@ class MackieControlProtocol
Mackie::LedState dyn_release (Mackie::Button &);
Mackie::LedState flip_press (Mackie::Button &);
Mackie::LedState flip_release (Mackie::Button &);
- Mackie::LedState edit_press (Mackie::Button &);
- Mackie::LedState edit_release (Mackie::Button &);
Mackie::LedState name_value_press (Mackie::Button &);
Mackie::LedState name_value_release (Mackie::Button &);
Mackie::LedState F1_press (Mackie::Button &);
@@ -428,34 +413,12 @@ class MackieControlProtocol
Mackie::LedState F7_release (Mackie::Button &);
Mackie::LedState F8_press (Mackie::Button &);
Mackie::LedState F8_release (Mackie::Button &);
- Mackie::LedState F9_press (Mackie::Button &);
- Mackie::LedState F9_release (Mackie::Button &);
- Mackie::LedState F10_press (Mackie::Button &);
- Mackie::LedState F10_release (Mackie::Button &);
- Mackie::LedState F11_press (Mackie::Button &);
- Mackie::LedState F11_release (Mackie::Button &);
- Mackie::LedState F12_press (Mackie::Button &);
- Mackie::LedState F12_release (Mackie::Button &);
- Mackie::LedState F13_press (Mackie::Button &);
- Mackie::LedState F13_release (Mackie::Button &);
- Mackie::LedState F14_press (Mackie::Button &);
- Mackie::LedState F14_release (Mackie::Button &);
- Mackie::LedState F15_press (Mackie::Button &);
- Mackie::LedState F15_release (Mackie::Button &);
- Mackie::LedState F16_press (Mackie::Button &);
- Mackie::LedState F16_release (Mackie::Button &);
- Mackie::LedState on_press (Mackie::Button &);
- Mackie::LedState on_release (Mackie::Button &);
- Mackie::LedState rec_ready_press (Mackie::Button &);
- Mackie::LedState rec_ready_release (Mackie::Button &);
Mackie::LedState touch_press (Mackie::Button &);
Mackie::LedState touch_release (Mackie::Button &);
Mackie::LedState enter_press (Mackie::Button &);
Mackie::LedState enter_release (Mackie::Button &);
Mackie::LedState cancel_press (Mackie::Button &);
Mackie::LedState cancel_release (Mackie::Button &);
- Mackie::LedState mixer_press (Mackie::Button &);
- Mackie::LedState mixer_release (Mackie::Button &);
Mackie::LedState user_a_press (Mackie::Button &);
Mackie::LedState user_a_release (Mackie::Button &);
Mackie::LedState user_b_press (Mackie::Button &);
@@ -465,14 +428,10 @@ class MackieControlProtocol
Mackie::LedState master_fader_touch_press (Mackie::Button &);
Mackie::LedState master_fader_touch_release (Mackie::Button &);
- Mackie::LedState snapshot_press (Mackie::Button&);
- Mackie::LedState snapshot_release (Mackie::Button&);
Mackie::LedState read_press (Mackie::Button&);
Mackie::LedState read_release (Mackie::Button&);
Mackie::LedState write_press (Mackie::Button&);
Mackie::LedState write_release (Mackie::Button&);
- Mackie::LedState fdrgroup_press (Mackie::Button&);
- Mackie::LedState fdrgroup_release (Mackie::Button&);
Mackie::LedState clearsolo_press (Mackie::Button&);
Mackie::LedState clearsolo_release (Mackie::Button&);
Mackie::LedState track_press (Mackie::Button&);
diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc
index a1ea089..269d964 100644
--- a/libs/surfaces/mackie/mcp_buttons.cc
+++ b/libs/surfaces/mackie/mcp_buttons.cc
@@ -102,13 +102,13 @@ MackieControlProtocol::left_press (Button &)
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank left with current initial = %1 nstrips = %2 tracks/busses = %3\n",
_current_initial_bank, strip_cnt, sorted.size()));
-
- if (_current_initial_bank > strip_cnt) {
- switch_banks (_current_initial_bank - strip_cnt);
+ if (_current_initial_bank > 0) {
+ switch_banks ((_current_initial_bank - 1) / strip_cnt * strip_cnt);
} else {
switch_banks (0);
}
+
return on;
}
@@ -124,12 +124,19 @@ MackieControlProtocol::right_press (Button &)
Sorted sorted = get_sorted_routes();
uint32_t strip_cnt = n_strips();
uint32_t route_cnt = sorted.size();
+ uint32_t max_bank = route_cnt / strip_cnt * strip_cnt;
+
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank right with current initial = %1 nstrips = %2 tracks/busses = %3\n",
_current_initial_bank, strip_cnt, route_cnt));
- uint32_t new_initial = std::min (_current_initial_bank + strip_cnt, route_cnt - 1);
- switch_banks (new_initial);
+ if (_current_initial_bank < max_bank) {
+ uint32_t new_initial = (_current_initial_bank / strip_cnt * strip_cnt) + strip_cnt;
+
+ switch_banks (new_initial);
+ } else {
+ switch_banks (max_bank);
+ }
return on;
}
@@ -336,19 +343,6 @@ MackieControlProtocol::undo_release (Button&)
return off;
}
-LedState
-MackieControlProtocol::redo_press (Button&)
-{
- Redo(); /* EMIT SIGNAL */
- return off;
-}
-
-LedState
-MackieControlProtocol::redo_release (Button&)
-{
- return off;
-}
-
LedState
MackieControlProtocol::drop_press (Button &)
{
@@ -425,59 +419,6 @@ MackieControlProtocol::marker_release (Button &)
/////////////////////////////////////
LedState
-MackieControlProtocol::frm_left_press (Button &)
-{
- // can use first_mark_before/after as well
- unsigned long elapsed = _frm_left_last.restart();
-
- framepos_t pos = session->locations()->first_mark_before (session->transport_frame());
-
- // allow a quick double to go past a previous mark
- if (session->transport_rolling() && elapsed < 500 && pos >= 0) {
- framepos_t pos_two_back = session->locations()->first_mark_before (pos);
- if (pos_two_back >= 0) {
- pos = pos_two_back;
- }
- }
-
- // move to the location, if it's valid
- if (pos >= 0) {
- session->request_locate (pos, session->transport_rolling());
- } else {
- session->request_locate (session->current_start_frame(), session->transport_rolling());
- }
-
- return on;
-}
-
-LedState
-MackieControlProtocol::frm_left_release (Button &)
-{
- return off;
-}
-
-LedState
-MackieControlProtocol::frm_right_press (Button &)
-{
- // can use first_mark_before/after as well
- framepos_t pos = session->locations()->first_mark_after (session->transport_frame());
-
- if (pos >= 0) {
- session->request_locate (pos, session->transport_rolling());
- } else {
- session->request_locate (session->current_end_frame(), session->transport_rolling());
- }
-
- return on;
-}
-
-LedState
-MackieControlProtocol::frm_right_release (Button &)
-{
- return off;
-}
-
-LedState
MackieControlProtocol::stop_press (Button &)
{
transport_stop ();
@@ -573,60 +514,6 @@ MackieControlProtocol::loop_release (Button &)
}
LedState
-MackieControlProtocol::punch_in_press (Button &)
-{
- bool const state = !session->config.get_punch_in();
- session->config.set_punch_in (state);
- return state;
-}
-
-LedState
-MackieControlProtocol::punch_in_release (Button &)
-{
- return session->config.get_punch_in();
-}
-
-LedState
-MackieControlProtocol::punch_out_press (Button &)
-{
- bool const state = !session->config.get_punch_out();
- session->config.set_punch_out (state);
- return state;
-}
-
-LedState
-MackieControlProtocol::punch_out_release (Button &)
-{
- return session->config.get_punch_out();
-}
-
-LedState
-MackieControlProtocol::home_press (Button &)
-{
- session->goto_start();
- return on;
-}
-
-LedState
-MackieControlProtocol::home_release (Button &)
-{
- return off;
-}
-
-LedState
-MackieControlProtocol::end_press (Button &)
-{
- session->goto_end();
- return on;
-}
-
-LedState
-MackieControlProtocol::end_release (Button &)
-{
- return off;
-}
-
-LedState
MackieControlProtocol::clicking_press (Button &)
{
bool state = !Config->get_clicking();
@@ -750,27 +637,6 @@ MackieControlProtocol::F8_release (Button &)
/* UNIMPLEMENTED */
LedState
-MackieControlProtocol::io_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::io_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::sends_press (Button &)
-{
- set_view_mode (Sends);
- return on;
-}
-LedState
-MackieControlProtocol::sends_release (Button &)
-{
- return none;
-}
-LedState
MackieControlProtocol::pan_press (Button &)
{
return off;
@@ -828,16 +694,6 @@ MackieControlProtocol::flip_release (Button &)
return none;
}
LedState
-MackieControlProtocol::edit_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::edit_release (Button &)
-{
- return off;
-}
-LedState
MackieControlProtocol::name_value_press (Button &)
{
return off;
@@ -848,106 +704,6 @@ MackieControlProtocol::name_value_release (Button &)
return off;
}
LedState
-MackieControlProtocol::F9_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F9_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F10_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F10_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F11_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F11_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F12_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F12_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F13_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F13_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F14_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F14_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F15_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F15_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F16_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::F16_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::on_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::on_release (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::rec_ready_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::rec_ready_release (Button &)
-{
- return off;
-}
-LedState
MackieControlProtocol::touch_press (Button &)
{
return off;
@@ -968,16 +724,6 @@ MackieControlProtocol::cancel_release (Button &)
return off;
}
LedState
-MackieControlProtocol::mixer_press (Button &)
-{
- return off;
-}
-LedState
-MackieControlProtocol::mixer_release (Button &)
-{
- return off;
-}
-LedState
MackieControlProtocol::user_a_press (Button &)
{
transport_play (session->transport_speed() == 1.0);
@@ -1028,16 +774,6 @@ MackieControlProtocol::master_fader_touch_release (Mackie::Button &)
}
Mackie::LedState
-MackieControlProtocol::snapshot_press (Mackie::Button&)
-{
- return none;
-}
-Mackie::LedState
-MackieControlProtocol::snapshot_release (Mackie::Button&)
-{
- return none;
-}
-Mackie::LedState
MackieControlProtocol::read_press (Mackie::Button&)
{
_metering_active = !_metering_active;
@@ -1060,16 +796,6 @@ MackieControlProtocol::write_release (Mackie::Button&)
return none;
}
Mackie::LedState
-MackieControlProtocol::fdrgroup_press (Mackie::Button&)
-{
- return none;
-}
-Mackie::LedState
-MackieControlProtocol::fdrgroup_release (Mackie::Button&)
-{
- return none;
-}
-Mackie::LedState
MackieControlProtocol::clearsolo_press (Mackie::Button&)
{
return none;
@@ -1082,6 +808,7 @@ MackieControlProtocol::clearsolo_release (Mackie::Button&)
Mackie::LedState
MackieControlProtocol::track_press (Mackie::Button&)
{
+
return none;
}
Mackie::LedState
@@ -1092,7 +819,10 @@ MackieControlProtocol::track_release (Mackie::Button&)
Mackie::LedState
MackieControlProtocol::send_press (Mackie::Button&)
{
- return none;
+// code moved here from "sends_press"
+ set_view_mode (Sends);
+ return on;
+// return none;
}
Mackie::LedState
MackieControlProtocol::send_release (Mackie::Button&)
diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc
index 23624d1..1545933 100644
--- a/libs/surfaces/mackie/strip.cc
+++ b/libs/surfaces/mackie/strip.cc
@@ -632,7 +632,7 @@ Strip::do_parameter_display (AutomationType type, float val)
case PanWidthAutomation:
if (_route) {
char buf[16];
- snprintf (buf, sizeof (buf), "%5ld%%", lrintf (val * 100.0));
+ snprintf (buf, sizeof (buf), "%5ld%%", lrintf ((val * 200.0)-100));
_surface->write (display (1, buf));
}
break;
@@ -719,7 +719,7 @@ void
Strip::update_meter ()
{
if (_meter && _transport_is_rolling && _metering_active) {
- float dB = const_cast<PeakMeter&> (_route->peak_meter()).peak_power (0);
+ float dB = const_cast<PeakMeter&> (_route->peak_meter()).meter_level (0, MeterPeak);
_meter->send_update (*_surface, dB);
}
}
diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc
index 1fea8d7..b918f67 100644
--- a/libs/surfaces/mackie/surface.cc
+++ b/libs/surfaces/mackie/surface.cc
@@ -94,8 +94,9 @@ Surface::Surface (MackieControlProtocol& mcp, const std::string& device_name, ui
}
/* only the first Surface object has global controls */
-
- if (_number == 0) {
+ /* lets use master_position instead */
+ uint32_t mp = _mcp.device_info().master_position();
+ if (_number == mp) {
DEBUG_TRACE (DEBUG::MackieControl, "Surface is first. Might have global controls.\n");
if (_mcp.device_info().has_global_controls()) {
init_controls ();
@@ -492,7 +493,13 @@ Surface::handle_midi_controller_message (MIDI::Parser &, MIDI::EventTwoBytes* ev
*/
ticks = 1;
}
- float delta = sign * (ticks / (float) 0x3f);
+
+ float delta = 0;
+ if (mcp().modifier_state() == MackieControlProtocol::MODIFIER_CONTROL) {
+ delta = sign * (ticks / (float) 0xff);
+ } else {
+ delta = sign * (ticks / (float) 0x3f);
+ }
if (!pot) {
if (ev->controller_number == Jog::ID && _jog_wheel) {
@@ -908,7 +915,7 @@ Surface::update_view_mode_display ()
break;
case MackieControlProtocol::Sends:
show_two_char_display ("Sn");
- id = Button::Sends;
+ id = Button::Send;
break;
case MackieControlProtocol::Plugins:
show_two_char_display ("Pl");
diff --git a/libs/surfaces/osc/MSVCardour_osc/ardour_osc.vcproj b/libs/surfaces/osc/MSVCardour_osc/ardour_osc.vcproj
index 921240e..6a68e74 100644
--- a/libs/surfaces/osc/MSVCardour_osc/ardour_osc.vcproj
+++ b/libs/surfaces/osc/MSVCardour_osc/ardour_osc.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -60,7 +60,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix)D.lib $(DllPrefix)giomm32$(GlibmmDllSuffix)D.lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix)D.lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix)D.lib $(DllPrefix)pangomm32$(PangommDllSuffix)D.lib $(DllPrefix)cairomm32$(CairommDllSuffix)D.lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix)D.lib $(DllPrefix)gobject32$(GlibDllSuffix)D.lib $(DllPrefix)gmodule32$(GlibDllSuffix)D.lib $(DllPrefix)glib32$(GlibDllSuffix)D.lib $(DllPrefix)gio32$(GlibDllSuffix)D.lib $(DllPrefix)gtk32$(GtkDllSuffix)D.lib $(DllPrefix)gdk32$(GtkDllSuffix)D.lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix)D.lib $(DllPrefix)cairo32$(CairoDllSuffix)D.lib $(DllPrefix)pango32$(PangoDllSuffix)D.lib $(DllPrefix)pangocairo32$(PangoDllSuffix)D.lib $(DllPrefix)sigc++32-2.0D.lib $(DllPrefix)ardour32D.lib $(DllPrefix)ardour_cp32D.lib $(DllPrefix)midi++32D.lib $(DllPrefix)pbd32D.lib $(DllPrefix)evoral32D.lib libloD.lib intlD.lib ws2_32.lib psapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
+ AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix)D.lib $(DllPrefix)giomm32$(GlibmmDllSuffix)D.lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix)D.lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix)D.lib $(DllPrefix)pangomm32$(PangommDllSuffix)D.lib $(DllPrefix)cairomm32$(CairommDllSuffix)D.lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix)D.lib $(DllPrefix)gobject32$(GlibDllSuffix)D.lib $(DllPrefix)gmodule32$(GlibDllSuffix)D.lib $(DllPrefix)glib32$(GlibDllSuffix)D.lib $(DllPrefix)gio32$(GlibDllSuffix)D.lib $(DllPrefix)gtk32$(GtkDllSuffix)D.lib $(DllPrefix)gdk32$(GtkDllSuffix)D.lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix)D.lib $(DllPrefix)cairo32$(CairoDllSuffix)D.lib $(DllPrefix)pango32$(PangoDllSuffix)D.lib $(DllPrefix)pangocairo32$(PangoDllSuffix)D.lib $(DllPrefix)sigc++32-2.0D.lib $(DllPrefix)ardour32D.lib $(DllPrefix)ardour_cp32D.lib $(DllPrefix)midi++32D.lib $(DllPrefix)pbd32D.lib $(DllPrefix)evoral32D.lib libloD.lib intlD.lib ws2_32.lib psapi.lib iphlpapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32D.dll"
AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
IgnoreDefaultLibraryNames="libboost_regex-vc80-mt-gd-1_40.lib;msvcrt.lib;dsound.lib"
@@ -124,7 +124,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -142,7 +142,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix).lib $(DllPrefix)giomm32$(GlibmmDllSuffix).lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix).lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix).lib $(DllPrefix)pangomm32$(PangommDllSuffix).lib $(DllPrefix)cairomm32$(CairommDllSuffix).lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix).lib $(DllPrefix)gobject32$(GlibDllSuffix).lib $(DllPrefix)gmodule32$(GlibDllSuffix).lib $(DllPrefix)glib32$(GlibDllSuffix).lib $(DllPrefix)gio32$(GlibDllSuffix).lib $(DllPrefix)gtk32$(GtkDllSuffix).lib $(DllPrefix)gdk32$(GtkDllSuffix).lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix).lib $(DllPrefix)cairo32$(CairoDllSuffix).lib $(DllPrefix)pango32$(PangoDllSuffix).lib $(DllPrefix)pangocairo32$(PangoDllSuffix).lib $(DllPrefix)sigc++32-2.0.lib $(DllPrefix)ardour32.lib $(DllPrefix)ardour_cp32.lib $(DllPrefix)midi++32.lib $(DllPrefix)pbd32.lib $(DllPrefix)evoral32.lib liblo.lib intl.lib ws2_32.lib psapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
+ AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix).lib $(DllPrefix)giomm32$(GlibmmDllSuffix).lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix).lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix).lib $(DllPrefix)pangomm32$(PangommDllSuffix).lib $(DllPrefix)cairomm32$(CairommDllSuffix).lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix).lib $(DllPrefix)gobject32$(GlibDllSuffix).lib $(DllPrefix)gmodule32$(GlibDllSuffix).lib $(DllPrefix)glib32$(GlibDllSuffix).lib $(DllPrefix)gio32$(GlibDllSuffix).lib $(DllPrefix)gtk32$(GtkDllSuffix).lib $(DllPrefix)gdk32$(GtkDllSuffix).lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix).lib $(DllPrefix)cairo32$(CairoDllSuffix).lib $(DllPrefix)pango32$(PangoDllSuffix).lib $(DllPrefix)pangocairo32$(PangoDllSuffix).lib $(DllPrefix)sigc++32-2.0.lib $(DllPrefix)ardour32.lib $(DllPrefix)ardour_cp32.lib $(DllPrefix)midi++32.lib $(DllPrefix)pbd32.lib $(DllPrefix)evoral32.lib liblo.lib intl.lib ws2_32.lib psapi.lib iphlpapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32.dll"
AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
IgnoreDefaultLibraryNames="libboost_regex-vc80-mt-gd-1_40.lib;dsound.lib"
@@ -205,7 +205,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\..\ardour;..\..\..\pbd;..\..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\..\surfaces\control_protocol;..\..\..\gtkmm2ext;..\..\..\evoral;..\..\..\libltc;..\..\..\timecode;..\..\..\rubberband;"..\..\..\vamp-sdk";"..\..\..\midi++2";..\..\..\taglib;..\..\..\taglib\taglib;..\..\..\taglib\taglib\toolkit;..\..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_OSC;ARDOURSURFACE_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"ardour_osc\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -224,7 +224,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix)RDC.lib $(DllPrefix)giomm32$(GlibmmDllSuffix)RDC.lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix)RDC.lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix)RDC.lib $(DllPrefix)pangomm32$(PangommDllSuffix)RDC.lib $(DllPrefix)cairomm32$(CairommDllSuffix)RDC.lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix)RDC.lib $(DllPrefix)gobject32$(GlibDllSuffix)RDC.lib $(DllPrefix)gmodule32$(GlibDllSuffix)RDC.lib $(DllPrefix)glib32$(GlibDllSuffix)RDC.lib $(DllPrefix)gio32$(GlibDllSuffix)RDC.lib $(DllPrefix)gtk32$(GtkDllSuffix)RDC.lib $(DllPrefix)gdk32$(GtkDllSuffix)RDC.lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix)RDC.lib $(DllPrefix)cairo32$(CairoDllSuffix)RDC.lib $(DllPrefix)pango32$(PangoDllSuffix)RDC.lib $(DllPrefix)pangocairo32$(PangoDllSuffix)RDC.lib $(DllPrefix)sigc++32-2.0RDC.lib $(DllPrefix)ardour32RDC.lib $(DllPrefix)ardour_cp32RDC.lib $(DllPrefix)midi++32RDC.lib $(DllPrefix)pbd32RDC.lib $(DllPrefix)evoral32RDC.lib libloRDC.lib intlRDC.lib ws2_32.lib psapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
+ AdditionalDependencies="$(DllPrefix)glibmm32$(GlibmmDllSuffix)RDC.lib $(DllPrefix)giomm32$(GlibmmDllSuffix)RDC.lib $(DllPrefix)gtkmm32$(GtkmmDllSuffix)RDC.lib $(DllPrefix)gdkmm32$(GtkmmDllSuffix)RDC.lib $(DllPrefix)pangomm32$(PangommDllSuffix)RDC.lib $(DllPrefix)cairomm32$(CairommDllSuffix)RDC.lib pthreadVCE2.lib $(DllPrefix)gthread32$(GlibDllSuffix)RDC.lib $(DllPrefix)gobject32$(GlibDllSuffix)RDC.lib $(DllPrefix)gmodule32$(GlibDllSuffix)RDC.lib $(DllPrefix)glib32$(GlibDllSuffix)RDC.lib $(DllPrefix)gio32$(GlibDllSuffix)RDC.lib $(DllPrefix)gtk32$(GtkDllSuffix)RDC.lib $(DllPrefix)gdk32$(GtkDllSuffix)RDC.lib $(DllPrefix)gdk-pixbuf32$(GdkPixbufDllSuffix)RDC.lib $(DllPrefix)cairo32$(CairoDllSuffix)RDC.lib $(DllPrefix)pango32$(PangoDllSuffix)RDC.lib $(DllPrefix)pangocairo32$(PangoDllSuffix)RDC.lib $(DllPrefix)sigc++32-2.0RDC.lib $(DllPrefix)ardour32RDC.lib $(DllPrefix)ardour_cp32RDC.lib $(DllPrefix)midi++32RDC.lib $(DllPrefix)pbd32RDC.lib $(DllPrefix)evoral32RDC.lib libloRDC.lib intlRDC.lib ws2_32.lib psapi.lib iphlpapi.lib wininet.lib kernel32.lib shell32.lib winmm.lib"
OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32RDC.dll"
AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
IgnoreDefaultLibraryNames="libboost_regex-vc80-mt-gd-1_40.lib;dsound.lib"
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index ae91576..727485d 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -277,19 +277,11 @@ OSC::stop ()
BaseUI::quit ();
if (_osc_server) {
- int fd = lo_server_get_socket_fd(_osc_server);
- if (fd >=0) {
- close(fd);
- }
lo_server_free (_osc_server);
_osc_server = 0;
}
if (_osc_unix_server) {
- int fd = lo_server_get_socket_fd(_osc_unix_server);
- if (fd >=0) {
- close(fd);
- }
lo_server_free (_osc_unix_server);
_osc_unix_server = 0;
}
@@ -370,6 +362,8 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/ardour/routes/recenable", "ii", route_recenable);
REGISTER_CALLBACK (serv, "/ardour/routes/gainabs", "if", route_set_gain_abs);
REGISTER_CALLBACK (serv, "/ardour/routes/gaindB", "if", route_set_gain_dB);
+ REGISTER_CALLBACK (serv, "/ardour/routes/trimabs", "if", route_set_trim_abs);
+ REGISTER_CALLBACK (serv, "/ardour/routes/trimdB", "if", route_set_trim_dB);
REGISTER_CALLBACK (serv, "/ardour/routes/pan_stereo_position", "if", route_set_pan_stereo_position);
REGISTER_CALLBACK (serv, "/ardour/routes/pan_stereo_width", "if", route_set_pan_stereo_width);
REGISTER_CALLBACK (serv, "/ardour/routes/plugin/parameter", "iiif", route_plugin_parameter);
@@ -862,18 +856,32 @@ OSC::route_set_gain_abs (int rid, float level)
int
OSC::route_set_gain_dB (int rid, float dB)
{
+ return route_set_gain_abs (rid, dB_to_coefficient (dB));
+}
+
+
+int
+OSC::route_set_trim_abs (int rid, float level)
+{
if (!session) return -1;
boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
if (r) {
- r->set_gain (dB_to_coefficient (dB), this);
+ r->set_trim (level, this);
}
return 0;
}
int
+OSC::route_set_trim_dB (int rid, float dB)
+{
+ return route_set_trim_abs(rid, dB_to_coefficient (dB));
+}
+
+
+int
OSC::route_set_pan_stereo_position (int rid, float pos)
{
if (!session) return -1;
@@ -1082,25 +1090,14 @@ OSC::route_plugin_parameter_print (int rid, int piid, int par)
XMLNode&
OSC::get_state ()
{
- XMLNode& node (ControlProtocol::get_state());
-
- node.add_property (X_("feedback"), _send_route_changes ? "1" : "0");
- return node;
+ return ControlProtocol::get_state();
}
int
-OSC::set_state (const XMLNode& node, int /*version*/)
+OSC::set_state (const XMLNode& node, int version)
{
- const XMLProperty* prop = node.property (X_("feedback"));
-
- if (prop) {
- if (PBD::string_is_affirmative (prop->value())) {
- _send_route_changes = true;
- } else {
- _send_route_changes = false;
- }
- } else {
- /* leave it alone */
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
}
return 0;
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index 33bcf8e..732da3a 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -216,6 +216,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK2(route_recenable,i,i);
PATH_CALLBACK2(route_set_gain_abs,i,f);
PATH_CALLBACK2(route_set_gain_dB,i,f);
+ PATH_CALLBACK2(route_set_trim_abs,i,f);
+ PATH_CALLBACK2(route_set_trim_dB,i,f);
PATH_CALLBACK2(route_set_pan_stereo_position,i,f);
PATH_CALLBACK2(route_set_pan_stereo_width,i,f);
PATH_CALLBACK3(route_set_send_gain_abs,i,i,f);
@@ -228,6 +230,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_recenable (int rid, int yn);
int route_set_gain_abs (int rid, float level);
int route_set_gain_dB (int rid, float dB);
+ int route_set_trim_abs (int rid, float level);
+ int route_set_trim_dB (int rid, float dB);
int route_set_pan_stereo_position (int rid, float left_right_fraction);
int route_set_pan_stereo_width (int rid, float percent);
int route_set_send_gain_abs (int rid, int sid, float val);
diff --git a/libs/timecode/MSVCtimecode/timecode.vcproj b/libs/timecode/MSVCtimecode/timecode.vcproj
index f479644..c074235 100644
--- a/libs/timecode/MSVCtimecode/timecode.vcproj
+++ b/libs/timecode/MSVCtimecode/timecode.vcproj
@@ -42,7 +42,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
MinimalRebuild="true"
RuntimeLibrary="3"
WarningLevel="3"
@@ -122,7 +122,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
@@ -201,7 +201,7 @@
AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
Optimization="0"
AdditionalIncludeDirectories="..;..\..\ardour;..\..\pbd;..\..\fst;"$(GenericIncludeFolder)\ardourext";..\..\surfaces\control_protocol;..\..\evoral;..\..\libltc;..\..\rubberband;"..\..\vamp-sdk";"..\..\midi++2";..\..\taglib;..\..\taglib\taglib;..\..\taglib\taglib\toolkit;..\..\audiographer;"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\glibmm";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\lilv-0";"$(GenericIncludeFolder)\suil-0";"$(GenericIncludeFolder)\serd-0";"$(GenericIncludeFolder)\sord-0";"$(GenericIncludeFolder)\lv2";"$(GenericIncludeFolder)\sratom-0""
- PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;_SECURE_SCL=0;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+ PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_TIMECODE;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;LIBTIMECODE_DLL_EXPORTS;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PACKAGE="\"ardour3_timecode\"";PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
StringPooling="false"
RuntimeLibrary="2"
EnableEnhancedInstructionSet="1"
diff --git a/mcp/bcf2000_basic_edit_mix.profile b/mcp/bcf2000_basic_edit_mix.profile
index e8f6b2e..a18ba9e 100644
--- a/mcp/bcf2000_basic_edit_mix.profile
+++ b/mcp/bcf2000_basic_edit_mix.profile
@@ -5,7 +5,7 @@
<Buttons>
<Button name="Ctrl" plain="Transport/TogglePunchIn"/>
<Button name="Option" plain="Transport/TogglePunchOut"/>
- <Button name="Snapshot" plain="Editor/set-punch-from-edit-range"/>
+ <Button name="Write" plain="Editor/set-punch-from-edit-range"/>
<Button name="Eq" plain="Editor/jump-backward-to-mark"/>
<Button name="Plugin" plain="Editor/jump-forward-to-mark"/>
<Button name="Track" plain="Editor/add-location-from-playhead"/>
@@ -16,25 +16,25 @@
<Button name="Play" plain="Transport/ToggleRoll"/>
<Button name="Read" plain="Transport/ToggleAutoPlay"/>
<Button name="Save" plain="Transport/ToggleAutoReturn"/>
- <Button name="ChannelLeft" plain="Editor/select-prev-route"/>
- <Button name="ChannelRight" plain="Editor/select-next-route"/>
- <Button name="FrmRight" plain="Editor/playhead-to-previous-region-boundary"/>
- <Button name="PunchOut" plain="Editor/playhead-to-next-region-boundary"/>
- <Button name="CursorLeft" plain="Editor/nudge-playhead-backward"/>
- <Button name="CursorRight" plain="Editor/nudge-playhead-forward"/>
- <Button name="CursorDown" plain="Editor/remove-last-capture"/>
- <Button name="CursorUp" plain="Transport/Loop"/>
- <Button name="PunchIn" plain="Transport/ToggleClick"/>
- <Button name="Edit" plain="Common/toggle-mixer-on-top"/>
+ <Button name="Channel Left" plain="Editor/select-prev-route"/>
+ <Button name="Channel Right" plain="Editor/select-next-route"/>
+ <Button name="Nudge" plain="Editor/playhead-to-previous-region-boundary"/>
+ <Button name="Replace" plain="Editor/playhead-to-next-region-boundary"/>
+ <Button name="Cursor Left" plain="Editor/nudge-playhead-backward"/>
+ <Button name="Cursor Right" plain="Editor/nudge-playhead-forward"/>
+ <Button name="Cursor Down" plain="Editor/remove-last-capture"/>
+ <Button name="Cursor Up" plain="Transport/Loop"/>
+ <Button name="Drop" plain="Transport/ToggleClick"/>
+ <Button name="View" plain="Common/toggle-mixer-on-top"/>
<Button name="Flip" plain="Editor/show-editor-mixer"/>
- <Button name="F9" plain="Editor/goto-visual-state-1"/>
- <Button name="F10" plain="Editor/goto-visual-state-2"/>
- <Button name="F11" plain="Editor/goto-visual-state-3"/>
- <Button name="F12" plain="Editor/goto-visual-state-4"/>
- <Button name="F13" plain="Editor/goto-visual-state-5"/>
- <Button name="F14" plain="Editor/goto-visual-state-6"/>
- <Button name="F15" plain="Editor/goto-visual-state-7"/>
- <Button name="F16" plain="Editor/goto-visual-state-8"/>
+ <Button name="Midi Tracks" plain="Editor/goto-visual-state-1"/>
+ <Button name="Inputs" plain="Editor/goto-visual-state-2"/>
+ <Button name="Audio Tracks" plain="Editor/goto-visual-state-3"/>
+ <Button name="Audio Instruments" plain="Editor/goto-visual-state-4"/>
+ <Button name="Aux" plain="Editor/goto-visual-state-5"/>
+ <Button name="Busses" plain="Editor/goto-visual-state-6"/>
+ <Button name="Outputs" plain="Editor/goto-visual-state-7"/>
+ <Button name="User" plain="Editor/goto-visual-state-8"/>
<Button name="F1" plain="Editor/save-visual-state-1"/>
<Button name="F2" plain="Editor/save-visual-state-2"/>
<Button name="F3" plain="Editor/save-visual-state-3"/>
diff --git a/midi_maps/M-Audio_Axiom61.map b/midi_maps/M-Audio_Axiom61.map
new file mode 100644
index 0000000..734a8d6
--- /dev/null
+++ b/midi_maps/M-Audio_Axiom61.map
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ArdourMIDIBindings version="1.0.0" name="M-Audio Axiom 61">
+
+<!-- 2015-04-25 Edgar Aichinger: initial version -->
+<!-- I'm assuming Factory default, preset 1 in the Axiom 61. -->
+
+<!-- Faders, mapped to track faders 1-8 and Master -->
+
+ <Binding channel="1" ctl="74" uri="/route/gain 1"/>
+ <Binding channel="1" ctl="71" uri="/route/gain 2"/>
+ <Binding channel="1" ctl="91" uri="/route/gain 3"/>
+ <Binding channel="1" ctl="93" uri="/route/gain 4"/>
+ <Binding channel="1" ctl="73" uri="/route/gain 5"/>
+ <Binding channel="1" ctl="72" uri="/route/gain 6"/>
+ <Binding channel="1" ctl="5" uri="/route/gain 7"/>
+ <Binding channel="1" ctl="84" uri="/route/gain 8"/>
+ <Binding channel="1" ctl="7" uri="/bus/gain master"/>
+
+<!-- Zone/Group buttons, below the faders -->
+<!-- these toggle Mute for the corresponding tracks (1-8) and Master -->
+
+ <Binding channel="1" pgm="0" uri="/route/mute 1"/>
+ <Binding channel="1" pgm="1" uri="/route/mute 2"/>
+ <Binding channel="1" pgm="2" uri="/route/mute 3"/>
+ <Binding channel="1" pgm="3" uri="/route/mute 4"/>
+ <Binding channel="1" pgm="4" uri="/route/mute 5"/>
+ <Binding channel="1" pgm="5" uri="/route/mute 6"/>
+ <Binding channel="1" pgm="6" uri="/route/mute 7"/>
+ <Binding channel="1" pgm="7" uri="/route/mute 8"/>
+ <Binding channel="1" pgm="8" uri="/bus/mute master"/>"
+
+<!-- Encoders, mapped to pan direction. -->
+
+ <Binding channel="1" ctl="75" uri="/route/pandirection 1"/>
+ <Binding channel="1" ctl="10" uri="/route/pandirection 2"/>
+ <Binding channel="1" ctl="76" uri="/route/pandirection 3"/>
+ <Binding channel="1" ctl="2" uri="/route/pandirection 4"/>
+ <Binding channel="1" ctl="92" uri="/route/pandirection 5"/>
+ <Binding channel="1" ctl="12" uri="/route/pandirection 6"/>
+ <Binding channel="1" ctl="95" uri="/route/pandirection 7"/>
+ <Binding channel="1" ctl="13" uri="/route/pandirection 8"/>
+
+<!-- Transport controls -->
+
+ <Binding channel="1" ctl="21" function="transport-start"/>
+ <Binding channel="1" ctl="22" function="transport-end"/>
+ <Binding channel="1" ctl="23" function="transport-stop"/>
+ <Binding channel="1" ctl="24" function="transport-roll"/>
+ <Binding channel="1" ctl="20" function="loop-toggle"/>
+ <Binding channel="1" ctl="25" function="rec-enable"/>
+ <Binding channel="1" ctl="25" function="rec-disable"/>
+
+
+</ArdourMIDIBindings>
diff --git a/midi_maps/M-Audio_Oxygen49.map b/midi_maps/M-Audio_Oxygen49.map
new file mode 100644
index 0000000..6f4fb8d
--- /dev/null
+++ b/midi_maps/M-Audio_Oxygen49.map
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ArdourMIDIBindings version="1.0.0" name="M-Audio Oxygen 49">
+<!-- 2015 05 26 Erik Deroo: Map file creation -->
+<!-- Auto-map should be ON -->
+
+<!-- Transport controls -->
+ <Binding msg="bf 71 7f" function="loop-toggle"/>
+ <Binding msg="bf 72 7f" function="transport-start"/>
+ <Binding msg="bf 73 7f" function="transport-end"/>
+ <Binding msg="bf 74 7f" function="transport-stop"/>
+ <Binding msg="bf 75 7f" function="transport-roll"/>
+ <Binding msg="bf 76 7f" action="Transport/record-roll"/>
+
+<!-- Gain controls. Faders are mapped to faders. -->
+ <Binding channel="16" ctl="33" uri="/route/gain 1"/>
+ <Binding channel="16" ctl="34" uri="/route/gain 2"/>
+ <Binding channel="16" ctl="35" uri="/route/gain 3"/>
+ <Binding channel="16" ctl="36" uri="/route/gain 4"/>
+ <Binding channel="16" ctl="37" uri="/route/gain 5"/>
+ <Binding channel="16" ctl="38" uri="/route/gain 6"/>
+ <Binding channel="16" ctl="39" uri="/route/gain 7"/>
+ <Binding channel="16" ctl="40" uri="/route/gain 8"/>
+ <Binding channel="16" ctl="41" uri="/bus/gain master"/>
+
+<!-- Pan controls. Encoders are mapped to pan direction. -->
+ <Binding channel="16" ctl="21" uri="/route/pandirection 1"/>
+ <Binding channel="16" ctl="22" uri="/route/pandirection 2"/>
+ <Binding channel="16" ctl="23" uri="/route/pandirection 3"/>
+ <Binding channel="16" ctl="24" uri="/route/pandirection 4"/>
+ <Binding channel="16" ctl="25" uri="/route/pandirection 5"/>
+ <Binding channel="16" ctl="26" uri="/route/pandirection 6"/>
+ <Binding channel="16" ctl="27" uri="/route/pandirection 7"/>
+ <Binding channel="16" ctl="28" uri="/route/pandirection 8"/>
+
+<!-- Status controls -->
+<!-- Status buttons are mapped to solo toggles. -->
+
+ <Binding channel="16" ctl="49" uri="/route/solo 1"/>
+ <Binding channel="16" ctl="50" uri="/route/solo 2"/>
+ <Binding channel="16" ctl="51" uri="/route/solo 3"/>
+ <Binding channel="16" ctl="52" uri="/route/solo 4"/>
+ <Binding channel="16" ctl="53" uri="/route/solo 5"/>
+ <Binding channel="16" ctl="54" uri="/route/solo 6"/>
+ <Binding channel="16" ctl="55" uri="/route/solo 7"/>
+ <Binding channel="16" ctl="56" uri="/route/solo 8"/>
+ <Binding channel="16" ctl="57" uri="/bus/mute master"/>"
+
+</ArdourMIDIBindings>
+
diff --git a/msvc32-fixup.pl b/msvc32-fixup.pl
deleted file mode 100644
index c72a689..0000000
--- a/msvc32-fixup.pl
+++ /dev/null
@@ -1,103 +0,0 @@
-#! e:/program files/perl/bin/perl.exe
-# version info can be found in 'TO BE CONFIRMED'
-
-require "../gnu-windows/src/local-paths.lib";
-
-$msvc_mixbus_version = "3.00.0";
-$major = 3;
-$minor = 0;
-$micro = 0;
-$interface_age = 0;
-$scanner_app_version = "2.00.0";
-$scanner_major = 2;
-$scanner_minor = 0;
-$scanner_micro = 0;
-$scanner_interface_age = 0;
-$binary_age = 3000;
-$current_minus_age = 0;
-$exec_prefix = "lib";
-$dll_suffix = "32";
-$lib_ext = ".dll";
-$monospace = "ArdourMono";
-$font_small = 9;
-$font_smaller = 8;
-$font_normal = 10;
-$font_big = 14;
-$font_large = 18;
-$font_larger = 24;
-$font_huger = 34;
-$font_massive = 60;
-
-sub process_file
-{
- my $outfilename = shift;
- my $infilename = $outfilename . ".in";
-
- open (INPUT, "< $infilename") || exit 1;
- open (OUTPUT, "> $outfilename") || exit 1;
-
- while (<INPUT>) {
- s/\@GLIB_API_VERSION@/$glib_api_version/g;
- s/\@GTK_API_VERSION@/$gtk_api_version/g;
- s/\@ATK_API_VERSION@/$atk_api_version/g;
- s/\@PANGO_API_VERSION@/$pango_api_version/g;
- s/\@GDK_PIXBUF_API_VERSION@/$gdk_pixbuf_api_version/g;
- s/\@MSVC_MIXBUS_VERSION@/$msvc_mixbus_version/g;
- s/\@MSVC_MIXBUS_MAJOR\@/$major/g;
- s/\@MSVC_MIXBUS_MINOR\@/$minor/g;
- s/\@MSVC_MIXBUS_MICRO\@/$micro/g;
- s/\@MSVC_MIXBUS_INTERFACE_AGE\@/$interface_age/g;
- s/\@MSVC_SCANNER_APP_VERSION@/$scanner_app_version/g;
- s/\@MSVC_SCANNER_APP_MAJOR\@/$scanner_major/g;
- s/\@MSVC_SCANNER_APP_MINOR\@/$scanner_minor/g;
- s/\@MSVC_SCANNER_APP_MICRO\@/$scanner_micro/g;
- s/\@MSVC_SCANNER_APP_INTERFACE_AGE\@/$scanner_interface_age/g;
- s/\@LT_CURRENT_MINUS_AGE@/$current_minus_age/g;
- s/\@VERSION@/$msvc_mixbus_version/g;
- s/\@DLL_SUFFIX\@/$dll_suffix/g;
- s/\@LIB_EXT\@/$lib_ext/g;
- s/\@MONOSPACE\@/$monospace/g;
- s/\@FONT_SMALL\@/$font_small/g;
- s/\@FONT_SMALLER\@/$font_smaller/g;
- s/\@FONT_NORMAL\@/$font_normal/g;
- s/\@FONT_BIG\@/$font_big/g;
- s/\@FONT_LARGE\@/$font_large/g;
- s/\@FONT_LARGER\@/$font_larger/g;
- s/\@FONT_HUGER\@/$font_huger/g;
- s/\@FONT_MASSIVE\@/$font_massive/g;
- s/\@GETTEXT_PACKAGE\@/$gettext_package/g;
- s/\@PERL_PATH@/$perl_path/g;
- s/\@PackagerFolderLocal@/$packager_folder_local/g;
- s/\@JackBuildRootFolder@/$jack_build_root_folder/g;
- s/\@GlibBuildRootFolder@/$glib_build_root_folder/g;
- s/\@GdkPixbufBuildRootFolder@/$gdk_pixbuf_build_root_folder/g;
- s/\@GtkBuildProjectFolder@/$gtk_build_project_folder/g;
- s/\@GenericIncludeFolder@/$generic_include_folder/g;
- s/\@GenericLibraryFolder@/$generic_library_folder/g;
- s/\@GenericWin32LibraryFolder@/$generic_win32_library_folder/g;
- s/\@GenericWin32BinaryFolder@/$generic_win32_binary_folder/g;
- s/\@Debug32TestSuiteFolder@/$debug32_testsuite_folder/g;
- s/\@Release32TestSuiteFolder@/$release32_testsuite_folder/g;
- s/\@Debug32TargetFolder@/$debug32_target_folder/g;
- s/\@Release32TargetFolder@/$release32_target_folder/g;
- s/\@Debug32PixbufLoadersFolder@/$debug32_pixbuf_loaders_folder/g;
- s/\@Release32PixbufLoadersFolder@/$release32_pixbuf_loaders_folder/g;
- s/\@TargetSxSFolder@/$target_sxs_folder/g;
- s/\@prefix@/$prefix/g;
- s/\@exec_prefix@/$exec_prefix/g;
- s/\@includedir@/$generic_include_folder/g;
- s/\@libdir@/$generic_library_folder/g;
- print OUTPUT;
- }
-}
-
-process_file ("libs/plugins/reasonablesynth.lv2/manifest.ttl");
-process_file ("gtk2_ardour/default_ui_config");
-
-my $command=join(' ', at ARGV);
-if ($command eq -buildall) {
- process_file ("MSVCardour3/MSVCArdour3.vsprops");
- process_file ("MSVCMixbus3/MSVCMixbus3.vsprops");
- process_file ("MSVCvst_scan/vst_scan.rc");
- process_file ("icons/win32/msvc_resources.rc");
-}
diff --git a/msvc_extra_headers/ardourext/float_cast.h.input b/msvc_extra_headers/ardourext/float_cast.h.input
deleted file mode 100644
index 2ba3bbb..0000000
--- a/msvc_extra_headers/ardourext/float_cast.h.input
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-** Copyright (C) 2001 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-**
-** Permission to use, copy, modify, distribute, and sell this file for any
-** purpose is hereby granted without fee, provided that the above copyright
-** and this permission notice appear in all copies. No representations are
-** made about the suitability of this software for any purpose. It is
-** provided "as is" without express or implied warranty.
-*/
-
-/* Version 1.1 */
-
-
-/*============================================================================
-** On Intel Pentium processors (especially PIII and probably P4), converting
-** from float to int is very slow. To meet the C specs, the code produced by
-** most C compilers targeting Pentium needs to change the FPU rounding mode
-** before the float to int conversion is performed.
-**
-** Changing the FPU rounding mode causes the FPU pipeline to be flushed. It
-** is this flushing of the pipeline which is so slow.
-**
-** Fortunately the ISO C99 specifications define the functions lrint, lrintf,
-** llrint and llrintf which fix this problem as a side effect.
-**
-** On Unix-like systems, the configure process should have detected the
-** presence of these functions. If they weren't found we have to replace them
-** here with a standard C cast.
-*/
-
-/*
-** The C99 prototypes for lrint and lrintf are as follows:
-**
-** long int lrintf (float x) ;
-** long int lrint (double x) ;
-*/
-#ifndef __FLOAT_CAST_H__ // Added by JE - 30-11-2009
-#define __FLOAT_CAST_H__
-#if (defined (WIN32) || defined (_WIN32))
-
- #include <math.h>
-
- /* Win32 doesn't seem to have these functions.
- ** Therefore implement inline versions of these functions here.
- */
-
- __inline long int
- lrint (double flt)
- { int intgr;
-
- _asm
- { fld flt
- fistp intgr
- } ;
-
- return intgr ;
- }
-
- __inline long int
- lrintf (float flt)
- { int intgr;
-
- _asm
- { fld flt
- fistp intgr
- } ;
-
- return intgr ;
- }
-
- __inline long long int
- llrint (double flt)
- { long long int intgr;
-
- _asm
- { fld flt
- fistp intgr
- } ;
-
- return intgr ;
- }
-
- __inline long long int
- llrintf (float flt)
- { long long int intgr;
-
- _asm
- { fld flt
- fistp intgr
- } ;
-
- return intgr ;
- }
-#endif
-
-#endif // __FLOAT_CAST_H__
diff --git a/msvc_extra_headers/ardourext/libcharset.h.input b/msvc_extra_headers/ardourext/libcharset.h.input
deleted file mode 100644
index 2baf24c..0000000
--- a/msvc_extra_headers/ardourext/libcharset.h.input
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU CHARSET Library.
-
- The GNU CHARSET Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU CHARSET Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with the GNU CHARSET Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street,
- Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _LIBCHARSET_H
-#define _LIBCHARSET_H
-
-#include <ardourext/localcharset.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Support for relocatable packages. */
-
-/* Sets the original and the current installation prefix of the package.
- Relocation simply replaces a pathname starting with the original prefix
- by the corresponding pathname with the current prefix instead. Both
- prefixes should be directory names without trailing slash (i.e. use ""
- instead of "/"). */
-extern void libcharset_set_relocation_prefix (const char *orig_prefix,
- const char *curr_prefix);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LIBCHARSET_H */
diff --git a/msvc_extra_headers/ardourext/localcharset.h.input b/msvc_extra_headers/ardourext/localcharset.h.input
deleted file mode 100644
index 129e4a4..0000000
--- a/msvc_extra_headers/ardourext/localcharset.h.input
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
- Copyright (C) 2000-2003 Free Software Foundation, Inc.
- This file is part of the GNU CHARSET Library.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
- into one of the canonical names listed in config.charset.
- The result must not be freed; it is statically allocated.
- If the canonical name cannot be determined, the result is a non-canonical
- name. */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff --git a/msvc_extra_headers/ardourext/misc.h.input b/msvc_extra_headers/ardourext/misc.h.input
deleted file mode 100644
index 5da7c41..0000000
--- a/msvc_extra_headers/ardourext/misc.h.input
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- Copyright (C) 2009 John Emmas
-
- 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 __ardour_msvc_extensions_h__
-#define __ardour_msvc_extensions_h__
-
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
-#endif
-#ifndef _CPP_VECTOR
-#define _CPP_VECTOR 1
-#endif
-
-#ifdef __cplusplus
-#include <vector>
-#endif
-
-#include <math.h>
-#include <float.h>
-#include <direct.h>
-#include <boost/regex.h>
-#include <glib.h>
-#include <ardourext/float_cast.h>
-
-// 'std::isnan()' is not available in MSVC. Assume '_isnan(double)'
-#define isnan(val) _isnan((double)val)
-
-// 'std::isinf()' is not available in MSVC. Assume '!_finite(double)'
-#define isinf(val) !_finite((double)val)
-
-// 'INFINITY' is not defined in MSVC. Assume 'HUGE_VAL'
-#ifndef INFINITY
-#define INFINITY HUGE_VAL
-#endif
-
-// File access modes copied from unistd.h
-#define F_OK 0
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-
-// Miscellaneous #defines
-#define __attribute__(x)
-#define llabs _abs64
-#define atoll _atoi64
-#define access _access
-#define getcwd _getcwd
-#define getpid _getpid
-#define snprintf _snprintf
-#define random rand
-#define link ntfs_link
-#define unlink ntfs_unlink
-#define strcasecmp stricmp
-#define strncasecmp strnicmp
-#define strtok_r( _s, _sep, _lasts ) \
- ( *(_lasts) = strtok( (_s), (_sep) ) )
-
-#ifndef PATH_MAX
-#define PATH_MAX _MAX_PATH
-#endif
-
-// Types missing from Win32 'stat.h' (hopefully Windows
-// will either act sensibly or ignore most of them).
-#define _S_IFBLK 0x3000
-#define S_IRWXU _S_IRWXU
-#define S_IXUSR _S_IXUSR
-#define S_IWUSR _S_IWUSR
-#define S_IRUSR _S_IRUSR
-#define S_IXGRP _S_IXGRP
-#define S_IWGRP _S_IWGRP
-#define S_IRGRP _S_IRGRP
-#define S_IXOTH _S_IXOTH
-#define S_IWOTH _S_IWOTH
-#define S_IROTH _S_IROTH
-
-#define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC)
-#define _S_IXUSR _S_IEXEC
-#define _S_IWUSR _S_IWRITE
-#define _S_IRUSR _S_IREAD
-#define _S_IXGRP _S_IEXEC
-#define _S_IWGRP _S_IWRITE
-#define _S_IRGRP _S_IREAD
-#define _S_IXOTH _S_IEXEC
-#define _S_IWOTH _S_IWRITE
-#define _S_IROTH _S_IREAD
-
-#define S_ISFIFO(m) _S_ISFIFO(m)
-#define S_ISDIR(m) _S_ISDIR(m)
-#define S_ISCHR(m) _S_ISCHR(m)
-#define S_ISBLK(m) _S_ISBLK(m)
-#define S_ISREG(m) _S_ISREG(m)
-
-#define _S_ISFIFO(m) (((m) & _S_IFMT) == _S_IFIFO)
-#define _S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
-#define _S_ISCHR(m) (((m) & _S_IFMT) == _S_IFCHR)
-#define _S_ISBLK(m) (((m) & _S_IFMT) == _S_IFBLK)
-#define _S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
-
-
-#if defined(__USE_BSD) || defined(_BSD_SOURCE)
-/* Convenience macros for operations on timevals.
- NOTE: `timercmp' does not work for >= or <=.
- Note also that 'timerset', 'timerclear' and
- 'timercmp' are (perhaps strangely) already
- defined, along with various other 'time'
- functions in WinSock.h */
-# define timeradd(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
- if ((result)->tv_usec >= 1000000) \
- { \
- ++(result)->tv_sec; \
- (result)->tv_usec -= 1000000; \
- } \
- } while (0)
-# define timersub(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
- if ((result)->tv_usec < 0) { \
- --(result)->tv_sec; \
- (result)->tv_usec += 1000000; \
- } \
- } while (0)
-#endif /* BSD */
-
-#if !defined(__BIT_TYPES_DEFINED) || !defined(__BIT_TYPES_DEFINED__)
-#define __BIT_TYPES_DEFINED__ 1
-// Doesn't yet define all 'bit types'. Only those
-// needed by Ardour. More can be added as needed.
-#ifndef __int8_t_defined
-#define __int8_t_defined
-typedef unsigned char u_int8_t;
-typedef unsigned short int u_int16_t;
-typedef unsigned int u_int32_t;
-typedef unsigned __int64 u_int64_t;
-
-typedef signed char int8_t;
-typedef unsigned char uint8_t;
-typedef short int16_t;
-typedef unsigned short uint16_t;
-typedef int int32_t;
-typedef unsigned uint32_t;
-typedef long long int64_t;
-typedef unsigned long long uint64_t;
-#endif // __int8_t
-
-#ifndef __register_t_defined
-#define __register_t_defined
-typedef int register_t;
-#endif // __register_t
-#endif // __BIT_TYPESD
-
-// throw()
-#ifndef __THROW
-#ifdef __cplusplus
-#define __THROW throw()
-#else
-#define __THROW
-#endif
-#endif
-
-// System V compatibility
-typedef unsigned short ushort;
-typedef unsigned int uint;
-
-// mode_t
-#ifndef _MODE_T_
-#define _MODE_T_
-typedef unsigned short _mode_t;
-
-#ifndef NO_OLDNAMES
-typedef _mode_t mode_t;
-#endif /* NO_OLDNAMES */
-#endif /* _MODE_T_ */
-
-// int64 abs()
-#ifdef __cplusplus // Normal 'C' doesn't permit over-ridden functions !!
-inline int64_t abs(int64_t val) throw()
-{
- if (val < 0)
- return val * (-1);
- else
- return val;
-}
-#endif
-
-// fmin() and fmax()
-#define fmin(a, b) min((double)a, (double)b)
-#define fmax(a, b) max((double)a, (double)b)
-
-// approximate POSIX pipe()
-#define pipe(handles) _pipe(handles, 4096, _O_BINARY)
-
-// Windows mkdir() doesn't care about access privileges
-#define mkdir(path, mode) _mkdir(path)
-
-// Redefine 'ftruncate()' to use the glib-win32 version
-#define ftruncate(fd, len) g_win32_ftruncate((gint)fd, (guint)len)
-
-
-// #include the main headers for Ardour MSVC
-#ifdef __cplusplus
-#if defined(LIBPBD_DLL) || defined(PBD_IS_IN_WIN_STATIC_LIB)
-#include <pbd/msvc_pbd.h>
-
-#ifdef LIBPBD_DLL
-#define DEFAULT_COMPARISONS_DEFINED
-#define DECLARE_DEFAULT_COMPARISONS(Type) \
- LIBPBD_API bool operator > (const Type& lhs, const Type& rhs); \
- LIBPBD_API bool operator < (const Type& lhs, const Type& rhs); \
- LIBPBD_API bool operator != (const Type& lhs, const Type& rhs); \
- LIBPBD_API bool operator == (const Type& lhs, const Type& rhs);
-#endif
-#endif
-#if defined(BUILDING_LIBARDOUR) || defined(LIBARDOUR_IS_IN_WIN_STATIC_LIB)
-#include <ardour/msvc_libardour.h>
-#endif
-#if defined(BUILDING_RUBBERBAND) || defined(RUBBERBAND_IS_IN_WIN_STATIC_LIB)
-#include <rubberband/msvc_rubberband.h>
-#endif
-#endif // __cplusplus
-
-#ifndef DEFAULT_COMPARISONS_DEFINED
-#define DEFAULT_COMPARISONS_DEFINED
-#define DECLARE_DEFAULT_COMPARISONS(Type) \
- extern bool operator > (const Type& lhs, const Type& rhs); \
- extern bool operator < (const Type& lhs, const Type& rhs); \
- extern bool operator != (const Type& lhs, const Type& rhs); \
- extern bool operator == (const Type& lhs, const Type& rhs);
-#endif
-
-// round().... Unlike Linux, Windows doesn't seem to support the
-// concept of a system-wide (or programmable) rounding direction.
-// Fortunately, 'round to nearest' seems to be the default action
-// under Linux, so let's copy that until we find out otherwise.
-#define rint(value) round(value)
-#if !defined(LIBPBD_API) || defined(PBD_IS_IN_WIN_STATIC_LIB)
-extern double round(double x);
-
-// log2().... MSVC doesn't offer the C99 function 'log2()'
-// so let's emulate it.
-extern double log2(double x);
-#endif
-
-#endif /* __ardour_msvc_extensions_h__ */
diff --git a/msvc_extra_headers/ardourext/pthread.h.input b/msvc_extra_headers/ardourext/pthread.h.input
deleted file mode 100644
index 9699ef9..0000000
--- a/msvc_extra_headers/ardourext/pthread.h.input
+++ /dev/null
@@ -1,7 +0,0 @@
-#if !defined( PTHREAD_H )
-#ifdef _PTHREAD_H // Test added by JE - 12-12-2009
-#error "ardourext/pthread.h conflicts with an existing pthread library"
-#else
-#include <ardourext/ptw32/pthread.h>
-#endif /* _PTHREAD_H */
-#endif /* PTHREAD_H */
diff --git a/msvc_extra_headers/ardourext/ptw32/pthread.h.input b/msvc_extra_headers/ardourext/ptw32/pthread.h.input
deleted file mode 100644
index 0aa4522..0000000
--- a/msvc_extra_headers/ardourext/ptw32/pthread.h.input
+++ /dev/null
@@ -1,1373 +0,0 @@
-/* This is an implementation of the threads API of POSIX 1003.1-2001.
- *
- * --------------------------------------------------------------------------
- *
- * Pthreads-win32 - POSIX Threads Library for Win32
- * Copyright(C) 1998 John E. Bossom
- * Copyright(C) 1999,2005 Pthreads-win32 contributors
- *
- * Contact Email: rpj at callisto.canberra.edu.au
- *
- * The current list of contributors is contained
- * in the file CONTRIBUTORS included with the source
- * code distribution. The list can also be seen at the
- * following World Wide Web location:
- * http://sources.redhat.com/pthreads-win32/contributors.html
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library in the file COPYING.LIB;
- * if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#if !defined( PTHREAD_H )
-#ifdef _PTHREAD_H // Test added by JE - 12-12-2009
-#error "ptw32/pthread.h conflicts with an existing pthread library"
-#endif
-// Now make sure we can't accidentally include a conflicting library !!
-#define _PTHREAD_H
-#define PTHREAD_H
-
-/*
- * See the README file for an explanation of the pthreads-win32 version
- * numbering scheme and how the DLL is named etc.
- */
-#define PTW32_VERSION 2,8,0,0
-#define PTW32_VERSION_STRING "2, 8, 0, 0\0"
-
-/* There are three implementations of cancel cleanup.
- * Note that pthread.h is included in both application
- * compilation units and also internally for the library.
- * The code here and within the library aims to work
- * for all reasonable combinations of environments.
- *
- * The three implementations are:
- *
- * WIN32 SEH
- * C
- * C++
- *
- * Please note that exiting a push/pop block via
- * "return", "exit", "break", or "continue" will
- * lead to different behaviour amongst applications
- * depending upon whether the library was built
- * using SEH, C++, or C. For example, a library built
- * with SEH will call the cleanup routine, while both
- * C++ and C built versions will not.
- */
-
-/*
- * Define defaults for cleanup code.
- * Note: Unless the build explicitly defines one of the following, then
- * we default to standard C style cleanup. This style uses setjmp/longjmp
- * in the cancelation and thread exit implementations and therefore won't
- * do stack unwinding if linked to applications that have it (e.g.
- * C++ apps). This is currently consistent with most/all commercial Unix
- * POSIX threads implementations.
- */
-#if !defined( __CLEANUP_SEH ) && !defined( __CLEANUP_CXX ) && !defined( __CLEANUP_C )
-# define __CLEANUP_C
-#endif
-
-#if defined( __CLEANUP_SEH ) && ( !defined( _MSC_VER ) && !defined(PTW32_RC_MSC))
-#error ERROR [__FILE__, line __LINE__]: SEH is not supported for this compiler.
-#endif
-
-/*
- * Stop here if we are being included by the resource compiler.
- */
-#ifndef RC_INVOKED
-
-#undef PTW32_LEVEL
-
-#if defined(_POSIX_SOURCE)
-#define PTW32_LEVEL 0
-/* Early POSIX */
-#endif
-
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 1
-/* Include 1b, 1c and 1d */
-#endif
-
-#if defined(INCLUDE_NP)
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 2
-/* Include Non-Portable extensions */
-#endif
-
-#define PTW32_LEVEL_MAX 3
-
-#if !defined(PTW32_LEVEL)
-#define PTW32_LEVEL PTW32_LEVEL_MAX
-/* Include everything */
-#endif
-
-#ifdef _UWIN
-# define HAVE_STRUCT_TIMESPEC 1
-# define HAVE_SIGNAL_H 1
-# undef HAVE_CONFIG_H
-# pragma comment(lib, "pthread")
-#endif
-
-/*
- * -------------------------------------------------------------
- *
- *
- * Module: pthread.h
- *
- * Purpose:
- * Provides an implementation of PThreads based upon the
- * standard:
- *
- * POSIX 1003.1-2001
- * and
- * The Single Unix Specification version 3
- *
- * (these two are equivalent)
- *
- * in order to enhance code portability between Windows,
- * various commercial Unix implementations, and Linux.
- *
- * See the ANNOUNCE file for a full list of conforming
- * routines and defined constants, and a list of missing
- * routines and constants not defined in this implementation.
- *
- * Authors:
- * There have been many contributors to this library.
- * The initial implementation was contributed by
- * John Bossom, and several others have provided major
- * sections or revisions of parts of the implementation.
- * Often significant effort has been contributed to
- * find and fix important bugs and other problems to
- * improve the reliability of the library, which sometimes
- * is not reflected in the amount of code which changed as
- * result.
- * As much as possible, the contributors are acknowledged
- * in the ChangeLog file in the source code distribution
- * where their changes are noted in detail.
- *
- * Contributors are listed in the CONTRIBUTORS file.
- *
- * As usual, all bouquets go to the contributors, and all
- * brickbats go to the project maintainer.
- *
- * Maintainer:
- * The code base for this project is coordinated and
- * eventually pre-tested, packaged, and made available by
- *
- * Ross Johnson <rpj at callisto.canberra.edu.au>
- *
- * QA Testers:
- * Ultimately, the library is tested in the real world by
- * a host of competent and demanding scientists and
- * engineers who report bugs and/or provide solutions
- * which are then fixed or incorporated into subsequent
- * versions of the library. Each time a bug is fixed, a
- * test case is written to prove the fix and ensure
- * that later changes to the code don't reintroduce the
- * same error. The number of test cases is slowly growing
- * and therefore so is the code reliability.
- *
- * Compliance:
- * See the file ANNOUNCE for the list of implemented
- * and not-implemented routines and defined options.
- * Of course, these are all defined is this file as well.
- *
- * Web site:
- * The source code and other information about this library
- * are available from
- *
- * http://sources.redhat.com/pthreads-win32/
- *
- * -------------------------------------------------------------
- */
-
-/* Try to avoid including windows.h */
-#if defined(__MINGW32__) && defined(__cplusplus)
-#define PTW32_INCLUDE_WINDOWS_H
-#endif
-
-#ifdef PTW32_INCLUDE_WINDOWS_H
-#include <windows.h>
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER < 1300 || defined(__DMC__)
-/*
- * VC++6.0 or early compiler's header has no DWORD_PTR type.
- */
-typedef unsigned long DWORD_PTR;
-#endif
-/*
- * -----------------
- * autoconf switches
- * -----------------
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#ifndef NEED_FTIME
-#include <time.h>
-#else /* NEED_FTIME */
-/* use native WIN32 time API */
-#endif /* NEED_FTIME */
-
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif /* HAVE_SIGNAL_H */
-
-#include <setjmp.h>
-#include <limits.h>
-
-/*
- * Boolean values to make us independent of system includes.
- */
-enum {
- PTW32_FALSE = 0,
- PTW32_TRUE = (! PTW32_FALSE)
-};
-
-/*
- * This is a duplicate of what is in the autoconf config.h,
- * which is only used when building the pthread-win32 libraries.
- */
-
-#ifndef PTW32_CONFIG_H
-# if defined(WINCE)
-# define NEED_ERRNO
-# define NEED_SEM
-# endif
-# if defined(_UWIN) || defined(__MINGW32__)
-# define HAVE_MODE_T
-# endif
-#endif
-
-/*
- *
- */
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-#ifdef NEED_ERRNO
-#include "need_errno.h"
-#else
-#include <errno.h>
-#endif
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-/*
- * Several systems don't define some error numbers.
- */
-#ifndef ENOTSUP
-# define ENOTSUP 48 /* This is the value in Solaris. */
-#endif
-
-#ifndef ETIMEDOUT
-# define ETIMEDOUT 10060 /* This is the value in winsock.h. */
-#endif
-
-#ifndef ENOSYS
-# define ENOSYS 140 /* Semi-arbitrary value */
-#endif
-
-#ifndef EDEADLK
-# ifdef EDEADLOCK
-# define EDEADLK EDEADLOCK
-# else
-# define EDEADLK 36 /* This is the value in MSVC. */
-# endif
-#endif
-
-#include <ardourext/sched.h>
-
-/*
- * To avoid including windows.h we define only those things that we
- * actually need from it.
- */
-#ifndef PTW32_INCLUDE_WINDOWS_H
-#ifndef HANDLE
-# define PTW32__HANDLE_DEF
-# define HANDLE void *
-#endif
-#ifndef DWORD
-# define PTW32__DWORD_DEF
-# define DWORD unsigned long
-#endif
-#endif
-
-#ifndef HAVE_STRUCT_TIMESPEC
-#define HAVE_STRUCT_TIMESPEC 1
-struct timespec {
- long tv_sec;
- long tv_nsec;
-};
-#endif /* HAVE_STRUCT_TIMESPEC */
-
-#ifndef SIG_BLOCK
-#define SIG_BLOCK 0
-#endif /* SIG_BLOCK */
-
-#ifndef SIG_UNBLOCK
-#define SIG_UNBLOCK 1
-#endif /* SIG_UNBLOCK */
-
-#ifndef SIG_SETMASK
-#define SIG_SETMASK 2
-#endif /* SIG_SETMASK */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/*
- * -------------------------------------------------------------
- *
- * POSIX 1003.1-2001 Options
- * =========================
- *
- * Options are normally set in <unistd.h>, which is not provided
- * with pthreads-win32.
- *
- * For conformance with the Single Unix Specification (version 3), all of the
- * options below are defined, and have a value of either -1 (not supported)
- * or 200112L (supported).
- *
- * These options can neither be left undefined nor have a value of 0, because
- * either indicates that sysconf(), which is not implemented, may be used at
- * runtime to check the status of the option.
- *
- * _POSIX_THREADS (== 200112L)
- * If == 200112L, you can use threads
- *
- * _POSIX_THREAD_ATTR_STACKSIZE (== 200112L)
- * If == 200112L, you can control the size of a thread's
- * stack
- * pthread_attr_getstacksize
- * pthread_attr_setstacksize
- *
- * _POSIX_THREAD_ATTR_STACKADDR (== -1)
- * If == 200112L, you can allocate and control a thread's
- * stack. If not supported, the following functions
- * will return ENOSYS, indicating they are not
- * supported:
- * pthread_attr_getstackaddr
- * pthread_attr_setstackaddr
- *
- * _POSIX_THREAD_PRIORITY_SCHEDULING (== -1)
- * If == 200112L, you can use realtime scheduling.
- * This option indicates that the behaviour of some
- * implemented functions conforms to the additional TPS
- * requirements in the standard. E.g. rwlocks favour
- * writers over readers when threads have equal priority.
- *
- * _POSIX_THREAD_PRIO_INHERIT (== -1)
- * If == 200112L, you can create priority inheritance
- * mutexes.
- * pthread_mutexattr_getprotocol +
- * pthread_mutexattr_setprotocol +
- *
- * _POSIX_THREAD_PRIO_PROTECT (== -1)
- * If == 200112L, you can create priority ceiling mutexes
- * Indicates the availability of:
- * pthread_mutex_getprioceiling
- * pthread_mutex_setprioceiling
- * pthread_mutexattr_getprioceiling
- * pthread_mutexattr_getprotocol +
- * pthread_mutexattr_setprioceiling
- * pthread_mutexattr_setprotocol +
- *
- * _POSIX_THREAD_PROCESS_SHARED (== -1)
- * If set, you can create mutexes and condition
- * variables that can be shared with another
- * process.If set, indicates the availability
- * of:
- * pthread_mutexattr_getpshared
- * pthread_mutexattr_setpshared
- * pthread_condattr_getpshared
- * pthread_condattr_setpshared
- *
- * _POSIX_THREAD_SAFE_FUNCTIONS (== 200112L)
- * If == 200112L you can use the special *_r library
- * functions that provide thread-safe behaviour
- *
- * _POSIX_READER_WRITER_LOCKS (== 200112L)
- * If == 200112L, you can use read/write locks
- *
- * _POSIX_SPIN_LOCKS (== 200112L)
- * If == 200112L, you can use spin locks
- *
- * _POSIX_BARRIERS (== 200112L)
- * If == 200112L, you can use barriers
- *
- * + These functions provide both 'inherit' and/or
- * 'protect' protocol, based upon these macro
- * settings.
- *
- * -------------------------------------------------------------
- */
-
-/*
- * POSIX Options
- */
-#undef _POSIX_THREADS
-#define _POSIX_THREADS 200112L
-
-#undef _POSIX_READER_WRITER_LOCKS
-#define _POSIX_READER_WRITER_LOCKS 200112L
-
-#undef _POSIX_SPIN_LOCKS
-#define _POSIX_SPIN_LOCKS 200112L
-
-#undef _POSIX_BARRIERS
-#define _POSIX_BARRIERS 200112L
-
-#undef _POSIX_THREAD_SAFE_FUNCTIONS
-#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
-
-#undef _POSIX_THREAD_ATTR_STACKSIZE
-#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
-
-/*
- * The following options are not supported
- */
-#undef _POSIX_THREAD_ATTR_STACKADDR
-#define _POSIX_THREAD_ATTR_STACKADDR -1
-
-#undef _POSIX_THREAD_PRIO_INHERIT
-#define _POSIX_THREAD_PRIO_INHERIT -1
-
-#undef _POSIX_THREAD_PRIO_PROTECT
-#define _POSIX_THREAD_PRIO_PROTECT -1
-
-/* TPS is not fully supported. */
-#undef _POSIX_THREAD_PRIORITY_SCHEDULING
-#define _POSIX_THREAD_PRIORITY_SCHEDULING -1
-
-#undef _POSIX_THREAD_PROCESS_SHARED
-#define _POSIX_THREAD_PROCESS_SHARED -1
-
-
-/*
- * POSIX 1003.1-2001 Limits
- * ===========================
- *
- * These limits are normally set in <limits.h>, which is not provided with
- * pthreads-win32.
- *
- * PTHREAD_DESTRUCTOR_ITERATIONS
- * Maximum number of attempts to destroy
- * a thread's thread-specific data on
- * termination (must be at least 4)
- *
- * PTHREAD_KEYS_MAX
- * Maximum number of thread-specific data keys
- * available per process (must be at least 128)
- *
- * PTHREAD_STACK_MIN
- * Minimum supported stack size for a thread
- *
- * PTHREAD_THREADS_MAX
- * Maximum number of threads supported per
- * process (must be at least 64).
- *
- * SEM_NSEMS_MAX
- * The maximum number of semaphores a process can have.
- * (must be at least 256)
- *
- * SEM_VALUE_MAX
- * The maximum value a semaphore can have.
- * (must be at least 32767)
- *
- */
-#undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
-
-#undef PTHREAD_DESTRUCTOR_ITERATIONS
-#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-#undef _POSIX_THREAD_KEYS_MAX
-#define _POSIX_THREAD_KEYS_MAX 128
-
-#undef PTHREAD_KEYS_MAX
-#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX
-
-#undef PTHREAD_STACK_MIN
-#define PTHREAD_STACK_MIN 0
-
-#undef _POSIX_THREAD_THREADS_MAX
-#define _POSIX_THREAD_THREADS_MAX 64
-
- /* Arbitrary value */
-#undef PTHREAD_THREADS_MAX
-#define PTHREAD_THREADS_MAX 2019
-
-#undef _POSIX_SEM_NSEMS_MAX
-#define _POSIX_SEM_NSEMS_MAX 256
-
- /* Arbitrary value */
-#undef SEM_NSEMS_MAX
-#define SEM_NSEMS_MAX 1024
-
-#undef _POSIX_SEM_VALUE_MAX
-#define _POSIX_SEM_VALUE_MAX 32767
-
-#undef SEM_VALUE_MAX
-#define SEM_VALUE_MAX INT_MAX
-
-
-#if __GNUC__ && ! defined (__declspec)
-# error Please upgrade your GNU compiler to one that supports __declspec.
-#endif
-
-/*
- * When building the DLL code, you should define PTW32_BUILD so that
- * the variables/functions are exported correctly. When using the DLL,
- * do NOT define PTW32_BUILD, and then the variables/functions will
- * be imported correctly.
- */
-#ifndef PTW32_STATIC_LIB
-# ifdef PTW32_BUILD
-# define PTW32_DLLPORT __declspec (dllexport)
-# else
-# define PTW32_DLLPORT __declspec (dllimport)
-# endif
-#else
-# define PTW32_DLLPORT
-#endif
-
-/*
- * The Open Watcom C/C++ compiler uses a non-standard calling convention
- * that passes function args in registers unless __cdecl is explicitly specified
- * in exposed function prototypes.
- *
- * We force all calls to cdecl even though this could slow Watcom code down
- * slightly. If you know that the Watcom compiler will be used to build both
- * the DLL and application, then you can probably define this as a null string.
- * Remember that pthread.h (this file) is used for both the DLL and application builds.
- */
-#define PTW32_CDECL __cdecl
-
-#if defined(_UWIN) && PTW32_LEVEL >= PTW32_LEVEL_MAX
-# include <sys/types.h>
-#else
-/*
- * Generic handle type - intended to extend uniqueness beyond
- * that available with a simple pointer. It should scale for either
- * IA-32 or IA-64.
- */
-typedef struct {
- void * p; /* Pointer to actual object */
- unsigned int x; /* Extra information - reuse count etc */
-} ptw32_handle_t;
-
-typedef ptw32_handle_t pthread_t;
-typedef struct pthread_attr_t_ * pthread_attr_t;
-typedef struct pthread_once_t_ pthread_once_t;
-typedef struct pthread_key_t_ * pthread_key_t;
-typedef struct pthread_mutex_t_ * pthread_mutex_t;
-typedef struct pthread_mutexattr_t_ * pthread_mutexattr_t;
-typedef struct pthread_cond_t_ * pthread_cond_t;
-typedef struct pthread_condattr_t_ * pthread_condattr_t;
-#endif
-typedef struct pthread_rwlock_t_ * pthread_rwlock_t;
-typedef struct pthread_rwlockattr_t_ * pthread_rwlockattr_t;
-typedef struct pthread_spinlock_t_ * pthread_spinlock_t;
-typedef struct pthread_barrier_t_ * pthread_barrier_t;
-typedef struct pthread_barrierattr_t_ * pthread_barrierattr_t;
-
-/*
- * ====================
- * ====================
- * POSIX Threads
- * ====================
- * ====================
- */
-
-enum {
-/*
- * pthread_attr_{get,set}detachstate
- */
- PTHREAD_CREATE_JOINABLE = 0, /* Default */
- PTHREAD_CREATE_DETACHED = 1,
-
-/*
- * pthread_attr_{get,set}inheritsched
- */
- PTHREAD_INHERIT_SCHED = 0,
- PTHREAD_EXPLICIT_SCHED = 1, /* Default */
-
-/*
- * pthread_{get,set}scope
- */
- PTHREAD_SCOPE_PROCESS = 0,
- PTHREAD_SCOPE_SYSTEM = 1, /* Default */
-
-/*
- * pthread_setcancelstate paramters
- */
- PTHREAD_CANCEL_ENABLE = 0, /* Default */
- PTHREAD_CANCEL_DISABLE = 1,
-
-/*
- * pthread_setcanceltype parameters
- */
- PTHREAD_CANCEL_ASYNCHRONOUS = 0,
- PTHREAD_CANCEL_DEFERRED = 1, /* Default */
-
-/*
- * pthread_mutexattr_{get,set}pshared
- * pthread_condattr_{get,set}pshared
- */
- PTHREAD_PROCESS_PRIVATE = 0,
- PTHREAD_PROCESS_SHARED = 1,
-
-/*
- * pthread_barrier_wait
- */
- PTHREAD_BARRIER_SERIAL_THREAD = -1
-};
-
-/*
- * ====================
- * ====================
- * Cancelation
- * ====================
- * ====================
- */
-#define PTHREAD_CANCELED ((void *) -1)
-
-
-/*
- * ====================
- * ====================
- * Once Key
- * ====================
- * ====================
- */
-#define PTHREAD_ONCE_INIT { PTW32_FALSE, 0, 0, 0}
-
-struct pthread_once_t_
-{
- int done; /* indicates if user function has been executed */
- void * lock;
- int reserved1;
- int reserved2;
-};
-
-
-/*
- * ====================
- * ====================
- * Object initialisers
- * ====================
- * ====================
- */
-#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) -1)
-#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t) -2)
-#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t) -3)
-
-/*
- * Compatibility with LinuxThreads
- */
-#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER
-#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP PTHREAD_ERRORCHECK_MUTEX_INITIALIZER
-
-#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) -1)
-
-#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) -1)
-
-#define PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t) -1)
-
-
-/*
- * Mutex types.
- */
-enum
-{
- /* Compatibility with LinuxThreads */
- PTHREAD_MUTEX_FAST_NP,
- PTHREAD_MUTEX_RECURSIVE_NP,
- PTHREAD_MUTEX_ERRORCHECK_NP,
- PTHREAD_MUTEX_TIMED_NP = PTHREAD_MUTEX_FAST_NP,
- PTHREAD_MUTEX_ADAPTIVE_NP = PTHREAD_MUTEX_FAST_NP,
- /* For compatibility with POSIX */
- PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_FAST_NP,
- PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
- PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
- PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
-};
-
-
-typedef struct ptw32_cleanup_t ptw32_cleanup_t;
-
-#if defined(_MSC_VER)
-/* Disable MSVC 'anachronism used' warning */
-#pragma warning( disable : 4229 )
-#endif
-
-typedef void (* PTW32_CDECL ptw32_cleanup_callback_t)(void *);
-
-#if defined(_MSC_VER)
-#pragma warning( default : 4229 )
-#endif
-
-struct ptw32_cleanup_t
-{
- ptw32_cleanup_callback_t routine;
- void *arg;
- struct ptw32_cleanup_t *prev;
-};
-
-#ifdef __CLEANUP_SEH
- /*
- * WIN32 SEH version of cancel cleanup.
- */
-
-#define pthread_cleanup_push( _rout, _arg ) \
- { \
- ptw32_cleanup_t _cleanup; \
- \
- _cleanup.routine = (ptw32_cleanup_callback_t)(_rout); \
- _cleanup.arg = (_arg); \
- __try \
- { \
-
-#define pthread_cleanup_pop( _execute ) \
- } \
- __finally \
- { \
- if( _execute || AbnormalTermination()) \
- { \
- (*(_cleanup.routine))( _cleanup.arg ); \
- } \
- } \
- }
-
-#else /* __CLEANUP_SEH */
-
-#ifdef __CLEANUP_C
-
- /*
- * C implementation of PThreads cancel cleanup
- */
-
-#define pthread_cleanup_push( _rout, _arg ) \
- { \
- ptw32_cleanup_t _cleanup; \
- \
- ptw32_push_cleanup( &_cleanup, (ptw32_cleanup_callback_t) (_rout), (_arg) ); \
-
-#define pthread_cleanup_pop( _execute ) \
- (void) ptw32_pop_cleanup( _execute ); \
- }
-
-#else /* __CLEANUP_C */
-
-#ifdef __CLEANUP_CXX
-
- /*
- * C++ version of cancel cleanup.
- * - John E. Bossom.
- */
-
- class PThreadCleanup {
- /*
- * PThreadCleanup
- *
- * Purpose
- * This class is a C++ helper class that is
- * used to implement pthread_cleanup_push/
- * pthread_cleanup_pop.
- * The destructor of this class automatically
- * pops the pushed cleanup routine regardless
- * of how the code exits the scope
- * (i.e. such as by an exception)
- */
- ptw32_cleanup_callback_t cleanUpRout;
- void * obj;
- int executeIt;
-
- public:
- PThreadCleanup() :
- cleanUpRout( 0 ),
- obj( 0 ),
- executeIt( 0 )
- /*
- * No cleanup performed
- */
- {
- }
-
- PThreadCleanup(
- ptw32_cleanup_callback_t routine,
- void * arg ) :
- cleanUpRout( routine ),
- obj( arg ),
- executeIt( 1 )
- /*
- * Registers a cleanup routine for 'arg'
- */
- {
- }
-
- ~PThreadCleanup()
- {
- if ( executeIt && ((void *) cleanUpRout != (void *) 0) )
- {
- (void) (*cleanUpRout)( obj );
- }
- }
-
- void execute( int exec )
- {
- executeIt = exec;
- }
- };
-
- /*
- * C++ implementation of PThreads cancel cleanup;
- * This implementation takes advantage of a helper
- * class who's destructor automatically calls the
- * cleanup routine if we exit our scope weirdly
- */
-#define pthread_cleanup_push( _rout, _arg ) \
- { \
- PThreadCleanup cleanup((ptw32_cleanup_callback_t)(_rout), \
- (void *) (_arg) );
-
-#define pthread_cleanup_pop( _execute ) \
- cleanup.execute( _execute ); \
- }
-
-#else
-
-#error ERROR [__FILE__, line __LINE__]: Cleanup type undefined.
-
-#endif /* __CLEANUP_CXX */
-
-#endif /* __CLEANUP_C */
-
-#endif /* __CLEANUP_SEH */
-
-/*
- * ===============
- * ===============
- * Methods
- * ===============
- * ===============
- */
-
-/*
- * PThread Attribute Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_init (pthread_attr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_destroy (pthread_attr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getdetachstate (const pthread_attr_t * attr,
- int *detachstate);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstackaddr (const pthread_attr_t * attr,
- void **stackaddr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstacksize (const pthread_attr_t * attr,
- size_t * stacksize);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setdetachstate (pthread_attr_t * attr,
- int detachstate);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstackaddr (pthread_attr_t * attr,
- void *stackaddr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstacksize (pthread_attr_t * attr,
- size_t stacksize);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedparam (const pthread_attr_t *attr,
- struct sched_param *param);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr,
- const struct sched_param *param);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *,
- int);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (pthread_attr_t *,
- int *);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr,
- int inheritsched);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(pthread_attr_t * attr,
- int * inheritsched);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *,
- int);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_attr_getscope (const pthread_attr_t *,
- int *);
-
-/*
- * PThread Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_create (pthread_t * tid,
- const pthread_attr_t * attr,
- void *(*start) (void *),
- void *arg);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_detach (pthread_t tid);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_equal (pthread_t t1,
- pthread_t t2);
-
-PTW32_DLLPORT void PTW32_CDECL pthread_exit (void *value_ptr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_join (pthread_t thread,
- void **value_ptr);
-
-PTW32_DLLPORT pthread_t PTW32_CDECL pthread_self (void);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cancel (pthread_t thread);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_setcancelstate (int state,
- int *oldstate);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_setcanceltype (int type,
- int *oldtype);
-
-PTW32_DLLPORT void PTW32_CDECL pthread_testcancel (void);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_once (pthread_once_t * once_control,
- void (*init_routine) (void));
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-PTW32_DLLPORT ptw32_cleanup_t * PTW32_CDECL ptw32_pop_cleanup (int execute);
-
-PTW32_DLLPORT void PTW32_CDECL ptw32_push_cleanup (ptw32_cleanup_t * cleanup,
- void (*routine) (void *),
- void *arg);
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-/*
- * Thread Specific Data Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_key_create (pthread_key_t * key,
- void (*destructor) (void *));
-
-PTW32_DLLPORT int PTW32_CDECL pthread_key_delete (pthread_key_t key);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_setspecific (pthread_key_t key,
- const void *value);
-
-PTW32_DLLPORT void * PTW32_CDECL pthread_getspecific (pthread_key_t key);
-
-
-/*
- * Mutex Attribute Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_init (pthread_mutexattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_destroy (pthread_mutexattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getpshared (const pthread_mutexattr_t
- * attr,
- int *pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared (pthread_mutexattr_t * attr,
- int pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind);
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype (pthread_mutexattr_t * attr, int *kind);
-
-/*
- * Barrier Attribute Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_init (pthread_barrierattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_destroy (pthread_barrierattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_getpshared (const pthread_barrierattr_t
- * attr,
- int *pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_setpshared (pthread_barrierattr_t * attr,
- int pshared);
-
-/*
- * Mutex Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_init (pthread_mutex_t * mutex,
- const pthread_mutexattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_destroy (pthread_mutex_t * mutex);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_lock (pthread_mutex_t * mutex);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_timedlock(pthread_mutex_t *mutex,
- const struct timespec *abstime);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_trylock (pthread_mutex_t * mutex);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_mutex_unlock (pthread_mutex_t * mutex);
-
-/*
- * Spinlock Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_spin_init (pthread_spinlock_t * lock, int pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_spin_destroy (pthread_spinlock_t * lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_spin_lock (pthread_spinlock_t * lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_spin_trylock (pthread_spinlock_t * lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_spin_unlock (pthread_spinlock_t * lock);
-
-/*
- * Barrier Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_barrier_init (pthread_barrier_t * barrier,
- const pthread_barrierattr_t * attr,
- unsigned int count);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_barrier_destroy (pthread_barrier_t * barrier);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_barrier_wait (pthread_barrier_t * barrier);
-
-/*
- * Condition Variable Attribute Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_condattr_init (pthread_condattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_condattr_destroy (pthread_condattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_condattr_getpshared (const pthread_condattr_t * attr,
- int *pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_condattr_setpshared (pthread_condattr_t * attr,
- int pshared);
-
-/*
- * Condition Variable Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_init (pthread_cond_t * cond,
- const pthread_condattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_destroy (pthread_cond_t * cond);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_wait (pthread_cond_t * cond,
- pthread_mutex_t * mutex);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_timedwait (pthread_cond_t * cond,
- pthread_mutex_t * mutex,
- const struct timespec *abstime);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_signal (pthread_cond_t * cond);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_cond_broadcast (pthread_cond_t * cond);
-
-/*
- * Scheduling
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_setschedparam (pthread_t thread,
- int policy,
- const struct sched_param *param);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_getschedparam (pthread_t thread,
- int *policy,
- struct sched_param *param);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_setconcurrency (int);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_getconcurrency (void);
-
-/*
- * Read-Write Lock Functions
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_init(pthread_rwlock_t *lock,
- const pthread_rwlockattr_t *attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_destroy(pthread_rwlock_t *lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_tryrdlock(pthread_rwlock_t *);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_trywrlock(pthread_rwlock_t *);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_rdlock(pthread_rwlock_t *lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedrdlock(pthread_rwlock_t *lock,
- const struct timespec *abstime);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_wrlock(pthread_rwlock_t *lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedwrlock(pthread_rwlock_t *lock,
- const struct timespec *abstime);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_unlock(pthread_rwlock_t *lock);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_init (pthread_rwlockattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_destroy (pthread_rwlockattr_t * attr);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * attr,
- int *pshared);
-
-PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_setpshared (pthread_rwlockattr_t * attr,
- int pshared);
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX - 1
-
-/*
- * Signal Functions. Should be defined in <signal.h> but MSVC and MinGW32
- * already have signal.h that don't define these.
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_kill(pthread_t thread, int sig);
-
-/*
- * Non-portable functions
- */
-
-/*
- * Compatibility with Linux.
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setkind_np(pthread_mutexattr_t * attr,
- int kind);
-PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getkind_np(pthread_mutexattr_t * attr,
- int *kind);
-
-/*
- * Possibly supported by other POSIX threads implementations
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_delay_np (struct timespec * interval);
-PTW32_DLLPORT int PTW32_CDECL pthread_num_processors_np(void);
-
-/*
- * Useful if an application wants to statically link
- * the lib rather than load the DLL at run-time.
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_attach_np(void);
-PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_detach_np(void);
-PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_attach_np(void);
-PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_detach_np(void);
-
-/*
- * Features that are auto-detected at load/run time.
- */
-PTW32_DLLPORT int PTW32_CDECL pthread_win32_test_features_np(int);
-enum ptw32_features {
- PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE = 0x0001, /* System provides it. */
- PTW32_ALERTABLE_ASYNC_CANCEL = 0x0002 /* Can cancel blocked threads. */
-};
-
-/*
- * Register a system time change with the library.
- * Causes the library to perform various functions
- * in response to the change. Should be called whenever
- * the application's top level window receives a
- * WM_TIMECHANGE message. It can be passed directly to
- * pthread_create() as a new thread if desired.
- */
-PTW32_DLLPORT void * PTW32_CDECL pthread_timechange_handler_np(void *);
-
-#endif /*PTW32_LEVEL >= PTW32_LEVEL_MAX - 1 */
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-
-/*
- * Returns the Win32 HANDLE for the POSIX thread.
- */
-PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np(pthread_t thread);
-
-
-/*
- * Protected Methods
- *
- * This function blocks until the given WIN32 handle
- * is signaled or pthread_cancel had been called.
- * This function allows the caller to hook into the
- * PThreads cancel mechanism. It is implemented using
- *
- * WaitForMultipleObjects
- *
- * on 'waitHandle' and a manually reset WIN32 Event
- * used to implement pthread_cancel. The 'timeout'
- * argument to TimedWait is simply passed to
- * WaitForMultipleObjects.
- */
-PTW32_DLLPORT int PTW32_CDECL pthreadCancelableWait (HANDLE waitHandle);
-PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait (HANDLE waitHandle,
- DWORD timeout);
-
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-/*
- * Thread-Safe C Runtime Library Mappings.
- */
-#ifndef _UWIN
-# if defined(NEED_ERRNO)
- PTW32_DLLPORT int * PTW32_CDECL _errno( void );
-# else
-# ifndef errno
-# if (defined(_MT) || defined(_DLL))
- __declspec(dllimport) extern int * __cdecl _errno(void);
-# define errno (*_errno())
-# endif
-# endif
-# endif
-#endif
-
-/*
- * WIN32 C runtime library had been made thread-safe
- * without affecting the user interface. Provide
- * mappings from the UNIX thread-safe versions to
- * the standard C runtime library calls.
- * Only provide function mappings for functions that
- * actually exist on WIN32.
- */
-
-#if !defined(__MINGW32__)
-#define strtok_r( _s, _sep, _lasts ) \
- ( *(_lasts) = strtok( (_s), (_sep) ) )
-#endif /* !__MINGW32__ */
-
-#define asctime_r( _tm, _buf ) \
- ( strcpy( (_buf), asctime( (_tm) ) ), \
- (_buf) )
-
-#define ctime_r( _clock, _buf ) \
- ( strcpy( (_buf), ctime( (_clock) ) ), \
- (_buf) )
-
-#define gmtime_r( _clock, _result ) \
- ( *(_result) = *gmtime( (_clock) ), \
- (_result) )
-
-#define localtime_r( _clock, _result ) \
- ( *(_result) = *localtime( (_clock) ), \
- (_result) )
-
-#define rand_r( _seed ) \
- ( _seed == _seed? rand() : rand() )
-
-
-/*
- * Some compiler environments don't define some things.
- */
-#if defined(__BORLANDC__)
-# define _ftime ftime
-# define _timeb timeb
-#endif
-
-#ifdef __cplusplus
-
-/*
- * Internal exceptions
- */
-class ptw32_exception {};
-class ptw32_exception_cancel : public ptw32_exception {};
-class ptw32_exception_exit : public ptw32_exception {};
-
-#endif
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-
-/* FIXME: This is only required if the library was built using SEH */
-/*
- * Get internal SEH tag
- */
-PTW32_DLLPORT DWORD PTW32_CDECL ptw32_get_exception_services_code(void);
-
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-#ifndef PTW32_BUILD
-
-#ifdef __CLEANUP_SEH
-
-/*
- * Redefine the SEH __except keyword to ensure that applications
- * propagate our internal exceptions up to the library's internal handlers.
- */
-#define __except( E ) \
- __except( ( GetExceptionCode() == ptw32_get_exception_services_code() ) \
- ? EXCEPTION_CONTINUE_SEARCH : ( E ) )
-
-#endif /* __CLEANUP_SEH */
-
-#ifdef __CLEANUP_CXX
-
-/*
- * Redefine the C++ catch keyword to ensure that applications
- * propagate our internal exceptions up to the library's internal handlers.
- */
-#ifdef _MSC_VER
- /*
- * WARNING: Replace any 'catch( ... )' with 'PtW32CatchAll'
- * if you want Pthread-Win32 cancelation and pthread_exit to work.
- */
-
-#ifndef PtW32NoCatchWarn
-
-#pragma message("Specify \"/DPtW32NoCatchWarn\" compiler flag to skip this message.")
-#pragma message("------------------------------------------------------------------")
-#pragma message("When compiling applications with MSVC++ and C++ exception handling:")
-#pragma message(" Replace any 'catch( ... )' in routines called from POSIX threads")
-#pragma message(" with 'PtW32CatchAll' or 'CATCHALL' if you want POSIX thread")
-#pragma message(" cancelation and pthread_exit to work. For example:")
-#pragma message("")
-#pragma message(" #ifdef PtW32CatchAll")
-#pragma message(" PtW32CatchAll")
-#pragma message(" #else")
-#pragma message(" catch(...)")
-#pragma message(" #endif")
-#pragma message(" {")
-#pragma message(" /* Catchall block processing */")
-#pragma message(" }")
-#pragma message("------------------------------------------------------------------")
-
-#endif
-
-#define PtW32CatchAll \
- catch( ptw32_exception & ) { throw; } \
- catch( ... )
-
-#else /* _MSC_VER */
-
-#define catch( E ) \
- catch( ptw32_exception & ) { throw; } \
- catch( E )
-
-#endif /* _MSC_VER */
-
-#endif /* __CLEANUP_CXX */
-
-#endif /* ! PTW32_BUILD */
-
-#ifdef __cplusplus
-} /* End of extern "C" */
-#endif /* __cplusplus */
-
-#ifdef PTW32__HANDLE_DEF
-# undef HANDLE
-#endif
-#ifdef PTW32__DWORD_DEF
-# undef DWORD
-#endif
-
-#undef PTW32_LEVEL
-#undef PTW32_LEVEL_MAX
-
-#endif /* ! RC_INVOKED */
-
-#endif /* PTHREAD_H */
diff --git a/msvc_extra_headers/ardourext/sched.h.input b/msvc_extra_headers/ardourext/sched.h.input
deleted file mode 100644
index e7f4ab0..0000000
--- a/msvc_extra_headers/ardourext/sched.h.input
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Module: sched.h
- *
- * Purpose:
- * Provides an implementation of POSIX realtime extensions
- * as defined in
- *
- * POSIX 1003.1b-1993 (POSIX.1b)
- *
- * --------------------------------------------------------------------------
- *
- * Pthreads-win32 - POSIX Threads Library for Win32
- * Copyright(C) 1998 John E. Bossom
- * Copyright(C) 1999,2005 Pthreads-win32 contributors
- *
- * Contact Email: rpj at callisto.canberra.edu.au
- *
- * The current list of contributors is contained
- * in the file CONTRIBUTORS included with the source
- * code distribution. The list can also be seen at the
- * following World Wide Web location:
- * http://sources.redhat.com/pthreads-win32/contributors.html
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library in the file COPYING.LIB;
- * if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef SCHED_H
-#ifdef _SCHED_H // Test added by JE - 12-12-2009
-#error "ardourext/sched.h conflicts with an existing pthread library"
-#endif
-// Now make sure we can't accidentally include a conflicting library !!
-#define _SCHED_H
-#define SCHED_H
-
-#undef PTW32_LEVEL
-
-#if defined(_POSIX_SOURCE)
-#define PTW32_LEVEL 0
-/* Early POSIX */
-#endif
-
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 1
-/* Include 1b, 1c and 1d */
-#endif
-
-#if defined(INCLUDE_NP)
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 2
-/* Include Non-Portable extensions */
-#endif
-
-#define PTW32_LEVEL_MAX 3
-
-#if !defined(PTW32_LEVEL)
-#define PTW32_LEVEL PTW32_LEVEL_MAX
-/* Include everything */
-#endif
-
-
-#if __GNUC__ && ! defined (__declspec)
-# error Please upgrade your GNU compiler to one that supports __declspec.
-#endif
-
-/*
- * When building the DLL code, you should define PTW32_BUILD so that
- * the variables/functions are exported correctly. When using the DLL,
- * do NOT define PTW32_BUILD, and then the variables/functions will
- * be imported correctly.
- */
-#ifndef PTW32_STATIC_LIB
-# ifdef PTW32_BUILD
-# define PTW32_DLLPORT __declspec (dllexport)
-# else
-# define PTW32_DLLPORT __declspec (dllimport)
-# endif
-#else
-# define PTW32_DLLPORT
-#endif
-
-/*
- * This is a duplicate of what is in the autoconf config.h,
- * which is only used when building the pthread-win32 libraries.
- */
-
-#ifndef PTW32_CONFIG_H
-# if defined(WINCE)
-# define NEED_ERRNO
-# define NEED_SEM
-# endif
-# if defined(_UWIN) || defined(__MINGW32__)
-# define HAVE_MODE_T
-# endif
-#endif
-
-/*
- *
- */
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-#ifdef NEED_ERRNO
-#include "need_errno.h"
-#else
-#include <errno.h>
-#endif
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-#if defined(__MINGW32__) || defined(_UWIN)
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-/* For pid_t */
-# include <sys/types.h>
-/* Required by Unix 98 */
-# include <time.h>
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-#else
-typedef int pid_t;
-#endif
-
-/* Thread scheduling policies */
-
-enum {
- SCHED_OTHER = 0,
- SCHED_FIFO,
- SCHED_RR,
- SCHED_MIN = SCHED_OTHER,
- SCHED_MAX = SCHED_RR
-};
-
-struct sched_param {
- int sched_priority;
-};
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-PTW32_DLLPORT int __cdecl sched_yield (void);
-
-PTW32_DLLPORT int __cdecl sched_get_priority_min (int policy);
-
-PTW32_DLLPORT int __cdecl sched_get_priority_max (int policy);
-
-PTW32_DLLPORT int __cdecl sched_setscheduler (pid_t pid, int policy);
-
-PTW32_DLLPORT int __cdecl sched_getscheduler (pid_t pid);
-
-/*
- * Note that this macro returns ENOTSUP rather than
- * ENOSYS as might be expected. However, returning ENOSYS
- * should mean that sched_get_priority_{min,max} are
- * not implemented as well as sched_rr_get_interval.
- * This is not the case, since we just don't support
- * round-robin scheduling. Therefore I have chosen to
- * return the same value as sched_setscheduler when
- * SCHED_RR is passed to it.
- */
-#define sched_rr_get_interval(_pid, _interval) \
- ( errno = ENOTSUP, (int) -1 )
-
-
-#ifdef __cplusplus
-} /* End of extern "C" */
-#endif /* __cplusplus */
-
-#undef PTW32_LEVEL
-#undef PTW32_LEVEL_MAX
-
-#endif /* !SCHED_H */
-
diff --git a/msvc_extra_headers/ardourext/semaphore.h.input b/msvc_extra_headers/ardourext/semaphore.h.input
deleted file mode 100644
index c06373f..0000000
--- a/msvc_extra_headers/ardourext/semaphore.h.input
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Module: semaphore.h
- *
- * Purpose:
- * Semaphores aren't actually part of the PThreads standard.
- * They are defined by the POSIX Standard:
- *
- * POSIX 1003.1b-1993 (POSIX.1b)
- *
- * --------------------------------------------------------------------------
- *
- * Pthreads-win32 - POSIX Threads Library for Win32
- * Copyright(C) 1998 John E. Bossom
- * Copyright(C) 1999,2005 Pthreads-win32 contributors
- *
- * Contact Email: rpj at callisto.canberra.edu.au
- *
- * The current list of contributors is contained
- * in the file CONTRIBUTORS included with the source
- * code distribution. The list can also be seen at the
- * following World Wide Web location:
- * http://sources.redhat.com/pthreads-win32/contributors.html
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library in the file COPYING.LIB;
- * if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#if !defined( SEMAPHORE_H )
-#ifdef _SEMAPHORE_H // Test added by JE - 12-12-2009
-#error "ardourext/semaphore.h conflicts with an existing pthread library"
-#endif
-// Now make sure we can't accidentally include a conflicting library !!
-#define _SEMAPHORE_H
-#define SEMAPHORE_H
-
-#undef PTW32_LEVEL
-
-#if defined(_POSIX_SOURCE)
-#define PTW32_LEVEL 0
-/* Early POSIX */
-#endif
-
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 1
-/* Include 1b, 1c and 1d */
-#endif
-
-#if defined(INCLUDE_NP)
-#undef PTW32_LEVEL
-#define PTW32_LEVEL 2
-/* Include Non-Portable extensions */
-#endif
-
-#define PTW32_LEVEL_MAX 3
-
-#if !defined(PTW32_LEVEL)
-#define PTW32_LEVEL PTW32_LEVEL_MAX
-/* Include everything */
-#endif
-
-#if __GNUC__ && ! defined (__declspec)
-# error Please upgrade your GNU compiler to one that supports __declspec.
-#endif
-
-/*
- * When building the DLL code, you should define PTW32_BUILD so that
- * the variables/functions are exported correctly. When using the DLL,
- * do NOT define PTW32_BUILD, and then the variables/functions will
- * be imported correctly.
- */
-#ifndef PTW32_STATIC_LIB
-# ifdef PTW32_BUILD
-# define PTW32_DLLPORT __declspec (dllexport)
-# else
-# define PTW32_DLLPORT __declspec (dllimport)
-# endif
-#else
-# define PTW32_DLLPORT
-#endif
-
-/*
- * This is a duplicate of what is in the autoconf config.h,
- * which is only used when building the pthread-win32 libraries.
- */
-
-#ifndef PTW32_CONFIG_H
-# if defined(WINCE)
-# define NEED_ERRNO
-# define NEED_SEM
-# endif
-# if defined(_UWIN) || defined(__MINGW32__)
-# define HAVE_MODE_T
-# endif
-#endif
-
-/*
- *
- */
-
-#if PTW32_LEVEL >= PTW32_LEVEL_MAX
-#ifdef NEED_ERRNO
-#include "need_errno.h"
-#else
-#include <errno.h>
-#endif
-#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
-
-#define _POSIX_SEMAPHORES
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#ifndef HAVE_MODE_T
-typedef unsigned int mode_t;
-#endif
-
-
-typedef struct sem_t_ * sem_t;
-
-PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
- int pshared,
- unsigned int value);
-
-PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
-
-PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
-
-PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
-
-PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
- const struct timespec * abstime);
-
-PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
-
-PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
- int count);
-
-PTW32_DLLPORT int __cdecl sem_open (const char * name,
- int oflag,
- mode_t mode,
- unsigned int value);
-
-PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
-
-PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
-
-PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
- int * sval);
-
-#ifdef __cplusplus
-} /* End of extern "C" */
-#endif /* __cplusplus */
-
-#undef PTW32_LEVEL
-#undef PTW32_LEVEL_MAX
-
-#endif /* !SEMAPHORE_H */
diff --git a/msvc_extra_headers/ardourext/sys/targetsxs.h.input b/msvc_extra_headers/ardourext/sys/targetsxs.h.input
deleted file mode 100644
index 6569407..0000000
--- a/msvc_extra_headers/ardourext/sys/targetsxs.h.input
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _TARGETSXS_H_
-#define _TARGETSXS_H_
-
-#pragma warning( disable : 4244 4250 4275 4996 )
-
-#ifndef LV2_SUPPORT
-#define LV2_SUPPORT 1
-#define HAVE_SUIL 1
-#define HAVE_LV2 1
-#define HAVE_LV2_1_2_0 1
-/* Comment out the above lines to build Mixbus without LV2 support */
-#endif
-
-#ifndef WINDOWS_VST_SUPPORT
-#define WINDOWS_VST_SUPPORT
-/* Comment out the above line to build Mixbus without VST support */
-#endif
-
-#ifndef JACK_32_64
-#define JACK_32_64
-/* Shouldn't really be needed but make sure that any structs we
- obtain from libjack will have 1-byte packing alignment where
- necessary (belt & braces approach to be on the safe side) */
-#endif
-
-#ifdef _DEBUG
-#define _SECURE_SCL 1
-#define _HAS_ITERATOR_DEBUGGING 1
-/* #define to zero for a more conventional Debug build */
-#endif
-
-#if !defined(DEBUG) && !defined(NDEBUG)
-/* Assume a debuggable Release build (RDC build) */
-#define RDC_BUILD 1
-#endif
-
-#ifndef __midl
-#if defined(_DEBUG) || defined (DEBUG)
-/* Experimental - link to the lowest DebugCRT so we can run on another system */
-#define _SXS_ASSEMBLY_VERSION "8.0.50727.42"
-#else
-#define _SXS_ASSEMBLY_VERSION "8.0.50727.6195"
-#endif
-#define _CRT_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
-#define _MFC_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
-#define _ATL_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-__declspec(selectany) int _forceCRTManifest;
-__declspec(selectany) int _forceMFCManifest;
-__declspec(selectany) int _forceAtlDllManifest;
-__declspec(selectany) int _forceCRTManifestRTM;
-__declspec(selectany) int _forceMFCManifestRTM;
-__declspec(selectany) int _forceAtlDllManifestRTM;
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-/* 'stdint.h' conflicts with various other libraries so
- let's #include stdint.h first to ensure one consistent
- implementation for commonly used integer types. */
-#include <stdint.h>
-
-#if defined(_MSC_VER) && !defined(__MINGW__) && !defined(__MINGW32__)
-/* Define these libraries as getting built as DLLs */
-#define LIBAUDIOGRAPHER_DLL
-#define LIBARDOUR_DLL
-#define LIBMIDIPP_DLL
-#define LIBPBD_DLL
-#define LIBCONTROLCP_DLL
-#define LIBGTKMM2EXT_DLL
-#define LIBEVORAL_DLL
-#define LIBTIMECODE_DLL
-
-#if (INCLUDE_ARDOUR_MISCELLANEOUS)
-#include <ardourext/misc.h>
-#endif
-#endif
-
-#endif /*_TARGETSXS_H_*/
diff --git a/msvc_extra_headers/ardourext/sys/time.h.input b/msvc_extra_headers/ardourext/sys/time.h.input
deleted file mode 100644
index a0e7ce9..0000000
--- a/msvc_extra_headers/ardourext/sys/time.h.input
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef _WINX_SYS_TIME_H_
-#define _WINX_SYS_TIME_H_
-
-#define WIN32_LEAN_AND_MEAN /* This line found to be needed by JE - 18-08-2013. Line was formerly. . . #include <features.h> */
-#ifndef __suseconds_t_defined /* This section added by JE - 22-08-2013 */
-#define __suseconds_t_defined
-typedef long __suseconds_t;
-typedef __suseconds_t suseconds_t;
-#endif
-#ifndef BUILDING_EVORAL
-#include <WinSock2.h> /* gets 'struct timeval' - Changed by JE - 23-07-2013. Was formerly. . . #include <WinSock.h> */
-/* For whatever reason, Ardour's 'libevoral' refuses to build as a DLL if we include both 'rpc.h' */
-/* and 'WinSock2.h'. It doesn't seem to matter which order we #include them. Given that we can't */
-/* edit 'rpc.h' or 'WinSock2.h', just make sure we don't #include them when building libevoral. */
-
-/* Type of the second argument to `getitimer' and
- the second and third arguments `setitimer'. */
-struct itimerval
- {
- /* Value to put into `it_value' when the timer expires. */
- struct timeval it_interval;
- /* Time to the next timer expiration. */
- struct timeval it_value;
- };
-#endif
-
-#ifdef _TIMEVAL_DEFINED
-# define _STRUCT_TIMEVAL 1
-#endif /* _TIMEVAL_DEFINED */
-//#include <bits/types.h>
-#define __need_time_t
-#include <time.h>
-#define __need_timeval
-//#include <bits/time.h>
-
-#ifdef _TIMEVAL_DEFINED /* also in winsock[2].h */
-# undef __TIMEVAL__
-# define __TIMEVAL__ 1
-# undef _STRUCT_TIMEVAL
-# define _STRUCT_TIMEVAL 1
-#endif /* _TIMEVAL_DEFINED */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __USE_GNU
-/* Macros for converting between `struct timeval' and `struct timespec'. */
-# define TIMEVAL_TO_TIMESPEC(tv, ts) { \
- (ts)->tv_sec = (tv)->tv_sec; \
- (ts)->tv_nsec = (tv)->tv_usec * 1000; \
-}
-# define TIMESPEC_TO_TIMEVAL(tv, ts) { \
- (tv)->tv_sec = (ts)->tv_sec; \
- (tv)->tv_usec = (ts)->tv_nsec / 1000; \
-}
-#endif
-
-#ifdef __USE_BSD
-/* Structure crudely representing a timezone.
- This is obsolete and should never be used. */
-struct timezone
- {
- int tz_minuteswest; /* Minutes west of GMT. */
- int tz_dsttime; /* Nonzero if DST is ever in effect. */
- };
-
-typedef struct timezone *__restrict __timezone_ptr_t;
-#else
-typedef void *__restrict __timezone_ptr_t;
-#endif
-
-/* Get the current time of day and timezone information,
- putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled.
- Returns 0 on success, -1 on errors.
- NOTE: This form of timezone information is obsolete.
- Use the functions and variables declared in <time.h> instead. */
-#ifdef LIBPBD_DLL /* JE - use the version that's available from libpbd */
-#ifdef LIBPBD_API
-LIBPBD_API int __cdecl gettimeofday (struct timeval *__restrict __tv,
- __timezone_ptr_t __tz) __THROW;
-#else
-__declspec(dllimport) int __cdecl gettimeofday (struct timeval *__restrict __tv,
- __timezone_ptr_t __tz) __THROW;
-#endif
-#else
-extern int gettimeofday (struct timeval *__restrict __tv,
- __timezone_ptr_t __tz) __THROW;
-#endif
-extern int getntptimeofday (struct timespec *__restrict __tp,
- __timezone_ptr_t __tz) __THROW;
-
-#ifdef __USE_BSD
-/* Set the current time of day and timezone information.
- This call is restricted to the super-user. */
-extern int settimeofday (__const struct timeval *__tv,
- __const struct timezone *__tz) __THROW;
-extern int setntptimeofday (__const struct timespec *__tp,
- __const struct timezone *__tz) __THROW;
-#endif
-
-///* Values for the first argument to `getitimer' and `setitimer'. */
-//enum __itimer_which
-// {
-// /* Timers run in real time. */
-// ITIMER_REAL = 0,
-//#define ITIMER_REAL ITIMER_REAL
-// /* Timers run only when the process is executing. */
-// ITIMER_VIRTUAL = 1,
-//#define ITIMER_VIRTUAL ITIMER_VIRTUAL
-// /* Timers run when the process is executing and when
-// the system is executing on behalf of the process. */
-// ITIMER_PROF = 2
-//#define ITIMER_PROF ITIMER_PROF
-// };
-
-#if defined __USE_GNU && !defined __cplusplus
-/* Use the nicer parameter type only in GNU mode and not for C++ since the
- strict C++ rules prevent the automatic promotion. */
-typedef enum __itimer_which __itimer_which_t;
-#else
-typedef int __itimer_which_t;
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*_WINX_SYS_TIMEX_H_*/
diff --git a/msvc_extra_headers/unistd.h.input b/msvc_extra_headers/unistd.h.input
deleted file mode 100644
index 0f8743b..0000000
--- a/msvc_extra_headers/unistd.h.input
+++ /dev/null
@@ -1,4 +0,0 @@
-/*
-** Emtpy file to prevent Win32 compiler from complaining that the
-** file doesn't exist.
-*/
diff --git a/system_config b/system_config
index 9be2229..d136ab9 100644
--- a/system_config
+++ b/system_config
@@ -39,6 +39,7 @@
<Option name="auto-analyse-audio" value="0"/>
<Option name="osc-port" value="3819"/>
<Option name="use-osc" value="0"/>
+ <Option name="layer-model" value="1"/>
<Option name="automation-follows-regions" value="1"/>
<Option name="region-boundaries-from-selected-tracks" value="1"/>
<Option name="region-boundaries-from-onscreen_tracks" value="1"/>
diff --git a/tools/cstyle.py b/tools/cstyle.py
new file mode 100755
index 0000000..7b7806b
--- /dev/null
+++ b/tools/cstyle.py
@@ -0,0 +1,264 @@
+#!/usr/bin/python -tt
+#
+# Copyright (C) 2005-2012 Erik de Castro Lopo <erikd at mega-nerd.com>
+#
+# Released under the 2 clause BSD license.
+
+"""
+This program checks C code for compliance to coding standards used in
+libsndfile and other projects I run.
+"""
+
+import re
+import sys
+
+
+class Preprocessor:
+ """
+ Preprocess lines of C code to make it easier for the CStyleChecker class to
+ test for correctness. Preprocessing works on a single line at a time but
+ maintains state between consecutive lines so it can preprocessess multi-line
+ comments.
+ Preprocessing involves:
+ - Strip C++ style comments from a line.
+ - Strip C comments from a series of lines. When a C comment starts and
+ ends on the same line it will be replaced with 'comment'.
+ - Replace arbitrary C strings with the zero length string.
+ - Replace '#define f(x)' with '#define f (c)' (The C #define requires that
+ there be no space between defined macro name and the open paren of the
+ argument list).
+ Used by the CStyleChecker class.
+ """
+ def __init__ (self):
+ self.comment_nest = 0
+ self.leading_space_re = re.compile ('^(\t+| )')
+ self.trailing_space_re = re.compile ('(\t+| )$')
+ self.define_hack_re = re.compile ("(#\s*define\s+[a-zA-Z0-9_]+)\(")
+
+ def comment_nesting (self):
+ """
+ Return the currect comment nesting. At the start and end of the file,
+ this value should be zero. Inside C comments it should be 1 or
+ (possibly) more.
+ """
+ return self.comment_nest
+
+ def __call__ (self, line):
+ """
+ Strip the provided line of C and C++ comments. Stripping of multi-line
+ C comments works as expected.
+ """
+
+ line = self.define_hack_re.sub (r'\1 (', line)
+
+ line = self.process_strings (line)
+
+ # Strip C++ style comments.
+ if self.comment_nest == 0:
+ line = re.sub ("( |\t*)//.*", '', line)
+
+ # Strip C style comments.
+ open_comment = line.find ('/*')
+ close_comment = line.find ('*/')
+
+ if self.comment_nest > 0 and close_comment < 0:
+ # Inside a comment block that does not close on this line.
+ return ""
+
+ if open_comment >= 0 and close_comment < 0:
+ # A comment begins on this line but doesn't close on this line.
+ self.comment_nest += 1
+ return self.trailing_space_re.sub ('', line [:open_comment])
+
+ if open_comment < 0 and close_comment >= 0:
+ # Currently open comment ends on this line.
+ self.comment_nest -= 1
+ return self.trailing_space_re.sub ('', line [close_comment + 2:])
+
+ if open_comment >= 0 and close_comment > 0 and self.comment_nest == 0:
+ # Comment begins and ends on this line. Replace it with 'comment'
+ # so we don't need to check whitespace before and after the comment
+ # we're removing.
+ newline = line [:open_comment] + "comment" + line [close_comment + 2:]
+ return self.__call__ (newline)
+
+ return line
+
+ def process_strings (self, line):
+ """
+ Given a line of C code, return a string where all literal C strings have
+ been replaced with the empty string literal "".
+ """
+ for k in range (0, len (line)):
+ if line [k] == '"':
+ start = k
+ for k in range (start + 1, len (line)):
+ if line [k] == '"' and line [k - 1] != '\\':
+ return line [:start + 1] + '"' + self.process_strings (line [k + 1:])
+ return line
+
+
+class CStyleChecker:
+ """
+ A class for checking the whitespace and layout of a C code.
+ """
+ def __init__ (self, debug):
+ self.debug = debug
+ self.filename = None
+ self.error_count = 0
+ self.line_num = 1
+ self.orig_line = ''
+ self.trailing_newline_re = re.compile ('[\r\n]+$')
+ self.indent_re = re.compile ("^\s*")
+ self.last_line_indent = ""
+ self.last_line_indent_curly = False
+ self.error_checks = \
+ [ ( re.compile ("^ "), "leading space as indentation instead of tab - use tabs to indent, spaces to align" )
+ ]
+ self.warning_checks = \
+ [ ( re.compile ("{[^\s]"), "missing space after open brace" )
+ , ( re.compile ("[^\s]}"), "missing space before close brace" )
+ , ( re.compile ("^[ \t]+$"), "empty line contains whitespace" )
+ , ( re.compile ("[^\s][ \t]+$"), "contains trailing whitespace" )
+
+ , ( re.compile (",[^\s\n]"), "missing space after comma" )
+ , ( re.compile (";[a-zA-Z0-9]"), "missing space after semi-colon" )
+ , ( re.compile ("=[^\s\"'=]"), "missing space after assignment" )
+
+ # Open and close parenthesis.
+ , ( re.compile ("[^_\s\(\[\*&']\("), "missing space before open parenthesis" )
+ , ( re.compile ("\)(-[^>]|[^;,'\s\n\)\]-])"), "missing space after close parenthesis" )
+ , ( re.compile ("\( [^;]"), "space after open parenthesis" )
+ , ( re.compile ("[^;] \)"), "space before close parenthesis" )
+
+ # Open and close square brace.
+ , ( re.compile ("\[ "), "space after open square brace" )
+ , ( re.compile (" \]"), "space before close square brace" )
+
+ # Space around operators.
+ , ( re.compile ("[^\s][\*/%+-][=][^\s]"), "missing space around opassign" )
+ , ( re.compile ("[^\s][<>!=^/][=]{1,2}[^\s]"), "missing space around comparison" )
+
+ # Parens around single argument to return.
+ , ( re.compile ("\s+return\s+\([a-zA-Z0-9_]+\)\s+;"), "parens around return value" )
+ ]
+
+
+
+ def get_error_count (self):
+ """
+ Return the current error count for this CStyleChecker object.
+ """
+ return self.error_count
+
+ def check_files (self, files):
+ """
+ Run the style checker on all the specified files.
+ """
+ for filename in files:
+ self.check_file (filename)
+
+ def check_file (self, filename):
+ """
+ Run the style checker on the specified file.
+ """
+ self.filename = filename
+ try:
+ cfile = open (filename, "r")
+ except IOError as e:
+ return
+
+ self.line_num = 1
+
+ preprocess = Preprocessor ()
+ while 1:
+ line = cfile.readline ()
+ if not line:
+ break
+
+ line = self.trailing_newline_re.sub ('', line)
+ self.orig_line = line
+
+ self.line_checks (preprocess (line))
+
+ self.line_num += 1
+
+ cfile.close ()
+ self.filename = None
+
+ # Check for errors finding comments.
+ if preprocess.comment_nesting () != 0:
+ print ("Weird, comments nested incorrectly.")
+ sys.exit (1)
+
+ return
+
+ def line_checks (self, line):
+ """
+ Run the style checker on provided line of text, but within the context
+ of how the line fits within the file.
+ """
+
+ indent = len (self.indent_re.search (line).group ())
+ if re.search ("^\s+}", line):
+ if not self.last_line_indent_curly and indent != self.last_line_indent:
+ None # self.error ("bad indent on close curly brace")
+ self.last_line_indent_curly = True
+ else:
+ self.last_line_indent_curly = False
+
+ # Now all the stylistic warnings regex checks.
+ for (check_re, msg) in self.warning_checks:
+ if check_re.search (line):
+ self.warning (msg)
+
+ # Now all the stylistic error regex checks.
+ for (check_re, msg) in self.error_checks:
+ if check_re.search (line):
+ self.error (msg)
+
+
+ if re.search ("[a-zA-Z0-9_][<>!=^/&\|]{1,2}[a-zA-Z0-9_]", line):
+ # ignore #include <foo.h> and C++ templates with indirection/pointer/reference operators
+ if not re.search (".*#include.*[a-zA-Z0-9]/[a-zA-Z]", line) and not re.search ("[a-zA-Z0-9_]>[&\*]*\s", line):
+ self.error ("missing space around operator")
+
+ self.last_line_indent = indent
+ return
+
+ def error (self, msg):
+ """
+ Print an error message and increment the error count.
+ """
+ print ("%s (%d) : STYLE ERROR %s" % (self.filename, self.line_num, msg))
+ if self.debug:
+ print ("'" + self.orig_line + "'")
+ self.error_count += 1
+
+ def warning (self, msg):
+ """
+ Print a warning message and increment the error count.
+ """
+ print ("%s (%d) : STYLE WARNING %s" % (self.filename, self.line_num, msg))
+ if self.debug:
+ print ("'" + self.orig_line + "'")
+
+#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+if len (sys.argv) < 1:
+ print ("Usage : yada yada")
+ sys.exit (1)
+
+# Create a new CStyleChecker object
+if sys.argv [1] == '-d' or sys.argv [1] == '--debug':
+ cstyle = CStyleChecker (True)
+ cstyle.check_files (sys.argv [2:])
+else:
+ cstyle = CStyleChecker (False)
+ cstyle.check_files (sys.argv [1:])
+
+
+if cstyle.get_error_count ():
+ sys.exit (1)
+
+sys.exit (0)
diff --git a/tools/linux_packaging/ardour.sh.in b/tools/linux_packaging/ardour.sh.in
index 1c087bb..aa84f08 100644
--- a/tools/linux_packaging/ardour.sh.in
+++ b/tools/linux_packaging/ardour.sh.in
@@ -36,6 +36,10 @@ fi
export ARDOUR_BUNDLED=true
+# NSM needs a path to this script
+export ARDOUR_SELF="$0"
+
+
# this is edited by the build script to include relevant environment variables
%ENV%
diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build
index 5b970ac..d0f9a90 100755
--- a/tools/linux_packaging/build
+++ b/tools/linux_packaging/build
@@ -513,17 +513,17 @@ echo
if test x$STRIP = xall ; then
echo Stripping all libraries
# Must be writable so that we can strip
- find $APPLIB/ -name "*.so*" | xargs chmod u+w
+ find $APPLIB/ -name "*.so*" -print0 | xargs -0 chmod u+w
# and strip ...
- find $APPLIB/ -name "*.so*" | xargs strip
+ find $APPLIB/ -name "*.so*" -print0 | xargs -0 strip -s
elif test x$STRIP = xsome ; then
echo Stripping dependent libraries
for l in $deplibs ; do
chmod u+w $APPLIB/$l
- strip $APPLIB/$l
+ strip -s $APPLIB/$l
done
fi
-find $APPLIB/ -name "*.so*" | xargs chmod a+rx
+find $APPLIB/ -name "*.so*" -print0 | xargs -0 chmod a+rx
echo "Copying other stuff to $APPDIR ..."
diff --git a/tools/osx_packaging/startup_script b/tools/osx_packaging/startup_script
index 75ed720..ba9cf18 100644
--- a/tools/osx_packaging/startup_script
+++ b/tools/osx_packaging/startup_script
@@ -19,6 +19,8 @@ end tell'
exit 1
fi
+export ARDOUR_SELF="$0"
+
# this needs to be set so that we can restore the environment when we want to find JACK (or similar)
export PREBUNDLE_ENV="$(env)"
diff --git a/tools/pre-commit b/tools/pre-commit
new file mode 100644
index 0000000..613f6ac
--- /dev/null
+++ b/tools/pre-commit
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, copy this file into ~/.git/hooks and make it executable
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+files=`git diff-index --name-only --cached $against`
+
+cfiles=""
+
+for f in $files ; do
+ if test `echo $f | egrep -c "\.([ch]|cc)$"` -gt 0 ; then
+ cfiles="$cfiles $f"
+ fi
+done
+
+# Redirect output to stderr.
+exec 1>&2
+
+#-------------------------------------------------------------------------------
+# Check the copyright notice of all files to be commited.
+
+user=`git config --global user.email`
+year=`date +"%Y"`
+
+missing_copyright_year=""
+for f in $cfiles ; do
+ if test ! -f $f ; then
+ # If file does not exist, it was probably part of a rename or something.
+ echo > /dev/null
+ elif test `head -5 $f | grep -c -i copyright` -eq 0 ; then
+ missing_copyright="$missing_copyright $f"
+ fi
+done
+
+if test -n "$missing_copyright" ; then
+ echo "Missing the copyright notice of the following files:"
+ for f in $missing_copyright ; do
+ echo " $f"
+ done
+ echo "Commit aborted."
+ exit 1
+fi
+
+#-------------------------------------------------------------------------------
+# Check the formatting of all C/C++ files.
+
+if test -n "$cfiles" ; then
+ tools/cstyle.py $cfiles
+ if test $? -ne 0 ; then
+ echo
+ echo "Commit aborted. Fix the above error before trying again."
+ exit 1
+ fi
+fi
+
+exit 0
diff --git a/tools/x-win/compile.sh b/tools/x-win/compile.sh
index b1e78e1..f21aec1 100755
--- a/tools/x-win/compile.sh
+++ b/tools/x-win/compile.sh
@@ -25,9 +25,9 @@ fi
if test -z "${ARDOURCFG}"; then
if test -f ${PREFIX}/include/pa_asio.h; then
- ARDOURCFG="--windows-vst --with-backends=jack,dummy,wavesaudio --no-jack-metadata"
+ ARDOURCFG="--windows-vst --with-backends=jack,dummy,wavesaudio"
else
- ARDOURCFG="--windows-vst --with-backends=jack,dummy --no-jack-metadata"
+ ARDOURCFG="--windows-vst --with-backends=jack,dummy"
fi
fi
diff --git a/tools/x-win/package.sh b/tools/x-win/package.sh
index f18af6d..8a1da07 100755
--- a/tools/x-win/package.sh
+++ b/tools/x-win/package.sh
@@ -214,7 +214,7 @@ if ! grep " using ./waf configure" build/config.log | grep -q -- "--optimize"; t
cp -r ${SRCDIR}/gdb_$WARCH $DESTDIR/gdb
cat > $DESTDIR/debug.bat << EOF
cd bin
-START ..\\gdb\\bin\\gdb.exe -iex "set logging overwrite on" -iex "set height 0" -iex "set logging on %UserProfile%\\${PRODUCT_NAME}-debug.log" ${PRODUCT_EXE}
+START ..\\gdb\\bin\\gdb.exe -iex "set logging overwrite on" -iex "set height 0" -iex "set logging on %UserProfile%\\${PRODUCT_NAME}-debug.log" -iex "target exec ${PRODUCT_EXE}" -iex "run"
EOF
OUTFILE="${TMPDIR}/${PRODUCT_NAME}-${ARDOURVERSION}-dbg-${WARCH}-Setup.exe"
VERSIONINFO="Debug Version."
@@ -254,8 +254,11 @@ NSISFILE=$DESTDIR/a3.nsis
if test "$WARCH" = "w64"; then
PGF=PROGRAMFILES64
+ SFX=
else
PGF=PROGRAMFILES
+ # TODO we should only add this for 32bit on 64bit windows!
+ SFX=" (x86)"
fi
if test -n "$QUICKZIP" ; then
@@ -298,9 +301,9 @@ else
cat >> $NSISFILE << EOF
!define MUI_FINISHPAGE_TITLE "Welcome to Ardour"
-!define MUI_FINISHPAGE_TEXT "This windows versions or Ardour is provided as-is.\$\\r\$\\nThe ardour community currently has no expertise in supporting windows users, and there are no developers focusing on windows specific issues either.\$\\r\$\\nIf you like Ardour, please consider helping out."
-!define MUI_FINISHPAGE_LINK "Ardour Manual"
-!define MUI_FINISHPAGE_LINK_LOCATION "http://manual.ardour.org"
+!define MUI_FINISHPAGE_TEXT "This windows versions or Ardour is provided as-is.\$\\r\$\\nThe Ardour community currently has no expertise in supporting windows users, and there are no developers focusing on windows specific issues either.\$\\r\$\\nIf you like Ardour, please consider helping out."
+!define MUI_FINISHPAGE_LINK "Ardour on Windows"
+!define MUI_FINISHPAGE_LINK_LOCATION "http://ardour.org/windows.html"
#this would run as admin - see http://forums.winamp.com/showthread.php?t=353366
#!define MUI_FINISHPAGE_RUN "\$INSTDIR\\bin\\${PRODUCT_EXE}"
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
@@ -323,7 +326,7 @@ cat >> $NSISFILE << EOF
Function .onInit
ReadRegStr \$R0 HKLM \
- "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" \
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" \
"UninstallString"
StrCmp \$R0 "" done
@@ -338,7 +341,7 @@ Function .onInit
IfErrors uninstall_error
ReadRegStr \$R1 HKLM \
- "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" \
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" \
"UninstallString"
StrCmp \$R1 "" 0 done
@@ -366,10 +369,10 @@ Section "${PROGRAM_NAME}${PROGRAM_VERSION} (required)" SecMainProg
File /nonfatal debug.bat
File /nonfatal /r gdb
WriteRegStr HKLM "Software\\${PROGRAM_NAME}\\v${PROGRAM_VERSION}\\$WARCH" "Install_Dir" "\$INSTDIR"
- WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" "DisplayName" "${PROGRAM_NAME}${PROGRAM_VERSION}"
- WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" "UninstallString" '"\$INSTDIR\\uninstall.exe"'
- WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" "NoModify" 1
- WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}" "NoRepair" 1
+ WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" "DisplayName" "${PROGRAM_NAME}${PROGRAM_VERSION}"
+ WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" "UninstallString" '"\$INSTDIR\\uninstall.exe"'
+ WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" "NoModify" 1
+ WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" "NoRepair" 1
WriteUninstaller "\$INSTDIR\uninstall.exe"
CreateShortCut "\$INSTDIR\\${PROGRAM_NAME}${PROGRAM_VERSION}.lnk" "\$INSTDIR\\bin\\${PRODUCT_EXE}" "" "\$INSTDIR\\bin\\${PRODUCT_EXE}" 0
\${registerExtension} "\$INSTDIR\\bin\\${STATEFILE_SUFFIX}" ".${PRODUCT_NAME}" "${PROGRAM_NAME} Session"
@@ -391,25 +394,25 @@ fi
cat >> $NSISFILE << EOF
Section "Start Menu Shortcuts" SecMenu
SetShellVarContext all
- CreateDirectory "\$SMPROGRAMS\\${PRODUCT_ID}"
- CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}\\${PROGRAM_NAME}${PROGRAM_VERSION}.lnk" "\$INSTDIR\\bin\\${PRODUCT_EXE}" "" "\$INSTDIR\\bin\\${PRODUCT_EXE}" 0
+ CreateDirectory "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}"
+ CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}\\${PROGRAM_NAME}${PROGRAM_VERSION}.lnk" "\$INSTDIR\\bin\\${PRODUCT_EXE}" "" "\$INSTDIR\\bin\\${PRODUCT_EXE}" 0
EOF
if test -f "$DESTDIR/debug.bat"; then
cat >> $NSISFILE << EOF
- CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}\\${PROGRAM_NAME}${PROGRAM_VERSION} GDB.lnk" "\$INSTDIR\\debug.bat" "" "\$INSTDIR\\share\\ardour_bug.ico" 0
+ CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}\\${PROGRAM_NAME}${PROGRAM_VERSION} GDB.lnk" "\$INSTDIR\\debug.bat" "" "\$INSTDIR\\share\\ardour_bug.ico" 0
EOF
fi
if test -z "$NOVIDEOTOOLS"; then
cat >> $NSISFILE << EOF
IfFileExists "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" 0 +2
- CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}\\Video Monitor.lnk" "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" "" "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" 0
+ CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}\\Video Monitor.lnk" "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" "" "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" 0
EOF
fi
cat >> $NSISFILE << EOF
- CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}\\Uninstall.lnk" "\$INSTDIR\\uninstall.exe" "" "\$INSTDIR\\uninstall.exe" 0
+ CreateShortCut "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}\\Uninstall.lnk" "\$INSTDIR\\uninstall.exe" "" "\$INSTDIR\\uninstall.exe" 0
SectionEnd
LangString DESC_SecMainProg \${LANG_ENGLISH} "${PROGRAM_NAME} ${ARDOURVERSION}\$\\r\$\\n${VERSIONINFO}\$\\r\$\\n${ARDOURDATE}"
EOF
@@ -437,6 +440,7 @@ cat >> $NSISFILE << EOF
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section "Uninstall"
SetShellVarContext all
+ DeleteRegKey HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}"
DeleteRegKey HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}"
DeleteRegKey HKLM "Software\\${PROGRAM_NAME}\\v${PROGRAM_VERSION}"
RMDir /r "\$INSTDIR\\bin"
@@ -448,8 +452,8 @@ Section "Uninstall"
Delete "\$INSTDIR\\uninstall.exe"
Delete "\$INSTDIR\\${PROGRAM_NAME}${PROGRAM_VERSION}.lnk"
RMDir "\$INSTDIR"
- Delete "\$SMPROGRAMS\\${PRODUCT_ID}\\*.*"
- RMDir "\$SMPROGRAMS\\${PRODUCT_ID}"
+ Delete "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}\\*.*"
+ RMDir "\$SMPROGRAMS\\${PRODUCT_ID}${SFX}"
\${unregisterExtension} ".${STATEFILE_SUFFIX}" "${PROGRAM_NAME} Session"
SectionEnd
EOF
diff --git a/vst/ardourvst.in b/vst/ardourvst.in
index d92bae0..9cf8807 100644
--- a/vst/ardourvst.in
+++ b/vst/ardourvst.in
@@ -11,6 +11,9 @@ export ARDOUR_DLL_PATH=@LIBDIR@
export GTK_PATH=@LIBDIR@${GTK_PATH:+:$GTK_PATH}
export LD_LIBRARY_PATH=@LIBDIR@${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
+# NSM needs a path to this script
+export ARDOUR_SELF="$0"
+
exec wine @LIBDIR@/ardour- at VERSION@-vst.exe.so "$@"
diff --git a/wscript b/wscript
index bb31574..1626f84 100644
--- a/wscript
+++ b/wscript
@@ -71,6 +71,8 @@ compiler_flags_dictionaries= {
'ultra-strict' : ['-Wredundant-decls', '-Wstrict-prototypes', '-Wmissing-prototypes'],
# Flag to turn on C99 compliance by itself
'c99': '-std=c99',
+ # Flag to enable AT&T assembler syntax
+ 'attasm': '-masm=att',
},
'msvc' : {
'debuggable' : ['/DDEBUG', '/Od', '/Zi', '/MDd', '/Gd', '/EHsc'],
@@ -370,17 +372,15 @@ int main() { return 0; }''',
c_flags.append("-Qunused-arguments")
cxx_flags.append("-Qunused-arguments")
- if ((re.search ("i[0-9]86", cpu) != None) or (re.search ("x86_64", cpu) != None)) and conf.env['build_target'] != 'none':
-
+ if (re.search ("(i[0-9]86|x86_64|AMD64)", cpu) != None) and conf.env['build_target'] != 'none':
#
# ARCH_X86 means anything in the x86 family from i386 to x86_64
# the compile-time presence of the macro _LP64 is used to
# distingush 32 and 64 bit assembler
#
-
- if (re.search ("(i[0-9]86|x86_64)", cpu) != None):
- compiler_flags.append ("-DARCH_X86")
+
+ compiler_flags.append ("-DARCH_X86")
if platform == 'linux' :
@@ -405,9 +405,19 @@ int main() { return 0; }''',
elif cpu == "i686":
compiler_flags.append ("-march=i686")
- if ((conf.env['build_target'] == 'i686') or (conf.env['build_target'] == 'x86_64')) and build_host_supports_sse:
+ if not is_clang and ((conf.env['build_target'] == 'i686') or (conf.env['build_target'] == 'x86_64')) and build_host_supports_sse:
compiler_flags.extend ([ flags_dict['sse'], flags_dict['fpmath-sse'], flags_dict['xmmintrinsics'] ])
-
+
+ if (conf.env['build_target'] == 'mingw'):
+ if (re.search ("(x86_64|AMD64)", cpu) != None):
+ # on Windows sse is supported by 64 bit platforms only
+ build_host_supports_sse = True
+
+ # mingw GCC compiler to uses at&t (Unix specific) assembler dialect by default
+ # compiler_flags.append (["--mmnemonic=att", "msyntax=att")
+
+ compiler_flags.extend ([ flags_dict['sse'], flags_dict['fpmath-sse'], flags_dict['xmmintrinsics'], flags_dict['attasm'] ])
+
# end of processor-specific section
# optimization section
@@ -416,7 +426,13 @@ int main() { return 0; }''',
compiler_flags.append("-DBUILD_VECLIB_OPTIMIZATIONS");
conf.env.append_value('LINKFLAGS_OSX', ['-framework', 'Accelerate'])
elif conf.env['build_target'] == 'i686' or conf.env['build_target'] == 'x86_64':
- compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+ compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+ elif conf.env['build_target'] == 'mingw':
+ # usability of the 64 bit windows assembler depends on the compiler target,
+ # not the build host, which in turn can only be inferred from the name
+ # of the compiler.
+ if re.search ('/^x86_64/', str(conf.env['CC'])):
+ compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
if not build_host_supports_sse:
print("\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)")
@@ -599,8 +615,6 @@ def options(opt):
help='Compile for use with gprofile')
opt.add_option('--libjack', type='string', default="auto", dest='libjack_link',
help='libjack link mode [auto|link|weak]')
- opt.add_option('--no-jack-metadata', action='store_false', default=True, dest='libjack_meta',
- help='disable support for jack metadata')
opt.add_option('--internal-shared-libs', action='store_true', default=True, dest='internal_shared_libs',
help='Build internal libs as shared libraries')
opt.add_option('--internal-static-libs', action='store_false', dest='internal_shared_libs',
@@ -859,7 +873,7 @@ def configure(conf):
autowaf.check_pkg(conf, 'rubberband', uselib_store='RUBBERBAND', mandatory=True)
if Options.options.dist_target == 'mingw':
- Options.options.fpu_optimization = False
+ Options.options.fpu_optimization = True
conf.env.append_value('CFLAGS', '-DPLATFORM_WINDOWS')
conf.env.append_value('CFLAGS', '-DCOMPILER_MINGW')
conf.env.append_value('CXXFLAGS', '-DPLATFORM_WINDOWS')
@@ -1043,7 +1057,7 @@ const char* const ardour_config_info = "\\n\\
write_config_text('Freedesktop files', opts.freedesktop)
write_config_text('JACK Backend', conf.env['BUILD_JACKBACKEND'])
write_config_text('Libjack linking', conf.env['libjack_link'])
- write_config_text('Libjack metadata', not conf.is_defined('NO_JACK_METADATA'))
+ write_config_text('Libjack metadata', conf.is_defined ('HAVE_JACK_METADATA'))
write_config_text('LV2 UI embedding', conf.is_defined('HAVE_SUIL'))
write_config_text('LV2 support', conf.is_defined('LV2_SUPPORT'))
write_config_text('LXVST support', conf.is_defined('LXVST_SUPPORT'))
--
ardour Debian packaging
More information about the pkg-multimedia-commits
mailing list