mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-12 09:36:33 +01:00
Merge branch 'master' into cairocanvas
This commit is contained in:
commit
ce8731b32d
28 changed files with 2858 additions and 2238 deletions
|
|
@ -185,7 +185,8 @@ static const char* translators[] = {
|
||||||
\n\tRobert Schwede <schwede@ironshark.com>\
|
\n\tRobert Schwede <schwede@ironshark.com>\
|
||||||
\n\tBenjamin Scherrer <realhangman@web.de>\
|
\n\tBenjamin Scherrer <realhangman@web.de>\
|
||||||
\n\tEdgar Aichinger <edogawa@aon.at>\
|
\n\tEdgar Aichinger <edogawa@aon.at>\
|
||||||
\n\tRichard Oax <richard@pagliacciempire.de>\n"),
|
\n\tRichard Oax <richard@pagliacciempire.de>\
|
||||||
|
\n\tRobin Gloster <robin@loc-com.de>\n"),
|
||||||
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n\tRaffaele Morelli <raffaele.morelli@gmail.com>\n"),
|
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n\tRaffaele Morelli <raffaele.morelli@gmail.com>\n"),
|
||||||
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
||||||
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,6 @@
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
#include <boost/locale.hpp>
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
@ -815,13 +813,13 @@ ARDOUR_UI::check_memory_locking ()
|
||||||
"runs out of memory. \n\n"
|
"runs out of memory. \n\n"
|
||||||
"You can view the memory limit with 'ulimit -l', "
|
"You can view the memory limit with 'ulimit -l', "
|
||||||
"and it is normally controlled by %2"),
|
"and it is normally controlled by %2"),
|
||||||
PROGRAM_NAME).c_str(),
|
PROGRAM_NAME,
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
X_("/etc/login.conf")
|
X_("/etc/login.conf")
|
||||||
#else
|
#else
|
||||||
X_(" /etc/security/limits.conf")
|
X_(" /etc/security/limits.conf")
|
||||||
#endif
|
#endif
|
||||||
);
|
).c_str());
|
||||||
|
|
||||||
msg.set_default_response (RESPONSE_OK);
|
msg.set_default_response (RESPONSE_OK);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,7 @@ ExportTimespanSelector::add_range_to_selection (ARDOUR::Location const * loc)
|
||||||
ExportTimespanPtr span = _session->get_export_handler()->add_timespan();
|
ExportTimespanPtr span = _session->get_export_handler()->add_timespan();
|
||||||
|
|
||||||
std::string id;
|
std::string id;
|
||||||
if (loc == state->session_range.get()) {
|
if (loc == state->selection_range.get()) {
|
||||||
id = "session";
|
|
||||||
} else if (loc == state->selection_range.get()) {
|
|
||||||
id = "selection";
|
id = "selection";
|
||||||
} else {
|
} else {
|
||||||
id = loc->id().to_s();
|
id = loc->id().to_s();
|
||||||
|
|
@ -367,9 +365,7 @@ ExportTimespanSelectorSingle::fill_range_list ()
|
||||||
if (!state) { return; }
|
if (!state) { return; }
|
||||||
|
|
||||||
std::string id;
|
std::string id;
|
||||||
if (!range_id.compare (X_("session"))) {
|
if (!range_id.compare (X_("selection"))) {
|
||||||
id = state->session_range->id().to_s();
|
|
||||||
} else if (!range_id.compare (X_("selection"))) {
|
|
||||||
id = state->selection_range->id().to_s();
|
id = state->selection_range->id().to_s();
|
||||||
} else {
|
} else {
|
||||||
id = range_id;
|
id = range_id;
|
||||||
|
|
@ -459,9 +455,8 @@ ExportTimespanSelectorMultiple::set_selection_from_state ()
|
||||||
for (tree_it = range_list->children().begin(); tree_it != range_list->children().end(); ++tree_it) {
|
for (tree_it = range_list->children().begin(); tree_it != range_list->children().end(); ++tree_it) {
|
||||||
Location * loc = tree_it->get_value (range_cols.location);
|
Location * loc = tree_it->get_value (range_cols.location);
|
||||||
|
|
||||||
if ((!id.compare ("session") && loc == state->session_range.get()) ||
|
if ((id == "selection" && loc == state->selection_range.get()) ||
|
||||||
(!id.compare ("selection") && loc == state->selection_range.get()) ||
|
(id == loc->id().to_s())) {
|
||||||
(!id.compare (loc->id().to_s()))) {
|
|
||||||
tree_it->set_value (range_cols.selected, true);
|
tree_it->set_value (range_cols.selected, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -256,6 +256,10 @@ GenericPluginUI::build ()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plugin->describe_parameter (Evoral::Parameter(PluginAutomation, 0, i)) == X_("hidden")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
ControlUI* cui;
|
ControlUI* cui;
|
||||||
|
|
||||||
boost::shared_ptr<ARDOUR::AutomationControl> c
|
boost::shared_ptr<ARDOUR::AutomationControl> c
|
||||||
|
|
|
||||||
|
|
@ -1483,13 +1483,13 @@ MidiTimeAxisView::playback_channel_mode_changed ()
|
||||||
{
|
{
|
||||||
switch (midi_track()->get_playback_channel_mode()) {
|
switch (midi_track()->get_playback_channel_mode()) {
|
||||||
case AllChannels:
|
case AllChannels:
|
||||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), ("all")));
|
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), _("all")));
|
||||||
break;
|
break;
|
||||||
case FilterChannels:
|
case FilterChannels:
|
||||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), ("some")));
|
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), _("some")));
|
||||||
break;
|
break;
|
||||||
case ForceChannel:
|
case ForceChannel:
|
||||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), ("all"), ffs (midi_track()->get_playback_channel_mask())));
|
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), _("all"), ffs (midi_track()->get_playback_channel_mask())));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1499,13 +1499,13 @@ MidiTimeAxisView::capture_channel_mode_changed ()
|
||||||
{
|
{
|
||||||
switch (midi_track()->get_capture_channel_mode()) {
|
switch (midi_track()->get_capture_channel_mode()) {
|
||||||
case AllChannels:
|
case AllChannels:
|
||||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), ("all")));
|
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), _("all")));
|
||||||
break;
|
break;
|
||||||
case FilterChannels:
|
case FilterChannels:
|
||||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), ("some")));
|
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), _("some")));
|
||||||
break;
|
break;
|
||||||
case ForceChannel:
|
case ForceChannel:
|
||||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), ("all"), ffs (midi_track()->get_capture_channel_mask())));
|
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), _("all"), ffs (midi_track()->get_capture_channel_mask())));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ msgstr "Armand Klenk"
|
||||||
|
|
||||||
#: about.cc:153
|
#: about.cc:153
|
||||||
msgid "Julien de Kozak"
|
msgid "Julien de Kozak"
|
||||||
msgstr ""
|
msgstr "Julien de Kozak"
|
||||||
|
|
||||||
#: about.cc:154
|
#: about.cc:154
|
||||||
msgid "Matt Krai"
|
msgid "Matt Krai"
|
||||||
|
|
@ -269,6 +269,7 @@ msgid ""
|
||||||
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
||||||
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
||||||
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
||||||
|
"\Robin Gloster <robin@loc-com.de>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Deutsch:\n"
|
"Deutsch:\n"
|
||||||
"\tKarsten Petersen <kapet@kapet.de>\n"
|
"\tKarsten Petersen <kapet@kapet.de>\n"
|
||||||
|
|
@ -277,6 +278,7 @@ msgstr ""
|
||||||
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
||||||
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
||||||
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
||||||
|
"\Robin Gloster <robin@loc-com.de>\n"
|
||||||
|
|
||||||
#: about.cc:189
|
#: about.cc:189
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -380,7 +382,7 @@ msgstr "Copyright (C) 1999-2013 Paul Davis\n"
|
||||||
|
|
||||||
#: about.cc:583
|
#: about.cc:583
|
||||||
msgid "http://ardour.org/"
|
msgid "http://ardour.org/"
|
||||||
msgstr "http://ardour.org"
|
msgstr "http://ardour.org/"
|
||||||
|
|
||||||
#: about.cc:584
|
#: about.cc:584
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -420,7 +422,7 @@ msgstr "Kanaleinstellungen:"
|
||||||
|
|
||||||
#: add_route_dialog.cc:57
|
#: add_route_dialog.cc:57
|
||||||
msgid "Track mode:"
|
msgid "Track mode:"
|
||||||
msgstr "SpurModus"
|
msgstr "Spurmodus"
|
||||||
|
|
||||||
#: add_route_dialog.cc:58
|
#: add_route_dialog.cc:58
|
||||||
msgid "Instrument:"
|
msgid "Instrument:"
|
||||||
|
|
@ -440,7 +442,7 @@ msgstr "Audio+MIDI-Spuren"
|
||||||
|
|
||||||
#: add_route_dialog.cc:82
|
#: add_route_dialog.cc:82
|
||||||
msgid "Busses"
|
msgid "Busses"
|
||||||
msgstr "Audio-Busse"
|
msgstr "Audiobusse"
|
||||||
|
|
||||||
#: add_route_dialog.cc:104
|
#: add_route_dialog.cc:104
|
||||||
msgid "Add:"
|
msgid "Add:"
|
||||||
|
|
@ -495,7 +497,7 @@ msgid ""
|
||||||
"track instead."
|
"track instead."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Audio+MIDI Spuren sind <b>NUR</b> für den Gebrauch mit Plugins gedacht, die "
|
"Audio+MIDI Spuren sind <b>NUR</b> für den Gebrauch mit Plugins gedacht, die "
|
||||||
"sowohl Audio als auch MIDI Eingangsdaten nützen\n"
|
"sowohl Audio als auch MIDI Eingangsdaten benutzen\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Falls Sie nicht vorhaben, so ein Plugin zu benutzen, verwenden Sie "
|
"Falls Sie nicht vorhaben, so ein Plugin zu benutzen, verwenden Sie "
|
||||||
"stattdessen eine normale Audio- oder MIDI-Spur"
|
"stattdessen eine normale Audio- oder MIDI-Spur"
|
||||||
|
|
@ -563,7 +565,7 @@ msgstr "-keine-"
|
||||||
|
|
||||||
#: ambiguous_file_dialog.cc:30
|
#: ambiguous_file_dialog.cc:30
|
||||||
msgid "Ambiguous File"
|
msgid "Ambiguous File"
|
||||||
msgstr "Mehrdeutige Datei"
|
msgstr "Mehrmals gefundene Datei"
|
||||||
|
|
||||||
#: ambiguous_file_dialog.cc:35
|
#: ambiguous_file_dialog.cc:35
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -621,7 +623,7 @@ msgstr "Normalisieren"
|
||||||
|
|
||||||
#: analysis_window.cc:59
|
#: analysis_window.cc:59
|
||||||
msgid "FFT analysis window"
|
msgid "FFT analysis window"
|
||||||
msgstr "FFT - Analysefenster"
|
msgstr "FFT-Analysefenster"
|
||||||
|
|
||||||
#: analysis_window.cc:60 editor.cc:1880
|
#: analysis_window.cc:60 editor.cc:1880
|
||||||
msgid "Spectral Analysis"
|
msgid "Spectral Analysis"
|
||||||
|
|
@ -653,11 +655,11 @@ msgstr "Vorhören"
|
||||||
|
|
||||||
#: ardour_ui.cc:169
|
#: ardour_ui.cc:169
|
||||||
msgid "solo"
|
msgid "solo"
|
||||||
msgstr "solo"
|
msgstr "Solo"
|
||||||
|
|
||||||
#: ardour_ui.cc:170
|
#: ardour_ui.cc:170
|
||||||
msgid "feedback"
|
msgid "feedback"
|
||||||
msgstr "feedback"
|
msgstr "Feedback"
|
||||||
|
|
||||||
#: ardour_ui.cc:172
|
#: ardour_ui.cc:172
|
||||||
msgid "Errors"
|
msgid "Errors"
|
||||||
|
|
@ -684,15 +686,15 @@ msgid ""
|
||||||
"controlled by %2"
|
"controlled by %2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von "
|
"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von "
|
||||||
"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 zu schnell der "
|
"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 der "
|
||||||
"Speicher ausgeht.\n"
|
"Speicher ausgeht bevor die Systembegrenzung erreicht ist.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
|
"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
|
||||||
"in %2 verändern."
|
"in %2 verändern."
|
||||||
|
|
||||||
#: ardour_ui.cc:800
|
#: ardour_ui.cc:800
|
||||||
msgid "Do not show this window again"
|
msgid "Do not show this window again"
|
||||||
msgstr "Diese Meldung nicht wieder anzeigen"
|
msgstr "Diese Meldung nicht erneut anzeigen"
|
||||||
|
|
||||||
#: ardour_ui.cc:847
|
#: ardour_ui.cc:847
|
||||||
msgid "Don't quit"
|
msgid "Don't quit"
|
||||||
|
|
@ -700,7 +702,7 @@ msgstr "Abbrechen"
|
||||||
|
|
||||||
#: ardour_ui.cc:848
|
#: ardour_ui.cc:848
|
||||||
msgid "Just quit"
|
msgid "Just quit"
|
||||||
msgstr "Nur beenden"
|
msgstr "Beenden ohne zu speichern"
|
||||||
|
|
||||||
#: ardour_ui.cc:849
|
#: ardour_ui.cc:849
|
||||||
msgid "Save and quit"
|
msgid "Save and quit"
|
||||||
|
|
@ -874,7 +876,7 @@ msgid ""
|
||||||
"You cannot open or close sessions in this condition"
|
"You cannot open or close sessions in this condition"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"%1 ist derzeit nicht mit JACK verbunden.\n"
|
"%1 ist derzeit nicht mit JACK verbunden.\n"
|
||||||
"Es ist nicht möglich, Projekte zu öffnen oder zu schließen."
|
"Dadurch können keine Projekte geöffnet oder geschlossen werden."
|
||||||
|
|
||||||
#: ardour_ui.cc:1455
|
#: ardour_ui.cc:1455
|
||||||
msgid "Open Session"
|
msgid "Open Session"
|
||||||
|
|
@ -883,7 +885,7 @@ msgstr "Projekt öffnen"
|
||||||
#: ardour_ui.cc:1473 session_import_dialog.cc:169
|
#: ardour_ui.cc:1473 session_import_dialog.cc:169
|
||||||
#: session_metadata_dialog.cc:729 startup.cc:1049
|
#: session_metadata_dialog.cc:729 startup.cc:1049
|
||||||
msgid "%1 sessions"
|
msgid "%1 sessions"
|
||||||
msgstr "%1projekte"
|
msgstr "%1 Projekte"
|
||||||
|
|
||||||
#: ardour_ui.cc:1510
|
#: ardour_ui.cc:1510
|
||||||
msgid "You cannot add a track without a session already loaded."
|
msgid "You cannot add a track without a session already loaded."
|
||||||
|
|
@ -931,8 +933,8 @@ msgid ""
|
||||||
"Please create one or more tracks before trying to record.\n"
|
"Please create one or more tracks before trying to record.\n"
|
||||||
"You can do this with the \"Add Track or Bus\" option in the Session menu."
|
"You can do this with the \"Add Track or Bus\" option in the Session menu."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bitte fügen Sie mindestens eine oder mehrere Spur hinzu,\n"
|
"Bitte fügen Sie, bevor Sie aufnehmen, mindestens \n"
|
||||||
"bevor Sie aufnehmen. Die geht über \"Spur/Bus hinzufügen\"\n"
|
"eine oder mehrere Spur hinzu. Die geht über \"Spur/Bus hinzufügen\"\n"
|
||||||
"im Menüpunkt Projekt."
|
"im Menüpunkt Projekt."
|
||||||
|
|
||||||
#: ardour_ui.cc:2084
|
#: ardour_ui.cc:2084
|
||||||
|
|
@ -984,11 +986,11 @@ msgstr "Bestätige das Überschreiben des Schnappschusses"
|
||||||
#: ardour_ui.cc:2230
|
#: ardour_ui.cc:2230
|
||||||
msgid "A snapshot already exists with that name. Do you want to overwrite it?"
|
msgid "A snapshot already exists with that name. Do you want to overwrite it?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ein Schnappschuss mit diesem existiert bereits. Wollen Sie ihn überschreiben?"
|
"Ein Schnappschuss mit diesem Namen existiert bereits. Wollen Sie ihn überschreiben?"
|
||||||
|
|
||||||
#: ardour_ui.cc:2233
|
#: ardour_ui.cc:2233
|
||||||
msgid "Overwrite"
|
msgid "Overwrite"
|
||||||
msgstr "Überschreibe"
|
msgstr "Überschreiben"
|
||||||
|
|
||||||
#: ardour_ui.cc:2267
|
#: ardour_ui.cc:2267
|
||||||
msgid "Rename Session"
|
msgid "Rename Session"
|
||||||
|
|
@ -1011,7 +1013,7 @@ msgid ""
|
||||||
"That name is already in use by another directory/folder. Please try again."
|
"That name is already in use by another directory/folder. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
|
"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
|
||||||
"nochmal versuchen."
|
"versuchen Sie einen anderen Namen."
|
||||||
|
|
||||||
#: ardour_ui.cc:2299
|
#: ardour_ui.cc:2299
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -1031,7 +1033,7 @@ msgstr "Name für Vorlage"
|
||||||
|
|
||||||
#: ardour_ui.cc:2416
|
#: ardour_ui.cc:2416
|
||||||
msgid "-template"
|
msgid "-template"
|
||||||
msgstr "Vorlage"
|
msgstr "-Vorlage"
|
||||||
|
|
||||||
#: ardour_ui.cc:2454
|
#: ardour_ui.cc:2454
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -1039,7 +1041,7 @@ msgid ""
|
||||||
"%1\n"
|
"%1\n"
|
||||||
"already exists. Do you want to open it?"
|
"already exists. Do you want to open it?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Projekt\n"
|
"Dieses Projekt\n"
|
||||||
"%1\n"
|
"%1\n"
|
||||||
"existiert bereits. Wollen Sie sie öffnen?"
|
"existiert bereits. Wollen Sie sie öffnen?"
|
||||||
|
|
||||||
|
|
@ -1049,7 +1051,7 @@ msgstr "Vorhandenes Projekt öffnen"
|
||||||
|
|
||||||
#: ardour_ui.cc:2702
|
#: ardour_ui.cc:2702
|
||||||
msgid "There is no existing session at \"%1\""
|
msgid "There is no existing session at \"%1\""
|
||||||
msgstr "Es gibt kein Projekt an folgender Stelle: \"%1\""
|
msgstr "Es gibt kein Projekt in: \"%1\""
|
||||||
|
|
||||||
#: ardour_ui.cc:2792
|
#: ardour_ui.cc:2792
|
||||||
msgid "Please wait while %1 loads your session"
|
msgid "Please wait while %1 loads your session"
|
||||||
|
|
@ -1146,7 +1148,7 @@ msgid_plural ""
|
||||||
"\n"
|
"\n"
|
||||||
"will release an additional %3 %4bytes of disk space.\n"
|
"will release an additional %3 %4bytes of disk space.\n"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
"Die folgende Datei war unbenutzt\n"
|
"Die folgende Datei wurde nicht benutzt\n"
|
||||||
"und wurde verschoben nach: %2\n"
|
"und wurde verschoben nach: %2\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Nach einem Neustart von %5 kann über\n"
|
"Nach einem Neustart von %5 kann über\n"
|
||||||
|
|
@ -1195,44 +1197,48 @@ msgstr "gelöschte Datei"
|
||||||
#: ardour_ui.cc:3346
|
#: ardour_ui.cc:3346
|
||||||
msgid ""
|
msgid ""
|
||||||
"Video-Server was not launched by Ardour. The request to stop it is ignored."
|
"Video-Server was not launched by Ardour. The request to stop it is ignored."
|
||||||
msgstr ""
|
msgstr "Der Video-Server wurde nicht von Ardour gestartet, der Befehl ihn anzuhalten wird ignoriert."
|
||||||
|
|
||||||
#: ardour_ui.cc:3350
|
#: ardour_ui.cc:3350
|
||||||
msgid "Stop Video-Server"
|
msgid "Stop Video-Server"
|
||||||
msgstr ""
|
msgstr "Video-Server anhalten"
|
||||||
|
|
||||||
#: ardour_ui.cc:3351
|
#: ardour_ui.cc:3351
|
||||||
msgid "Do you really want to stop the Video Server?"
|
msgid "Do you really want to stop the Video Server?"
|
||||||
msgstr ""
|
msgstr "Wollen Sie den Video-Server wirklich anhalten?"
|
||||||
|
|
||||||
#: ardour_ui.cc:3354
|
#: ardour_ui.cc:3354
|
||||||
#, fuzzy
|
|
||||||
msgid "Yes, Stop It"
|
msgid "Yes, Stop It"
|
||||||
msgstr "Ja, entfernen."
|
msgstr "Ja, anhalten."
|
||||||
|
|
||||||
#: ardour_ui.cc:3380
|
#: ardour_ui.cc:3380
|
||||||
msgid "The Video Server is already started."
|
msgid "The Video Server is already started."
|
||||||
msgstr ""
|
msgstr "Der Video-Server läuft bereits"
|
||||||
|
|
||||||
#: ardour_ui.cc:3382
|
#: ardour_ui.cc:3382
|
||||||
msgid ""
|
msgid ""
|
||||||
"An external Video Server is configured and can be reached. Not starting a "
|
"An external Video Server is configured and can be reached. Not starting a "
|
||||||
"new instance."
|
"new instance."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Ein externer Video-Server wurde konfiguriert, ist aber nicht erreichbar. Es wird "
|
||||||
|
"keine neue Instanz gestartet."
|
||||||
|
|
||||||
#: ardour_ui.cc:3390 ardour_ui.cc:3461
|
#: ardour_ui.cc:3390 ardour_ui.cc:3461
|
||||||
msgid ""
|
msgid ""
|
||||||
"Could not connect to the Video Server. Start it or configure its access URL "
|
"Could not connect to the Video Server. Start it or configure its access URL "
|
||||||
"in Edit -> Preferences."
|
"in Edit -> Preferences."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Es konnte keine Verbindung zum Video-Server hergestellt werden."
|
||||||
|
"Sie müssen ihn vorher starten oder die Adresse in "
|
||||||
|
"Bearbeiten -> Globale Einstellungen anpassen"
|
||||||
|
|
||||||
#: ardour_ui.cc:3414
|
#: ardour_ui.cc:3414
|
||||||
msgid "Specified docroot is not an existing directory."
|
msgid "Specified docroot is not an existing directory."
|
||||||
msgstr ""
|
msgstr "Das eingestellte Dokumentenverzeichnis existiert nicht."
|
||||||
|
|
||||||
#: ardour_ui.cc:3419
|
#: ardour_ui.cc:3419
|
||||||
msgid "Given Video Server is not an executable file."
|
msgid "Given Video Server is not an executable file."
|
||||||
msgstr ""
|
msgstr "Der eingestellte Video-Server ist keine ausführbare Datei."
|
||||||
|
|
||||||
#: ardour_ui.cc:3485 editor_audio_import.cc:629
|
#: ardour_ui.cc:3485 editor_audio_import.cc:629
|
||||||
msgid "could not open %1"
|
msgid "could not open %1"
|
||||||
|
|
@ -1240,7 +1246,7 @@ msgstr "Konnte \"%s\" nicht öffnen."
|
||||||
|
|
||||||
#: ardour_ui.cc:3489
|
#: ardour_ui.cc:3489
|
||||||
msgid "no video-file selected"
|
msgid "no video-file selected"
|
||||||
msgstr ""
|
msgstr "Es wurde keine Video-Datei ausgewählt."
|
||||||
|
|
||||||
#: ardour_ui.cc:3650
|
#: ardour_ui.cc:3650
|
||||||
msgid "Recording was stopped because your system could not keep up."
|
msgid "Recording was stopped because your system could not keep up."
|
||||||
|
|
@ -1277,7 +1283,7 @@ msgstr ""
|
||||||
|
|
||||||
#: ardour_ui.cc:3738
|
#: ardour_ui.cc:3738
|
||||||
msgid "Crash Recovery"
|
msgid "Crash Recovery"
|
||||||
msgstr "Wiederherstellung"
|
msgstr "Absturz-Wiederherstellung"
|
||||||
|
|
||||||
#: ardour_ui.cc:3739
|
#: ardour_ui.cc:3739
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -1338,11 +1344,11 @@ msgstr "Konnte nicht erneut zu JACK verbinden"
|
||||||
|
|
||||||
#: ardour_ui.cc:3902
|
#: ardour_ui.cc:3902
|
||||||
msgid "Check the website for more..."
|
msgid "Check the website for more..."
|
||||||
msgstr ""
|
msgstr "Informieren Sie sich auf der Webseite weiter..."
|
||||||
|
|
||||||
#: ardour_ui.cc:3915
|
#: ardour_ui.cc:3915
|
||||||
msgid "Click to open the program website in your web browser"
|
msgid "Click to open the program website in your web browser"
|
||||||
msgstr ""
|
msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
|
||||||
|
|
||||||
#: ardour_ui.cc:4152
|
#: ardour_ui.cc:4152
|
||||||
msgid ""
|
msgid ""
|
||||||
|
|
@ -1453,7 +1459,6 @@ msgid "When active, there is a feedback loop."
|
||||||
msgstr "Wenn aktiv, gibt es eine Rückkopplungsschleife."
|
msgstr "Wenn aktiv, gibt es eine Rückkopplungsschleife."
|
||||||
|
|
||||||
#: ardour_ui2.cc:142
|
#: ardour_ui2.cc:142
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"<b>Primary Clock</b> right-click to set display mode. Click to edit, click"
|
"<b>Primary Clock</b> right-click to set display mode. Click to edit, click"
|
||||||
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
||||||
|
|
@ -1470,7 +1475,6 @@ msgstr ""
|
||||||
"Einzelheiten."
|
"Einzelheiten."
|
||||||
|
|
||||||
#: ardour_ui2.cc:143
|
#: ardour_ui2.cc:143
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"<b>Secondary Clock</b> right-click to set display mode. Click to edit, click"
|
"<b>Secondary Clock</b> right-click to set display mode. Click to edit, click"
|
||||||
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
||||||
|
|
@ -1841,7 +1845,7 @@ msgstr "Start/Stopp"
|
||||||
|
|
||||||
#: ardour_ui_ed.cc:308
|
#: ardour_ui_ed.cc:308
|
||||||
msgid "Stop and Forget Capture"
|
msgid "Stop and Forget Capture"
|
||||||
msgstr "Stop + Aufnahme verwerfen"
|
msgstr "Stopp + Aufnahme verwerfen"
|
||||||
|
|
||||||
#: ardour_ui_ed.cc:318
|
#: ardour_ui_ed.cc:318
|
||||||
msgid "Transition To Roll"
|
msgid "Transition To Roll"
|
||||||
|
|
@ -1857,7 +1861,7 @@ msgstr "Schleife wiedergeben"
|
||||||
|
|
||||||
#: ardour_ui_ed.cc:329
|
#: ardour_ui_ed.cc:329
|
||||||
msgid "Play Selected Range"
|
msgid "Play Selected Range"
|
||||||
msgstr "Gewählten Bereich abspielen"
|
msgstr "Gewählten Bereich wiedergeben"
|
||||||
|
|
||||||
#: ardour_ui_ed.cc:332
|
#: ardour_ui_ed.cc:332
|
||||||
msgid "Play Selection w/Preroll"
|
msgid "Play Selection w/Preroll"
|
||||||
|
|
@ -2610,7 +2614,7 @@ msgstr "Arbeitspunkt"
|
||||||
|
|
||||||
#: editor.cc:200
|
#: editor.cc:200
|
||||||
msgid "Mushy"
|
msgid "Mushy"
|
||||||
msgstr "Breiig/Matschig"
|
msgstr "Matschig"
|
||||||
|
|
||||||
#: editor.cc:201
|
#: editor.cc:201
|
||||||
msgid "Smooth"
|
msgid "Smooth"
|
||||||
|
|
@ -2658,7 +2662,7 @@ msgstr "CD-Marker"
|
||||||
|
|
||||||
#: editor.cc:250
|
#: editor.cc:250
|
||||||
msgid "Video Timeline"
|
msgid "Video Timeline"
|
||||||
msgstr ""
|
msgstr "Video Zeitleiste"
|
||||||
|
|
||||||
#: editor.cc:266
|
#: editor.cc:266
|
||||||
msgid "mode"
|
msgid "mode"
|
||||||
|
|
@ -3105,7 +3109,7 @@ msgstr "Wiedergabeliste löschen"
|
||||||
|
|
||||||
#: editor.cc:3902
|
#: editor.cc:3902
|
||||||
msgid "Keep Playlist"
|
msgid "Keep Playlist"
|
||||||
msgstr "Wiedergabeliste beibehalten"
|
msgstr "Wiedergabeliste behalten"
|
||||||
|
|
||||||
#: editor.cc:3903 editor_audio_import.cc:579 editor_ops.cc:5860
|
#: editor.cc:3903 editor_audio_import.cc:579 editor_ops.cc:5860
|
||||||
#: processor_box.cc:1953 processor_box.cc:1978
|
#: processor_box.cc:1953 processor_box.cc:1978
|
||||||
|
|
|
||||||
4657
gtk2_ardour/po/fr.po
4657
gtk2_ardour/po/fr.po
File diff suppressed because it is too large
Load diff
|
|
@ -2040,7 +2040,7 @@ ProcessorBox::one_processor_can_be_edited ()
|
||||||
}
|
}
|
||||||
|
|
||||||
Gtk::Window*
|
Gtk::Window*
|
||||||
ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
|
ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor, bool use_custom)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<Send> send;
|
boost::shared_ptr<Send> send;
|
||||||
boost::shared_ptr<InternalSend> internal_send;
|
boost::shared_ptr<InternalSend> internal_send;
|
||||||
|
|
@ -2119,8 +2119,7 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
|
||||||
Window* w = get_processor_ui (plugin_insert);
|
Window* w = get_processor_ui (plugin_insert);
|
||||||
|
|
||||||
if (w == 0) {
|
if (w == 0) {
|
||||||
|
plugin_ui = new PluginUIWindow (plugin_insert, false, use_custom);
|
||||||
plugin_ui = new PluginUIWindow (plugin_insert, false, Config->get_use_plugin_own_gui());
|
|
||||||
plugin_ui->set_title (generate_processor_title (plugin_insert));
|
plugin_ui->set_title (generate_processor_title (plugin_insert));
|
||||||
set_processor_ui (plugin_insert, plugin_ui);
|
set_processor_ui (plugin_insert, plugin_ui);
|
||||||
|
|
||||||
|
|
@ -2438,6 +2437,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
|
||||||
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
||||||
|
|
||||||
if (proxy) {
|
if (proxy) {
|
||||||
|
proxy->set_custom_ui_mode (Config->get_use_plugin_own_gui ());
|
||||||
proxy->toggle ();
|
proxy->toggle ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2452,6 +2452,7 @@ ProcessorBox::generic_edit_processor (boost::shared_ptr<Processor> processor)
|
||||||
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
||||||
|
|
||||||
if (proxy) {
|
if (proxy) {
|
||||||
|
proxy->set_custom_ui_mode (false);
|
||||||
proxy->toggle ();
|
proxy->toggle ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2629,6 +2630,7 @@ ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* b
|
||||||
, _processor_box (box)
|
, _processor_box (box)
|
||||||
, _processor (processor)
|
, _processor (processor)
|
||||||
, is_custom (false)
|
, is_custom (false)
|
||||||
|
, want_custom (false)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -2640,6 +2642,38 @@ ProcessorWindowProxy::session_handle()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XMLNode&
|
||||||
|
ProcessorWindowProxy::get_state () const
|
||||||
|
{
|
||||||
|
XMLNode *node;
|
||||||
|
node = &ProxyBase::get_state();
|
||||||
|
node->add_property (X_("custom-ui"), is_custom? X_("yes") : X_("no"));
|
||||||
|
return *node;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ProcessorWindowProxy::set_state (const XMLNode& node)
|
||||||
|
{
|
||||||
|
XMLNodeList children = node.children ();
|
||||||
|
XMLNodeList::const_iterator i = children.begin ();
|
||||||
|
while (i != children.end()) {
|
||||||
|
XMLProperty* prop = (*i)->property (X_("name"));
|
||||||
|
if ((*i)->name() == X_("Window") && prop && prop->value() == _name) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != children.end()) {
|
||||||
|
XMLProperty* prop;
|
||||||
|
if ((prop = (*i)->property (X_("custom-ui"))) != 0) {
|
||||||
|
want_custom = PBD::string_is_affirmative (prop->value ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ProxyBase::set_state(node);
|
||||||
|
}
|
||||||
|
|
||||||
Gtk::Window*
|
Gtk::Window*
|
||||||
ProcessorWindowProxy::get (bool create)
|
ProcessorWindowProxy::get (bool create)
|
||||||
{
|
{
|
||||||
|
|
@ -2648,8 +2682,7 @@ ProcessorWindowProxy::get (bool create)
|
||||||
if (!p) {
|
if (!p) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (_window && (is_custom != want_custom)) {
|
||||||
if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
|
|
||||||
/* drop existing window - wrong type */
|
/* drop existing window - wrong type */
|
||||||
drop_window ();
|
drop_window ();
|
||||||
}
|
}
|
||||||
|
|
@ -2659,8 +2692,8 @@ ProcessorWindowProxy::get (bool create)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_window = _processor_box->get_editor_window (p);
|
is_custom = want_custom;
|
||||||
is_custom = Config->get_use_plugin_own_gui();
|
_window = _processor_box->get_editor_window (p, is_custom);
|
||||||
|
|
||||||
if (_window) {
|
if (_window) {
|
||||||
setup ();
|
setup ();
|
||||||
|
|
@ -2673,10 +2706,11 @@ ProcessorWindowProxy::get (bool create)
|
||||||
void
|
void
|
||||||
ProcessorWindowProxy::toggle ()
|
ProcessorWindowProxy::toggle ()
|
||||||
{
|
{
|
||||||
if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
|
if (_window && (is_custom != want_custom)) {
|
||||||
/* drop existing window - wrong type */
|
/* drop existing window - wrong type */
|
||||||
drop_window ();
|
drop_window ();
|
||||||
}
|
}
|
||||||
|
is_custom = want_custom;
|
||||||
|
|
||||||
WM::ProxyBase::toggle ();
|
WM::ProxyBase::toggle ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,13 +88,18 @@ class ProcessorWindowProxy : public WM::ProxyBase
|
||||||
|
|
||||||
ARDOUR::SessionHandlePtr* session_handle();
|
ARDOUR::SessionHandlePtr* session_handle();
|
||||||
void toggle();
|
void toggle();
|
||||||
|
void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; }
|
||||||
|
|
||||||
bool marked;
|
bool marked;
|
||||||
|
|
||||||
|
void set_state (const XMLNode&);
|
||||||
|
XMLNode& get_state () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ProcessorBox* _processor_box;
|
ProcessorBox* _processor_box;
|
||||||
boost::weak_ptr<ARDOUR::Processor> _processor;
|
boost::weak_ptr<ARDOUR::Processor> _processor;
|
||||||
bool is_custom;
|
bool is_custom;
|
||||||
|
bool want_custom;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
|
class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
|
||||||
|
|
@ -257,7 +262,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
|
||||||
Gtk::Window* get_processor_ui (boost::shared_ptr<ARDOUR::Processor>) const;
|
Gtk::Window* get_processor_ui (boost::shared_ptr<ARDOUR::Processor>) const;
|
||||||
|
|
||||||
/* a WindowProxy object can use this */
|
/* a WindowProxy object can use this */
|
||||||
Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>);
|
Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>, bool);
|
||||||
Gtk::Window* get_generic_editor_window (boost::shared_ptr<ARDOUR::Processor>);
|
Gtk::Window* get_generic_editor_window (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
|
|
||||||
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
|
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
|
|
|
||||||
|
|
@ -653,7 +653,7 @@ public:
|
||||||
{
|
{
|
||||||
_store = ListStore::create (_model);
|
_store = ListStore::create (_model);
|
||||||
_view.set_model (_store);
|
_view.set_model (_store);
|
||||||
_view.append_column (_("Name"), _model.name);
|
_view.append_column (_("Control Surface Protocol"), _model.name);
|
||||||
_view.get_column(0)->set_resizable (true);
|
_view.get_column(0)->set_resizable (true);
|
||||||
_view.get_column(0)->set_expand (true);
|
_view.get_column(0)->set_expand (true);
|
||||||
_view.append_column_editable (_("Enabled"), _model.enabled);
|
_view.append_column_editable (_("Enabled"), _model.enabled);
|
||||||
|
|
@ -1813,9 +1813,9 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
|
|
||||||
add_option (_("User interaction"), new KeyboardOptions);
|
add_option (_("User interaction"), new KeyboardOptions);
|
||||||
|
|
||||||
add_option (_("User interaction"), new OptionEditorHeading (_("Control surfaces")));
|
/* Control Surfaces */
|
||||||
|
|
||||||
add_option (_("User interaction"), new ControlSurfacesOptions (*this));
|
add_option (_("Control Surfaces"), new ControlSurfacesOptions (*this));
|
||||||
|
|
||||||
ComboOption<RemoteModel>* rm = new ComboOption<RemoteModel> (
|
ComboOption<RemoteModel>* rm = new ComboOption<RemoteModel> (
|
||||||
"remote-model",
|
"remote-model",
|
||||||
|
|
@ -1828,14 +1828,14 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
rm->add (MixerOrdered, _("follows order of mixer"));
|
rm->add (MixerOrdered, _("follows order of mixer"));
|
||||||
rm->add (EditorOrdered, _("follows order of editor"));
|
rm->add (EditorOrdered, _("follows order of editor"));
|
||||||
|
|
||||||
add_option (_("User interaction"), rm);
|
add_option (_("Control Surfaces"), rm);
|
||||||
|
|
||||||
/* VIDEO Timeline */
|
/* VIDEO Timeline */
|
||||||
add_option (_("Video"), new VideoTimelineOptions (_rc_config));
|
add_option (_("Video"), new VideoTimelineOptions (_rc_config));
|
||||||
|
|
||||||
/* INTERFACE */
|
/* INTERFACE */
|
||||||
|
|
||||||
add_option (S_("GUI"),
|
add_option (S_("Preferences|GUI"),
|
||||||
new BoolOption (
|
new BoolOption (
|
||||||
"widget-prelight",
|
"widget-prelight",
|
||||||
_("Graphically indicate mouse pointer hovering over various widgets"),
|
_("Graphically indicate mouse pointer hovering over various widgets"),
|
||||||
|
|
@ -1843,7 +1843,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_widget_prelight)
|
sigc::mem_fun (*_rc_config, &RCConfiguration::set_widget_prelight)
|
||||||
));
|
));
|
||||||
|
|
||||||
add_option (S_("GUI"),
|
add_option (S_("Preferences|GUI"),
|
||||||
new BoolOption (
|
new BoolOption (
|
||||||
"use-tooltips",
|
"use-tooltips",
|
||||||
_("Show tooltips if mouse hovers over a control"),
|
_("Show tooltips if mouse hovers over a control"),
|
||||||
|
|
@ -1853,9 +1853,9 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
|
|
||||||
#ifndef GTKOSX
|
#ifndef GTKOSX
|
||||||
/* font scaling does nothing with GDK/Quartz */
|
/* font scaling does nothing with GDK/Quartz */
|
||||||
add_option (S_("GUI"), new FontScalingOptions (_rc_config));
|
add_option (S_("Preferences|GUI"), new FontScalingOptions (_rc_config));
|
||||||
#endif
|
#endif
|
||||||
add_option (S_("GUI"),
|
add_option (S_("Preferences|GUI"),
|
||||||
new BoolOption (
|
new BoolOption (
|
||||||
"use-own-plugin-gui",
|
"use-own-plugin-gui",
|
||||||
string_compose (_("Use plugins' own interfaces instead of %1's"), PROGRAM_NAME),
|
string_compose (_("Use plugins' own interfaces instead of %1's"), PROGRAM_NAME),
|
||||||
|
|
@ -1881,7 +1881,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
_mixer_strip_visibility.add (0, X_("MeterPoint"), _("Meter Point"));
|
_mixer_strip_visibility.add (0, X_("MeterPoint"), _("Meter Point"));
|
||||||
|
|
||||||
add_option (
|
add_option (
|
||||||
S_("GUI"),
|
S_("Preferences|GUI"),
|
||||||
new VisibilityOption (
|
new VisibilityOption (
|
||||||
_("Mixer Strip"),
|
_("Mixer Strip"),
|
||||||
&_mixer_strip_visibility,
|
&_mixer_strip_visibility,
|
||||||
|
|
@ -1890,7 +1890,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
add_option (S_("GUI"),
|
add_option (S_("Preferences|GUI"),
|
||||||
new BoolOption (
|
new BoolOption (
|
||||||
"default-narrow_ms",
|
"default-narrow_ms",
|
||||||
_("Use narrow strips in the mixer by default"),
|
_("Use narrow strips in the mixer by default"),
|
||||||
|
|
@ -1898,7 +1898,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_narrow_ms)
|
sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_narrow_ms)
|
||||||
));
|
));
|
||||||
|
|
||||||
add_option (S_("GUI"), new OptionEditorHeading (_("Metering")));
|
add_option (S_("Preferences|GUI"), new OptionEditorHeading (_("Metering")));
|
||||||
|
|
||||||
ComboOption<float>* mht = new ComboOption<float> (
|
ComboOption<float>* mht = new ComboOption<float> (
|
||||||
"meter-hold",
|
"meter-hold",
|
||||||
|
|
@ -1912,7 +1912,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
mht->add (MeterHoldMedium, _("medium"));
|
mht->add (MeterHoldMedium, _("medium"));
|
||||||
mht->add (MeterHoldLong, _("long"));
|
mht->add (MeterHoldLong, _("long"));
|
||||||
|
|
||||||
add_option (S_("GUI"), mht);
|
add_option (S_("Preferences|GUI"), mht);
|
||||||
|
|
||||||
ComboOption<float>* mfo = new ComboOption<float> (
|
ComboOption<float>* mfo = new ComboOption<float> (
|
||||||
"meter-falloff",
|
"meter-falloff",
|
||||||
|
|
@ -1929,7 +1929,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
mfo->add (METER_FALLOFF_FASTER, _("faster"));
|
mfo->add (METER_FALLOFF_FASTER, _("faster"));
|
||||||
mfo->add (METER_FALLOFF_FASTEST, _("fastest"));
|
mfo->add (METER_FALLOFF_FASTEST, _("fastest"));
|
||||||
|
|
||||||
add_option (S_("GUI"), mfo);
|
add_option (S_("Preferences|GUI"), mfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,9 @@ StepEditor::step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity, Evo
|
||||||
assert (step_edit_region);
|
assert (step_edit_region);
|
||||||
assert (step_edit_region_view);
|
assert (step_edit_region_view);
|
||||||
|
|
||||||
if (beat_duration == 0.0) {
|
if (beat_duration == 0.0 && step_editor) {
|
||||||
|
beat_duration = step_editor->note_length();
|
||||||
|
} else if (beat_duration == 0.0) {
|
||||||
bool success;
|
bool success;
|
||||||
beat_duration = _editor.get_grid_type_as_beats (success, step_edit_insert_position);
|
beat_duration = _editor.get_grid_type_as_beats (success, step_edit_insert_position);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include "ardour_dialog.h"
|
#include "ardour_dialog.h"
|
||||||
#include "ardour_window.h"
|
#include "ardour_window.h"
|
||||||
#include "window_manager.h"
|
#include "window_manager.h"
|
||||||
|
#include "processor_box.h"
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
|
|
@ -106,7 +107,12 @@ Manager::add_state (XMLNode& root) const
|
||||||
if (dynamic_cast<ProxyTemporary*> (*i)) {
|
if (dynamic_cast<ProxyTemporary*> (*i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
root.add_child_nocopy ((*i)->get_state());
|
if (dynamic_cast<ProcessorWindowProxy*> (*i)) {
|
||||||
|
ProcessorWindowProxy *pi = dynamic_cast<ProcessorWindowProxy*> (*i);
|
||||||
|
root.add_child_nocopy (pi->get_state());
|
||||||
|
} else {
|
||||||
|
root.add_child_nocopy ((*i)->get_state());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,8 +120,14 @@ public:
|
||||||
*/
|
*/
|
||||||
LV2_Evbuf* get_lv2_midi(bool input, size_t i, bool old_api);
|
LV2_Evbuf* get_lv2_midi(bool input, size_t i, bool old_api);
|
||||||
|
|
||||||
|
/** ensure minimum size of LV2 Atom port buffer */
|
||||||
|
void ensure_lv2_bufsize(bool input, size_t i, size_t buffer_capacity);
|
||||||
|
|
||||||
/** Flush modified LV2 event output buffers back to Ardour buffers */
|
/** Flush modified LV2 event output buffers back to Ardour buffers */
|
||||||
void flush_lv2_midi(bool input, size_t i);
|
void flush_lv2_midi(bool input, size_t i);
|
||||||
|
|
||||||
|
/** Forward plugin MIDI output to to Ardour buffers */
|
||||||
|
void forward_lv2_midi(LV2_Evbuf*, size_t, bool purge_ardour_buffer = true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined VST_SUPPORT || defined LXVST_SUPPORT
|
#if defined VST_SUPPORT || defined LXVST_SUPPORT
|
||||||
|
|
|
||||||
|
|
@ -122,16 +122,13 @@ class ExportProfileManager
|
||||||
TimespanListPtr timespans;
|
TimespanListPtr timespans;
|
||||||
TimeFormat time_format;
|
TimeFormat time_format;
|
||||||
|
|
||||||
boost::shared_ptr<Location> session_range;
|
|
||||||
boost::shared_ptr<Location> selection_range;
|
boost::shared_ptr<Location> selection_range;
|
||||||
boost::shared_ptr<LocationList> ranges;
|
boost::shared_ptr<LocationList> ranges;
|
||||||
|
|
||||||
TimespanState (boost::shared_ptr<Location> session_range,
|
TimespanState (boost::shared_ptr<Location> selection_range,
|
||||||
boost::shared_ptr<Location> selection_range,
|
|
||||||
boost::shared_ptr<LocationList> ranges)
|
boost::shared_ptr<LocationList> ranges)
|
||||||
: timespans (new TimespanList ())
|
: timespans (new TimespanList ())
|
||||||
, time_format (Timecode)
|
, time_format (Timecode)
|
||||||
, session_range (session_range)
|
|
||||||
, selection_range (selection_range)
|
, selection_range (selection_range)
|
||||||
, ranges (ranges)
|
, ranges (ranges)
|
||||||
{}
|
{}
|
||||||
|
|
@ -157,7 +154,6 @@ class ExportProfileManager
|
||||||
|
|
||||||
void update_ranges ();
|
void update_ranges ();
|
||||||
|
|
||||||
boost::shared_ptr<Location> session_range;
|
|
||||||
boost::shared_ptr<Location> selection_range;
|
boost::shared_ptr<Location> selection_range;
|
||||||
boost::shared_ptr<LocationList> ranges;
|
boost::shared_ptr<LocationList> ranges;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,7 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
|
||||||
typedef unsigned PortFlags;
|
typedef unsigned PortFlags;
|
||||||
|
|
||||||
std::vector<PortFlags> _port_flags;
|
std::vector<PortFlags> _port_flags;
|
||||||
|
std::vector<size_t> _port_minimumSize;
|
||||||
std::map<std::string,uint32_t> _port_indices;
|
std::map<std::string,uint32_t> _port_indices;
|
||||||
|
|
||||||
/// Message send to/from UI via ports
|
/// Message send to/from UI via ports
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,25 @@ BufferSet::get(DataType type, size_t i) const
|
||||||
|
|
||||||
#ifdef LV2_SUPPORT
|
#ifdef LV2_SUPPORT
|
||||||
|
|
||||||
|
void
|
||||||
|
BufferSet::ensure_lv2_bufsize(bool input, size_t i, size_t buffer_capacity)
|
||||||
|
{
|
||||||
|
assert(count().get(DataType::MIDI) > i);
|
||||||
|
|
||||||
|
LV2Buffers::value_type b = _lv2_buffers.at(i * 2 + (input ? 0 : 1));
|
||||||
|
LV2_Evbuf* evbuf = b.second;
|
||||||
|
|
||||||
|
if (lv2_evbuf_get_capacity(evbuf) >= buffer_capacity) return;
|
||||||
|
|
||||||
|
lv2_evbuf_free(b.second);
|
||||||
|
_lv2_buffers.at(i * 2 + (input ? 0 : 1)) =
|
||||||
|
std::make_pair(false, lv2_evbuf_new(
|
||||||
|
buffer_capacity,
|
||||||
|
LV2_EVBUF_EVENT,
|
||||||
|
LV2Plugin::urids.atom_Chunk,
|
||||||
|
LV2Plugin::urids.atom_Sequence));
|
||||||
|
}
|
||||||
|
|
||||||
LV2_Evbuf*
|
LV2_Evbuf*
|
||||||
BufferSet::get_lv2_midi(bool input, size_t i, bool old_api)
|
BufferSet::get_lv2_midi(bool input, size_t i, bool old_api)
|
||||||
{
|
{
|
||||||
|
|
@ -265,6 +284,25 @@ BufferSet::get_lv2_midi(bool input, size_t i, bool old_api)
|
||||||
return evbuf;
|
return evbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BufferSet::forward_lv2_midi(LV2_Evbuf* buf, size_t i, bool purge_ardour_buffer)
|
||||||
|
{
|
||||||
|
MidiBuffer& mbuf = get_midi(i);
|
||||||
|
if (purge_ardour_buffer) {
|
||||||
|
mbuf.silence(0, 0);
|
||||||
|
}
|
||||||
|
for (LV2_Evbuf_Iterator i = lv2_evbuf_begin(buf);
|
||||||
|
lv2_evbuf_is_valid(i);
|
||||||
|
i = lv2_evbuf_next(i)) {
|
||||||
|
uint32_t frames, subframes, type, size;
|
||||||
|
uint8_t* data;
|
||||||
|
lv2_evbuf_get(i, &frames, &subframes, &type, &size, &data);
|
||||||
|
if (type == LV2Plugin::urids.midi_MidiEvent) {
|
||||||
|
mbuf.push_back(frames, size, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
BufferSet::flush_lv2_midi(bool input, size_t i)
|
BufferSet::flush_lv2_midi(bool input, size_t i)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,6 @@ ExportProfileManager::ExportProfileManager (Session & s, ExportType type)
|
||||||
, handler (s.get_export_handler())
|
, handler (s.get_export_handler())
|
||||||
, session (s)
|
, session (s)
|
||||||
|
|
||||||
, session_range (new Location (s))
|
|
||||||
, ranges (new LocationList ())
|
, ranges (new LocationList ())
|
||||||
, single_range_mode (false)
|
, single_range_mode (false)
|
||||||
|
|
||||||
|
|
@ -385,13 +384,16 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timespans.empty()) {
|
if (timespans.empty()) {
|
||||||
TimespanStatePtr state (new TimespanState (session_range, selection_range, ranges));
|
TimespanStatePtr state (new TimespanState (selection_range, ranges));
|
||||||
timespans.push_back (state);
|
timespans.push_back (state);
|
||||||
|
|
||||||
// Add session as default selection
|
// Add session as default selection
|
||||||
|
Location * session_range = session.locations()->session_range_location();
|
||||||
|
if (!session_range) { return false; }
|
||||||
|
|
||||||
ExportTimespanPtr timespan = handler->add_timespan();
|
ExportTimespanPtr timespan = handler->add_timespan();
|
||||||
timespan->set_name (session_range->name());
|
timespan->set_name (session_range->name());
|
||||||
timespan->set_range_id ("session");
|
timespan->set_range_id (session_range->id().to_s());
|
||||||
timespan->set_range (session_range->start(), session_range->end());
|
timespan->set_range (session_range->start(), session_range->end());
|
||||||
state->timespans->push_back (timespan);
|
state->timespans->push_back (timespan);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -403,7 +405,7 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
|
||||||
ExportProfileManager::TimespanStatePtr
|
ExportProfileManager::TimespanStatePtr
|
||||||
ExportProfileManager::deserialize_timespan (XMLNode & root)
|
ExportProfileManager::deserialize_timespan (XMLNode & root)
|
||||||
{
|
{
|
||||||
TimespanStatePtr state (new TimespanState (session_range, selection_range, ranges));
|
TimespanStatePtr state (new TimespanState (selection_range, ranges));
|
||||||
XMLProperty const * prop;
|
XMLProperty const * prop;
|
||||||
|
|
||||||
XMLNodeList spans = root.children ("Range");
|
XMLNodeList spans = root.children ("Range");
|
||||||
|
|
@ -413,23 +415,32 @@ ExportProfileManager::deserialize_timespan (XMLNode & root)
|
||||||
if (!prop) { continue; }
|
if (!prop) { continue; }
|
||||||
string id = prop->value();
|
string id = prop->value();
|
||||||
|
|
||||||
|
Location * location = 0;
|
||||||
for (LocationList::iterator it = ranges->begin(); it != ranges->end(); ++it) {
|
for (LocationList::iterator it = ranges->begin(); it != ranges->end(); ++it) {
|
||||||
if ((!id.compare ("session") && *it == session_range.get()) ||
|
if ((id == "selection" && *it == selection_range.get()) ||
|
||||||
(!id.compare ("selection") && *it == selection_range.get()) ||
|
(id == (*it)->id().to_s())) {
|
||||||
(!id.compare ((*it)->id().to_s()))) {
|
location = *it;
|
||||||
ExportTimespanPtr timespan = handler->add_timespan();
|
break;
|
||||||
timespan->set_name ((*it)->name());
|
|
||||||
timespan->set_range_id (id);
|
|
||||||
timespan->set_range ((*it)->start(), (*it)->end());
|
|
||||||
state->timespans->push_back (timespan);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!location) { continue; }
|
||||||
|
|
||||||
|
ExportTimespanPtr timespan = handler->add_timespan();
|
||||||
|
timespan->set_name (location->name());
|
||||||
|
timespan->set_range_id (location->id().to_s());
|
||||||
|
timespan->set_range (location->start(), location->end());
|
||||||
|
state->timespans->push_back (timespan);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = root.property ("format"))) {
|
if ((prop = root.property ("format"))) {
|
||||||
state->time_format = (TimeFormat) string_2_enum (prop->value(), TimeFormat);
|
state->time_format = (TimeFormat) string_2_enum (prop->value(), TimeFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state->timespans->empty()) {
|
||||||
|
return TimespanStatePtr();
|
||||||
|
}
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -440,7 +451,6 @@ ExportProfileManager::serialize_timespan (TimespanStatePtr state)
|
||||||
XMLNode * span;
|
XMLNode * span;
|
||||||
|
|
||||||
update_ranges ();
|
update_ranges ();
|
||||||
|
|
||||||
for (TimespanList::iterator it = state->timespans->begin(); it != state->timespans->end(); ++it) {
|
for (TimespanList::iterator it = state->timespans->begin(); it != state->timespans->end(); ++it) {
|
||||||
if ((span = root.add_child ("Range"))) {
|
if ((span = root.add_child ("Range"))) {
|
||||||
span->add_property ("id", (*it)->range_id());
|
span->add_property ("id", (*it)->range_id());
|
||||||
|
|
@ -463,9 +473,10 @@ ExportProfileManager::update_ranges () {
|
||||||
|
|
||||||
/* Session */
|
/* Session */
|
||||||
|
|
||||||
session_range->set_name (_("Session"));
|
Location * session_range = session.locations()->session_range_location();
|
||||||
session_range->set (session.current_start_frame(), session.current_end_frame());
|
if (session_range) {
|
||||||
ranges->push_back (session_range.get());
|
ranges->push_back (session_range);
|
||||||
|
}
|
||||||
|
|
||||||
/* Selection */
|
/* Selection */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ vstfx_infofile_path (char* dllpath, int personal)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
dir = Glib::path_get_dirname (dllpath);
|
dir = Glib::path_get_dirname (std::string(dllpath));
|
||||||
}
|
}
|
||||||
|
|
||||||
stringstream s;
|
stringstream s;
|
||||||
|
|
@ -214,6 +214,7 @@ vstfx_infofile_for_read (char* dllpath)
|
||||||
{
|
{
|
||||||
struct stat own_statbuf;
|
struct stat own_statbuf;
|
||||||
struct stat sys_statbuf;
|
struct stat sys_statbuf;
|
||||||
|
FILE *rv = NULL;
|
||||||
|
|
||||||
char* own_info = vstfx_infofile_stat (dllpath, &own_statbuf, 1);
|
char* own_info = vstfx_infofile_stat (dllpath, &own_statbuf, 1);
|
||||||
char* sys_info = vstfx_infofile_stat (dllpath, &sys_statbuf, 0);
|
char* sys_info = vstfx_infofile_stat (dllpath, &sys_statbuf, 0);
|
||||||
|
|
@ -222,14 +223,16 @@ vstfx_infofile_for_read (char* dllpath)
|
||||||
if (sys_info) {
|
if (sys_info) {
|
||||||
if (own_statbuf.st_mtime <= sys_statbuf.st_mtime) {
|
if (own_statbuf.st_mtime <= sys_statbuf.st_mtime) {
|
||||||
/* system info file is newer, use it */
|
/* system info file is newer, use it */
|
||||||
return g_fopen (sys_info, "rb");
|
rv = g_fopen (sys_info, "rb");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return g_fopen (own_info, "rb");
|
rv = g_fopen (own_info, "rb");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(own_info);
|
||||||
|
free(sys_info);
|
||||||
|
|
||||||
return 0;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FILE *
|
static FILE *
|
||||||
|
|
@ -416,6 +419,8 @@ vstfx_free_info (VSTInfo *info)
|
||||||
free (info->name);
|
free (info->name);
|
||||||
free (info->creator);
|
free (info->creator);
|
||||||
free (info->Category);
|
free (info->Category);
|
||||||
|
free (info->ParamNames);
|
||||||
|
free (info->ParamLabels);
|
||||||
free (info);
|
free (info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -379,6 +379,7 @@ void vstfx_close (VSTState* vstfx)
|
||||||
dlclose(vstfx->handle->dll); //dlclose keeps its own reference count
|
dlclose(vstfx->handle->dll); //dlclose keeps its own reference count
|
||||||
vstfx->handle->dll = 0;
|
vstfx->handle->dll = 0;
|
||||||
}
|
}
|
||||||
|
free(vstfx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,12 @@ lv2_evbuf_get_size(LV2_Evbuf* evbuf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
lv2_evbuf_get_capacity(LV2_Evbuf* evbuf)
|
||||||
|
{
|
||||||
|
return evbuf->capacity;
|
||||||
|
}
|
||||||
|
|
||||||
void*
|
void*
|
||||||
lv2_evbuf_get_buffer(LV2_Evbuf* evbuf)
|
lv2_evbuf_get_buffer(LV2_Evbuf* evbuf)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,12 @@ lv2_evbuf_reset(LV2_Evbuf* evbuf, bool input);
|
||||||
uint32_t
|
uint32_t
|
||||||
lv2_evbuf_get_size(LV2_Evbuf* evbuf);
|
lv2_evbuf_get_size(LV2_Evbuf* evbuf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return the available capacity of the buffer
|
||||||
|
*/
|
||||||
|
uint32_t
|
||||||
|
lv2_evbuf_get_capacity(LV2_Evbuf* evbuf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return the actual buffer implementation.
|
Return the actual buffer implementation.
|
||||||
The format of the buffer returned depends on the buffer type.
|
The format of the buffer returned depends on the buffer type.
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@
|
||||||
#include "lv2/lv2plug.in/ns/ext/state/state.h"
|
#include "lv2/lv2plug.in/ns/ext/state/state.h"
|
||||||
#include "lv2/lv2plug.in/ns/ext/time/time.h"
|
#include "lv2/lv2plug.in/ns/ext/time/time.h"
|
||||||
#include "lv2/lv2plug.in/ns/ext/worker/worker.h"
|
#include "lv2/lv2plug.in/ns/ext/worker/worker.h"
|
||||||
|
#include "lv2/lv2plug.in/ns/ext/resize-port/resize-port.h"
|
||||||
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
|
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
|
||||||
#ifdef HAVE_NEW_LV2
|
#ifdef HAVE_NEW_LV2
|
||||||
#include "lv2/lv2plug.in/ns/ext/buf-size/buf-size.h"
|
#include "lv2/lv2plug.in/ns/ext/buf-size/buf-size.h"
|
||||||
|
|
@ -119,6 +120,7 @@ public:
|
||||||
LilvNode* atom_supports;
|
LilvNode* atom_supports;
|
||||||
LilvNode* ev_EventPort;
|
LilvNode* ev_EventPort;
|
||||||
LilvNode* ext_logarithmic;
|
LilvNode* ext_logarithmic;
|
||||||
|
LilvNode* ext_notOnGUI;
|
||||||
LilvNode* lv2_AudioPort;
|
LilvNode* lv2_AudioPort;
|
||||||
LilvNode* lv2_ControlPort;
|
LilvNode* lv2_ControlPort;
|
||||||
LilvNode* lv2_InputPort;
|
LilvNode* lv2_InputPort;
|
||||||
|
|
@ -126,10 +128,12 @@ public:
|
||||||
LilvNode* lv2_enumeration;
|
LilvNode* lv2_enumeration;
|
||||||
LilvNode* lv2_inPlaceBroken;
|
LilvNode* lv2_inPlaceBroken;
|
||||||
LilvNode* lv2_integer;
|
LilvNode* lv2_integer;
|
||||||
|
LilvNode* lv2_reportsLatency;
|
||||||
LilvNode* lv2_sampleRate;
|
LilvNode* lv2_sampleRate;
|
||||||
LilvNode* lv2_toggled;
|
LilvNode* lv2_toggled;
|
||||||
LilvNode* midi_MidiEvent;
|
LilvNode* midi_MidiEvent;
|
||||||
LilvNode* rdfs_comment;
|
LilvNode* rdfs_comment;
|
||||||
|
LilvNode* rsz_minimumSize;
|
||||||
LilvNode* time_Position;
|
LilvNode* time_Position;
|
||||||
LilvNode* ui_GtkUI;
|
LilvNode* ui_GtkUI;
|
||||||
LilvNode* ui_external;
|
LilvNode* ui_external;
|
||||||
|
|
@ -406,6 +410,7 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||||
for (uint32_t i = 0; i < num_ports; ++i) {
|
for (uint32_t i = 0; i < num_ports; ++i) {
|
||||||
const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, i);
|
const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, i);
|
||||||
PortFlags flags = 0;
|
PortFlags flags = 0;
|
||||||
|
size_t minimumSize = 0;
|
||||||
|
|
||||||
if (lilv_port_is_a(_impl->plugin, port, _world.lv2_OutputPort)) {
|
if (lilv_port_is_a(_impl->plugin, port, _world.lv2_OutputPort)) {
|
||||||
flags |= PORT_OUTPUT;
|
flags |= PORT_OUTPUT;
|
||||||
|
|
@ -440,6 +445,12 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||||
flags |= PORT_POSITION;
|
flags |= PORT_POSITION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LilvNodes* min_size_v = lilv_port_get_value(_impl->plugin, port, _world.rsz_minimumSize);
|
||||||
|
LilvNode* min_size = min_size_v ? lilv_nodes_get_first(min_size_v) : NULL;
|
||||||
|
if (min_size && lilv_node_is_int(min_size)) {
|
||||||
|
minimumSize = lilv_node_as_int(min_size);
|
||||||
|
}
|
||||||
|
lilv_nodes_free(min_size_v);
|
||||||
lilv_nodes_free(buffer_types);
|
lilv_nodes_free(buffer_types);
|
||||||
lilv_nodes_free(atom_supports);
|
lilv_nodes_free(atom_supports);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -450,6 +461,7 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||||
}
|
}
|
||||||
|
|
||||||
_port_flags.push_back(flags);
|
_port_flags.push_back(flags);
|
||||||
|
_port_minimumSize.push_back(minimumSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
_control_data = new float[num_ports];
|
_control_data = new float[num_ports];
|
||||||
|
|
@ -1319,6 +1331,16 @@ string
|
||||||
LV2Plugin::describe_parameter(Evoral::Parameter which)
|
LV2Plugin::describe_parameter(Evoral::Parameter which)
|
||||||
{
|
{
|
||||||
if (( which.type() == PluginAutomation) && ( which.id() < parameter_count()) ) {
|
if (( which.type() == PluginAutomation) && ( which.id() < parameter_count()) ) {
|
||||||
|
|
||||||
|
if (lilv_port_has_property(_impl->plugin,
|
||||||
|
lilv_plugin_get_port_by_index(_impl->plugin, which.id()), _world.ext_notOnGUI)) {
|
||||||
|
return X_("hidden");
|
||||||
|
}
|
||||||
|
if (lilv_port_has_property(_impl->plugin,
|
||||||
|
lilv_plugin_get_port_by_index(_impl->plugin, which.id()), _world.lv2_reportsLatency)) {
|
||||||
|
return X_("latency");
|
||||||
|
}
|
||||||
|
|
||||||
LilvNode* name = lilv_port_get_name(_impl->plugin,
|
LilvNode* name = lilv_port_get_name(_impl->plugin,
|
||||||
lilv_plugin_get_port_by_index(_impl->plugin, which.id()));
|
lilv_plugin_get_port_by_index(_impl->plugin, which.id()));
|
||||||
string ret(lilv_node_as_string(name));
|
string ret(lilv_node_as_string(name));
|
||||||
|
|
@ -1397,6 +1419,7 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||||
*/
|
*/
|
||||||
int count_atom_out = 0;
|
int count_atom_out = 0;
|
||||||
int count_atom_in = 0;
|
int count_atom_in = 0;
|
||||||
|
int minimumSize = 32768; // TODO use a per-port minimum-size
|
||||||
for (uint32_t i = 0; i < lilv_plugin_get_num_ports(p); ++i) {
|
for (uint32_t i = 0; i < lilv_plugin_get_num_ports(p); ++i) {
|
||||||
const LilvPort* port = lilv_plugin_get_port_by_index(p, i);
|
const LilvPort* port = lilv_plugin_get_port_by_index(p, i);
|
||||||
if (lilv_port_is_a(p, port, _world.atom_AtomPort)) {
|
if (lilv_port_is_a(p, port, _world.atom_AtomPort)) {
|
||||||
|
|
@ -1413,6 +1436,12 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||||
if (lilv_port_is_a(p, port, _world.lv2_OutputPort)) {
|
if (lilv_port_is_a(p, port, _world.lv2_OutputPort)) {
|
||||||
count_atom_out++;
|
count_atom_out++;
|
||||||
}
|
}
|
||||||
|
LilvNodes* min_size_v = lilv_port_get_value(_impl->plugin, port, _world.rsz_minimumSize);
|
||||||
|
LilvNode* min_size = min_size_v ? lilv_nodes_get_first(min_size_v) : NULL;
|
||||||
|
if (min_size && lilv_node_is_int(min_size)) {
|
||||||
|
minimumSize = std::max(minimumSize, lilv_node_as_int(min_size));
|
||||||
|
}
|
||||||
|
lilv_nodes_free(min_size_v);
|
||||||
}
|
}
|
||||||
lilv_nodes_free(buffer_types);
|
lilv_nodes_free(buffer_types);
|
||||||
lilv_nodes_free(atom_supports);
|
lilv_nodes_free(atom_supports);
|
||||||
|
|
@ -1430,7 +1459,7 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||||
DEBUG_TRACE(DEBUG::LV2, string_compose("allocate %1 atom_ev_buffers\n", total_atom_buffers));
|
DEBUG_TRACE(DEBUG::LV2, string_compose("allocate %1 atom_ev_buffers\n", total_atom_buffers));
|
||||||
_atom_ev_buffers = (LV2_Evbuf**) malloc((total_atom_buffers + 1) * sizeof(LV2_Evbuf*));
|
_atom_ev_buffers = (LV2_Evbuf**) malloc((total_atom_buffers + 1) * sizeof(LV2_Evbuf*));
|
||||||
for (int i = 0; i < total_atom_buffers; ++i ) {
|
for (int i = 0; i < total_atom_buffers; ++i ) {
|
||||||
_atom_ev_buffers[i] = lv2_evbuf_new(32768, LV2_EVBUF_ATOM,
|
_atom_ev_buffers[i] = lv2_evbuf_new(minimumSize, LV2_EVBUF_ATOM,
|
||||||
LV2Plugin::urids.atom_Chunk, LV2Plugin::urids.atom_Sequence);
|
LV2Plugin::urids.atom_Chunk, LV2Plugin::urids.atom_Sequence);
|
||||||
}
|
}
|
||||||
_atom_ev_buffers[total_atom_buffers] = 0;
|
_atom_ev_buffers[total_atom_buffers] = 0;
|
||||||
|
|
@ -1539,6 +1568,12 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
|
||||||
index = out_map.get(DataType::MIDI, midi_out_index++, &valid);
|
index = out_map.get(DataType::MIDI, midi_out_index++, &valid);
|
||||||
}
|
}
|
||||||
if (valid && bufs.count().n_midi() > index) {
|
if (valid && bufs.count().n_midi() > index) {
|
||||||
|
/* Note, ensure_lv2_bufsize() is not RT safe!
|
||||||
|
* However free()/alloc() is only called if a
|
||||||
|
* plugin requires a rsz:minimumSize buffersize
|
||||||
|
* and the existing buffer if smaller.
|
||||||
|
*/
|
||||||
|
bufs.ensure_lv2_bufsize((flags & PORT_INPUT), index, _port_minimumSize[port_index]);
|
||||||
_ev_buffers[port_index] = bufs.get_lv2_midi(
|
_ev_buffers[port_index] = bufs.get_lv2_midi(
|
||||||
(flags & PORT_INPUT), index, (flags & PORT_EVENT));
|
(flags & PORT_INPUT), index, (flags & PORT_EVENT));
|
||||||
}
|
}
|
||||||
|
|
@ -1640,8 +1675,28 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
|
||||||
PortFlags flags = _port_flags[port_index];
|
PortFlags flags = _port_flags[port_index];
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
|
|
||||||
// Flush MIDI (write back to Ardour MIDI buffers)
|
/* TODO ask drobilla about comment
|
||||||
if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE))) {
|
* "Make Ardour event buffers generic so plugins can communicate"
|
||||||
|
* in libs/ardour/buffer_set.cc:310
|
||||||
|
*
|
||||||
|
* ideally the user could choose which of the following two modes
|
||||||
|
* to use (e.g. instrument/effect chains MIDI OUT vs MIDI TRHU).
|
||||||
|
*
|
||||||
|
* This implementation follows the discussion on IRC Mar 16 2013 16:47 UTC
|
||||||
|
* 16:51 < drobilla> rgareus: [..] i.e always replace with MIDI output [of LV2 plugin] if it's there
|
||||||
|
* 16:52 < drobilla> rgareus: That would probably be good enough [..] to make users not complain
|
||||||
|
* for quite a while at least ;)
|
||||||
|
*/
|
||||||
|
// copy output of LV2 plugin's MIDI port to Ardour MIDI buffers -- MIDI OUT
|
||||||
|
if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE|PORT_MIDI))) {
|
||||||
|
const uint32_t buf_index = out_map.get(
|
||||||
|
DataType::MIDI, midi_out_index++, &valid);
|
||||||
|
if (valid) {
|
||||||
|
bufs.forward_lv2_midi(_ev_buffers[port_index], buf_index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Flush MIDI (write back to Ardour MIDI buffers) -- MIDI THRU
|
||||||
|
else if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE))) {
|
||||||
const uint32_t buf_index = out_map.get(
|
const uint32_t buf_index = out_map.get(
|
||||||
DataType::MIDI, midi_out_index++, &valid);
|
DataType::MIDI, midi_out_index++, &valid);
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
|
@ -1836,17 +1891,20 @@ LV2World::LV2World()
|
||||||
atom_eventTransfer = lilv_new_uri(world, LV2_ATOM__eventTransfer);
|
atom_eventTransfer = lilv_new_uri(world, LV2_ATOM__eventTransfer);
|
||||||
ev_EventPort = lilv_new_uri(world, LILV_URI_EVENT_PORT);
|
ev_EventPort = lilv_new_uri(world, LILV_URI_EVENT_PORT);
|
||||||
ext_logarithmic = lilv_new_uri(world, LV2_PORT_PROPS__logarithmic);
|
ext_logarithmic = lilv_new_uri(world, LV2_PORT_PROPS__logarithmic);
|
||||||
|
ext_notOnGUI = lilv_new_uri(world, LV2_PORT_PROPS__notOnGUI);
|
||||||
lv2_AudioPort = lilv_new_uri(world, LILV_URI_AUDIO_PORT);
|
lv2_AudioPort = lilv_new_uri(world, LILV_URI_AUDIO_PORT);
|
||||||
lv2_ControlPort = lilv_new_uri(world, LILV_URI_CONTROL_PORT);
|
lv2_ControlPort = lilv_new_uri(world, LILV_URI_CONTROL_PORT);
|
||||||
lv2_InputPort = lilv_new_uri(world, LILV_URI_INPUT_PORT);
|
lv2_InputPort = lilv_new_uri(world, LILV_URI_INPUT_PORT);
|
||||||
lv2_OutputPort = lilv_new_uri(world, LILV_URI_OUTPUT_PORT);
|
lv2_OutputPort = lilv_new_uri(world, LILV_URI_OUTPUT_PORT);
|
||||||
lv2_inPlaceBroken = lilv_new_uri(world, LV2_CORE__inPlaceBroken);
|
lv2_inPlaceBroken = lilv_new_uri(world, LV2_CORE__inPlaceBroken);
|
||||||
lv2_integer = lilv_new_uri(world, LV2_CORE__integer);
|
lv2_integer = lilv_new_uri(world, LV2_CORE__integer);
|
||||||
|
lv2_reportsLatency = lilv_new_uri(world, LV2_CORE__reportsLatency);
|
||||||
lv2_sampleRate = lilv_new_uri(world, LV2_CORE__sampleRate);
|
lv2_sampleRate = lilv_new_uri(world, LV2_CORE__sampleRate);
|
||||||
lv2_toggled = lilv_new_uri(world, LV2_CORE__toggled);
|
lv2_toggled = lilv_new_uri(world, LV2_CORE__toggled);
|
||||||
lv2_enumeration = lilv_new_uri(world, LV2_CORE__enumeration);
|
lv2_enumeration = lilv_new_uri(world, LV2_CORE__enumeration);
|
||||||
midi_MidiEvent = lilv_new_uri(world, LILV_URI_MIDI_EVENT);
|
midi_MidiEvent = lilv_new_uri(world, LILV_URI_MIDI_EVENT);
|
||||||
rdfs_comment = lilv_new_uri(world, LILV_NS_RDFS "comment");
|
rdfs_comment = lilv_new_uri(world, LILV_NS_RDFS "comment");
|
||||||
|
rsz_minimumSize = lilv_new_uri(world, LV2_RESIZE_PORT__minimumSize);
|
||||||
time_Position = lilv_new_uri(world, LV2_TIME__Position);
|
time_Position = lilv_new_uri(world, LV2_TIME__Position);
|
||||||
ui_GtkUI = lilv_new_uri(world, LV2_UI__GtkUI);
|
ui_GtkUI = lilv_new_uri(world, LV2_UI__GtkUI);
|
||||||
ui_external = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/ui#external");
|
ui_external = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/ui#external");
|
||||||
|
|
@ -1856,17 +1914,24 @@ LV2World::~LV2World()
|
||||||
{
|
{
|
||||||
lilv_node_free(ui_external);
|
lilv_node_free(ui_external);
|
||||||
lilv_node_free(ui_GtkUI);
|
lilv_node_free(ui_GtkUI);
|
||||||
|
lilv_node_free(time_Position);
|
||||||
|
lilv_node_free(rsz_minimumSize);
|
||||||
|
lilv_node_free(rdfs_comment);
|
||||||
lilv_node_free(midi_MidiEvent);
|
lilv_node_free(midi_MidiEvent);
|
||||||
|
lilv_node_free(lv2_enumeration);
|
||||||
lilv_node_free(lv2_toggled);
|
lilv_node_free(lv2_toggled);
|
||||||
lilv_node_free(lv2_sampleRate);
|
lilv_node_free(lv2_sampleRate);
|
||||||
|
lilv_node_free(lv2_reportsLatency);
|
||||||
lilv_node_free(lv2_integer);
|
lilv_node_free(lv2_integer);
|
||||||
lilv_node_free(lv2_inPlaceBroken);
|
lilv_node_free(lv2_inPlaceBroken);
|
||||||
lilv_node_free(lv2_OutputPort);
|
lilv_node_free(lv2_OutputPort);
|
||||||
lilv_node_free(lv2_InputPort);
|
lilv_node_free(lv2_InputPort);
|
||||||
lilv_node_free(lv2_ControlPort);
|
lilv_node_free(lv2_ControlPort);
|
||||||
lilv_node_free(lv2_AudioPort);
|
lilv_node_free(lv2_AudioPort);
|
||||||
|
lilv_node_free(ext_notOnGUI);
|
||||||
lilv_node_free(ext_logarithmic);
|
lilv_node_free(ext_logarithmic);
|
||||||
lilv_node_free(ev_EventPort);
|
lilv_node_free(ev_EventPort);
|
||||||
|
lilv_node_free(atom_supports);
|
||||||
lilv_node_free(atom_eventTransfer);
|
lilv_node_free(atom_eventTransfer);
|
||||||
lilv_node_free(atom_bufferType);
|
lilv_node_free(atom_bufferType);
|
||||||
lilv_node_free(atom_Sequence);
|
lilv_node_free(atom_Sequence);
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,7 @@ Session::Session (AudioEngine &eng,
|
||||||
, _butler (new Butler (*this))
|
, _butler (new Butler (*this))
|
||||||
, _post_transport_work (0)
|
, _post_transport_work (0)
|
||||||
, _send_timecode_update (false)
|
, _send_timecode_update (false)
|
||||||
|
, ltc_enc_buf(0)
|
||||||
, _all_route_group (new RouteGroup (*this, "all"))
|
, _all_route_group (new RouteGroup (*this, "all"))
|
||||||
, routes (new RouteList)
|
, routes (new RouteList)
|
||||||
, _total_free_4k_blocks (0)
|
, _total_free_4k_blocks (0)
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,8 @@ void
|
||||||
Session::ltc_tx_cleanup()
|
Session::ltc_tx_cleanup()
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::LTC, "LTC TX cleanup\n");
|
DEBUG_TRACE (DEBUG::LTC, "LTC TX cleanup\n");
|
||||||
if (ltc_enc_buf) free(ltc_enc_buf);
|
free(ltc_enc_buf);
|
||||||
|
ltc_enc_buf = NULL;
|
||||||
ltc_encoder_free(ltc_encoder);
|
ltc_encoder_free(ltc_encoder);
|
||||||
ltc_encoder = NULL;
|
ltc_encoder = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -694,7 +694,7 @@ Session::remove_state (string snapshot_name)
|
||||||
void
|
void
|
||||||
Session::jack_session_event (jack_session_event_t * event)
|
Session::jack_session_event (jack_session_event_t * event)
|
||||||
{
|
{
|
||||||
char timebuf[128];
|
char timebuf[128], *tmp;
|
||||||
time_t n;
|
time_t n;
|
||||||
struct tm local_time;
|
struct tm local_time;
|
||||||
|
|
||||||
|
|
@ -702,6 +702,8 @@ Session::jack_session_event (jack_session_event_t * event)
|
||||||
localtime_r (&n, &local_time);
|
localtime_r (&n, &local_time);
|
||||||
strftime (timebuf, sizeof(timebuf), "JS_%FT%T", &local_time);
|
strftime (timebuf, sizeof(timebuf), "JS_%FT%T", &local_time);
|
||||||
|
|
||||||
|
while ((tmp = strchr(timebuf, ':'))) { *tmp = '.'; }
|
||||||
|
|
||||||
if (event->type == JackSessionSaveTemplate)
|
if (event->type == JackSessionSaveTemplate)
|
||||||
{
|
{
|
||||||
if (save_template( timebuf )) {
|
if (save_template( timebuf )) {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <gtkmm/spinbutton.h>
|
#include <gtkmm/spinbutton.h>
|
||||||
#include <gtkmm/table.h>
|
#include <gtkmm/table.h>
|
||||||
|
|
||||||
|
#include "gtkmm2ext/gtk_ui.h"
|
||||||
#include "gtkmm2ext/utils.h"
|
#include "gtkmm2ext/utils.h"
|
||||||
|
|
||||||
#include "generic_midi_control_protocol.h"
|
#include "generic_midi_control_protocol.h"
|
||||||
|
|
@ -147,7 +148,10 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p)
|
||||||
|
|
||||||
threshold_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::threshold_changed));
|
threshold_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::threshold_changed));
|
||||||
|
|
||||||
label = manage (new Label (_("Threshold:")));
|
Gtkmm2ext::UI::instance()->set_tip (threshold_spinner,
|
||||||
|
string_compose (_("Controls how %1 behaves if the MIDI controller sends discontinuous values"), PROGRAM_NAME));
|
||||||
|
|
||||||
|
label = manage (new Label (_("Smoothing:")));
|
||||||
label->set_alignment (0, 0.5);
|
label->set_alignment (0, 0.5);
|
||||||
table->attach (*label, 0, 1, n, n + 1);
|
table->attach (*label, 0, 1, n, n + 1);
|
||||||
table->attach (threshold_spinner, 1, 2, n, n + 1);
|
table->attach (threshold_spinner, 1, 2, n, n + 1);
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@ def build(bld):
|
||||||
obj.use = 'libardour libardour_cp libgtkmm2ext libpbd'
|
obj.use = 'libardour libardour_cp libgtkmm2ext libpbd'
|
||||||
obj.vnum = LIBARDOUR_GENERIC_MIDI_LIB_VERSION
|
obj.vnum = LIBARDOUR_GENERIC_MIDI_LIB_VERSION
|
||||||
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3', 'surfaces')
|
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3', 'surfaces')
|
||||||
|
obj.defines = [
|
||||||
|
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
||||||
|
]
|
||||||
|
|
||||||
def shutdown():
|
def shutdown():
|
||||||
autowaf.shutdown()
|
autowaf.shutdown()
|
||||||
|
|
|
||||||
|
|
@ -595,13 +595,13 @@ then
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
echo "!!! WARNING !!! - The version of Jack on this system is too old!"
|
echo "!!! WARNING !!! - The version of Jack on this system is too old!"
|
||||||
echo "Using an old version of Jack is not recommened. Please update"
|
echo "Using an old version of Jack is not recommended. Please update"
|
||||||
echo "Jack for best results."
|
echo "Jack for best results."
|
||||||
echo ""
|
echo ""
|
||||||
echo "System Jack version:"
|
echo "System Jack version:"
|
||||||
echo " ${JACK_VER_STRING}"
|
echo " ${JACK_VER_STRING}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Recommened minimum versions:"
|
echo "Recommended minimum versions:"
|
||||||
echo " Jack1 - 0.121.3"
|
echo " Jack1 - 0.121.3"
|
||||||
echo " Jack2 - 1.9.8"
|
echo " Jack2 - 1.9.8"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue