fix up wscript/build issues in exportvis after merge with master

This commit is contained in:
Paul Davis 2013-12-03 11:51:25 -05:00
commit 8648a8a13b
160 changed files with 29589 additions and 65089 deletions

View file

@ -1,5 +1,5 @@
Download waf (http://code.google.com/p/waf/)
Download autowaf (http://svn.drobilla.net/autowaf)
autowaf.py is present in the tools directory of the Ardour source code.
From within the waf source tree, run:

View file

@ -101,6 +101,7 @@ typedef uint64_t microseconds_t;
#include "missing_plugin_dialog.h"
#include "mixer_ui.h"
#include "mouse_cursors.h"
#include "nsm.h"
#include "opts.h"
#include "pingback.h"
#include "processor_box.h"
@ -717,7 +718,7 @@ int
ARDOUR_UI::starting ()
{
Application* app = Application::instance ();
char *nsm_url;
const char *nsm_url;
bool brand_new_user = ArdourStartup::required ();
app->ShouldQuit.connect (sigc::mem_fun (*this, &ARDOUR_UI::queue_finish));
@ -729,9 +730,17 @@ ARDOUR_UI::starting ()
app->ready ();
nsm_url = getenv ("NSM_URL");
/* we need to create this early because it may need to set the
* audio backend end up.
*/
if (nsm_url) {
try {
audio_midi_setup.get (true);
} catch (...) {
return -1;
}
if ((nsm_url = g_getenv ("NSM_URL")) != 0) {
nsm = new NSM_Client;
if (!nsm->init (nsm_url)) {
nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3");
@ -741,19 +750,33 @@ ARDOUR_UI::starting ()
for ( i = 0; i < 5000; ++i) {
nsm->check ();
usleep (i);
if (nsm->is_active())
if (nsm->is_active()) {
break;
}
}
if (i == 5000) {
error << _("NSM server did not announce itself") << endmsg;
return -1;
}
// wait for open command from nsm server
for ( i = 0; i < 5000; ++i) {
nsm->check ();
usleep (1000);
if (nsm->client_id ())
if (nsm->client_id ()) {
break;
}
}
if (i == 5000) {
error << _("NSM: no client ID provided") << endmsg;
return -1;
}
if (_session && nsm) {
_session->set_nsm_state( nsm->is_active() );
} else {
error << _("NSM: no session created") << endmsg;
return -1;
}
// nsm requires these actions disabled
@ -772,10 +795,11 @@ ARDOUR_UI::starting ()
}
}
}
else {
} else {
delete nsm;
nsm = 0;
error << _("NSM: initialization failed") << endmsg;
return -1;
}
} else {
@ -793,16 +817,6 @@ ARDOUR_UI::starting ()
}
}
/* we need to create this early because it may need to set the
* audio backend end up.
*/
try {
audio_midi_setup.get (true);
} catch (...) {
return -1;
}
/* go get a session */
const bool new_session_required = (ARDOUR_COMMAND_LINE::new_session || brand_new_user);
@ -827,13 +841,6 @@ ARDOUR_UI::starting ()
return 0;
}
void
ARDOUR_UI::no_memory_warning ()
{
XMLNode node (X_("no-memory-warning"));
Config->add_instant_xml (node);
}
void
ARDOUR_UI::check_memory_locking ()
{
@ -890,9 +897,6 @@ ARDOUR_UI::check_memory_locking ()
VBox* vbox = msg.get_vbox();
HBox hbox;
CheckButton cb (_("Do not show this window again"));
cb.signal_toggled().connect (sigc::mem_fun (*this, &ARDOUR_UI::no_memory_warning));
hbox.pack_start (cb, true, false);
vbox->pack_start (hbox);
cb.show();
@ -903,6 +907,11 @@ ARDOUR_UI::check_memory_locking ()
editor->ensure_float (msg);
msg.run ();
if (cb.get_active()) {
XMLNode node (X_("no-memory-warning"));
Config->add_instant_xml (node);
}
}
}
}
@ -2181,8 +2190,13 @@ ARDOUR_UI::snapshot_session (bool switch_to_it)
prompter.set_name ("Prompter");
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
prompter.set_title (_("Take Snapshot"));
prompter.set_prompt (_("Name of new snapshot"));
if (switch_to_it) {
prompter.set_title (_("Save as..."));
prompter.set_prompt (_("New session name"));
} else {
prompter.set_title (_("Take Snapshot"));
prompter.set_prompt (_("Name of new snapshot"));
}
if (!switch_to_it) {
char timebuf[128];
@ -3226,6 +3240,57 @@ ARDOUR_UI::flush_trash ()
display_cleanup_results (rep, _("deleted file"), true);
}
void
ARDOUR_UI::setup_order_hint ()
{
uint32_t order_hint = 0;
/*
we want the new routes to have their order keys set starting from
the highest order key in the selection + 1 (if available).
*/
if (add_route_dialog->get_transient_for () == mixer->get_toplevel()) {
for (RouteUISelection::iterator s = mixer->selection().routes.begin(); s != mixer->selection().routes.end(); ++s) {
if ((*s)->route()->order_key() > order_hint) {
order_hint = (*s)->route()->order_key();
}
}
if (!mixer->selection().routes.empty()) {
order_hint++;
}
} else {
for (TrackSelection::iterator s = editor->get_selection().tracks.begin(); s != editor->get_selection().tracks.end(); ++s) {
RouteTimeAxisView* tav = dynamic_cast<RouteTimeAxisView*> (*s);
if (tav->route()->order_key() > order_hint) {
order_hint = tav->route()->order_key();
}
}
if (!editor->get_selection().tracks.empty()) {
order_hint++;
}
}
_session->set_order_hint (order_hint);
/* create a gap in the existing route order keys to accomodate new routes.*/
boost::shared_ptr <RouteList> rd = _session->get_routes();
for (RouteList::iterator ri = rd->begin(); ri != rd->end(); ++ri) {
boost::shared_ptr<Route> rt (*ri);
if (rt->is_monitor()) {
continue;
}
if (rt->order_key () >= order_hint) {
rt->set_order_key (rt->order_key () + add_route_dialog->count());
}
}
}
void
ARDOUR_UI::add_route (Gtk::Window* float_window)
{
@ -3241,6 +3306,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
}
if (float_window) {
add_route_dialog->unset_transient_for ();
add_route_dialog->set_transient_for (*float_window);
}
@ -3260,6 +3326,8 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
return;
}
setup_order_hint();
PBD::ScopedConnection idle_connection;
if (count > 8) {
@ -3737,8 +3805,8 @@ ARDOUR_UI::session_dialog (std::string msg)
int
ARDOUR_UI::pending_state_dialog ()
{
HBox* hbox = new HBox();
Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG);
HBox* hbox = manage (new HBox());
Image* image = manage (new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG));
ArdourDialog dialog (_("Crash Recovery"), true);
Label message (string_compose (_("\
This session appears to have been in the\n\

View file

@ -72,7 +72,6 @@
#include "ardour_window.h"
#include "editing.h"
#include "meterbridge.h"
#include "nsm.h"
#include "ui_config.h"
#include "enums.h"
#include "visibility_group.h"
@ -105,6 +104,7 @@ class SpeakerDialog;
class ThemeManager;
class TimeInfoBox;
class MidiTracer;
class NSM_Client;
class LevelMeterHBox;
class GlobalPortMatrixWindow;
class GUIObjectState;
@ -582,6 +582,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void snapshot_session (bool switch_to_it);
void rename_session ();
void setup_order_hint ();
Mixer_UI *mixer;
int create_mixer ();
@ -692,7 +693,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
bool first_idle ();
void no_memory_warning ();
void check_memory_locking ();
bool check_audioengine();

View file

@ -193,7 +193,9 @@ ARDOUR_UI::set_session (Session *s)
editor_meter_peak_display.hide();
}
if (_session && _session->master_out()) {
if (_session
&& _session->master_out()
&& _session->master_out()->n_outputs().n(DataType::AUDIO) > 0) {
editor_meter = new LevelMeterHBox(_session);
editor_meter->set_meter (_session->master_out()->shared_peak_meter().get());
editor_meter->clear_meters();
@ -216,12 +218,17 @@ ARDOUR_UI::set_session (Session *s)
editor_meter_peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &ARDOUR_UI::editor_meter_peak_button_release), false);
if (Config->get_show_editor_meter()) {
transport_tearoff_hbox.pack_start (meter_box, false, false);
transport_tearoff_hbox.pack_start (editor_meter_peak_display, false, false);
meter_box.show();
editor_meter_peak_display.show();
} else {
meter_box.hide();
editor_meter_peak_display.hide();
} else if (meter_box.get_parent()) {
transport_tearoff_hbox.remove (meter_box);
transport_tearoff_hbox.remove (editor_meter_peak_display);
}
} else if (meter_box.get_parent()) {
transport_tearoff_hbox.remove (meter_box);
transport_tearoff_hbox.remove (editor_meter_peak_display);
}
}
@ -335,7 +342,7 @@ ARDOUR_UI::goto_mixer_window ()
screen = Gdk::Screen::get_default();
}
if (screen && screen->get_height() < 700) {
if (g_getenv ("ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && screen && screen->get_height() < 700) {
Gtk::MessageDialog msg (_("This screen is not tall enough to display the mixer window"));
msg.run ();
return;

View file

@ -402,11 +402,13 @@ ARDOUR_UI::parameter_changed (std::string p)
} else if (p == "show-editor-meter") {
bool show = Config->get_show_editor_meter();
if (editor_meter && show) {
transport_tearoff_hbox.pack_start (meter_box, false, false);
transport_tearoff_hbox.pack_start (editor_meter_peak_display, false, false);
meter_box.show();
editor_meter_peak_display.show();
} else if (editor_meter && !show) {
meter_box.hide();
editor_meter_peak_display.hide();
} else if (editor_meter && !show && meter_box.get_parent()) {
transport_tearoff_hbox.remove (meter_box);
transport_tearoff_hbox.remove (editor_meter_peak_display);
}
}
}

View file

@ -620,6 +620,9 @@ AudioClock::end_edit (bool modify)
break;
case Frames:
if (edit_string.length() < 1) {
edit_string = pre_edit_string;
}
break;
}

View file

@ -75,14 +75,6 @@ set_language_preference ()
{
gtk_disable_setlocale ();
if (g_getenv ("LANGUAGE") || g_getenv ("LC_ALL") || g_getenv ("LANG")) {
return;
}
if (g_getenv ("ARDOUR_EN")) {
return;
}
/* the gettext manual is potentially misleading about the utility of
LANGUAGE. It notes that if LANGUAGE is set to include a dialect/region-free
language code, like "it", it will assume that you mean the main
@ -126,6 +118,6 @@ set_language_preference ()
*/
cout << "LANG set to " << [nslocale UTF8String] << endl;
setenv ("LANG", [nslocale UTF8String], 0);
setenv ("LANG", [nslocale UTF8String], 0);
CFRelease (cflocale);
}

View file

@ -1085,6 +1085,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
bool button_press_handler_1 (ArdourCanvas::Item *, GdkEvent *, ItemType);
bool button_press_handler_2 (ArdourCanvas::Item *, GdkEvent *, ItemType);
bool button_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
bool button_double_click_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
bool button_press_dispatch (GdkEventButton*);
bool button_release_dispatch (GdkEventButton*);
bool motion_handler (ArdourCanvas::Item*, GdkEvent*, bool from_autoscroll = false);
@ -1523,6 +1524,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void marker_menu_edit ();
void marker_menu_remove ();
void marker_menu_rename ();
void rename_marker (Marker *marker);
void toggle_marker_menu_lock ();
void toggle_marker_menu_glue ();
void marker_menu_hide ();

View file

@ -422,7 +422,7 @@ struct EditorOrderTimeAxisViewSorter {
RouteTimeAxisView* ra = dynamic_cast<RouteTimeAxisView*> (a);
RouteTimeAxisView* rb = dynamic_cast<RouteTimeAxisView*> (b);
assert (ra && rb);
return ra->route()->order_key (EditorSort) < rb->route()->order_key (EditorSort);
return ra->route()->order_key () < rb->route()->order_key ();
}
};

View file

@ -176,12 +176,6 @@ EditorGroupTabs::default_properties () const
return plist;
}
RouteSortOrderKey
EditorGroupTabs::order_key () const
{
return EditorSort;
}
RouteList
EditorGroupTabs::selected_routes () const
{

View file

@ -37,7 +37,6 @@ private:
}
void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *);
PBD::PropertyList default_properties () const;
ARDOUR::RouteSortOrderKey order_key () const;
ARDOUR::RouteList selected_routes () const;
void sync_order_keys ();
};

View file

@ -1338,12 +1338,23 @@ Editor::marker_menu_rename ()
/*NOTREACHED*/
}
rename_marker (marker);
}
void
Editor::rename_marker(Marker *marker)
{
Location* loc;
bool is_start;
loc = find_location_from_marker (marker, is_start);
if (!loc) return;
if (!loc)
return;
if (loc == transport_loop_location() || loc == transport_punch_location() || loc->is_session_range())
return;
ArdourPrompter dialog (true);
string txt;
@ -1378,6 +1389,7 @@ Editor::marker_menu_rename ()
dialog.get_result(txt);
loc->set_name (txt);
_session->set_dirty ();
XMLNode &after = _session->locations()->get_state();
_session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));

View file

@ -86,7 +86,7 @@ Editor::show_editor_mixer (bool yn)
screen = Gdk::Screen::get_default();
}
if (screen && screen->get_height() < 700) {
if (g_getenv ("ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && screen && screen->get_height() < 700) {
Gtk::MessageDialog msg (_("This screen is not tall enough to display the editor mixer"));
msg.run ();
return;

View file

@ -1269,6 +1269,10 @@ bool
Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
if (event->type != GDK_BUTTON_PRESS) {
if (event->type == GDK_2BUTTON_PRESS) {
gdk_pointer_ungrab (GDK_CURRENT_TIME);
return button_double_click_handler (item, event, item_type);
}
return false;
}
@ -1392,6 +1396,52 @@ Editor::button_release_dispatch (GdkEventButton* ev)
return button_bindings->activate (b, Gtkmm2ext::Bindings::Release);
}
bool
Editor::button_double_click_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) {
if (event->button.button != 1) {
return false;
}
switch (item_type) {
case RegionItem:
RegionView *rv;
rv = clicked_regionview;
rv->show_region_editor ();
return true;
case NoteItem:
case PlayheadCursorItem:
break;
case MarkerItem:
case RangeMarkerBarItem:
case CdMarkerBarItem:
Marker* marker;
if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
break;
}
rename_marker (marker);
return true;
case TempoMarkerItem:
edit_tempo_marker (item);
return true;
case MeterMarkerItem:
edit_meter_marker (item);
return true;
case MarkerBarItem:
case TempoBarItem:
case MeterBarItem:
case TransportMarkerBarItem:
case StreamItem:
break;
default:
break;
}
return false;
}
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{

View file

@ -4712,7 +4712,7 @@ Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv
vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> v;
v.push_back (selected);
framepos_t pos_frames = mrv.midi_region()->position();
framepos_t pos_frames = mrv.midi_region()->position() - mrv.midi_region()->start();
double pos_beats = _session->tempo_map().framewalk_to_beats(0, pos_frames);
return op (mrv.midi_region()->model(), pos_beats, v);
@ -5528,7 +5528,7 @@ Editor::split_region ()
struct EditorOrderRouteSorter {
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
return a->order_key (EditorSort) < b->order_key (EditorSort);
return a->order_key () < b->order_key ();
}
};

View file

@ -284,7 +284,7 @@ EditorRoutes::EditorRoutes (Editor* e)
_display.set_enable_search (false);
Route::SyncOrderKeys.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::sync_treeview_from_order_keys, this, _1), gui_context());
Route::SyncOrderKeys.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::sync_treeview_from_order_keys, this), gui_context());
}
bool
@ -600,9 +600,24 @@ EditorRoutes::active_changed (std::string const & path)
void
EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
{
TreeModel::Row row;
PBD::Unwinder<bool> at (_adding_routes, true);
bool from_scratch = (_model->children().size() == 0);
Gtk::TreeModel::Children::iterator insert_iter = _model->children().end();
for (Gtk::TreeModel::Children::iterator it = _model->children().begin(); it != _model->children().end(); ++it) {
boost::shared_ptr<Route> r = (*it)[_columns.route];
if (r->order_key() == (routes.front()->route()->order_key() + routes.size())) {
insert_iter = it;
break;
}
}
if(!from_scratch) {
_editor->selection->tracks.clear();
}
suspend_redisplay ();
_display.set_model (Glib::RefPtr<ListStore>());
@ -611,7 +626,7 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
boost::shared_ptr<MidiTrack> midi_trk = boost::dynamic_pointer_cast<MidiTrack> ((*x)->route());
row = *(_model->append ());
TreeModel::Row row = *(_model->insert (insert_iter));
row[_columns.text] = (*x)->route()->name();
row[_columns.visible] = (*x)->marked_for_display();
@ -635,6 +650,10 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
row[_columns.solo_safe_state] = (*x)->route()->solo_safe();
row[_columns.name_editable] = true;
if (!from_scratch) {
_editor->selection->add(*x);
}
boost::weak_ptr<Route> wr ((*x)->route());
(*x)->route()->gui_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2), gui_context());
@ -812,7 +831,7 @@ EditorRoutes::show_track_in_display (TimeAxisView& tv)
void
EditorRoutes::reset_remote_control_ids ()
{
if (Config->get_remote_model() != EditorOrdered || !_session || _session->deletion_in_progress()) {
if (Config->get_remote_model() == UserOrdered || !_session || _session->deletion_in_progress()) {
return;
}
@ -841,7 +860,7 @@ EditorRoutes::reset_remote_control_ids ()
uint32_t new_rid = (visible ? rid : invisible_key--);
if (new_rid != route->remote_control_id()) {
route->set_remote_control_id_from_order_key (EditorSort, new_rid);
route->set_remote_control_id_explicit (new_rid);
rid_change = true;
}
@ -887,20 +906,20 @@ EditorRoutes::sync_order_keys_from_treeview ()
boost::shared_ptr<Route> route = (*ri)[_columns.route];
bool visible = (*ri)[_columns.visible];
uint32_t old_key = route->order_key (EditorSort);
uint32_t old_key = route->order_key ();
if (order != old_key) {
route->set_order_key (EditorSort, order);
route->set_order_key (order);
changed = true;
}
if ((Config->get_remote_model() == EditorOrdered) && !route->is_master() && !route->is_monitor()) {
if ((Config->get_remote_model() == MixerOrdered) && !route->is_master() && !route->is_monitor()) {
uint32_t new_rid = (visible ? rid : invisible_key--);
if (new_rid != route->remote_control_id()) {
route->set_remote_control_id_from_order_key (EditorSort, new_rid);
route->set_remote_control_id_explicit (new_rid);
rid_change = true;
}
@ -915,7 +934,7 @@ EditorRoutes::sync_order_keys_from_treeview ()
if (changed) {
/* tell the world that we changed the editor sort keys */
_session->sync_order_keys (EditorSort);
_session->sync_order_keys ();
}
if (rid_change) {
@ -925,37 +944,17 @@ EditorRoutes::sync_order_keys_from_treeview ()
}
void
EditorRoutes::sync_treeview_from_order_keys (RouteSortOrderKey src)
EditorRoutes::sync_treeview_from_order_keys ()
{
/* Some route order key(s) for `src' has been changed, make sure that
/* Some route order key(s) have been changed, make sure that
we update out tree/list model and GUI to reflect the change.
*/
if (!_session || _session->deletion_in_progress()) {
if (_ignore_reorder || !_session || _session->deletion_in_progress()) {
return;
}
DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("editor sync model from order keys, src = %1\n", enum_2_string (src)));
if (src == MixerSort) {
if (!Config->get_sync_all_route_ordering()) {
/* mixer sort keys changed - we don't care */
return;
}
DEBUG_TRACE (DEBUG::OrderKeys, "reset editor order key to match mixer\n");
/* mixer sort keys were changed, update the editor sort
* keys since "sync mixer+editor order" is enabled.
*/
boost::shared_ptr<RouteList> r = _session->get_routes ();
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
(*i)->sync_order_keys (src);
}
}
DEBUG_TRACE (DEBUG::OrderKeys, "editor sync model from order keys.\n");
/* we could get here after either a change in the Mixer or Editor sort
* order, but either way, the mixer order keys reflect the intended
@ -975,7 +974,7 @@ EditorRoutes::sync_treeview_from_order_keys (RouteSortOrderKey src)
for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) {
boost::shared_ptr<Route> route = (*ri)[_columns.route];
sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key (EditorSort)));
sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key ()));
}
SortByNewDisplayOrder cmp;
@ -1341,7 +1340,7 @@ struct EditorOrderRouteSorter {
/* everything else before master */
return false;
}
return a->order_key (EditorSort) < b->order_key (EditorSort);
return a->order_key () < b->order_key ();
}
};
@ -1501,7 +1500,7 @@ EditorRoutes::move_selected_tracks (bool up)
}
for (leading = view_routes.begin(); leading != view_routes.end(); ++leading) {
uint32_t order = leading->second->order_key (EditorSort);
uint32_t order = leading->second->order_key ();
neworder.push_back (order);
}

View file

@ -72,7 +72,7 @@ private:
void on_tv_solo_safe_toggled (std::string const &);
void build_menu ();
void show_menu ();
void sync_treeview_from_order_keys (ARDOUR::RouteSortOrderKey);
void sync_treeview_from_order_keys ();
void route_deleted (Gtk::TreeModel::Path const &);
void visible_changed (std::string const &);
void active_changed (std::string const &);

View file

@ -779,7 +779,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
RouteTimeAxisView* closest = 0;
int distance = INT_MAX;
int key = rtv->route()->order_key (EditorSort);
int key = rtv->route()->order_key ();
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
@ -794,7 +794,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
if (result.second) {
/* newly added to already_in_selection */
int d = artv->route()->order_key (EditorSort);
int d = artv->route()->order_key ();
d -= key;
@ -810,7 +810,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
/* now add all tracks between that one and this one */
int okey = closest->route()->order_key (EditorSort);
int okey = closest->route()->order_key ();
if (okey > key) {
swap (okey, key);
@ -820,7 +820,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
RouteTimeAxisView* artv = dynamic_cast<RouteTimeAxisView*>(*x);
if (artv && artv != rtv) {
int k = artv->route()->order_key (EditorSort);
int k = artv->route()->order_key ();
if (k >= okey && k <= key) {

View file

@ -45,7 +45,7 @@
#include "ardour/stretch.h"
#ifdef USE_RUBBERBAND
#include "rubberband/RubberBandStretcher.h"
#include <rubberband/RubberBandStretcher.h>
using namespace RubberBand;
#endif

View file

@ -87,7 +87,6 @@ EngineControl::EngineControl ()
, midi_refresh_button (_("Refresh list"))
, ignore_changes (0)
, _desired_sample_rate (0)
, no_push (true)
, started_at_least_once (false)
{
using namespace Notebook_Helpers;
@ -290,8 +289,6 @@ EngineControl::EngineControl ()
output_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
no_push = false;
}
void
@ -822,7 +819,7 @@ EngineControl::EngineControl ()
set_popdown_strings (sample_rate_combo, s);
if (desired.empty()) {
sample_rate_combo.set_active_text (s.front());
sample_rate_combo.set_active_text (rate_as_string (backend->default_sample_rate()));
} else {
sample_rate_combo.set_active_text (desired);
}
@ -859,7 +856,7 @@ EngineControl::EngineControl ()
buffer_size_combo.set_sensitive (true);
set_popdown_strings (buffer_size_combo, s);
buffer_size_combo.set_active_text (s.front());
buffer_size_combo.set_active_text (bufsize_as_string (backend->default_buffer_size()));
show_buffer_duration ();
} else {
buffer_size_combo.set_sensitive (false);
@ -874,10 +871,6 @@ EngineControl::EngineControl ()
/* pick up any saved state for this device */
maybe_display_saved_state ();
/* and push it to the backend */
push_state_to_backend (false);
}
string
@ -1207,14 +1200,9 @@ EngineControl::EngineControl ()
}
}
int
EngineControl::push_state_to_backend (bool start)
{
if (no_push) {
return 0;
}
boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
if (!backend) {

View file

@ -114,7 +114,6 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
uint32_t ignore_changes;
uint32_t _desired_sample_rate;
bool no_push;
bool started_at_least_once;
void driver_changed ();

View file

@ -215,9 +215,9 @@ ExportDialog::init_components ()
}
void
ExportDialog::notify_errors ()
ExportDialog::notify_errors (bool force)
{
if (status->errors()) {
if (force || status->errors()) {
std::string txt = _("Export has been aborted due to an error!\nSee the Log for details.");
Gtk::MessageDialog msg (txt, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
msg.run();
@ -303,9 +303,14 @@ ExportDialog::show_conflicting_files ()
void
ExportDialog::do_export ()
{
profile_manager->prepare_for_export ();
handler->do_export ();
show_progress ();
try {
profile_manager->prepare_for_export ();
handler->do_export ();
show_progress ();
} catch(std::exception & e) {
error << string_compose (_("Export initialization failed: %1"), e.what()) << endmsg;
notify_errors(true);
}
}
void

View file

@ -95,7 +95,7 @@ class ExportDialog : public ArdourDialog {
void expanded_changed();
void notify_errors ();
void notify_errors (bool force = false);
void close_dialog ();
void sync_with_manager ();

View file

@ -101,6 +101,7 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
friend class MixerStrip;
friend class MeterStrip;
friend class RouteTimeAxisView;
boost::shared_ptr<ARDOUR::Route> _route;
boost::shared_ptr<ARDOUR::PeakMeter> _meter;
boost::shared_ptr<ARDOUR::Amp> _amp;

View file

@ -490,6 +490,32 @@ GenericPluginUI::integer_printer (char buf[32], Adjustment &adj, ControlUI* cui)
return true;
}
bool
GenericPluginUI::midinote_printer (char buf[32], Adjustment &adj, ControlUI* cui)
{
float const v = adj.get_value ();
if (cui->scale_points) {
Plugin::ScalePoints::const_iterator i = cui->scale_points->begin ();
while (i != cui->scale_points->end() && i->second != v) {
++i;
}
if (i != cui->scale_points->end ()) {
snprintf (buf, 32, "%s", i->first.c_str());
return true;
}
}
if (v >= 0 && v <= 127) {
int mn = rint(v);
const char notename[12][3] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
snprintf (buf, 32, "%s %d", notename[mn%12], (mn/12)-2);
} else {
snprintf (buf, 32, "%.0f", v);
}
return true;
}
void
GenericPluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
{
@ -610,7 +636,12 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
if (desc.integer_step) {
control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox");
Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui));
if (desc.midinote) {
printf("MIDI NOTE\n");
control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::midinote_printer), control_ui));
} else {
control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui));
}
} else {
//sigc::slot<void,char*,uint32_t> pslot = sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::print_parameter), (uint32_t) port_index);

View file

@ -447,23 +447,15 @@ GroupTabs::un_subgroup (RouteGroup* g)
}
struct CollectSorter {
CollectSorter (RouteSortOrderKey key) : _key (key) {}
bool operator () (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
return a->order_key (_key) < b->order_key (_key);
return a->order_key () < b->order_key ();
}
RouteSortOrderKey _key;
};
struct OrderSorter {
OrderSorter (RouteSortOrderKey key) : _key (key) {}
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
return a->order_key (_key) < b->order_key (_key);
return a->order_key () < b->order_key ();
}
RouteSortOrderKey _key;
};
/** Collect all members of a RouteGroup so that they are together in the Editor or Mixer.
@ -473,19 +465,19 @@ void
GroupTabs::collect (RouteGroup* g)
{
boost::shared_ptr<RouteList> group_routes = g->route_list ();
group_routes->sort (CollectSorter (order_key ()));
group_routes->sort (CollectSorter ());
int const N = group_routes->size ();
RouteList::iterator i = group_routes->begin ();
boost::shared_ptr<RouteList> routes = _session->get_routes ();
routes->sort (OrderSorter (order_key ()));
routes->sort (OrderSorter ());
RouteList::const_iterator j = routes->begin ();
int diff = 0;
int coll = -1;
while (i != group_routes->end() && j != routes->end()) {
int const k = (*j)->order_key (order_key ());
int const k = (*j)->order_key ();
if (*i == *j) {
@ -496,14 +488,14 @@ GroupTabs::collect (RouteGroup* g)
--diff;
}
(*j)->set_order_key (order_key (), coll);
(*j)->set_order_key (coll);
++coll;
++i;
} else {
(*j)->set_order_key (order_key (), k + diff);
(*j)->set_order_key (k + diff);
}

View file

@ -92,7 +92,6 @@ private:
virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
virtual PBD::PropertyList default_properties () const = 0;
virtual ARDOUR::RouteSortOrderKey order_key () const = 0;
virtual ARDOUR::RouteList selected_routes () const = 0;
virtual void sync_order_keys () = 0;

View file

@ -478,12 +478,12 @@ void
LV2PluginUI::on_window_hide()
{
//printf("LV2PluginUI::on_window_hide\n");
_message_update_connection.disconnect();
if (_lv2->is_external_ui()) {
if (!_external_ui_ptr) { return; }
LV2_EXTERNAL_UI_HIDE(_external_ui_ptr);
if (!_lv2->is_external_kx()) { return ; }
_message_update_connection.disconnect();
_screen_update_connection.disconnect();
_external_ui_ptr = NULL;
suil_instance_free((SuilInstance*)_inst);

View file

@ -153,7 +153,7 @@ fixup_bundle_environment (int, char* [])
vector<string> lpath;
lpath.push_back (bundle_dir);
lpath.push_back ("share");
lpath.push_back ("Resources");
lpath.push_back ("locale");
localedir = strdup (Glib::build_filename (lpath).c_str());
}
@ -172,9 +172,9 @@ fixup_bundle_environment (int, char* [])
export_search_path (bundle_dir, "ARDOUR_INSTANT_XML_PATH", "/Resources");
export_search_path (bundle_dir, "LADSPA_PATH", "/Plugins");
export_search_path (bundle_dir, "VAMP_PATH", "/lib");
export_search_path (bundle_dir, "SUIL_MODULE_DIR", "/lib");
export_search_path (bundle_dir, "GTK_PATH", "/lib/gtkengines");
setenv ("SUIL_MODULE_DIR", (bundle_dir + "/lib").c_str(), 1);
setenv ("PATH", (bundle_dir + "/MacOS:" + std::string(getenv ("PATH"))).c_str(), 1);
/* unset GTK_RC_FILES so that we only load the RC files that we define
@ -282,9 +282,9 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
export_search_path (dir_path, "ARDOUR_DATA_PATH", "/share");
export_search_path (dir_path, "LADSPA_PATH", "/plugins");
export_search_path (dir_path, "VAMP_PATH", "/lib");
export_search_path (dir_path, "SUIL_MODULE_DIR", "/lib");
export_search_path (dir_path, "GTK_PATH", "/lib/gtkengines");
setenv ("SUIL_MODULE_DIR", (dir_path + "/lib").c_str(), 1);
setenv ("PATH", (dir_path + "/bin:" + std::string(getenv ("PATH"))).c_str(), 1);
/* unset GTK_RC_FILES so that we only load the RC files that we define

View file

@ -177,6 +177,11 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
namebx.set_size_request(18, 52);
namebx.pack_start(name_label, true, false, 3);
mon_in_box.pack_start(*monitor_input_button, true, false);
btnbox.pack_start(mon_in_box, false, false, 1);
mon_disk_box.pack_start(*monitor_disk_button, true, false);
btnbox.pack_start(mon_disk_box, false, false, 1);
recbox.pack_start(*rec_enable_button, true, false);
btnbox.pack_start(recbox, false, false, 1);
mutebox.pack_start(*mute_button, true, false);
@ -193,9 +198,17 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
solo_button->set_corner_radius(2);
solo_button->set_size_request(16, 16);
monitor_input_button->set_corner_radius(2);
monitor_input_button->set_size_request(16, 16);
monitor_disk_button->set_corner_radius(2);
monitor_disk_button->set_size_request(16, 16);
mutebox.set_size_request(16, 16);
solobox.set_size_request(16, 16);
recbox.set_size_request(16, 16);
mon_in_box.set_size_request(16, 16);
mon_disk_box.set_size_request(16, 16);
spacer.set_size_request(-1,0);
update_button_box();
@ -232,6 +245,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
mtr_container.show();
mtr_hsep.show();
nfo_vbox.show();
monitor_input_button->show();
monitor_disk_button->show();
_route->shared_peak_meter()->ConfigurationChanged.connect (
route_connections, invalidator (*this), boost::bind (&MeterStrip::meter_configuration_changed, this, _1), gui_context()
@ -339,6 +354,8 @@ MeterStrip::set_button_names()
}
}
monitor_input_button->set_text (_("I"));
monitor_disk_button->set_text (_("D"));
}
void
@ -651,6 +668,14 @@ MeterStrip::update_button_box ()
} else {
recbox.hide();
}
if (_session->config.get_show_monitor_on_meterbridge()) {
height += 18 + 18;
mon_in_box.show();
mon_disk_box.show();
} else {
mon_in_box.hide();
mon_disk_box.hide();
}
btnbox.set_size_request(16, height);
check_resize();
}
@ -684,6 +709,9 @@ MeterStrip::parameter_changed (std::string const & p)
else if (p == "show-name-on-meterbridge") {
update_name_box();
}
else if (p == "show-monitor-on-meterbridge") {
update_button_box();
}
else if (p == "meterbridge-label-height") {
queue_resize();
}

View file

@ -108,6 +108,8 @@ class MeterStrip : public Gtk::VBox, public RouteUI
Gtk::HBox mutebox;
Gtk::HBox solobox;
Gtk::HBox recbox;
Gtk::HBox mon_in_box;
Gtk::HBox mon_disk_box;
Gtk::Alignment meter_align;
Gtk::Alignment peak_align;

View file

@ -92,7 +92,7 @@ struct SignalOrderRouteSorter {
/* everything comes before b */
return true;
}
return a->order_key (MixerSort) < b->order_key (MixerSort);
return a->order_key () < b->order_key ();
}
};
@ -138,7 +138,7 @@ Meterbridge::Meterbridge ()
signal_delete_event().connect (sigc::mem_fun (*this, &Meterbridge::hide_window));
signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this, _1), gui_context());
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this), gui_context());
MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context());
MeterStrip::MetricChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::resync_order, this), gui_context());
MeterStrip::ConfigurationChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::queue_resize, this), gui_context());
@ -637,7 +637,7 @@ Meterbridge::remove_strip (MeterStrip* strip)
}
void
Meterbridge::sync_order_keys (RouteSortOrderKey)
Meterbridge::sync_order_keys ()
{
Glib::Threads::Mutex::Lock lm (_resync_mutex);
@ -776,7 +776,7 @@ Meterbridge::sync_order_keys (RouteSortOrderKey)
void
Meterbridge::resync_order()
{
sync_order_keys(MixerSort);
sync_order_keys();
}
void

View file

@ -80,7 +80,7 @@ class Meterbridge :
void remove_strip (MeterStrip *);
void session_going_away ();
void sync_order_keys (ARDOUR::RouteSortOrderKey src);
void sync_order_keys ();
void resync_order ();
mutable Glib::Threads::Mutex _resync_mutex;
@ -107,7 +107,7 @@ class Meterbridge :
/* everything comes before b */
return true;
}
return a->order_key (ARDOUR::MixerSort) < b->order_key (ARDOUR::MixerSort);
return a->order_key () < b->order_key ();
}
};

View file

@ -170,12 +170,6 @@ MixerGroupTabs::default_properties () const
return plist;
}
RouteSortOrderKey
MixerGroupTabs::order_key () const
{
return MixerSort;
}
RouteList
MixerGroupTabs::selected_routes () const
{

View file

@ -36,7 +36,6 @@ private:
}
PBD::PropertyList default_properties () const;
ARDOUR::RouteSortOrderKey order_key () const;
ARDOUR::RouteList selected_routes () const;
void sync_order_keys ();

View file

@ -96,7 +96,7 @@ Mixer_UI::Mixer_UI ()
/* allow this window to become the key focus window */
set_flags (CAN_FOCUS);
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::sync_treeview_from_order_keys, this, _1), gui_context());
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::sync_treeview_from_order_keys, this), gui_context());
scroller.set_can_default (true);
set_default (scroller);
@ -313,6 +313,22 @@ Mixer_UI::hide_window (GdkEventAny *ev)
void
Mixer_UI::add_strips (RouteList& routes)
{
bool from_scratch = track_model->children().size() == 0;
Gtk::TreeModel::Children::iterator insert_iter = track_model->children().end();
for (Gtk::TreeModel::Children::iterator it = track_model->children().begin(); it != track_model->children().end(); ++it) {
boost::shared_ptr<Route> r = (*it)[track_columns.route];
if (r->order_key() == (routes.front()->order_key() + routes.size())) {
insert_iter = it;
break;
}
}
if(!from_scratch) {
_selection.clear_routes ();
}
MixerStrip* strip;
try {
@ -359,12 +375,16 @@ Mixer_UI::add_strips (RouteList& routes)
show_strip (strip);
TreeModel::Row row = *(track_model->append());
TreeModel::Row row = *(track_model->insert(insert_iter));
row[track_columns.text] = route->name();
row[track_columns.visible] = strip->route()->is_master() ? true : strip->marked_for_display();
row[track_columns.route] = route;
row[track_columns.strip] = strip;
if (!from_scratch) {
_selection.add (strip);
}
route->PropertyChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::strip_property_changed, this, _1, strip), gui_context());
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
@ -408,7 +428,7 @@ Mixer_UI::remove_strip (MixerStrip* strip)
void
Mixer_UI::reset_remote_control_ids ()
{
if (Config->get_remote_model() != MixerOrdered || !_session || _session->deletion_in_progress()) {
if (Config->get_remote_model() == UserOrdered || !_session || _session->deletion_in_progress()) {
return;
}
@ -434,7 +454,7 @@ Mixer_UI::reset_remote_control_ids ()
uint32_t new_rid = (visible ? rid : invisible_key--);
if (new_rid != route->remote_control_id()) {
route->set_remote_control_id_from_order_key (MixerSort, new_rid);
route->set_remote_control_id_explicit (new_rid);
rid_change = true;
}
@ -476,10 +496,10 @@ Mixer_UI::sync_order_keys_from_treeview ()
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
bool visible = (*ri)[track_columns.visible];
uint32_t old_key = route->order_key (MixerSort);
uint32_t old_key = route->order_key ();
if (order != old_key) {
route->set_order_key (MixerSort, order);
route->set_order_key (order);
changed = true;
}
@ -488,7 +508,7 @@ Mixer_UI::sync_order_keys_from_treeview ()
uint32_t new_rid = (visible ? rid : invisible_key--);
if (new_rid != route->remote_control_id()) {
route->set_remote_control_id_from_order_key (MixerSort, new_rid);
route->set_remote_control_id_explicit (new_rid);
rid_change = true;
}
@ -503,7 +523,7 @@ Mixer_UI::sync_order_keys_from_treeview ()
if (changed) {
/* tell everyone that we changed the mixer sort keys */
_session->sync_order_keys (MixerSort);
_session->sync_order_keys ();
}
if (rid_change) {
@ -513,33 +533,13 @@ Mixer_UI::sync_order_keys_from_treeview ()
}
void
Mixer_UI::sync_treeview_from_order_keys (RouteSortOrderKey src)
Mixer_UI::sync_treeview_from_order_keys ()
{
if (!_session || _session->deletion_in_progress()) {
return;
}
DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("mixer sync model from order keys, src = %1\n", enum_2_string (src)));
if (src == EditorSort) {
if (!Config->get_sync_all_route_ordering()) {
/* editor sort keys changed - we don't care */
return;
}
DEBUG_TRACE (DEBUG::OrderKeys, "reset mixer order key to match editor\n");
/* editor sort keys were changed, update the mixer sort
* keys since "sync mixer+editor order" is enabled.
*/
boost::shared_ptr<RouteList> r = _session->get_routes ();
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
(*i)->sync_order_keys (src);
}
}
DEBUG_TRACE (DEBUG::OrderKeys, "mixer sync model from order keys.\n");
/* we could get here after either a change in the Mixer or Editor sort
* order, but either way, the mixer order keys reflect the intended
@ -559,7 +559,7 @@ Mixer_UI::sync_treeview_from_order_keys (RouteSortOrderKey src)
for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) {
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key (MixerSort)));
sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key ()));
}
SortByNewDisplayOrder cmp;
@ -1100,7 +1100,7 @@ struct SignalOrderRouteSorter {
/* everything comes before b */
return true;
}
return a->order_key (MixerSort) < b->order_key (MixerSort);
return a->order_key () < b->order_key ();
}
};
@ -1122,7 +1122,7 @@ Mixer_UI::initial_track_display ()
add_strips (copy);
}
_session->sync_order_keys (MixerSort);
_session->sync_order_keys ();
redisplay_track_list ();
}

View file

@ -250,9 +250,9 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
Width _strip_width;
void sync_order_keys_from_treeview ();
void sync_treeview_from_order_keys (ARDOUR::RouteSortOrderKey);
void sync_treeview_from_order_keys ();
void reset_remote_control_ids ();
void reset_order_keys (ARDOUR::RouteSortOrderKey);
void reset_order_keys ();
bool ignore_reorder;

View file

@ -277,6 +277,7 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
/* XXX: remove */
void print_parameter (char *buf, uint32_t len, uint32_t param);
bool integer_printer (char* buf, Gtk::Adjustment &, ControlUI *);
bool midinote_printer(char* buf, Gtk::Adjustment &, ControlUI *);
};
class PluginUIWindow : public ArdourWindow

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -315,7 +315,7 @@ struct RouteIOs {
class RouteIOsComparator {
public:
bool operator() (RouteIOs const & a, RouteIOs const & b) {
return a.route->order_key (EditorSort) < b.route->order_key (EditorSort);
return a.route->order_key () < b.route->order_key ();
}
};

View file

@ -158,7 +158,7 @@ PortMatrix::init ()
_session->engine().PortRegisteredOrUnregistered.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context());
/* watch for route order keys changing, which changes the order of things in our global ports list(s) */
Route::SyncOrderKeys.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports_proxy, this, _1), gui_context());
Route::SyncOrderKeys.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports_proxy, this), gui_context());
/* Part 3: other stuff */
@ -619,15 +619,13 @@ PortMatrix::setup_global_ports ()
}
void
PortMatrix::setup_global_ports_proxy (RouteSortOrderKey sk)
PortMatrix::setup_global_ports_proxy ()
{
if (sk == EditorSort) {
/* Avoid a deadlock by calling this in an idle handler: see IOSelector::io_changed_proxy
for a discussion.
*/
/* Avoid a deadlock by calling this in an idle handler: see IOSelector::io_changed_proxy
for a discussion.
*/
Glib::signal_idle().connect_once (sigc::mem_fun (*this, &PortMatrix::setup_global_ports));
}
Glib::signal_idle().connect_once (sigc::mem_fun (*this, &PortMatrix::setup_global_ports));
}
void

View file

@ -188,7 +188,7 @@ private:
void disassociate_all_on_channel (boost::weak_ptr<ARDOUR::Bundle>, uint32_t, int);
void disassociate_all_on_bundle (boost::weak_ptr<ARDOUR::Bundle>, int);
void setup_global_ports ();
void setup_global_ports_proxy (ARDOUR::RouteSortOrderKey);
void setup_global_ports_proxy ();
void toggle_show_only_bundles ();
bool on_scroll_event (GdkEventScroll *);
boost::shared_ptr<ARDOUR::IO> io_from_bundle (boost::shared_ptr<ARDOUR::Bundle>) const;

View file

@ -2598,7 +2598,7 @@ ProcessorBox::generate_processor_title (boost::shared_ptr<PluginInsert> pi)
if (owner) {
return string_compose(_("%1: %2 (by %3)"), owner->name(), pi->name(), maker);
} else {
return string_compose(_("%2 (by %3)"), pi->name(), maker);
return string_compose(_("%1 (by %2)"), pi->name(), maker);
}
}

View file

@ -1414,14 +1414,6 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (*_rc_config, &RCConfiguration::set_update_editor_during_summary_drag)
));
add_option (_("Editor"),
new BoolOption (
"sync-all-route-ordering",
_("Synchronise editor and mixer track order"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_all_route_ordering),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_all_route_ordering)
));
add_option (_("Editor"),
new BoolOption (
"link-editor-and-mixer-selection",
@ -1830,7 +1822,6 @@ RCOptionEditor::RCOptionEditor ()
rm->add (UserOrdered, _("assigned by user"));
rm->add (MixerOrdered, _("follows order of mixer"));
rm->add (EditorOrdered, _("follows order of editor"));
add_option (_("Control Surfaces"), rm);

View file

@ -2266,6 +2266,8 @@ RouteTimeAxisView::meter_changed ()
if (_route && !no_redraw) {
request_redraw ();
}
// reset peak when meter point changes
gm.reset_peak_display();
}
void

View file

@ -1815,10 +1815,9 @@ RouteUI::open_remote_control_id_dialog ()
_route->remote_control_id(),
(_route->is_master() ? _("the master bus") : _("the monitor bus"))));
} else {
l->set_markup (string_compose (_("The remote control ID of %6 is: %3\n\n\n"
"Remote Control IDs are currently determined by track/bus ordering in %1\n\n"
"%4Use the User Interaction tab of the Preferences window if you want to change this%5"),
(Config->get_remote_model() == MixerOrdered ? _("the mixer") : _("the editor")),
l->set_markup (string_compose (_("The remote control ID of %5 is: %2\n\n\n"
"Remote Control IDs are currently determined by track/bus ordering in Ardour.\n\n"
"%3Use the User Interaction tab of the Preferences window if you want to change this%4"),
(is_track() ? _("track") : _("bus")),
_route->remote_control_id(),
"<span size=\"small\" style=\"italic\">",

View file

@ -318,6 +318,13 @@ SessionOptionEditor::SessionOptionEditor (Session* s)
sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_solo_on_meterbridge)
));
add_option (_("Meterbridge"), new BoolOption (
"show-monitor-on-meterbridge",
_("Monitor Buttons"),
sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_monitor_on_meterbridge),
sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_monitor_on_meterbridge)
));
add_option (_("Meterbridge"), new OptionEditorHeading (_("Name Labels")));
add_option (_("Meterbridge"), new BoolOption (

View file

@ -37,7 +37,7 @@
#include "region_selection.h"
#ifdef USE_RUBBERBAND
#include "rubberband/RubberBandStretcher.h"
#include <rubberband/RubberBandStretcher.h>
using namespace RubberBand;
#endif

View file

@ -274,6 +274,8 @@ def configure(conf):
# TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
mandatory=True)
autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
atleast_version='1.2.1')
autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
@ -377,15 +379,6 @@ def build(bld):
../libs/fst/vstwin.c
../vst/winmain.c
'''
obj.uselib = 'ALSA'
obj.use = [ 'libpbd',
'libmidipp',
'libtaglib',
'libardour',
'libardour_cp',
'libgtk2_ardour',
'libgtkmm2ext',
'libtaglib']
obj.target = 'ardour-' + bld.env['VERSION'] + '-vst.exe.so'
obj.includes = [ '../libs/fst', '.' ]
obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
@ -410,21 +403,23 @@ def build(bld):
# continue with setup of obj, which could be a shared library
# or an executable.
obj.use = [ 'libpbd',
'libardour',
'libardour_cp',
'libtimecode',
'libmidipp',
'libgtk2_ardour',
'libgtkmm2ext',
]
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG ALSA CURL DL'
obj.uselib += ' GTKMM GNOMECANVASMM GNOMECANVAS '
obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL'
obj.uselib += ' GTKMM GNOMECANVASMM GNOMECANVAS FFTW3F'
obj.uselib += ' AUDIOUNITS OSX GTKOSX LO '
obj.use = [ 'libpbd',
'libmidipp',
'libtaglib',
'ardour',
'libardour_cp',
'libgtkmm2ext',
'libtaglib',
'timecode_includes'
]
if bld.is_defined('USE_EXTERNAL_LIBS'):
obj.uselib += ' TAGLIB'
else:
obj.use.append('libtaglib')
if sys.platform == 'darwin':
obj.use += ' libappleutility'
obj.defines += [

View file

@ -118,6 +118,17 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
* at any time.
*/
virtual std::vector<float> available_sample_rates (const std::string& device) const = 0;
/* Returns the default sample rate that will be shown to the user when
* configuration options are first presented. If the derived class
* needs or wants to override this, it can. It also MUST override this
* if there is any chance that an SR of 44.1kHz is not in the list
* returned by available_sample_rates()
*/
virtual float default_sample_rate () const {
return 44100.0;
}
/** Returns a collection of uint32 identifying buffer sizes that are
* potentially usable with the hardware identified by @param device.
* Any of these values may be supplied in other calls to this backend
@ -127,6 +138,16 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
*/
virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const = 0;
/* Returns the default buffer size that will be shown to the user when
* configuration options are first presented. If the derived class
* needs or wants to override this, it can. It also MUST override this
* if there is any chance that a buffer size of 1024 is not in the list
* returned by available_buffer_sizes()
*/
virtual uint32_t default_buffer_size () const {
return 1024;
}
/** Returns the maximum number of input channels that are potentially
* usable with the hardware identified by @param device. Any number from 1
* to the value returned may be supplied in other calls to this backend as
@ -263,16 +284,6 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
/* State Control */
/* non-virtual method to avoid possible overrides of default
* parameters. See Scott Meyers or other books on C++ to
* understand this pattern, or possibly just this:
*
* http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
*/
int start (bool for_latency_measurement=false) {
return _start (for_latency_measurement);
}
/** Start using the device named in the most recent call
* to set_device(), with the parameters set by various
* the most recent calls to set_sample_rate() etc. etc.
@ -288,8 +299,24 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
* any existing systemic latency settings.
*
* Return zero if successful, negative values otherwise.
*
*
*
*
* Why is this non-virtual but ::_start() is virtual ?
* Virtual methods with default parameters create possible ambiguity
* because a derived class may implement the same method with a different
* type or value of default parameter.
*
* So we make this non-virtual method to avoid possible overrides of
* default parameters. See Scott Meyers or other books on C++ to understand
* this pattern, or possibly just this:
*
* http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
*/
virtual int _start (bool for_latency_measurement) = 0;
int start (bool for_latency_measurement=false) {
return _start (for_latency_measurement);
}
/** Stop using the device currently in use.
*
@ -307,20 +334,6 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
*/
virtual int stop () = 0;
/** Temporarily cease using the device named in the most recent call to set_parameters().
*
* If the function is successfully called, no subsequent calls to the
* process_callback() of @param engine will be made after the function
* returns, until start() is called again.
*
* The backend will retain its existing parameter configuration after a successful
* return, and does NOT require any calls to set hardware parameters before it can be
* start()-ed again.
*
* Return zero if successful, 1 if the device is not in use, negative values on error
*/
virtual int pause () = 0;
/** While remaining connected to the device, and without changing its
* configuration, start (or stop) calling the process_callback() of @param engine
* without waiting for the device. Once process_callback() has returned, it
@ -458,8 +471,25 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
virtual void update_latencies () = 0;
/** Set @param speed and @param position to the current speed and position
* indicated by some transport sync signal. Return whether the current
* transport state is pending, or finalized.
*
* Derived classes only need implement this if they provide some way to
* sync to a transport sync signal (e.g. Sony 9 Pin) that is not
* handled by Ardour itself (LTC and MTC are both handled by Ardour).
* The canonical example is JACK Transport.
*/
virtual bool speed_and_position (double& speed, framepos_t& position) {
speed = 0.0;
position = 0;
return false;
}
protected:
AudioEngine& engine;
virtual int _start (bool for_latency_measurement) = 0;
};
struct LIBARDOUR_API AudioBackendInfo {

View file

@ -207,7 +207,7 @@ public:
return _data + offset;
}
bool check_silence (pframes_t, pframes_t&) const;
bool check_silence (pframes_t, pframes_t&) const;
void prepare () { _written = false; _silent = false; }
bool written() const { return _written; }

View file

@ -86,7 +86,6 @@ public:
int start (bool for_latency_measurement=false);
int stop (bool for_latency_measurement=false);
int pause ();
int freewheel (bool start_stop);
float get_cpu_load() const ;
void transport_start ();

View file

@ -23,9 +23,9 @@
#include <string>
#include "taglib/tag.h"
#include "taglib/taglib.h"
#include "taglib/xiphcomment.h"
#include <taglib/tag.h>
#include <taglib/taglib.h>
#include <taglib/xiphcomment.h>
#include "ardour/libardour_visibility.h"

View file

@ -81,8 +81,8 @@ public:
virtual void merge_from (const Buffer& src, framecnt_t len, framecnt_t dst_offset = 0, framecnt_t src_offset = 0) = 0;
protected:
Buffer(DataType type, size_t capacity)
: _type(type), _capacity(capacity), _size(0), _silent(true)
Buffer(DataType type)
: _type(type), _capacity(0), _size(0), _silent (true)
{}
DataType _type;

View file

@ -52,8 +52,6 @@ class LIBARDOUR_API MidiControlUI : public AbstractUI<MidiUIRequest>
static MidiControlUI* instance() { return _instance; }
static BaseUI::RequestType PortChange;
void change_midi_ports ();
protected:
@ -64,7 +62,6 @@ class LIBARDOUR_API MidiControlUI : public AbstractUI<MidiUIRequest>
typedef std::list<GSource*> PortSources;
PortSources port_sources;
ARDOUR::Session& _session;
PBD::ScopedConnection rebind_connection;
bool midi_input_handler (Glib::IOCondition, AsyncMIDIPort*);
void reset_ports ();

View file

@ -97,12 +97,23 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
struct ParameterDescriptor {
/* XXX: it would probably be nice if this initialised everything */
ParameterDescriptor ()
: enumeration (false)
: integer_step(false)
, toggled (false)
, logarithmic (false)
, sr_dependent (false)
, lower (0)
, upper (0)
, step (0)
, smallstep (0)
, largestep (0)
, min_unbound (0)
, max_unbound (0)
, enumeration (false)
, midinote(false)
{}
/* essentially a union of LADSPA and VST info */
/* essentially a union of LADSPA, VST and LV2 info */
bool integer_step;
bool toggled;
@ -117,6 +128,7 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
bool min_unbound;
bool max_unbound;
bool enumeration;
bool midinote; ///< only used if integer_step is also true
};
XMLNode& get_state ();

View file

@ -118,10 +118,11 @@ class LIBARDOUR_API PortEngine {
* does not exist, return an empty string.
*/
virtual std::string get_port_name (PortHandle) const = 0;
/** Return a reference to a port with the fullname @param name. Return
* a null pointer if no such port exists.
* an "empty" PortHandle (analogous to a null pointer) if no such port exists.
*/
virtual PortHandle* get_port_by_name (const std::string&) const = 0;
virtual PortHandle get_port_by_name (const std::string&) const = 0;
/** Find the set of ports whose names, types and flags match
* specified values, place the names of each port into @param ports,

View file

@ -173,7 +173,6 @@ CONFIG_VARIABLE (bool, use_overlap_equivalency, "use-overlap-equivalency", false
CONFIG_VARIABLE (bool, periodic_safety_backups, "periodic-safety-backups", true)
CONFIG_VARIABLE (uint32_t, periodic_safety_backup_interval, "periodic-safety-backup-interval", 120)
CONFIG_VARIABLE (float, automation_interval_msecs, "automation-interval-msecs", 30)
CONFIG_VARIABLE (bool, sync_all_route_ordering, "sync-all-route-ordering", true)
CONFIG_VARIABLE (bool, only_copy_imported_files, "only-copy-imported-files", false)
CONFIG_VARIABLE (bool, keep_tearoffs, "keep-tearoffs", false)
CONFIG_VARIABLE (bool, new_plugins_active, "new-plugins-active", true)

View file

@ -102,10 +102,9 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
bool set_name (const std::string& str);
static void set_name_in_state (XMLNode &, const std::string &);
uint32_t order_key (RouteSortOrderKey) const;
bool has_order_key (RouteSortOrderKey) const;
void set_order_key (RouteSortOrderKey, uint32_t);
void sync_order_keys (RouteSortOrderKey);
uint32_t order_key () const;
bool has_order_key () const;
void set_order_key (uint32_t);
bool is_auditioner() const { return _flags & Auditioner; }
bool is_master() const { return _flags & MasterOut; }
@ -427,7 +426,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
void set_remote_control_id (uint32_t id, bool notify_class_listeners = true);
uint32_t remote_control_id () const;
void set_remote_control_id_from_order_key (RouteSortOrderKey, uint32_t order_key);
void set_remote_control_id_explicit (uint32_t order_key);
/* for things concerned about *this* route's RID */
@ -436,7 +435,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
/* for things concerned about *any* route's RID changes */
static PBD::Signal0<void> RemoteControlIDChange;
static PBD::Signal1<void,RouteSortOrderKey> SyncOrderKeys;
static PBD::Signal0<void> SyncOrderKeys;
bool has_external_redirects() const;
@ -547,8 +546,8 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
int set_state_2X (const XMLNode&, int);
void set_processor_state_2X (XMLNodeList const &, int);
typedef std::map<RouteSortOrderKey,uint32_t> OrderKeys;
OrderKeys order_keys;
uint32_t _order_key;
bool _has_order_key;
uint32_t _remote_control_id;
void input_change_handler (IOChange, void *src);

View file

@ -36,6 +36,8 @@
#include <glibmm/threads.h>
#include <ltc/ltc.h>
#include "pbd/error.h"
#include "pbd/event_loop.h"
#include "pbd/rcu.h"
@ -48,7 +50,6 @@
#include "midi++/types.h"
#include "timecode/time.h"
#include "ltc/ltc.h"
#include "ardour/ardour.h"
#include "ardour/chan_count.h"
@ -241,8 +242,9 @@ class LIBARDOUR_API LIBARDOUR_API Session : public PBD::StatefulDestructible, pu
bool operator() (boost::shared_ptr<Route>, boost::shared_ptr<Route> b);
};
void set_order_hint (uint32_t order_hint) {_order_hint = order_hint;};
void notify_remote_id_change ();
void sync_order_keys (RouteSortOrderKey);
void sync_order_keys ();
template<class T> void foreach_route (T *obj, void (T::*func)(Route&));
template<class T> void foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>));
@ -502,7 +504,7 @@ class LIBARDOUR_API LIBARDOUR_API Session : public PBD::StatefulDestructible, pu
void timecode_time_subframes (framepos_t when, Timecode::Time&);
void timecode_duration (framecnt_t, Timecode::Time&) const;
void timecode_duration_string (char *, framecnt_t) const;
void timecode_duration_string (char *, size_t len, framecnt_t) const;
framecnt_t convert_to_frames (AnyTime const & position);
framecnt_t any_duration_to_frames (framepos_t position, AnyTime const & duration);
@ -1594,6 +1596,7 @@ class LIBARDOUR_API LIBARDOUR_API Session : public PBD::StatefulDestructible, pu
GraphEdges _current_route_graph;
uint32_t next_control_id () const;
uint32_t _order_hint;
bool ignore_route_processor_changes;
MidiClockTicker* midi_clock;
@ -1610,7 +1613,7 @@ class LIBARDOUR_API LIBARDOUR_API Session : public PBD::StatefulDestructible, pu
void setup_ltc ();
void setup_click ();
void setup_click_state (const XMLNode&);
void setup_click_state (const XMLNode*);
void setup_bundles ();
static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);

View file

@ -63,5 +63,6 @@ CONFIG_VARIABLE (bool, show_midi_on_meterbridge, "show-midi-on-meterbridge", tru
CONFIG_VARIABLE (bool, show_rec_on_meterbridge, "show-rec-on-meterbridge", true)
CONFIG_VARIABLE (bool, show_mute_on_meterbridge, "show-mute-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_monitor_on_meterbridge, "show-monitor-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_name_on_meterbridge, "show-name-on-meterbridge", true)
CONFIG_VARIABLE (uint32_t, meterbridge_label_height, "meterbridge-label-height", 0)

View file

@ -25,11 +25,11 @@
#include <glibmm/threads.h>
#include <jack/jack.h>
#include <ltc/ltc.h>
#include "pbd/signals.h"
#include "timecode/time.h"
#include "ltc/ltc.h"
#include "ardour/libardour_visibility.h"
#include "ardour/types.h"

View file

@ -353,11 +353,6 @@ namespace ARDOUR {
PostFader
};
enum RouteSortOrderKey {
EditorSort,
MixerSort
};
enum MonitorModel {
HardwareMonitoring, ///< JACK does monitoring
SoftwareMonitoring, ///< Ardour does monitoring
@ -419,8 +414,7 @@ namespace ARDOUR {
enum RemoteModel {
UserOrdered,
MixerOrdered,
EditorOrdered
MixerOrdered
};
enum CrossfadeModel {

View file

@ -28,15 +28,15 @@ using namespace PBD;
using namespace ARDOUR;
AudioBuffer::AudioBuffer(size_t capacity)
: Buffer(DataType::AUDIO, capacity)
: Buffer (DataType::AUDIO)
, _owns_data (false)
, _data (0)
{
if (_capacity > 0) {
if (capacity) {
_owns_data = true; // prevent resize() from gagging
resize (_capacity);
resize (capacity);
_silent = false; // force silence on the intial buffer state
silence (_capacity);
clear ();
}
}
@ -50,21 +50,29 @@ void
AudioBuffer::resize (size_t size)
{
if (!_owns_data) {
/* XXX how the hell is this enforced? */
_capacity = size;
return;
}
if (size < _capacity) {
_size = size;
if (_data && size < _capacity) {
/* buffer is already large enough */
if (size < _size) {
/* truncate */
_size = size;
}
return;
}
free (_data);
_capacity = size;
_size = size;
_silent = false;
cache_aligned_malloc ((void**) &_data, sizeof (Sample) * size);
cache_aligned_malloc ((void**) &_data, sizeof (Sample) * _capacity);
_capacity = size;
_size = 0;
_silent = false;
}
bool

View file

@ -56,14 +56,11 @@ AudioPort::cycle_start (pframes_t nframes)
}
void
AudioPort::cycle_end (pframes_t)
AudioPort::cycle_end (pframes_t nframes)
{
if (sends_output() && !_buffer->written()) {
/* we can't use nframes here because the current buffer capacity may
be shorter than the full buffer size if we split the cycle.
*/
if (_buffer->capacity () > 0) {
_buffer->silence (_buffer->capacity());
if (_buffer->capacity() >= nframes) {
_buffer->silence (nframes);
}
}
}

View file

@ -19,7 +19,7 @@
#include <cstring>
#include "vamp-hostsdk/PluginLoader.h"
#include <vamp-hostsdk/PluginLoader.h>
#include <glibmm/miscutils.h>
#include <glibmm/fileutils.h>

View file

@ -662,23 +662,6 @@ AudioEngine::stop (bool for_latency)
return 0;
}
int
AudioEngine::pause ()
{
if (!_backend) {
return 0;
}
if (_backend->pause ()) {
return -1;
}
_running = false;
Stopped(); /* EMIT SIGNAL */
return 0;
}
int
AudioEngine::freewheel (bool start_stop)
{
@ -1082,8 +1065,8 @@ AudioEngine::start_latency_detection ()
/* find the ports we will connect to */
PortEngine::PortHandle* out = pe.get_port_by_name (_latency_output_name);
PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name);
PortEngine::PortHandle out = pe.get_port_by_name (_latency_output_name);
PortEngine::PortHandle in = pe.get_port_by_name (_latency_input_name);
if (!out || !in) {
stop (true);

View file

@ -24,12 +24,12 @@
#include "pbd/convert.h"
#include "taglib/fileref.h"
#include "taglib/flacfile.h"
#include "taglib/oggfile.h"
#include "taglib/tag.h"
#include "taglib/taglib.h"
#include "taglib/xiphcomment.h"
#include <taglib/fileref.h>
#include <taglib/flacfile.h>
#include <taglib/oggfile.h>
#include <taglib/tag.h>
#include <taglib/taglib.h>
#include <taglib/xiphcomment.h>
/* Convert string to TagLib::String */
#define TL_STR(string) TagLib::String ((string).c_str(), TagLib::String::UTF8)

View file

@ -167,7 +167,7 @@ BufferSet::ensure_buffers(DataType type, size_t num_buffers, size_t buffer_capac
// If there's not enough or they're too small, just nuke the whole thing and
// rebuild it (so I'm lazy..)
if (bufs.size() < num_buffers
|| (bufs.size() > 0 && bufs[0]->capacity() < buffer_capacity)) {
|| (bufs.size() > 0 && bufs[0]->capacity() < buffer_capacity)) {
// Nuke it
for (BufferVec::iterator i = bufs.begin(); i != bufs.end(); ++i) {

View file

@ -21,6 +21,7 @@
#include <cerrno>
#include "ardour/audioengine.h"
#include "ardour/audio_backend.h"
#include "ardour/slave.h"
using namespace std;
@ -54,26 +55,13 @@ Engine_Slave::ok() const
bool
Engine_Slave::speed_and_position (double& sp, framepos_t& position)
{
switch (engine.transport_state()) {
case TransportStopped:
speed = 0;
boost::shared_ptr<AudioBackend> backend = engine.current_backend();
if (backend) {
_starting = backend->speed_and_position (sp, position);
} else {
_starting = false;
break;
case TransportRolling:
speed = 1.0;
_starting = false;
break;
case TransportLooping:
speed = 1.0;
_starting = false;
break;
case TransportStarting:
_starting = true;
// don't adjust speed here, just leave it as it was
break;
}
sp = speed;
position = engine.transport_frame();
return true;
}

View file

@ -95,7 +95,6 @@ setup_enum_writer ()
AutoState _AutoState;
AutoStyle _AutoStyle;
AutoConnectOption _AutoConnectOption;
RouteSortOrderKey _RouteSortOrderKey;
Session::StateOfTheState _Session_StateOfTheState;
Route::Flag _Route_Flag;
Source::Flag _Source_Flag;
@ -281,8 +280,13 @@ setup_enum_writer ()
REGISTER_ENUM (UserOrdered);
REGISTER_ENUM (MixerOrdered);
REGISTER_ENUM (EditorOrdered);
REGISTER (_RemoteModel);
/*
* EditorOrdered has been deprecated
* since the removal of independent
* editor / mixer ordering.
*/
enum_writer.add_to_hack_table ("EditorOrdered", "MixerOrdered");
REGISTER_ENUM (FullCrossfade);
REGISTER_ENUM (ShortCrossfade);
@ -434,10 +438,6 @@ setup_enum_writer ()
REGISTER_CLASS_ENUM (Route, MonitorOut);
REGISTER_BITS (_Route_Flag);
REGISTER_ENUM (MixerSort);
REGISTER_ENUM (EditorSort);
REGISTER (_RouteSortOrderKey);
REGISTER_CLASS_ENUM (Source, Writable);
REGISTER_CLASS_ENUM (Source, CanRename);
REGISTER_CLASS_ENUM (Source, Broadcast);

View file

@ -143,6 +143,8 @@ public:
LilvNode* ui_GtkUI;
LilvNode* ui_external;
LilvNode* ui_externalkx;
LilvNode* units_unit;
LilvNode* units_midiNote;
private:
bool _bundle_checked;
@ -1328,8 +1330,10 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
{
const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, which);
LilvNodes* portunits;
LilvNode *def, *min, *max;
lilv_port_get_range(_impl->plugin, port, &def, &min, &max);
portunits = lilv_port_get_value(_impl->plugin, port, _world.units_unit);
desc.integer_step = lilv_port_has_property(_impl->plugin, port, _world.lv2_integer);
desc.toggled = lilv_port_has_property(_impl->plugin, port, _world.lv2_toggled);
@ -1338,6 +1342,8 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
desc.label = lilv_node_as_string(lilv_port_get_name(_impl->plugin, port));
desc.lower = min ? lilv_node_as_float(min) : 0.0f;
desc.upper = max ? lilv_node_as_float(max) : 1.0f;
desc.midinote = lilv_nodes_contains(portunits, _world.units_midiNote);
if (desc.sr_dependent) {
desc.lower *= _session.frame_rate ();
desc.upper *= _session.frame_rate ();
@ -1362,6 +1368,7 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
lilv_node_free(def);
lilv_node_free(min);
lilv_node_free(max);
lilv_nodes_free(portunits);
return 0;
}
@ -1501,7 +1508,7 @@ LV2Plugin::allocate_atom_event_buffers()
return;
}
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 of %d bytes\n", total_atom_buffers, minimumSize));
_atom_ev_buffers = (LV2_Evbuf**) malloc((total_atom_buffers + 1) * sizeof(LV2_Evbuf*));
for (int i = 0; i < total_atom_buffers; ++i ) {
_atom_ev_buffers[i] = lv2_evbuf_new(minimumSize, LV2_EVBUF_ATOM,
@ -1674,6 +1681,9 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
}
} else if (!valid) {
// Nothing we understand or care about, connect to scratch
// see note for midi-buffer size above
scratch_bufs.ensure_lv2_bufsize((flags & PORT_INPUT),
0, _port_minimumSize[port_index]);
_ev_buffers[port_index] = scratch_bufs.get_lv2_midi(
(flags & PORT_INPUT), 0, (flags & PORT_EVENT));
}
@ -1965,10 +1975,14 @@ LV2World::LV2World()
ui_GtkUI = lilv_new_uri(world, LV2_UI__GtkUI);
ui_external = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/ui#external");
ui_externalkx = lilv_new_uri(world, "http://kxstudio.sf.net/ns/lv2ext/external-ui#Widget");
units_unit = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/units#unit");
units_midiNote = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/units#midiNote");
}
LV2World::~LV2World()
{
lilv_node_free(units_midiNote);
lilv_node_free(units_unit);
lilv_node_free(ui_externalkx);
lilv_node_free(ui_external);
lilv_node_free(ui_GtkUI);

View file

@ -33,12 +33,12 @@ using namespace PBD;
// FIXME: mirroring for MIDI buffers?
MidiBuffer::MidiBuffer(size_t capacity)
: Buffer(DataType::MIDI, capacity)
, _data(0)
: Buffer (DataType::MIDI)
, _data (0)
{
if (capacity) {
resize(_capacity);
silence(_capacity);
resize (capacity);
silence (capacity);
}
}
@ -50,17 +50,22 @@ MidiBuffer::~MidiBuffer()
void
MidiBuffer::resize(size_t size)
{
assert(size > 0);
if (_data && size < _capacity) {
if (_size < size) {
/* truncate */
_size = size;
}
if (size < _capacity) {
return;
}
free(_data);
free (_data);
cache_aligned_malloc ((void**) &_data, size);
_size = 0;
_capacity = size;
cache_aligned_malloc ((void**) &_data, _capacity);
assert(_data);
}

View file

@ -174,14 +174,23 @@ MidiPort::flush_buffers (pframes_t nframes)
{
if (sends_output ()) {
void* port_buffer = port_engine.get_buffer (_port_handle, nframes);
void* port_buffer = 0;
if (_resolve_required) {
port_buffer = port_engine.get_buffer (_port_handle, nframes);
/* resolve all notes at the start of the buffer */
resolve_notes (port_buffer, 0);
_resolve_required = false;
}
if (_buffer->empty()) {
return;
}
if (!port_buffer) {
port_buffer = port_engine.get_buffer (_port_handle, nframes);
}
for (MidiBuffer::iterator i = _buffer->begin(); i != _buffer->end(); ++i) {
const Evoral::MIDIEvent<MidiBuffer::TimeType> ev (*i, false);
@ -201,6 +210,11 @@ MidiPort::flush_buffers (pframes_t nframes)
<< " + " << _port_buffer_offset << endl;
}
}
/* done.. the data has moved to the port buffer, mark it so
*/
_buffer->clear ();
}
}

View file

@ -39,7 +39,6 @@ using namespace Glib;
#include "i18n.h"
BaseUI::RequestType MidiControlUI::PortChange = BaseUI::new_request_type();
MidiControlUI* MidiControlUI::_instance = 0;
#include "pbd/abstract_ui.cc" /* instantiate the template */
@ -60,24 +59,7 @@ MidiControlUI::~MidiControlUI ()
void
MidiControlUI::do_request (MidiUIRequest* req)
{
if (req->type == PortChange) {
/* restart event loop with new ports */
DEBUG_TRACE (DEBUG::MidiIO, "reset ports\n");
reset_ports ();
} else if (req->type == CallSlot) {
#ifndef NDEBUG
if (getenv ("DEBUG_THREADED_SIGNALS")) {
cerr << "MIDI UI calls a slot\n";
}
#endif
req->the_slot ();
} else if (req->type == Quit) {
if (req->type == Quit) {
BaseUI::quit ();
}
}
@ -117,19 +99,33 @@ MidiControlUI::clear_ports ()
void
MidiControlUI::reset_ports ()
{
if (port_sources.empty()) {
AsyncMIDIPort* async = dynamic_cast<AsyncMIDIPort*> (_session.midi_input_port());
if (!port_sources.empty()) {
return;
}
if (!async) {
return;
}
vector<AsyncMIDIPort*> ports;
AsyncMIDIPort* p;
int fd;
if ((p = dynamic_cast<AsyncMIDIPort*> (_session.midi_input_port()))) {
ports.push_back (p);
}
if ((fd = async->selectable ()) >= 0) {
if ((p = dynamic_cast<AsyncMIDIPort*> (_session.mmc_input_port()))) {
ports.push_back (p);
}
if (ports.empty()) {
return;
}
int fd;
for (vector<AsyncMIDIPort*>::const_iterator pi = ports.begin(); pi != ports.end(); ++pi) {
if ((fd = (*pi)->selectable ()) >= 0) {
Glib::RefPtr<IOSource> psrc = IOSource::create (fd, IO_IN|IO_HUP|IO_ERR);
psrc->connect (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), async));
psrc->connect (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), *pi));
psrc->attach (_main_loop->get_context());
// glibmm hack: for now, store only the GSource*

View file

@ -68,11 +68,11 @@ MidiPortManager::create_ports ()
return;
}
_midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI control in"), true);
_midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI control out"), true);
_midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI control in"), true);
_midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI control out"), true);
_mmc_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MMC in"), true);
_mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MMC out"), true);
_mmc_in = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MMC in"), true);
_mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MMC out"), true);
/* XXX nasty type conversion needed because of the mixed inheritance
* required to integrate MIDI::IPMidiPort and ARDOUR::AsyncMIDIPort.
@ -93,14 +93,14 @@ MidiPortManager::create_ports ()
boost::shared_ptr<ARDOUR::Port> p;
p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MTC in"));
p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MTC in"));
_mtc_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MTC out"));
p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MTC out"));
_mtc_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI Clock in"));
p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI Clock in"));
_midi_clock_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI Clock out"));
p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI Clock out"));
_midi_clock_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
/* These ports all need their incoming data handled in

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-26 16:09+0200\n"
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
"PO-Revision-Date: 2013-09-26 16:32+0200\n"
"Last-Translator: Edgar Aichinger <edogawa@aon.at>\n"
"Language-Team: German <ardour-dev@lists.ardour.org>\n"
@ -137,7 +137,7 @@ msgstr "Audio-Wiedergabelisten (unbenutzt)"
#: audio_playlist_source.cc:171 audiosource.cc:913 file_source.cc:529
#: midi_playlist_source.cc:144 midi_playlist_source.cc:152
#: midi_playlist_source.cc:159 midi_source.cc:371 plugin_insert.cc:643
#: rb_effect.cc:332 session.cc:2606 session.cc:2639 session.cc:3784
#: rb_effect.cc:333 session.cc:2619 session.cc:2652 session.cc:3797
#: session_handle.cc:87 sndfilesource.cc:121
msgid "programming error: %1"
msgstr "Programmierfehler: %1"
@ -206,19 +206,19 @@ msgstr "kann VAMP-Plugin \"%1\" nicht laden"
msgid "VAMP Plugin \"%1\" could not be loaded"
msgstr "VAMP-Plugin \"%1\" konnte nicht geladen werden"
#: audioengine.cc:489
#: audioengine.cc:488
msgid "looking for backends in %1\n"
msgstr "Suche nach Backends in %1\n"
#: audioengine.cc:512
#: audioengine.cc:511
msgid "AudioEngine: cannot load module \"%1\" (%2)"
msgstr "AudioEngine: kann Modul \"%1\" nicht laden (%2)"
#: audioengine.cc:518
#: audioengine.cc:517
msgid "AudioEngine: backend at \"%1\" has no descriptor function."
msgstr "AudioEngine: Backend an \"%1\" hat keine Beschreibungsfunktion."
#: audioengine.cc:580
#: audioengine.cc:589
msgid "Could not create backend for %1: %2"
msgstr "Konnte Backend für %1 nicht erzeugen: %2"
@ -272,8 +272,8 @@ msgstr "AudioSource: kann Pfad für Peaks (b) \"%1\" nicht öffnen (%2)"
msgid ""
"AudioSource[%1]: peak read - cannot read %2 samples at offset %3 of %4 (%5)"
msgstr ""
"AudioSource[%1]: peak read - kann %2 Samples bei Offset %3 von %4 nicht "
"lesen(%5)"
"AudioSource[%1]: peak read - kann %2 Samples bei Offset %3 von %4 nicht lesen"
"(%5)"
#: audiosource.cc:667
msgid "%1: could not write read raw data for peak computation (%2)"
@ -423,7 +423,7 @@ msgstr "kann CPU-Takt in /proc/cpuinfo nicht finden"
msgid "audio"
msgstr "Audio"
#: data_type.cc:28 session.cc:1781 session.cc:1784
#: data_type.cc:28 session.cc:1791 session.cc:1794
msgid "MIDI"
msgstr "MIDI"
@ -538,7 +538,7 @@ msgstr "Dreieck"
msgid "Rectangular"
msgstr "Rechteck"
#: export_formats.cc:52 session.cc:5002 session.cc:5018
#: export_formats.cc:52 session.cc:5014 session.cc:5030
msgid "None"
msgstr "Kein"
@ -652,7 +652,7 @@ msgstr ""
"% unterstützt nur %2 Kanäle, in Ihrer Kanalkonfiguration befinden sich "
"jedoch %3 Kanäle"
#: file_source.cc:198 session_state.cc:2813
#: file_source.cc:198 session_state.cc:2807
msgid ""
"there are already 1000 files with names like %1; versioning discontinued"
msgstr ""
@ -910,15 +910,15 @@ msgstr "%s in"
msgid "%s out"
msgstr "%s out"
#: io.cc:1535 session.cc:676 session.cc:705
#: io.cc:1535 session.cc:686 session.cc:715
msgid "mono"
msgstr "Mono"
#: io.cc:1537 session.cc:689 session.cc:719
#: io.cc:1537 session.cc:699 session.cc:729
msgid "L"
msgstr "L"
#: io.cc:1537 session.cc:691 session.cc:721
#: io.cc:1537 session.cc:701 session.cc:731
msgid "R"
msgstr "R"
@ -1019,7 +1019,7 @@ msgstr ""
msgid "incorrect XML mode passed to Locations::set_state"
msgstr "unkorrekter XML-Modus an Locations::set_state weitergereicht"
#: location.cc:842 session.cc:4503 session_state.cc:1031
#: location.cc:842 session.cc:4516 session_state.cc:1031
msgid "session"
msgstr "Projekt"
@ -1166,38 +1166,6 @@ msgstr "Fehlende Eigenschaft \"state\" bei AutomationState"
msgid "MIDI stretch created non-MIDI source"
msgstr "MIDI Streckung erzeugte Nicht-MIDI Quelle"
#: midiport_manager.cc:71
msgid "MIDI control in"
msgstr "MIDI control in"
#: midiport_manager.cc:72
msgid "MIDI control out"
msgstr "MIDI control out"
#: midiport_manager.cc:74
msgid "MMC in"
msgstr "MMC in"
#: midiport_manager.cc:75
msgid "MMC out"
msgstr "MMC out"
#: midiport_manager.cc:96
msgid "MTC in"
msgstr "MTC in"
#: midiport_manager.cc:98
msgid "MTC out"
msgstr "MTC out"
#: midiport_manager.cc:101
msgid "MIDI Clock in"
msgstr "MIDI Clock in"
#: midiport_manager.cc:103
msgid "MIDI Clock out"
msgstr "MIDI Clock out"
#: monitor_processor.cc:53
msgid "monitor dim"
msgstr "Monitor dämpfen"
@ -1582,39 +1550,43 @@ msgstr "Import: Fehler in src_new() : %1"
msgid "return %1"
msgstr "Rückgabewert: %1"
#: route.cc:1105 route.cc:2581
#: route.cc:1075 route.cc:2528
msgid "unknown Processor type \"%1\"; ignored"
msgstr "unbekannter Prozessortyp \"%1\"; ignoriert"
#: route.cc:1117
#: route.cc:1087
msgid "processor could not be created. Ignored."
msgstr "Prozessor konnte nicht erzeugt werden. Ignoriert."
#: route.cc:2007 route.cc:2234
#: route.cc:1962 route.cc:2187
msgid "Bad node sent to Route::set_state() [%1]"
msgstr "Schlechter Knoten an Route::set_state() gesendet [%1]"
#: route.cc:2067
#: route.cc:2022
msgid "Pannable state found for route (%1) without a panner!"
msgstr "Pannerziel-Status für Route (%1) ohne Panner gefunden!"
#: route.cc:2137 route.cc:2141 route.cc:2348 route.cc:2352
#: route.cc:2096 route.cc:2100 route.cc:2301 route.cc:2305
msgid "badly formed order key string in state file! [%1] ... ignored."
msgstr ""
"schlecht geformte Zeichenkette für den Schlüssel der Sortierreihenfolge in "
"der Projektdatei! [%1] ... ignoriert"
#: route.cc:2311
msgid "Converting deprecated order key for %1 using Editor order %2"
msgstr ""
#: route_group.cc:459
msgid "You cannot subgroup MIDI tracks at this time"
msgstr "MIDI-Spuren können zur Zeit nicht zu Subgruppen zusammengefasst werden"
#: rb_effect.cc:233 rb_effect.cc:274
#: rb_effect.cc:234 rb_effect.cc:275
msgid "tempoize: error reading data from %1 at %2 (wanted %3, got %4)"
msgstr ""
"tempoize: Fehler beim Lesen der Daten von %1 an %2 (%3 erwünscht, %4 "
"erhalten)"
#: rb_effect.cc:303 rb_effect.cc:325
#: rb_effect.cc:304 rb_effect.cc:326
msgid "error writing tempo-adjusted data to %1"
msgstr "Fehler beim Schreiben der tempo-angepassten Daten nach %1"
@ -1630,98 +1602,82 @@ msgstr "Send %1"
msgid "programming error: send created using role %1"
msgstr "Programmierfehler: Send erzeugt mittels Rolle %1"
#: session.cc:343
#: session.cc:344
msgid "Connect to engine"
msgstr "Verbinde zur Engine"
#: session.cc:348
#: session.cc:349
msgid "Session loading complete"
msgstr "Laden des Projektes abgeschlossen"
#: session.cc:420
#: session.cc:421
msgid "Set up LTC"
msgstr "LTC einrichten"
#: session.cc:422
#: session.cc:423
msgid "Set up Click"
msgstr "Klick einrichten"
#: session.cc:424
#: session.cc:425
msgid "Set up standard connections"
msgstr "Richte Standard-Verbindungen ein"
#: session.cc:561
msgid "LTC In"
msgstr "LTC In"
#: session.cc:562
msgid "LTC Out"
msgstr "LTC Out"
#: session.cc:588
msgid "LTC-in"
msgstr "LTC-in"
#: session.cc:589
msgid "LTC-out"
msgstr "LTC-out"
#: session.cc:625
#: session.cc:635
msgid "could not setup Click I/O"
msgstr "konnte Metronom-E/A nicht einrichten"
#: session.cc:673
#: session.cc:683
#, c-format
msgid "out %<PRIu32>"
msgstr "out %<PRIu32>"
#: session.cc:687
#: session.cc:697
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr "out %<PRIu32>+%<PRIu32>"
#: session.cc:702
#: session.cc:712
#, c-format
msgid "in %<PRIu32>"
msgstr "in %<PRIu32>"
#: session.cc:716
#: session.cc:726
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr "in %<PRIu32>+%<PRIu32>"
#: session.cc:780
#: session.cc:790
msgid "cannot connect master output %1 to %2"
msgstr "kann Master-Ausgang %1 nicht mit %2 verbinden"
#: session.cc:839
#: session.cc:849
msgid "monitor"
msgstr "Monitor"
#: session.cc:884
#: session.cc:894
msgid "cannot connect control input %1 to %2"
msgstr "kann Kontrolleingang %1 nicht mit %2 verbinden"
#: session.cc:904
#: session.cc:914
msgid "The preferred I/O for the monitor bus (%1) cannot be found"
msgstr "Bevorzugte E/A für den Monitorbus (%1) kann nicht gefunden werden"
#: session.cc:935
#: session.cc:945
msgid "cannot connect control output %1 to %2"
msgstr "kann Kontrollausgang %1 nicht mit %2 verbinden"
#: session.cc:999
#: session.cc:1009
msgid "cannot create Auditioner: no auditioning of regions possible"
msgstr ""
"Kann das Vorhör-System nicht einrichten: kein Vorhören von Regionen möglich"
#: session.cc:1183
#: session.cc:1193
msgid "Session: you can't use that location for auto punch (start <= end)"
msgstr ""
"Session: Sie können diese Position nicht für Auto-Punch verwenden (Start <= "
"Ende) "
#: session.cc:1223
#: session.cc:1233
msgid ""
"You cannot use this location for auto-loop because it has zero or negative "
"length"
@ -1729,15 +1685,15 @@ msgstr ""
"Sie können diese Position nicht für \"automatische Schleife\" verwenden, da "
"sie keine oder eine negative Länge hat"
#: session.cc:1537
#: session.cc:1547
msgid "feedback loop setup between %1 and %2"
msgstr "Feedbackschleife zwischen %1 und %2 erkannt"
#: session.cc:1833
#: session.cc:1843
msgid "Session: could not create new midi track."
msgstr "Session: konnte keine neue MIDI-Spur erzeugen."
#: session.cc:1839
#: session.cc:1849
msgid ""
"No more JACK ports are available. You will need to stop %1 and restart JACK "
"with more ports if you need this many tracks."
@ -1745,76 +1701,76 @@ msgstr ""
"Keine JACK-Ports mehr verfügbar. Wenn Sie so viele Spuren benötigen, müssen "
"Sie %1 stoppen und JACK mit mehr Ports neu starten."
#: session.cc:2016 session.cc:2019
#: session.cc:2026 session.cc:2029
msgid "Audio"
msgstr "Audio"
#: session.cc:2043 session.cc:2051 session.cc:2128 session.cc:2136
#: session.cc:2053 session.cc:2061 session.cc:2138 session.cc:2146
msgid "cannot configure %1 in/%2 out configuration for new audio track"
msgstr "kann %1 ein/%2 aus für neue Audiospur nicht konfigurieren"
#: session.cc:2074
#: session.cc:2084
msgid "Session: could not create new audio track."
msgstr "Session: konnte keine neue Audios.pur erzeugen"
#: session.cc:2106 session.cc:2109
#: session.cc:2116 session.cc:2119
msgid "Bus"
msgstr "Bus"
#: session.cc:2159
#: session.cc:2169
msgid "Session: could not create new audio route."
msgstr "Session: konnte keine neueAudio-Route erzeugen"
#: session.cc:2218 session.cc:2228
#: session.cc:2228 session.cc:2238
msgid "Session: UINT_MAX routes? impossible!"
msgstr "Session: UINT_MAX Routen? unmöglich!"
#: session.cc:2250
#: session.cc:2260
msgid "Session: cannot create track/bus from template description"
msgstr "Session: Kann die Route aus der Vorlagenbeschreibung nicht erzeugen"
#: session.cc:2276
#: session.cc:2286
msgid "Session: could not create new route from template"
msgstr "Session: konnte keine neue Route aus der Vorlage erzeugen."
#: session.cc:2305
#: session.cc:2315
msgid "Adding new tracks/busses failed"
msgstr "Fehler beim Hinzufügen neuer Spuren/Busse"
#: session.cc:3406
#: session.cc:3419
msgid "FATAL ERROR! Could not find a suitable version of %1 for a rename"
msgstr ""
"FATALER FEHLER! Konnte keine passende Version von %1 zum Umbenennen finden"
#: session.cc:3526 session.cc:3584
#: session.cc:3539 session.cc:3597
msgid "There are already %1 recordings for %2, which I consider too many."
msgstr "Es gibt bereits %1 Aufnahmen für %2, was ich als zu viele erachte."
#: session.cc:3974
#: session.cc:3987
msgid "send ID %1 appears to be in use already"
msgstr "Send ID %1 ist offenbar schon in Gebrauch"
#: session.cc:3986
#: session.cc:3999
msgid "aux send ID %1 appears to be in use already"
msgstr "Aux-Send ID %1 ist offenbar schon in Gebrauch"
#: session.cc:3998
#: session.cc:4011
msgid "return ID %1 appears to be in use already"
msgstr "Return ID %1 ist offenbar schon in Gebrauch"
#: session.cc:4010
#: session.cc:4023
msgid "insert ID %1 appears to be in use already"
msgstr "Insert ID %1 ist offenbar schon in Gebrauch"
#: session.cc:4137
#: session.cc:4150
msgid "Cannot write a range where end <= start (e.g. %1 <= %2)"
msgstr "Kann einen Bereich mit Ende <= Start nicht schreiben (z.B. %1 <= %2)"
#: session.cc:4166
#: session.cc:4179
msgid "too many bounced versions of playlist \"%1\""
msgstr "zu viele gebouncete Versionen der Wiedergabeliste \"%1\""
#: session.cc:4176
#: session.cc:4189
msgid "cannot create new audio file \"%1\" for %2"
msgstr "kann keine neue Audiodatei \"%1\" für %2 erzeugen"
@ -2072,55 +2028,55 @@ msgstr "Session: XML hat keinen Abschnitt \"mix groups\""
msgid "Session: XML state has no click section"
msgstr "Session: XML hat keinen Abschnitt \"click\""
#: session_state.cc:1366
#: session_state.cc:1360
msgid "Session: cannot create Route from XML description."
msgstr "Session: Kann die Route aus der XML-Beschreibung nicht erzeugen"
#: session_state.cc:1370
#: session_state.cc:1364
msgid "Loaded track/bus %1"
msgstr "Spur/Bus %1 wurde geladen"
#: session_state.cc:1468
#: session_state.cc:1462
msgid "Could not find diskstream for route"
msgstr "Konnte Diskstream für Route nicht finden"
#: session_state.cc:1522
#: session_state.cc:1516
msgid "Session: cannot create Region from XML description."
msgstr "Session: kann Region nicht aus XML-Beschreibung erzeugen"
#: session_state.cc:1526
#: session_state.cc:1520
msgid "Can not load state for region '%1'"
msgstr "Kann Status für Region '%1' nicht laden"
#: session_state.cc:1562
#: session_state.cc:1556
msgid "Regions in compound description not found (ID's %1 and %2): ignored"
msgstr ""
"Regionen der Verbindungsbeschreibung nicht gefunden (IDs %1 and %2): "
"ignoriert"
#: session_state.cc:1590
#: session_state.cc:1584
msgid "Nested source has no ID info in session file! (ignored)"
msgstr ""
"Verschachtelte Quelle hat keine ID-Information in Projektdatei! (ignoriert)"
#: session_state.cc:1602
#: session_state.cc:1596
msgid "Cannot reconstruct nested source for region %1"
msgstr "Kann verschachtelte Quelle für Region %1 nicht wiederherstellen"
#: session_state.cc:1664
#: session_state.cc:1658
msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion ist unvollständig "
"(Quelle fehlt)"
#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
#: session_state.cc:1666 session_state.cc:1687 session_state.cc:1707
msgid ""
"Session: XMLNode describing a AudioRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"unbekannte Quell-ID =%1"
#: session_state.cc:1678 session_state.cc:1699 session_state.cc:1719
#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
msgid ""
"Session: XMLNode describing a AudioRegion references a non-audio source id ="
"%1"
@ -2128,7 +2084,7 @@ msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"Nicht-Audio Quell-ID =%1"
#: session_state.cc:1742
#: session_state.cc:1736
msgid ""
"Session: XMLNode describing an AudioRegion is missing some master sources; "
"ignored"
@ -2136,27 +2092,27 @@ msgstr ""
"Session: dem XML-Knoten zur Beschreibung einer Audioregion fehlen einige "
"Hauptquellen; ignoriert"
#: session_state.cc:1776
#: session_state.cc:1770
msgid "Session: XMLNode describing a MidiRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region ist unvollständig "
"(Quelle fehlt)"
#: session_state.cc:1784
#: session_state.cc:1778
msgid ""
"Session: XMLNode describing a MidiRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"unbekannte Quell-ID =%1"
#: session_state.cc:1790
#: session_state.cc:1784
msgid ""
"Session: XMLNode describing a MidiRegion references a non-midi source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"Nicht-MIDI Quell-ID =%1"
#: session_state.cc:1858
#: session_state.cc:1852
msgid ""
"cannot create new file from region name \"%1\" with ident = \"%2\": too many "
"existing files with similar names"
@ -2164,109 +2120,109 @@ msgstr ""
"kann keine neue Datei aus dem Regionennamen \"%1\" mit ident = \"%2\" "
"erzeugen: zu viele Dateien mit ähnlichen Namen existieren"
#: session_state.cc:1881
#: session_state.cc:1875
msgid "Session: cannot create Source from XML description."
msgstr "Session: Kann Quelle aus der XML-Beschreibung nicht erzeugen"
#: session_state.cc:1915
#: session_state.cc:1909
msgid "A sound file is missing. It will be replaced by silence."
msgstr "Eine Audiodatei fehlt. Sie wird durch Stille ersetzt werden."
#: session_state.cc:1938
#: session_state.cc:1932
msgid "Found a sound file that cannot be used by %1. Talk to the progammers."
msgstr ""
"Eine nicht mit %1 benutzbare Audiodatei wurde gefunden. Sprechen Sie mit den "
"Programmierern."
#: session_state.cc:1955
#: session_state.cc:1949
msgid "Could not create templates directory \"%1\" (%2)"
msgstr "Konnte Vorlagenverzeichnis \"%1\" nicht erzeugen (%2)"
#: session_state.cc:1968
#: session_state.cc:1962
msgid "Template \"%1\" already exists - new version not created"
msgstr "Vorlage \"%1\" existiert bereits - neue Version wurde nicht erzeugt"
#: session_state.cc:1974
#: session_state.cc:1968
msgid "Could not create directory for Session template\"%1\" (%2)"
msgstr "Konnte kein Verzeichnis für Projektvorlage \"%1\" erzeugen (%2)"
#: session_state.cc:1984
#: session_state.cc:1978
msgid "template not saved"
msgstr "Vorlage nicht gesichert"
#: session_state.cc:1994
#: session_state.cc:1988
msgid "Could not create directory for Session template plugin state\"%1\" (%2)"
msgstr ""
"Konnte Verzeichnis für Projektvorlagen-Pluginstatus \"%1\" nicht erzeugen "
"(%2)"
#: session_state.cc:2189
#: session_state.cc:2183
msgid "Unknown node \"%1\" found in Bundles list from session file"
msgstr "Unbekannter Knoten \"%1\" in Bündelliste der Projektdatei gefunden"
#: session_state.cc:2731 session_state.cc:2737
#: session_state.cc:2725 session_state.cc:2731
msgid "Cannot expand path %1 (%2)"
msgstr "Kann Pfad %1 nicht expandieren (%2)"
#: session_state.cc:2790
#: session_state.cc:2784
msgid "Session: cannot create dead file folder \"%1\" (%2)"
msgstr "Session: kann den Mülleimer \"%1\" nicht erzeugen (%2)"
#: session_state.cc:2829
#: session_state.cc:2823
msgid "cannot rename unused file source from %1 to %2 (%3)"
msgstr "kann unbenutzte Dateiquelle nicht von %1 nach %2 umbenennen (%3)"
#: session_state.cc:2847
#: session_state.cc:2841
msgid "cannot remove peakfile %1 for %2 (%3)"
msgstr "kann Peakdatei %1 für %2 nicht entfernen (%3)"
#: session_state.cc:3149
#: session_state.cc:3143
msgid "could not backup old history file, current history not saved"
msgstr ""
"konnte kein Backup der alten Aktionsliste erstellen, momentane Aktionsliste "
"ungesichert"
#: session_state.cc:3162
#: session_state.cc:3156
msgid "history could not be saved to %1"
msgstr "Aktionsliste konnte nicht nach %1 gesichert werden"
#: session_state.cc:3165
#: session_state.cc:3159
msgid "Could not remove history file at path \"%1\" (%2)"
msgstr "Konnte Aktionslistendatei im Pfad \"%1\" nicht entfernen (%2)"
#: session_state.cc:3169
#: session_state.cc:3163
msgid "could not restore history file from backup %1 (%2)"
msgstr "konnte Aktionslistendatei nicht aus dem Backup %1 restaurieren (%2)"
#: session_state.cc:3194
#: session_state.cc:3188
msgid "%1: no history file \"%2\" for this session."
msgstr "%1: keine Aktionslistendatei \"%2\" für dieses Projekt."
#: session_state.cc:3200
#: session_state.cc:3194
msgid "Could not understand session history file \"%1\""
msgstr "Konnte Projekt-Aktionslistendatei \"%1\" nicht verstehen"
#: session_state.cc:3242
#: session_state.cc:3236
msgid "Failed to downcast MidiSource for NoteDiffCommand"
msgstr "MidiSource für NoteDiffCommand nicht auffindbar"
#: session_state.cc:3253
#: session_state.cc:3247
msgid "Failed to downcast MidiSource for SysExDiffCommand"
msgstr "MidiSource für SysExDiffCommand nicht auffindbar"
#: session_state.cc:3264
#: session_state.cc:3258
msgid "Failed to downcast MidiSource for PatchChangeDiffCommand"
msgstr "MidiSource für PatchChangeDiffCommand nicht auffindbar"
#: session_state.cc:3272
#: session_state.cc:3266
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr "Konnte im XML-Knoten \"%1\" keinen Befehl erkennen."
#: session_state.cc:3524
#: session_state.cc:3502
msgid "Session: unknown diskstream type in XML"
msgstr "Session: Unbekannter Diskstream im XML"
#: session_state.cc:3529
#: session_state.cc:3507
msgid "Session: could not load diskstream via XML state"
msgstr "Session: konnte Diskstream nicht via XML-Status laden"
@ -2710,56 +2666,3 @@ msgstr "Programmierfehler: unbekanntes natives Dateikopfformat: %1"
#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "kann Verzeichnis %1 nicht öffnen (%2)"
#~ msgid "Setup signal flow and plugins"
#~ msgstr "Richte Signalfluss and Plugins ein"
#~ msgid "cannot setup Click I/O"
#~ msgstr "kann Metronom-E/A nicht einrichten"
#~ msgid "Compute I/O Latencies"
#~ msgstr "Berechne E/A-Latenzen"
#~ msgid ""
#~ "This version of JACK is old - you should upgrade to a newer version that "
#~ "supports jack_port_type_get_buffer_size()"
#~ msgstr ""
#~ "Diese JACK-Version ist alt - Sie sollten auf eine Version upgraden, die "
#~ "jack_port_type_get_buffer_size() unterstützt"
#~ msgid "Connect session to engine"
#~ msgstr "Verbinde Projekt mit Engine"
#~ msgid "connect called before engine was started"
#~ msgstr "Aufruf von connect vor dem Start der Engine"
#~ msgid "disconnect called before engine was started"
#~ msgstr "Aufruf von disconnect vor dem Start der Engine"
#~ msgid "get_port_by_name() called before engine was started"
#~ msgstr "Aufruf von get_port_by_name() vor dem Start der Engine"
#~ msgid "get_ports called before engine was started"
#~ msgstr "Aufruf von get_ports vor dem Start der Engine"
#~ msgid "failed to connect to JACK"
#~ msgstr "Verbindung zu JACK fehlgeschlagen"
#~ msgid "get_connected_latency_range() called while disconnected from JACK"
#~ msgstr "Aufruf von get_connected_latency_range(), während von JACK getrennt"
#~ msgid "Session: could not send full MIDI time code"
#~ msgstr "Session: konnte vollständigen MIDI-Timecode nicht senden"
#~ msgid "Session"
#~ msgstr "Projekt"
#~ msgid "MidiDiskstream: XML property channel-mask out of range"
#~ msgstr "MidiDiskstream: Wertüberschreitung der XML-Eigenschaft Kanalmaske"
#~ msgid ""
#~ "Copying old session file %1 to %2\n"
#~ "Use %2 with %3 versions before 2.0 from now on"
#~ msgstr ""
#~ "Kopiere alte Projektdatei %1 nach %2\n"
#~ "Benutzen Sie von jetzt an %2 mit %3-Versionen vor 2.0"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libardour 3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 21:42+0400\n"
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
"PO-Revision-Date: 2013-10-15 21:40+0300\n"
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
"Language-Team: русский <>\n"
@ -124,7 +124,7 @@ msgstr ""
#: audio_playlist_source.cc:171 audiosource.cc:913 file_source.cc:529
#: midi_playlist_source.cc:144 midi_playlist_source.cc:152
#: midi_playlist_source.cc:159 midi_source.cc:371 plugin_insert.cc:643
#: rb_effect.cc:332 session.cc:2613 session.cc:2646 session.cc:3791
#: rb_effect.cc:333 session.cc:2619 session.cc:2652 session.cc:3797
#: session_handle.cc:87 sndfilesource.cc:121
msgid "programming error: %1"
msgstr "programming error: %1"
@ -391,7 +391,7 @@ msgstr ""
msgid "audio"
msgstr ""
#: data_type.cc:28 session.cc:1788 session.cc:1791
#: data_type.cc:28 session.cc:1791 session.cc:1794
msgid "MIDI"
msgstr ""
@ -503,7 +503,7 @@ msgstr "Треугольное"
msgid "Rectangular"
msgstr "Прямоугольное"
#: export_formats.cc:52 session.cc:5009 session.cc:5025
#: export_formats.cc:52 session.cc:5014 session.cc:5030
msgid "None"
msgstr "Нет"
@ -859,15 +859,15 @@ msgstr ""
msgid "%s out"
msgstr ""
#: io.cc:1535 session.cc:683 session.cc:712
#: io.cc:1535 session.cc:686 session.cc:715
msgid "mono"
msgstr ""
#: io.cc:1537 session.cc:696 session.cc:726
#: io.cc:1537 session.cc:699 session.cc:729
msgid "L"
msgstr ""
#: io.cc:1537 session.cc:698 session.cc:728
#: io.cc:1537 session.cc:701 session.cc:731
msgid "R"
msgstr ""
@ -962,7 +962,7 @@ msgstr ""
msgid "incorrect XML mode passed to Locations::set_state"
msgstr ""
#: location.cc:842 session.cc:4510 session_state.cc:1031
#: location.cc:842 session.cc:4516 session_state.cc:1031
msgid "session"
msgstr ""
@ -1094,38 +1094,6 @@ msgstr ""
msgid "MIDI stretch created non-MIDI source"
msgstr ""
#: midiport_manager.cc:71
msgid "MIDI control in"
msgstr ""
#: midiport_manager.cc:72
msgid "MIDI control out"
msgstr ""
#: midiport_manager.cc:74
msgid "MMC in"
msgstr ""
#: midiport_manager.cc:75
msgid "MMC out"
msgstr ""
#: midiport_manager.cc:96
msgid "MTC in"
msgstr ""
#: midiport_manager.cc:98
msgid "MTC out"
msgstr ""
#: midiport_manager.cc:101
msgid "MIDI Clock in"
msgstr ""
#: midiport_manager.cc:103
msgid "MIDI Clock out"
msgstr ""
#: monitor_processor.cc:53
msgid "monitor dim"
msgstr ""
@ -1486,35 +1454,39 @@ msgstr ""
msgid "return %1"
msgstr ""
#: route.cc:1107 route.cc:2584
#: route.cc:1075 route.cc:2528
msgid "unknown Processor type \"%1\"; ignored"
msgstr ""
#: route.cc:1119
#: route.cc:1087
msgid "processor could not be created. Ignored."
msgstr ""
#: route.cc:2010 route.cc:2237
#: route.cc:1962 route.cc:2187
msgid "Bad node sent to Route::set_state() [%1]"
msgstr ""
#: route.cc:2070
#: route.cc:2022
msgid "Pannable state found for route (%1) without a panner!"
msgstr ""
#: route.cc:2140 route.cc:2144 route.cc:2351 route.cc:2355
#: route.cc:2096 route.cc:2100 route.cc:2301 route.cc:2305
msgid "badly formed order key string in state file! [%1] ... ignored."
msgstr ""
#: route.cc:2311
msgid "Converting deprecated order key for %1 using Editor order %2"
msgstr ""
#: route_group.cc:459
msgid "You cannot subgroup MIDI tracks at this time"
msgstr ""
#: rb_effect.cc:233 rb_effect.cc:274
#: rb_effect.cc:234 rb_effect.cc:275
msgid "tempoize: error reading data from %1 at %2 (wanted %3, got %4)"
msgstr ""
#: rb_effect.cc:303 rb_effect.cc:325
#: rb_effect.cc:304 rb_effect.cc:326
msgid "error writing tempo-adjusted data to %1"
msgstr ""
@ -1530,183 +1502,167 @@ msgstr ""
msgid "programming error: send created using role %1"
msgstr "programming error: send created using role %1"
#: session.cc:343
#: session.cc:344
msgid "Connect to engine"
msgstr "Соединение со звуковым движком"
#: session.cc:348
#: session.cc:349
msgid "Session loading complete"
msgstr "Загрузка сеанса завершена"
#: session.cc:420
#: session.cc:421
msgid "Set up LTC"
msgstr ""
#: session.cc:422
#: session.cc:423
msgid "Set up Click"
msgstr ""
#: session.cc:424
#: session.cc:425
msgid "Set up standard connections"
msgstr "Настройка обычных соединений"
#: session.cc:561
msgid "LTC In"
msgstr ""
#: session.cc:562
msgid "LTC Out"
msgstr ""
#: session.cc:588
msgid "LTC-in"
msgstr ""
#: session.cc:589
msgid "LTC-out"
msgstr ""
#: session.cc:632
#: session.cc:635
msgid "could not setup Click I/O"
msgstr ""
#: session.cc:680
#: session.cc:683
#, c-format
msgid "out %<PRIu32>"
msgstr ""
#: session.cc:694
#: session.cc:697
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr ""
#: session.cc:709
#: session.cc:712
#, c-format
msgid "in %<PRIu32>"
msgstr ""
#: session.cc:723
#: session.cc:726
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr ""
#: session.cc:787
#: session.cc:790
msgid "cannot connect master output %1 to %2"
msgstr ""
#: session.cc:846
#: session.cc:849
msgid "monitor"
msgstr ""
#: session.cc:891
#: session.cc:894
msgid "cannot connect control input %1 to %2"
msgstr ""
#: session.cc:911
#: session.cc:914
msgid "The preferred I/O for the monitor bus (%1) cannot be found"
msgstr ""
#: session.cc:942
#: session.cc:945
msgid "cannot connect control output %1 to %2"
msgstr ""
#: session.cc:1006
#: session.cc:1009
msgid "cannot create Auditioner: no auditioning of regions possible"
msgstr ""
#: session.cc:1190
#: session.cc:1193
msgid "Session: you can't use that location for auto punch (start <= end)"
msgstr ""
#: session.cc:1230
#: session.cc:1233
msgid ""
"You cannot use this location for auto-loop because it has zero or negative "
"length"
msgstr ""
#: session.cc:1544
#: session.cc:1547
msgid "feedback loop setup between %1 and %2"
msgstr ""
#: session.cc:1840
#: session.cc:1843
msgid "Session: could not create new midi track."
msgstr ""
#: session.cc:1846
#: session.cc:1849
msgid ""
"No more JACK ports are available. You will need to stop %1 and restart JACK "
"with more ports if you need this many tracks."
msgstr ""
#: session.cc:2023 session.cc:2026
#: session.cc:2026 session.cc:2029
msgid "Audio"
msgstr ""
#: session.cc:2050 session.cc:2058 session.cc:2135 session.cc:2143
#: session.cc:2053 session.cc:2061 session.cc:2138 session.cc:2146
msgid "cannot configure %1 in/%2 out configuration for new audio track"
msgstr ""
#: session.cc:2081
#: session.cc:2084
msgid "Session: could not create new audio track."
msgstr ""
#: session.cc:2113 session.cc:2116
#: session.cc:2116 session.cc:2119
msgid "Bus"
msgstr ""
#: session.cc:2166
#: session.cc:2169
msgid "Session: could not create new audio route."
msgstr ""
#: session.cc:2225 session.cc:2235
#: session.cc:2228 session.cc:2238
msgid "Session: UINT_MAX routes? impossible!"
msgstr ""
#: session.cc:2257
#: session.cc:2260
msgid "Session: cannot create track/bus from template description"
msgstr ""
#: session.cc:2283
#: session.cc:2286
msgid "Session: could not create new route from template"
msgstr ""
#: session.cc:2312
#: session.cc:2315
msgid "Adding new tracks/busses failed"
msgstr "Не удалось добавить новые дорожки/шины"
#: session.cc:3413
#: session.cc:3419
msgid "FATAL ERROR! Could not find a suitable version of %1 for a rename"
msgstr ""
#: session.cc:3533 session.cc:3591
#: session.cc:3539 session.cc:3597
msgid "There are already %1 recordings for %2, which I consider too many."
msgstr ""
#: session.cc:3981
#: session.cc:3987
msgid "send ID %1 appears to be in use already"
msgstr ""
#: session.cc:3993
#: session.cc:3999
msgid "aux send ID %1 appears to be in use already"
msgstr ""
#: session.cc:4005
#: session.cc:4011
msgid "return ID %1 appears to be in use already"
msgstr ""
#: session.cc:4017
#: session.cc:4023
msgid "insert ID %1 appears to be in use already"
msgstr ""
#: session.cc:4144
#: session.cc:4150
msgid "Cannot write a range where end <= start (e.g. %1 <= %2)"
msgstr ""
#: session.cc:4173
#: session.cc:4179
msgid "too many bounced versions of playlist \"%1\""
msgstr ""
#: session.cc:4183
#: session.cc:4189
msgid "cannot create new audio file \"%1\" for %2"
msgstr ""
@ -2110,11 +2066,11 @@ msgstr ""
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr ""
#: session_state.cc:3518
#: session_state.cc:3502
msgid "Session: unknown diskstream type in XML"
msgstr ""
#: session_state.cc:3523
#: session_state.cc:3507
msgid "Session: could not load diskstream via XML state"
msgstr ""
@ -2528,66 +2484,3 @@ msgstr "programming error: unknown native header format: %1"
#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "cannot open directory %1 (%2)"
#~ msgid "Setup signal flow and plugins"
#~ msgstr "Настройка модулей и звукового потока"
#~ msgid "Session"
#~ msgstr "Сеанс"
#, fuzzy
#~ msgid "editor"
#~ msgstr "монитор"
#, fuzzy
#~ msgid "programming error: realpath(%1) failed, errcode %2"
#~ msgstr "ошибка программы: "
#, fuzzy
#~ msgid "programming error:"
#~ msgstr "ошибка программы: "
#~ msgid "cannot activate JACK client"
#~ msgstr "не удалось активировать клиента JACK сервера"
#, fuzzy
#~ msgid "removed event"
#~ msgstr "удалить область"
#, fuzzy
#~ msgid "removed range"
#~ msgstr "удалить область"
#~ msgid "add"
#~ msgstr "добавить"
#~ msgid "remove"
#~ msgstr "удалить"
#~ msgid "remove region"
#~ msgstr "удалить область"
#~ msgid "separate"
#~ msgstr "разделить"
#~ msgid "split"
#~ msgstr "склеить"
#~ msgid "pre"
#~ msgstr "пре"
#~ msgid "post"
#~ msgstr "пост"
#, fuzzy
#~ msgid "Master Out"
#~ msgstr "мастер"
#~ msgid "16 bit"
#~ msgstr "16 бит"
#~ msgid "24 bit"
#~ msgstr "24 бита"
#~ msgid "8 bit"
#~ msgstr "8 бит"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -63,6 +63,7 @@ Processor::Processor(Session& session, const string& name)
, _display_to_user (true)
, _pre_fader (false)
, _ui_pointer (0)
, _owner (0)
{
}

Some files were not shown because too many files have changed in this diff Show more