From cb413146428ce5db5e281d70f2b3b7df27c1aaab Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 11 Apr 2008 14:06:50 +0000 Subject: merge 3.0 from 2.0-ongoing@3243 git-svn-id: svn://localhost/ardour2/branches/3.0@3248 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audio_unit.h | 4 +- libs/ardour/ardour/audioengine.h | 2 + libs/ardour/ardour/automation_event.h | 14 +- libs/ardour/ardour/configuration_vars.h | 2 +- libs/ardour/ardour/playlist.h | 4 + libs/ardour/ardour/region.h | 1 + libs/ardour/ardour/region_factory.h | 7 +- libs/ardour/ardour/session.h | 8 + libs/ardour/audio_diskstream.cc | 4 +- libs/ardour/audio_unit.cc | 65 +- libs/ardour/audioengine.cc | 26 +- libs/ardour/audiofilesource.cc | 48 +- libs/ardour/audioregion.cc | 16 +- libs/ardour/automation_event.cc | 9 +- libs/ardour/import.cc | 4 +- libs/ardour/io.cc | 2 +- libs/ardour/playlist.cc | 61 +- libs/ardour/po/pl_PL.po | 2063 ++++++++++++++++++++ libs/ardour/region.cc | 31 +- libs/ardour/region_factory.cc | 18 +- libs/ardour/route.cc | 1 + libs/ardour/session.cc | 18 +- libs/ardour/utils.cc | 19 - libs/gtkmm2ext/gtkmm2ext/barcontroller.h | 1 + libs/gtkmm2ext/gtkmm2ext/bindable_button.h | 5 +- libs/gtkmm2ext/gtkmm2ext/binding_proxy.h | 1 + libs/gtkmm2ext/po/pl_PL.po | 53 + libs/libgnomecanvasmm/libgnomecanvasmm/line.cc | 4 +- libs/pbd/controllable.cc | 2 + libs/pbd/pbd/controllable.h | 2 + .../generic_midi/generic_midi_control_protocol.cc | 146 +- .../generic_midi/generic_midi_control_protocol.h | 8 + libs/surfaces/generic_midi/midicontrollable.h | 6 +- 33 files changed, 2515 insertions(+), 140 deletions(-) create mode 100644 libs/ardour/po/pl_PL.po create mode 100644 libs/gtkmm2ext/po/pl_PL.po (limited to 'libs') diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index bdeac0477b..dc9a52d5d3 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -60,6 +60,7 @@ class AUPlugin : public ARDOUR::Plugin { public: AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr comp); + AUPlugin (const AUPlugin& other); virtual ~AUPlugin (); std::string unique_id () const; @@ -106,7 +107,7 @@ class AUPlugin : public ARDOUR::Plugin uint32_t input_streams() const; boost::shared_ptr get_au () { return unit; } - boost::shared_ptr get_comp () { return comp; } + boost::shared_ptr get_comp () const { return comp; } OSStatus render_callback(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, @@ -140,6 +141,7 @@ class AUPlugin : public ARDOUR::Plugin nframes_t frames_processed; std::vector descriptors; + void init (); }; typedef boost::shared_ptr AUPluginPtr; diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 88f1111a6c..e1d5e50cc2 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -133,6 +133,8 @@ class AudioEngine : public sigc::trackable uint32_t n_physical_outputs () const; uint32_t n_physical_inputs () const; + bool can_request_hardware_monitoring (); + void get_physical_outputs (std::vector&); void get_physical_inputs (std::vector&); diff --git a/libs/ardour/ardour/automation_event.h b/libs/ardour/ardour/automation_event.h index 1831f5ca4d..4f8406bd9b 100644 --- a/libs/ardour/ardour/automation_event.h +++ b/libs/ardour/ardour/automation_event.h @@ -27,6 +27,9 @@ #include #include +#include +#include + #include #include #include @@ -67,12 +70,21 @@ struct ControlEvent { double* coeff; ///< double[4] allocated by Curve as needed }; +/* automation lists use a pool allocator that does not use a lock and + allocates 8k of new pointers at a time +*/ + +typedef boost::fast_pool_allocator ControlEventAllocator; class AutomationList : public PBD::StatefulDestructible { public: - typedef std::list EventList; + typedef std::list EventList; typedef EventList::iterator iterator; + typedef EventList::reverse_iterator reverse_iterator; typedef EventList::const_iterator const_iterator; AutomationList (Parameter id, double min_val, double max_val, double default_val); diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h index 732585982d..95313b5b9b 100644 --- a/libs/ardour/ardour/configuration_vars.h +++ b/libs/ardour/ardour/configuration_vars.h @@ -53,7 +53,7 @@ CONFIG_VARIABLE (float, track_buffer_seconds, "track-buffer-seconds", 5.0) CONFIG_VARIABLE (uint32_t, disk_choice_space_threshold, "disk-choice-space-threshold", 57600000) CONFIG_VARIABLE (SampleFormat, native_file_data_format, "native-file-data-format", ARDOUR::FormatFloat) CONFIG_VARIABLE (HeaderFormat, native_file_header_format, "native-file-header-format", ARDOUR::WAVE) -CONFIG_VARIABLE (bool, auto_analyse_audio, "auto-analyse-audio", true) +CONFIG_VARIABLE (bool, auto_analyse_audio, "auto-analyse-audio", false) /* OSC */ diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 4640a8e32f..ad7210f48f 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -92,6 +92,8 @@ class Playlist : public SessionObject, public boost::enable_shared_from_this, std::vector >&); void replace_region (boost::shared_ptr old, boost::shared_ptr newr, nframes_t pos); void split_region (boost::shared_ptr, nframes_t position); + void split (nframes64_t at); + void shift (nframes64_t at, nframes64_t distance, bool move_intersected, bool ignore_music_glue); void partition (nframes_t start, nframes_t end, bool just_top_level); void duplicate (boost::shared_ptr, nframes_t position, float times); void nudge_after (nframes_t start, nframes_t distance, bool forwards); @@ -274,6 +276,8 @@ class Playlist : public SessionObject, public boost::enable_shared_from_this); + + void _split_region (boost::shared_ptr, nframes_t position); }; } /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 4196aac886..fb1220e996 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -138,6 +138,7 @@ class Region : public Automatable, public boost::enable_shared_from_this PositionLockStyle positional_lock_style() const { return _positional_lock_style; } void set_position_lock_style (PositionLockStyle ps); + void recompute_position_from_lock_style (); virtual bool should_save_state () const { return !(_flags & DoNotSaveState); }; diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h index 59749613ac..12437ba998 100644 --- a/libs/ardour/ardour/region_factory.h +++ b/libs/ardour/ardour/region_factory.h @@ -41,6 +41,12 @@ class RegionFactory { */ static sigc::signal > CheckNewRegion; + static boost::shared_ptr create (boost::shared_ptr); + + /* note: both of the first two should use const shared_ptr as well, but + gcc 4.1 doesn't seem to be able to disambiguate them if they do. + */ + static boost::shared_ptr create (boost::shared_ptr, nframes_t start, nframes_t length, std::string name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); @@ -49,7 +55,6 @@ class RegionFactory { layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); static boost::shared_ptr create (boost::shared_ptr, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); static boost::shared_ptr create (const SourceList &, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); - static boost::shared_ptr create (boost::shared_ptr); static boost::shared_ptr create (Session&, XMLNode&, bool); static boost::shared_ptr create (SourceList &, const XMLNode&); }; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index a2380357d3..325b164c8d 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -261,6 +261,14 @@ class Session : public PBD::StatefulDestructible const SessionDirectory& session_directory () const { return *(_session_dir.get()); } + static sigc::signal AutoBindingOn; + static sigc::signal AutoBindingOff; + + static sigc::signal Dialog; + + std::string sound_dir (bool with_path = true) const; + std::string peak_dir () const; + std::string dead_sound_dir () const; std::string automation_dir () const; std::string analysis_dir() const; diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index e1853e557c..059fed8752 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -1570,7 +1570,9 @@ AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_ca s->update_header (capture_info.front()->start, when, twhen); s->set_captured_for (_name); s->mark_immutable (); - Analyser::queue_source_for_analysis (s, true); + if (Config->get_auto_analyse_audio()) { + Analyser::queue_source_for_analysis (s, true); + } } } diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index e517964024..b941bc10bb 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -55,17 +55,49 @@ _render_callback(void *userData, } AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr _comp) - : - Plugin (engine, session), - comp (_comp), - unit (new CAAudioUnit), - initialized (false), - buffers (0), - current_maxbuf (0), - current_offset (0), - current_buffers (0), + : Plugin (engine, session), + comp (_comp), + unit (new CAAudioUnit), + initialized (false), + buffers (0), + current_maxbuf (0), + current_offset (0), + current_buffers (0), frames_processed (0) { + init (); +} + +AUPlugin::AUPlugin (const AUPlugin& other) + : Plugin (other) + , comp (other.get_comp()) + , unit (new CAAudioUnit) + , initialized (false) + , buffers (0) + , current_maxbuf (0) + , current_offset (0) + , current_buffers (0) + , frames_processed (0) + +{ + init (); +} + +AUPlugin::~AUPlugin () +{ + if (unit) { + unit->Uninitialize (); + } + + if (buffers) { + free (buffers); + } +} + + +void +AUPlugin::init () +{ OSErr err = CAAudioUnit::Open (*(comp.get()), *unit); if (err != noErr) { @@ -90,7 +122,7 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptrUninitialize (); - } - - if (buffers) { - free (buffers); - } -} - void AUPlugin::discover_parameters () { @@ -281,7 +302,7 @@ AUPlugin::signal_latency () const return _user_latency; } - return unit->Latency (); + return unit->Latency() * _session.frame_rate(); } void diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 886bb4a61f..9f7d67fb6d 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -899,6 +899,25 @@ AudioEngine::halted (void *arg) } } +bool +AudioEngine::can_request_hardware_monitoring () +{ + const char ** ports; + + if (!_jack) { + return 0; + } + + if ((ports = jack_get_ports (_jack, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortCanMonitor)) == 0) { + return false; + } + + free (ports); + + return true; +} + + uint32_t AudioEngine::n_physical_outputs () const { @@ -913,10 +932,9 @@ AudioEngine::n_physical_outputs () const return 0; } - if (ports) { - for (i = 0; ports[i]; ++i); - free (ports); - } + for (i = 0; ports[i]; ++i); + free (ports); + return i; } diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc index 268c4e18bb..026cb3e7c0 100644 --- a/libs/ardour/audiofilesource.cc +++ b/libs/ardour/audiofilesource.cc @@ -692,29 +692,39 @@ AudioFileSource::setup_peakfile () bool AudioFileSource::safe_file_extension(ustring file) { - return !(file.rfind(".wav") == ustring::npos && - file.rfind(".aiff")== ustring::npos && - file.rfind(".caf")== ustring::npos && - file.rfind(".aif") == ustring::npos && - file.rfind(".amb") == ustring::npos && - file.rfind(".snd") == ustring::npos && - file.rfind(".au") == ustring::npos && - file.rfind(".raw") == ustring::npos && - file.rfind(".sf") == ustring::npos && - file.rfind(".cdr") == ustring::npos && - file.rfind(".smp") == ustring::npos && - file.rfind(".maud")== ustring::npos && - file.rfind(".vwe") == ustring::npos && - file.rfind(".paf") == ustring::npos && + const char* suffixes[] = { + ".wav", ".WAV", + ".aiff", ".AIFF", + ".caf", ".CAF", + ".aif", ".AIF", + ".amb", ".AMB", + ".snd", ".SND", + ".au", ".AU", + ".raw", ".RAW", + ".sf", ".SF", + ".cdr", ".CDR", + ".smp", ".SMP", + ".maud", ".MAUD", + ".vwe", ".VWE", + ".paf", ".PAF", + ".voc", ".VOC", #ifdef HAVE_FLAC - file.rfind(".flac")== ustring::npos && + ".flac", ".FLAC", #endif // HAVE_FLAC #ifdef HAVE_COREAUDIO - file.rfind(".mp3") == ustring::npos && - file.rfind(".aac") == ustring::npos && - file.rfind(".mp4") == ustring::npos && + ".mp3", ".MP3", + ".aac", ".AAC", + ".mp4", ".MP4", #endif // HAVE_COREAUDIO - file.rfind(".voc") == ustring::npos); + }; + + for (size_t n = 0; n < sizeof(suffixes)/sizeof(suffixes[0]); ++n) { + if (file.rfind (suffixes[n]) == file.length() - strlen (suffixes[n])) { + return true; + } + } + + return false; } void diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 7c0893f288..f5f04eac6d 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -1316,7 +1316,17 @@ AudioRegion::get_transients (AnalysisFeatureList& results, bool force_new) return 0; } - cerr << "startup analysis of " << _name << endl; + /* no existing/complete transient info */ + + if (!Config->get_auto_analyse_audio()) { + pl->session().Dialog (_("\ +You have requested an operation that requires audio analysis.\n\n\ +You currently have \"auto-analyse-audio\" disabled, which means\n\ +that transient data must be generated every time it is required.\n\n\ +If you are doing work that will require transient data on a\n\ +regular basis, you should probably enable \"auto-analyse-audio\"\n\ +then quit ardour and restart.")); + } TransientDetector t (pl->session().frame_rate()); bool existing_results = !results.empty(); @@ -1330,14 +1340,10 @@ AudioRegion::get_transients (AnalysisFeatureList& results, bool force_new) t.reset (); - cerr << "working on channel " << i << endl; - if (t.run ("", this, i, these_results)) { return -1; } - cerr << "done\n"; - /* translate all transients to give absolute position */ for (AnalysisFeatureList::iterator i = these_results.begin(); i != these_results.end(); ++i) { diff --git a/libs/ardour/automation_event.cc b/libs/ardour/automation_event.cc index ccf3c35104..99e44340c5 100644 --- a/libs/ardour/automation_event.cc +++ b/libs/ardour/automation_event.cc @@ -685,7 +685,7 @@ AutomationList::truncate_end (double last_coordinate) { Glib::Mutex::Lock lm (_lock); ControlEvent cp (last_coordinate, 0); - list::reverse_iterator i; + AutomationList::reverse_iterator i; double last_val; if (_events.empty()) { @@ -754,7 +754,7 @@ AutomationList::truncate_end (double last_coordinate) uint32_t sz = _events.size(); while (i != _events.rend() && sz > 2) { - list::reverse_iterator tmp; + AutomationList::reverse_iterator tmp; tmp = i; ++tmp; @@ -851,7 +851,7 @@ AutomationList::truncate_start (double overall_length) i = _events.begin(); while (i != _events.end() && !_events.empty()) { - list::iterator tmp; + AutomationList::iterator tmp; tmp = i; ++tmp; @@ -948,6 +948,9 @@ AutomationList::unlocked_eval (double x) const return multipoint_eval (x); break; } + + /*NOTREACHED*/ /* stupid gcc */ + return 0.0; } double diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index 104bef35c3..9bf7033c0b 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -469,7 +469,9 @@ Session::import_audiofiles (import_status& status) /* now that there is data there, requeue the file for analysis */ - Analyser::queue_source_for_analysis (boost::static_pointer_cast(*x), false); + if (Config->get_auto_analyse_audio()) { + Analyser::queue_source_for_analysis (boost::static_pointer_cast(*x), false); + } } /* save state so that we don't lose these new Sources */ diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index cb9fedd7a3..71c051733e 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -728,7 +728,7 @@ IO::add_input_port (string source, void* src, DataType type) { Glib::Mutex::Lock lm (io_lock); - + if (n_inputs() >= _input_maximum) { return -1; } diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index f1818420ed..0b0d5ecc22 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -857,10 +857,6 @@ Playlist::partition_internal (nframes_t start, nframes_t end, bool cutting, Regi } } - if (current->first_frame() >= current->last_frame()) { - PBD::stacktrace (cerr); - } - in_partition = false; } @@ -1024,11 +1020,68 @@ Playlist::duplicate (boost::shared_ptr region, nframes_t position, float } } +void +Playlist::shift (nframes64_t at, nframes64_t distance, bool move_intersected, bool ignore_music_glue) +{ + RegionLock rlock (this); + RegionList copy (regions); + RegionList fixup; + + for (RegionList::iterator r = copy.begin(); r != copy.end(); ++r) { + + if ((*r)->last_frame() < at) { + /* too early */ + continue; + } + + if (at > (*r)->first_frame() && at < (*r)->last_frame()) { + /* intersected region */ + if (!move_intersected) { + continue; + } + } + + /* do not move regions glued to music time - that + has to be done separately. + */ + + if (!ignore_music_glue && (*r)->positional_lock_style() != Region::AudioTime) { + fixup.push_back (*r); + continue; + } + + (*r)->set_position ((*r)->position() + distance, this); + } + + for (RegionList::iterator r = fixup.begin(); r != fixup.end(); ++r) { + (*r)->recompute_position_from_lock_style (); + } +} + +void +Playlist::split (nframes64_t at) +{ + RegionLock rlock (this); + RegionList copy (regions); + + /* use a copy since this operation can modify the region list + */ + + for (RegionList::iterator r = copy.begin(); r != copy.end(); ++r) { + _split_region (*r, at); + } +} + void Playlist::split_region (boost::shared_ptr region, nframes_t playlist_position) { RegionLock rl (this); + _split_region (region, playlist_position); +} +void +Playlist::_split_region (boost::shared_ptr region, nframes_t playlist_position) +{ if (!region->covers (playlist_position)) { return; } diff --git a/libs/ardour/po/pl_PL.po b/libs/ardour/po/pl_PL.po new file mode 100644 index 0000000000..3a39989f02 --- /dev/null +++ b/libs/ardour/po/pl_PL.po @@ -0,0 +1,2063 @@ +# translation of libardour2.po to Polish +# Copyright (C) YEAR "Paul Davis" +# This file is distributed under the same license as the PACKAGE package. +# +# Piotr Zaryk , 2008. +msgid "" +msgstr "" +"Project-Id-Version: libardour2\n" +"Report-Msgid-Bugs-To: Piotr Zaryk \n" +"POT-Creation-Date: 2008-04-03 16:16+0200\n" +"PO-Revision-Date: 2008-04-10 10:51+0100\n" +"Last-Translator: Piotr Zaryk \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: libs/ardour/audioanalyser.cc:26 +msgid "cannot load VAMP plugin \"%1\"" +msgstr "" + +#: libs/ardour/audioanalyser.cc:46 +msgid "VAMP Plugin \"%1\" could not be loaded" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:249 +msgid "AudioDiskstream: Playlist \"%1\" isn't an audio playlist" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:302 +msgid "AudioDiskstream %1: there is no existing playlist to make a copy of!" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:937 +#: libs/ardour/audio_diskstream.cc:948 +msgid "AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1096 +msgid "AudioDiskstream %1: cannot read %2 from playlist at frame %3" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1138 +msgid "AudioDiskstream %1: cannot read xfade samples %2 from playlist at frame %3" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1491 +#: libs/ardour/audio_diskstream.cc:1508 +msgid "AudioDiskstream %1: cannot write to disk" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1553 +msgid "AudioDiskstream \"%1\": cannot flush captured data to disk!" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1641 +msgid "%1: could not create region for complete audio file" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1666 +msgid "AudioDiskstream: could not create region for captured audio!" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:1774 +msgid "programmer error: %1" +msgstr "błąd programisty: %1" + +#: libs/ardour/audio_diskstream.cc:2051 +msgid "AudioDiskstream: channel %1 out of range" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:2070 +msgid "%1:%2 new capture file not initialized correctly" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:2322 +msgid "%1: cannot restore pending capture source file %2" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:2344 +msgid "%1: incorrect number of pending sources listed - ignoring them all" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:2359 +msgid "%1: cannot create whole-file region from pending capture sources" +msgstr "" + +#: libs/ardour/audio_diskstream.cc:2371 +msgid "%1: cannot create region from pending capture sources" +msgstr "" + +#: libs/ardour/audioengine.cc:114 +msgid "Connect session to engine" +msgstr "" + +#: libs/ardour/audioengine.cc:498 +msgid "a port with this name already exists: check for duplicated track/bus names" +msgstr "" + +#: libs/ardour/audioengine.cc:500 +msgid "unknown error" +msgstr "" + +#: libs/ardour/audioengine.cc:503 +msgid "AudioEngine: cannot register port \"%1\": %2" +msgstr "" + +#: libs/ardour/audioengine.cc:511 +msgid "register input port called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:545 +msgid "register output port called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:625 +msgid "connect called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:641 +msgid "AudioEngine: connection already exists: %1 (%2) to %3 (%4)" +msgstr "" + +#: libs/ardour/audioengine.cc:645 +msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)" +msgstr "" + +#: libs/ardour/audioengine.cc:658 +#: libs/ardour/audioengine.cc:687 +msgid "disconnect called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:745 +msgid "get_port_by_name() called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:789 +msgid "get_ports called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:911 +msgid "get_nth_physical called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:939 +msgid "get_port_total_latency() called with no JACK client connection" +msgstr "" + +#: libs/ardour/audioengine.cc:945 +msgid "get_port_total_latency() called before engine was started" +msgstr "" + +#: libs/ardour/audioengine.cc:1134 +msgid "failed to connect to JACK" +msgstr "nie udało się połączyć z JACK" + +#: libs/ardour/audioengine.cc:1152 +msgid "could not reregister %1" +msgstr "nie można było zarejestrować %1" + +#: libs/ardour/audioengine.cc:1211 +msgid "could not reconnect %1 and %2 (err = %3)" +msgstr "nie można było połączyć ponownie %1 i %2 (błąd = %3)" + +#: libs/ardour/audiofilesource.cc:408 +#: libs/ardour/session_state.cc:2881 +msgid "there are already 1000 files with names like %1; versioning discontinued" +msgstr "" + +#: libs/ardour/audiofilesource.cc:422 +#: libs/ardour/session_state.cc:2895 +msgid "cannot rename audio file source from %1 to %2 (%3)" +msgstr "" + +#: libs/ardour/audiofilesource.cc:429 +#: libs/ardour/session_state.cc:2909 +msgid "cannot remove peakfile %1 for %2 (%3)" +msgstr "" + +#: libs/ardour/audiofilesource.cc:465 +msgid "FileSource: search path not set" +msgstr "" + +#: libs/ardour/audiofilesource.cc:537 +msgid "" +"FileSource: \"%1\" is ambigous when searching %2\n" +"\t" +msgstr "" + +#: libs/ardour/audiofilesource.cc:543 +msgid "Filesource: cannot find required file (%1): while searching %2" +msgstr "" + +#: libs/ardour/audiofilesource.cc:583 +msgid "Filesource: cannot find required file (%1): %2" +msgstr "" + +#: libs/ardour/audiofilesource.cc:588 +msgid "Filesource: cannot check for existing file (%1): %2" +msgstr "" + +#: libs/ardour/audiofilesource.cc:651 +#: libs/ardour/audiosource.cc:876 +#: libs/ardour/automation_event.cc:636 +#: libs/ardour/insert.cc:547 +#: libs/ardour/session.cc:2172 +#: libs/ardour/session.cc:3576 +#: libs/ardour/session.cc:3615 +#: libs/ardour/session_command.cc:432 +#: libs/ardour/sndfilesource.cc:111 +msgid "programming error: %1" +msgstr "" + +#: libs/ardour/audiofilesource.cc:657 +msgid "Programming error! Ardour tried to rename a file over another file! It's safe to continue working, but please report this to the developers." +msgstr "" + +#: libs/ardour/audiofilesource.cc:662 +msgid "cannot rename audio file %1 to %2" +msgstr "" + +#: libs/ardour/audiofilter.cc:43 +msgid "" +"This is an old Ardour session that does not have\n" +"sufficient information for rendered FX" +msgstr "" + +#: libs/ardour/audiofilter.cc:66 +msgid "audiofilter: error creating name for new audio file based on %1" +msgstr "" + +#: libs/ardour/audiofilter.cc:77 +msgid "audiofilter: error creating new audio file %1 (%2)" +msgstr "" + +#: libs/ardour/audio_library.cc:57 +msgid "Could not open %1. Audio Library not saved" +msgstr "" + +#: libs/ardour/audio_playlist.cc:226 +#: libs/ardour/audio_playlist.cc:615 +msgid "programming error: non-audio Region passed to remove_overlap in audio playlist" +msgstr "" + +#: libs/ardour/audio_playlist.cc:356 +msgid "programming error: non-audio Region tested for overlap in audio playlist" +msgstr "" + +#: libs/ardour/audioregion.cc:1596 +msgid "" +"You have requested an operation that requires audio analysis.\n" +"\n" +"You currently have \"auto-analyse-audio\" disabled, which means\n" +"that transient data must be generated every time it is required.\n" +"\n" +"If you are doing work that will require transient data on a\n" +"regular basis, you should probably enable \"auto-analyse-audio\"\n" +"then quit ardour and restart." +msgstr "" + +#: libs/ardour/audiosource.cc:178 +msgid "cannot rename peakfile for %1 from %2 to %3 (%4)" +msgstr "" + +#: libs/ardour/audiosource.cc:205 +msgid "AudioSource: cannot stat peakfile \"%1\"" +msgstr "" + +#: libs/ardour/audiosource.cc:329 +msgid "cannot read sample data for unscaled peak computation" +msgstr "" + +#: libs/ardour/audiosource.cc:349 +msgid "AudioSource: cannot open peakpath (a) \"%1\" (%2)" +msgstr "" + +#: libs/ardour/audiosource.cc:423 +msgid "AudioSource: cannot open peakpath (b) \"%1\" (%2)" +msgstr "" + +#: libs/ardour/audiosource.cc:537 +msgid "AudioSource[%1]: peak read - cannot read %2 samples at offset %3 of %4 (%5)" +msgstr "" + +#: libs/ardour/audiosource.cc:624 +msgid "%1: could not write read raw data for peak computation (%2)" +msgstr "" + +#: libs/ardour/audiosource.cc:670 +msgid "AudioSource: cannot open peakpath (c) \"%1\" (%2)" +msgstr "" + +#: libs/ardour/audiosource.cc:736 +#: libs/ardour/audiosource.cc:848 +msgid "%1: could not write peak file data (%2)" +msgstr "" + +#: libs/ardour/audio_track.cc:140 +#: libs/ardour/io.cc:1797 +#: libs/ardour/io.cc:1863 +msgid "Unknown connection \"%1\" listed for input of %2" +msgstr "" + +#: libs/ardour/audio_track.cc:145 +msgid "in 1+2" +msgstr "wejście 1+2" + +#: libs/ardour/audio_track.cc:147 +#: libs/ardour/io.cc:1799 +#: libs/ardour/io.cc:1865 +msgid "in 1" +msgstr "wejście 1" + +#: libs/ardour/audio_track.cc:151 +#: libs/ardour/io.cc:1800 +#: libs/ardour/io.cc:1866 +msgid "No input connections available as a replacement" +msgstr "" + +#: libs/ardour/audio_track.cc:155 +msgid "Connection %1 was not available - \"%2\" used instead" +msgstr "" + +#: libs/ardour/audio_track.cc:164 +#: libs/ardour/io.cc:1879 +msgid "improper input channel list in XML node (%1)" +msgstr "" + +#: libs/ardour/audio_track.cc:205 +#: libs/ardour/audio_track.cc:218 +msgid "AudioTrack: audio diskstream \"%1\" not known by session" +msgstr "" + +#: libs/ardour/audio_track.cc:260 +msgid "programming error: AudioTrack given state without diskstream!" +msgstr "" + +#: libs/ardour/auditioner.cc:56 +msgid "no outputs available for auditioner - manual connection required" +msgstr "" + +#: libs/ardour/auditioner.cc:127 +msgid "Auditioning of non-audio regions not yet supported" +msgstr "" + +#: libs/ardour/automation_event.cc:782 +#: libs/ardour/panner.cc:833 +msgid "programming error:" +msgstr "" + +#: libs/ardour/automation_event.cc:1305 +msgid "automation list: cannot load coordinates from XML, all points ignored" +msgstr "" + +#: libs/ardour/automation_event.cc:1351 +msgid "automation list: no x-coordinate stored for control point (point ignored)" +msgstr "" + +#: libs/ardour/automation_event.cc:1357 +msgid "automation list: no y-coordinate stored for control point (point ignored)" +msgstr "" + +#: libs/ardour/automation_event.cc:1371 +msgid "AutomationList: passed XML node called %1, not \"AutomationList\" - ignored" +msgstr "" + +#: libs/ardour/configuration.cc:97 +msgid "loading system configuration file %1" +msgstr "" + +#: libs/ardour/configuration.cc:100 +msgid "Ardour: cannot read system configuration file \"%1\"" +msgstr "" + +#: libs/ardour/configuration.cc:107 +msgid "Ardour: system configuration file \"%1\" not loaded successfully." +msgstr "" + +#: libs/ardour/configuration.cc:111 +msgid "your system Ardour configuration file is empty. This probably means that there as an error installing Ardour" +msgstr "" + +#: libs/ardour/configuration.cc:131 +msgid "loading user configuration file %1" +msgstr "" + +#: libs/ardour/configuration.cc:134 +msgid "Ardour: cannot read configuration file \"%1\"" +msgstr "" + +#: libs/ardour/configuration.cc:141 +msgid "Ardour: user configuration file \"%1\" not loaded successfully." +msgstr "" + +#: libs/ardour/configuration.cc:145 +msgid "your Ardour configuration file is empty. This is not normal." +msgstr "" + +#: libs/ardour/configuration.cc:164 +msgid "Config file %1 not saved" +msgstr "Plik konfiguracji %1 nie zapisany" + +#: libs/ardour/configuration.cc:253 +msgid "ill-formed MIDI port specification in ardour rcfile (ignored)" +msgstr "" + +#: libs/ardour/connection.cc:182 +msgid "Node for Connection has no \"name\" property" +msgstr "" + +#: libs/ardour/connection.cc:190 +msgid "Node for Connection has no \"connections\" property" +msgstr "" + +#: libs/ardour/connection.cc:226 +#: libs/ardour/io.cc:1939 +msgid "IO: badly formed string in XML node for inputs \"%1\"" +msgstr "" + +#: libs/ardour/connection.cc:231 +#: libs/ardour/io.cc:1944 +msgid "bad input string in XML node \"%1\"" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:117 +msgid "control protocol name \"%1\" has no descriptor" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:122 +msgid "control protocol name \"%1\" could not be initialized" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:189 +msgid "Instantiating mandatory control protocol %1" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:201 +msgid "looking for control protocols in %1" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:223 +msgid "Control protocol %1 not usable" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:237 +msgid "Control surface protocol discovered: \"%1\"" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:255 +msgid "ControlProtocolManager: cannot load module \"%1\" (%2)" +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:263 +msgid "ControlProtocolManager: module \"%1\" has no descriptor function." +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:380 +msgid "control protocol XML node has no name property. Ignored." +msgstr "" + +#: libs/ardour/control_protocol_manager.cc:387 +msgid "control protocol \"%1\" is not known. Ignored" +msgstr "" + +#: libs/ardour/crossfade.cc:124 +msgid "Crossfade: no \"in\" region in state" +msgstr "" + +#: libs/ardour/crossfade.cc:131 +msgid "Crossfade: no \"in\" region %1 found in playlist %2" +msgstr "" + +#: libs/ardour/crossfade.cc:141 +msgid "Crossfade: no \"out\" region in state" +msgstr "" + +#: libs/ardour/crossfade.cc:148 +msgid "Crossfade: no \"out\" region %1 found in playlist %2" +msgstr "" + +#: libs/ardour/crossfade.cc:684 +msgid "old-style crossfade information - no position information" +msgstr "" + +#: libs/ardour/curve.cc:116 +#: libs/ardour/globals.cc:394 +#: libs/ardour/insert.cc:461 +#: libs/ardour/session.cc:2655 +#: libs/ardour/session.cc:2741 +msgid "programming error: " +msgstr "" + +#: libs/ardour/cycle_timer.cc:36 +msgid "CycleTimer::get_mhz(): can't open /proc/cpuinfo" +msgstr "" + +#: libs/ardour/cycle_timer.cc:48 +msgid "CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo" +msgstr "" + +#: libs/ardour/cycle_timer.cc:71 +msgid "cannot locate cpu MHz in /proc/cpuinfo" +msgstr "nie można zlokalizować taktowania CPU w /proc/cpuinfo" + +#: libs/ardour/diskstream.cc:253 +msgid "Location \"%1\" not valid for track loop (start >= end)" +msgstr "" + +#: libs/ardour/globals.cc:112 +msgid "Starting OSC" +msgstr "" + +#: libs/ardour/globals.cc:124 +msgid "no MIDI ports specified: no MMC or MTC control possible" +msgstr "" + +#: libs/ardour/globals.cc:128 +msgid "Configuring MIDI ports" +msgstr "" + +#: libs/ardour/globals.cc:143 +#: libs/ardour/globals.cc:147 +#: libs/ardour/globals.cc:151 +msgid "default" +msgstr "domyślnie" + +#: libs/ardour/globals.cc:181 +msgid "No MMC control (MIDI port \"%1\" not available)" +msgstr "" + +#: libs/ardour/globals.cc:187 +msgid "No MTC support (MIDI port \"%1\" not available)" +msgstr "" + +#: libs/ardour/globals.cc:192 +msgid "No MIDI parameter support (MIDI port \"%1\" not available)" +msgstr "" + +#: libs/ardour/globals.cc:273 +msgid "Could not set system open files limit to \"unlimited\"" +msgstr "" + +#: libs/ardour/globals.cc:275 +msgid "Could not set system open files limit to %1" +msgstr "" + +#: libs/ardour/globals.cc:279 +msgid "Removed open file count limit. Excellent!" +msgstr "" + +#: libs/ardour/globals.cc:281 +msgid "Ardour will be limited to %1 open files" +msgstr "" + +#: libs/ardour/globals.cc:285 +msgid "Could not get system open files limit (%1)" +msgstr "" + +#: libs/ardour/globals.cc:304 +msgid "Loading configuration" +msgstr "" + +#: libs/ardour/import.cc:179 +msgid "Could not find a source for %1 even though we are updating this file!" +msgstr "" + +#: libs/ardour/import.cc:208 +msgid "Unable to create file %1 during import" +msgstr "" + +#: libs/ardour/import.cc:225 +msgid "" +"converting %1\n" +"(resample from %2KHz to %3KHz)\n" +"(%4 of %5)" +msgstr "" + +#: libs/ardour/import.cc:232 +msgid "" +"converting %1\n" +"(%2 of %3)" +msgstr "" + +#: libs/ardour/import.cc:318 +msgid "Import: cannot open input sound file \"%1\"" +msgstr "" + +#: libs/ardour/insert.cc:680 +#: libs/ardour/insert.cc:1005 +msgid "XML node describing insert is missing the `type' field" +msgstr "" + +#: libs/ardour/insert.cc:693 +msgid "unknown plugin type %1 in plugin insert state" +msgstr "" + +#: libs/ardour/insert.cc:713 +msgid "Plugin has no unique ID field" +msgstr "" + +#: libs/ardour/insert.cc:723 +msgid "" +"Found a reference to a plugin (\"%1\") that is unknown.\n" +"Perhaps it was removed or moved since it was last used." +msgstr "" + +#: libs/ardour/insert.cc:754 +msgid "XML node describing a plugin insert is missing the `%1' information" +msgstr "" + +#: libs/ardour/insert.cc:766 +#: libs/ardour/insert.cc:1033 +msgid "XML node describing insert is missing a Redirect node" +msgstr "" + +#: libs/ardour/insert.cc:818 +msgid "PluginInsert: Auto: no ladspa port number" +msgstr "" + +#: libs/ardour/insert.cc:825 +msgid "PluginInsert: Auto: port id out of range" +msgstr "" + +#: libs/ardour/insert.cc:856 +msgid "XML node describing a port automation is missing the `%1' information" +msgstr "" + +#: libs/ardour/insert.cc:911 +#: libs/ardour/insert.cc:919 +msgid "insert %1" +msgstr "" + +#: libs/ardour/insert.cc:1010 +msgid "non-port insert XML used for port plugin insert" +msgstr "" + +#: libs/ardour/io.cc:638 +msgid "IO: cannot disconnect input port %1 from %2" +msgstr "" + +#: libs/ardour/io.cc:706 +msgid "IO: cannot disconnect output port %1 from %2" +msgstr "" + +#: libs/ardour/io.cc:860 +#: libs/ardour/io.cc:1189 +#: libs/ardour/io.cc:1308 +msgid "IO: cannot register output port %1" +msgstr "" + +#: libs/ardour/io.cc:967 +#: libs/ardour/io.cc:1066 +#: libs/ardour/io.cc:1164 +msgid "IO: cannot register input port %1" +msgstr "" + +#: libs/ardour/io.cc:1558 +msgid "incorrect XML node \"%1\" passed to IO object" +msgstr "" + +#: libs/ardour/io.cc:1686 +msgid "%1: cannot open automation event file \"%2\"" +msgstr "" + +#: libs/ardour/io.cc:1701 +msgid "badly formed version number in automation event file \"%1\"" +msgstr "" + +#: libs/ardour/io.cc:1705 +msgid "no version information in automation event file \"%1\"" +msgstr "" + +#: libs/ardour/io.cc:1713 +msgid "badly formatted automation event record at line %1 of %2 (ignored)" +msgstr "" + +#: libs/ardour/io.cc:1733 +msgid "dubious automation event found (and ignored)" +msgstr "" + +#: libs/ardour/io.cc:1746 +msgid "IO::connecting_became_legal() called without a pending state node" +msgstr "" + +#: libs/ardour/io.cc:1768 +msgid "IO::ports_became_legal() called without a pending state node" +msgstr "" + +#: libs/ardour/io.cc:1804 +#: libs/ardour/io.cc:1870 +msgid "Connection %1 was not available - \"in 1\" used instead" +msgstr "" + +#: libs/ardour/io.cc:1820 +#: libs/ardour/io.cc:1888 +msgid "Unknown connection \"%1\" listed for output of %2" +msgstr "" + +#: libs/ardour/io.cc:1822 +#: libs/ardour/io.cc:1890 +msgid "out 1" +msgstr "" + +#: libs/ardour/io.cc:1823 +#: libs/ardour/io.cc:1891 +msgid "No output connections available as a replacement" +msgstr "" + +#: libs/ardour/io.cc:1827 +#: libs/ardour/io.cc:1895 +msgid "Connection %1 was not available - \"out 1\" used instead" +msgstr "" + +#: libs/ardour/io.cc:1841 +msgid "%1: cannot create I/O ports" +msgstr "" + +#: libs/ardour/io.cc:1904 +msgid "improper output channel list in XML node (%1)" +msgstr "" + +#: libs/ardour/io.cc:1989 +msgid "IO: badly formed string in XML node for outputs \"%1\"" +msgstr "" + +#: libs/ardour/io.cc:1994 +msgid "IO: bad output string in XML node \"%1\"" +msgstr "" + +#: libs/ardour/io.cc:2078 +msgid "you cannot use colons to name objects with I/O connections" +msgstr "" + +#: libs/ardour/io.cc:2642 +msgid "in" +msgstr "wejście" + +#: libs/ardour/io.cc:2645 +msgid "out" +msgstr "wyjście" + +#: libs/ardour/io.cc:2697 +#: libs/ardour/io.cc:2730 +#, c-format +msgid "%s %u" +msgstr "%s %u" + +#: libs/ardour/ladspa_plugin.cc:86 +msgid "LADSPA: module has no descriptor function." +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:91 +msgid "LADSPA: plugin has gone away since discovery!" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:98 +msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:306 +msgid "illegal parameter number used with plugin \"%1\". This mayindicate a change in the plugin design, and presets may beinvalid" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:389 +msgid "Bad node sent to LadspaPlugin::set_state" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:402 +msgid "LADSPA: no ladspa port number" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:409 +msgid "LADSPA: no ladspa port data" +msgstr "" + +#: libs/ardour/ladspa_plugin.cc:648 +msgid "LADSPA: cannot load module from \"%1\"" +msgstr "" + +#: libs/ardour/location.cc:213 +msgid "You cannot put a CD marker at this position" +msgstr "" + +#: libs/ardour/location.cc:342 +msgid "incorrect XML node passed to Location::set_state" +msgstr "" + +#: libs/ardour/location.cc:347 +msgid "XML node for Location has no ID information" +msgstr "" + +#: libs/ardour/location.cc:353 +msgid "XML node for Location has no name information" +msgstr "" + +#: libs/ardour/location.cc:360 +msgid "XML node for Location has no start information" +msgstr "" + +#: libs/ardour/location.cc:371 +msgid "XML node for Location has no end information" +msgstr "" + +#: libs/ardour/location.cc:378 +msgid "XML node for Location has no flags information" +msgstr "" + +#: libs/ardour/location.cc:495 +msgid "Locations: attempt to use unknown location as selected location" +msgstr "" + +#: libs/ardour/location.cc:663 +msgid "incorrect XML mode passed to Locations::set_state" +msgstr "" + +#: libs/ardour/location.cc:684 +msgid "could not load location from session file - ignored" +msgstr "" + +#: libs/ardour/mtc_slave.cc:123 +msgid "Unknown rate/drop value in incoming MTC stream, session values used instead" +msgstr "" + +#: libs/ardour/mtc_slave.cc:229 +msgid "MTC Slave: atomic read of current time failed, sleeping!" +msgstr "" + +#: libs/ardour/named_selection.cc:88 +msgid "Chunk %1 uses an unknown playlist \"%2\"" +msgstr "" + +#: libs/ardour/named_selection.cc:91 +msgid "Chunk %1 contains misformed playlist information" +msgstr "" + +#: libs/ardour/panner.cc:253 +msgid "badly formatted pan automation event record at line %1 of %2 (ignored) [%3]" +msgstr "" + +#: libs/ardour/panner.cc:749 +msgid "badly-formed positional data for Multi2dPanner - ignored" +msgstr "" + +#: libs/ardour/panner.cc:1138 +msgid "Unknown panner plugin \"%1\" found in pan state - ignored" +msgstr "" + +#: libs/ardour/panner.cc:1144 +msgid "panner plugin node has no type information!" +msgstr "" + +#: libs/ardour/panner.cc:1354 +msgid "cannot open pan automation file %1 (%2)" +msgstr "" + +#: libs/ardour/panner.cc:1367 +msgid "badly formed version number in pan automation event file \"%1\"" +msgstr "" + +#: libs/ardour/panner.cc:1371 +msgid "no version information in pan automation event file \"%1\" (first line = %2)" +msgstr "" + +#: libs/ardour/panner.cc:1386 +msgid "too many panner states found in pan automation file %1" +msgstr "" + +#: libs/ardour/playlist.cc:250 +msgid "playlist const copy constructor called" +msgstr "" + +#: libs/ardour/playlist.cc:256 +msgid "playlist non-const copy constructor called" +msgstr "" + +#: libs/ardour/playlist.cc:1217 +msgid "%1: bounds changed received for region (%2)not in playlist" +msgstr "" + +#: libs/ardour/playlist.cc:1750 +msgid "region state node has no ID, ignored" +msgstr "" + +#: libs/ardour/playlist.cc:1761 +msgid "Playlist: cannot reset region state from XML" +msgstr "" + +#: libs/ardour/playlist.cc:1766 +msgid "Playlist: cannot create region from XML" +msgstr "" + +#: libs/ardour/plugin.cc:281 +msgid "Could not locate HOME. Preset not saved." +msgstr "" + +#: libs/ardour/plugin.cc:291 +#: libs/ardour/plugin.cc:297 +msgid "Could not create %1. Preset not saved. (%2)" +msgstr "" + +#: libs/ardour/plugin.cc:302 +msgid "Error saving presets file %1." +msgstr "" + +#: libs/ardour/plugin_manager.cc:223 +msgid "Could not parse rdf file: %1" +msgstr "" + +#: libs/ardour/plugin_manager.cc:263 +msgid "LADSPA: cannot load module \"%1\" (%2)" +msgstr "" + +#: libs/ardour/plugin_manager.cc:270 +msgid "LADSPA: module \"%1\" has no descriptor function." +msgstr "" + +#: libs/ardour/plugin_manager.cc:454 +msgid "VST plugin %1 does not support processReplacing, and so cannot be used in ardour at this time" +msgstr "" + +#: libs/ardour/recent_sessions.cc:44 +msgid "cannot open recent session file %1 (%2)" +msgstr "" + +#: libs/ardour/redirect.cc:78 +msgid "programming error: unknown Redirect type in Redirect::Clone!\n" +msgstr "" + +#: libs/ardour/redirect.cc:128 +msgid "%2: badly formatted node name in XML automation state, ignored" +msgstr "" + +#: libs/ardour/redirect.cc:141 +msgid "%1: cannot load automation data from XML" +msgstr "" + +#: libs/ardour/redirect.cc:219 +msgid "incorrect XML node \"%1\" passed to Redirect object" +msgstr "" + +#: libs/ardour/redirect.cc:267 +msgid "XML node describing an IO is missing an IO node" +msgstr "" + +#: libs/ardour/redirect.cc:272 +msgid "XML node describing a redirect is missing the `active' field" +msgstr "" + +#: libs/ardour/redirect.cc:285 +msgid "XML node describing a redirect is missing the `placement' field" +msgstr "" + +#: libs/ardour/redirect.cc:315 +msgid "%1: Automation node has no path property" +msgstr "" + +#: libs/ardour/redirect.cc:351 +msgid "%1: cannot open %2 to load automation data (%3)" +msgstr "" + +#: libs/ardour/redirect.cc:376 +msgid "%1: cannot load automation data from %2" +msgstr "" + +#: libs/ardour/region.cc:923 +msgid "XMLNode describing a Region is incomplete (no name)" +msgstr "" + +#: libs/ardour/region.cc:1068 +msgid "Session: XMLNode describing a Region is incomplete (no id)" +msgstr "" + +#: libs/ardour/region_factory.cc:52 +#: libs/ardour/region_factory.cc:69 +msgid "programming error: RegionFactory::create() called with unknown Region type" +msgstr "" + +#: libs/ardour/resampled_source.cc:61 +msgid "Import: src_new() failed : %1" +msgstr "" + +#: libs/ardour/resampled_source.cc:113 +msgid "Import: %1" +msgstr "" + +#: libs/ardour/route.cc:83 +#: libs/ardour/session.cc:1560 +#: libs/ardour/session.cc:1566 +#: libs/ardour/session.cc:1871 +#: libs/ardour/session.cc:3369 +msgid "signal" +msgstr "" + +#: libs/ardour/route.cc:1573 +msgid "Send construction failed" +msgstr "" + +#: libs/ardour/route.cc:1601 +msgid "unknown Insert type \"%1\"; ignored" +msgstr "" + +#: libs/ardour/route.cc:1609 +msgid "Insert XML node has no type property" +msgstr "" + +#: libs/ardour/route.cc:1614 +msgid "insert could not be created. Ignored." +msgstr "" + +#: libs/ardour/route.cc:1636 +msgid "Bad node sent to Route::set_state() [%1]" +msgstr "" + +#: libs/ardour/route.cc:1698 +msgid "Route %1: unknown edit group \"%2 in saved state (ignored)" +msgstr "" + +#: libs/ardour/route.cc:1714 +#: libs/ardour/route.cc:1718 +msgid "badly formed order key string in state file! [%1] ... ignored." +msgstr "" + +#: libs/ardour/route.cc:1784 +#: libs/ardour/route.cc:2001 +msgid "[control]" +msgstr "" + +#: libs/ardour/route.cc:1823 +msgid "Route %1: unknown mix group \"%2 in saved state (ignored)" +msgstr "" + +#: libs/ardour/route.cc:2019 +msgid "could not connect %1 to %2" +msgstr "" + +#: libs/ardour/send.cc:34 +#: libs/ardour/send.cc:57 +msgid "send %1" +msgstr "" + +#: libs/ardour/send.cc:117 +msgid "XML node describing a send is missing a Redirect node" +msgstr "" + +#: libs/ardour/session_butler.cc:80 +#: libs/ardour/session_midi.cc:1085 +msgid "Cannot create transport request signal pipe (%1)" +msgstr "" + +#: libs/ardour/session_butler.cc:85 +#: libs/ardour/session_butler.cc:90 +msgid "UI: cannot set O_NONBLOCK on butler request pipe (%1)" +msgstr "" + +#: libs/ardour/session_butler.cc:95 +msgid "Session: could not create butler thread" +msgstr "" + +#: libs/ardour/session_butler.cc:184 +msgid "poll on butler request pipe failed (%1)" +msgstr "" + +#: libs/ardour/session_butler.cc:191 +msgid "Error on butler thread request pipe: fd=%1 err=%2" +msgstr "" + +#: libs/ardour/session_butler.cc:232 +msgid "Error reading from butler request pipe" +msgstr "" + +#: libs/ardour/session_butler.cc:277 +msgid "Butler read ahead failure on dstream %1" +msgstr "" + +#: libs/ardour/session_butler.cc:323 +msgid "Butler write-behind failure on dstream %1" +msgstr "" + +#: libs/ardour/session.cc:130 +msgid "Could not resolve path: %1 (%2)" +msgstr "" + +#: libs/ardour/session.cc:142 +msgid "cannot check session path %1 (%2)" +msgstr "" + +#: libs/ardour/session.cc:172 +msgid "cannot check statefile %1 (%2)" +msgstr "" + +#: libs/ardour/session.cc:208 +msgid "%1 is not an Ardour snapshot file" +msgstr "" + +#: libs/ardour/session.cc:225 +msgid "cannot determine current working directory (%1)" +msgstr "" + +#: libs/ardour/session.cc:242 +msgid "unknown file type for session %1" +msgstr "" + +#: libs/ardour/session.cc:387 +msgid "monitor" +msgstr "monitor" + +#: libs/ardour/session.cc:394 +#: libs/ardour/session.cc:1900 +msgid "master" +msgstr "główna" + +#: libs/ardour/session.cc:674 +msgid "Set block size and sample rate" +msgstr "" + +#: libs/ardour/session.cc:679 +msgid "Using configuration" +msgstr "" + +#: libs/ardour/session.cc:712 +msgid "could not setup Click I/O" +msgstr "nie można było ustawić I/O metronomu" + +#: libs/ardour/session.cc:733 +msgid "cannot setup Click I/O" +msgstr "nie można ustawić I/O metronomu" + +#: libs/ardour/session.cc:736 +msgid "Compute I/O Latencies" +msgstr "" + +#: libs/ardour/session.cc:748 +msgid "Set up standard connections" +msgstr "" + +#: libs/ardour/session.cc:754 +#, c-format +msgid "out %" +msgstr "wyjście %" + +#: libs/ardour/session.cc:766 +#, c-format +msgid "in %" +msgstr "wejście %" + +#: libs/ardour/session.cc:780 +#, c-format +msgid "out %+%" +msgstr "wyjście %+%" + +#: libs/ardour/session.cc:794 +#, c-format +msgid "in %+%" +msgstr "wejście %+%" + +#: libs/ardour/session.cc:827 +msgid "cannot setup master inputs" +msgstr "nie można ustawić głównych wejść" + +#: libs/ardour/session.cc:835 +msgid "cannot setup master outputs" +msgstr "nie można ustawić głównych wyjść" + +#: libs/ardour/session.cc:846 +msgid "Master Out" +msgstr "Główne wyjście" + +#: libs/ardour/session.cc:855 +msgid "Setup signal flow and plugins" +msgstr "" + +#: libs/ardour/session.cc:861 +msgid "Catch up with send/insert state" +msgstr "" + +#: libs/ardour/session.cc:892 +msgid "Connect to engine" +msgstr "" + +#: libs/ardour/session.cc:899 +msgid "OSC startup" +msgstr "początek OSC" + +#: libs/ardour/session.cc:928 +msgid "cannot create Auditioner: no auditioning of regions possible" +msgstr "" + +#: libs/ardour/session.cc:942 +msgid "cannot setup control inputs" +msgstr "" + +#: libs/ardour/session.cc:950 +msgid "cannot set up master outputs" +msgstr "" + +#: libs/ardour/session.cc:1153 +msgid "Session: you can't use that location for auto punch (start <= end)" +msgstr "" + +#: libs/ardour/session.cc:1194 +msgid "Session: you can't use a mark for auto loop" +msgstr "" + +#: libs/ardour/session.cc:1578 +msgid "feedback loop setup between %1 and %2" +msgstr "" + +#: libs/ardour/session.cc:1765 +#: libs/ardour/session.cc:1931 +msgid "cannot configure %1 in/%2 out configuration for new audio track" +msgstr "" + +#: libs/ardour/session.cc:1817 +msgid "Session: could not create new audio track." +msgstr "" + +#: libs/ardour/session.cc:1835 +#: libs/ardour/session.cc:1980 +msgid "No more JACK ports are available. You will need to stop Ardour and restart JACK with ports if you need this many tracks." +msgstr "" + +#: libs/ardour/session.cc:1874 +msgid "editor" +msgstr "" + +#: libs/ardour/session.cc:1975 +msgid "Session: could not create new audio route." +msgstr "" + +#: libs/ardour/session.cc:2526 +msgid "cannot create new name for region \"%1\"" +msgstr "" + +#: libs/ardour/session.cc:2590 +msgid "too many regions with names like %1" +msgstr "" + +#: libs/ardour/session.cc:2621 +#: libs/ardour/session.cc:2682 +msgid "Session::add_region() ignored a null region. Warning: you might have lost a region." +msgstr "" + +#: libs/ardour/session.cc:3159 +msgid "There are already %1 recordings for %2, which I consider too many." +msgstr "" + +#: libs/ardour/session.cc:3390 +msgid "Cannot compile tape track regexp for use (%1)" +msgstr "" + +#: libs/ardour/session.cc:3543 +msgid "programming error: unknown type of Insert created!" +msgstr "" + +#: libs/ardour/session.cc:3549 +msgid "programming error: unknown type of Redirect created!" +msgstr "" + +#: libs/ardour/session.cc:3588 +msgid "programming error: unknown type of Redirect deleted!" +msgstr "" + +#: libs/ardour/session.cc:3708 +#: libs/ardour/session.cc:3722 +#: libs/ardour/session.cc:4122 +msgid "Memory allocation error: posix_memalign (%1 * %2) failed (%3)" +msgstr "" + +#: libs/ardour/session.cc:3792 +msgid "send ID %1 appears to be in use already" +msgstr "" + +#: libs/ardour/session.cc:3804 +msgid "insert ID %1 appears to be in use already" +msgstr "" + +#: libs/ardour/session.cc:3986 +msgid "too many bounced versions of playlist \"%1\"" +msgstr "" + +#: libs/ardour/session.cc:3995 +msgid "cannot create new audio file \"%1\" for %2" +msgstr "" + +#: libs/ardour/session.cc:4107 +msgid "Programming error: get_silent_buffers() called for %1 buffers but only %2 exist" +msgstr "" + +#: libs/ardour/session_click.cc:160 +msgid "cannot open click soundfile %1 (%2)" +msgstr "nie można otworzyć pliku dźwiękowego metronomu %1 (%2)" + +#: libs/ardour/session_click.cc:169 +msgid "cannot read data from click soundfile" +msgstr "nie można odczytać danych z pliku dźwiękowego metronomu" + +#: libs/ardour/session_click.cc:196 +msgid "cannot open click emphasis soundfile %1 (%2)" +msgstr "nie można otworzyć pliku dźwiękowego akcentowanego uderzenia metronomu %1 (%2)" + +#: libs/ardour/session_click.cc:204 +msgid "cannot read data from click emphasis soundfile" +msgstr "nie można odczytać danych z pliku dźwiękowego akcentowanego uderzenia metronomu" + +#: libs/ardour/session_command.cc:75 +msgid "Tried to reconstitute a MementoCommand with no contents, failing. id=" +msgstr "" + +#: libs/ardour/session_command.cc:111 +msgid "could not reconstitute MementoCommand from XMLNode. object type = %1 id = %2" +msgstr "" + +#: libs/ardour/session_command.cc:123 +msgid "GlobalRouteStateCommand has no \"type\" node, ignoring" +msgstr "" + +#: libs/ardour/session_command.cc:138 +msgid "unknown type of GlobalRouteStateCommand (%1), ignored" +msgstr "" + +#: libs/ardour/session_command.cc:186 +msgid "global route state command has no \"%1\" node, ignoring entire command" +msgstr "" + +#: libs/ardour/session_command.cc:202 +#: libs/ardour/session_command.cc:515 +msgid "cannot find track/bus \"%1\" while rebuilding a global route state command, ignored" +msgstr "" + +#: libs/ardour/session_command.cc:499 +msgid "global route meter state command has no \"%1\" node, ignoring entire command" +msgstr "" + +#: libs/ardour/session_events.cc:161 +msgid "Session: cannot have two events of type %1 at the same frame (%2)." +msgstr "" + +#: libs/ardour/session_events.cc:437 +msgid "Programming error: illegal event type in process_event (%1)" +msgstr "" + +#: libs/ardour/session_export.cc:62 +msgid "Export: no output file specified" +msgstr "" + +#: libs/ardour/session_export.cc:163 +#: libs/ardour/session_export.cc:168 +msgid "illegal frame range in export specification" +msgstr "" + +#: libs/ardour/session_export.cc:173 +msgid "Bad data width size. Report me!" +msgstr "" + +#: libs/ardour/session_export.cc:203 +msgid "Export: cannot open output file \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_export.cc:213 +msgid "cannot initialize sample rate conversion: %1" +msgstr "" + +#: libs/ardour/session_export.cc:315 +msgid "an error occured during sample rate conversion: %1" +msgstr "" + +#: libs/ardour/session_export.cc:326 +msgid "warning, leftover frames overflowed, glitches might occur in output" +msgstr "" + +#: libs/ardour/session_export.cc:417 +msgid "Export: could not write data to output file (%1)" +msgstr "" + +#: libs/ardour/session_export.cc:484 +msgid "%1: cannot seek to %2 for export" +msgstr "" + +#: libs/ardour/session_midi.cc:94 +msgid "Ardour is slaved to MTC - port cannot be reset" +msgstr "" + +#: libs/ardour/session_midi.cc:109 +msgid "unknown port %1 requested for MTC" +msgstr "" + +#: libs/ardour/session_midi.cc:446 +msgid "Error reading from MIDI port %1" +msgstr "" + +#: libs/ardour/session_midi.cc:816 +msgid "Session: could not send full MIDI time code" +msgstr "" + +#: libs/ardour/session_midi.cc:875 +msgid "Session: cannot send quarter-frame MTC message (%1)" +msgstr "" + +#: libs/ardour/session_midi.cc:983 +msgid "MMC: cannot send command %1%2%3" +msgstr "" + +#: libs/ardour/session_midi.cc:1090 +msgid "UI: cannot set O_NONBLOCK on signal read pipe (%1)" +msgstr "" + +#: libs/ardour/session_midi.cc:1095 +msgid "UI: cannot set O_NONBLOCK on signal write pipe (%1)" +msgstr "" + +#: libs/ardour/session_midi.cc:1100 +msgid "Session: could not create transport thread" +msgstr "" + +#: libs/ardour/session_midi.cc:1131 +msgid "cannot send signal to midi thread! (%1)" +msgstr "" + +#: libs/ardour/session_midi.cc:1226 +msgid "MIDI thread poll failed (%1)" +msgstr "" + +#: libs/ardour/session_midi.cc:1238 +msgid "Error on transport thread request pipe" +msgstr "" + +#: libs/ardour/session_midi.cc:1265 +msgid "Error reading from transport request pipe" +msgstr "" + +#: libs/ardour/session_process.cc:105 +msgid "Session: error in no roll for %1" +msgstr "" + +#: libs/ardour/session_state.cc:109 +msgid "Could not use path %1 (%s)" +msgstr "" + +#: libs/ardour/session_state.cc:145 +#: libs/ardour/session_state.cc:1050 +msgid "end" +msgstr "koniec" + +#: libs/ardour/session_state.cc:146 +#: libs/ardour/session_state.cc:1049 +msgid "start" +msgstr "początek" + +#: libs/ardour/session_state.cc:338 +msgid "Reset Remote Controls" +msgstr "" + +#: libs/ardour/session_state.cc:345 +msgid "Reset Control Protocols" +msgstr "" + +#: libs/ardour/session_state.cc:365 +msgid "Session loading complete" +msgstr "" + +#: libs/ardour/session_state.cc:484 +#: libs/ardour/session_state.cc:2857 +msgid "Session: cannot create session peakfile folder \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:495 +msgid "Session: cannot create session sounds folder \"%1\" (%2)" +msgstr "Nie można utworzyć folderu dźwięków sesji \"%1\" (%2)" + +#: libs/ardour/session_state.cc:503 +msgid "Session: cannot create session dead sounds folder \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:510 +msgid "Session: cannot create session export folder \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:517 +msgid "Session: cannot create session analysis folder \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:529 +msgid "Session: cannot create session folder \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:561 +msgid "Could not open %1 for writing mix template" +msgstr "" + +#: libs/ardour/session_state.cc:567 +msgid "Could not open mix template %1 for reading" +msgstr "" + +#: libs/ardour/session_state.cc:606 +msgid "Session: could not load diskstream via XML state" +msgstr "" + +#: libs/ardour/session_state.cc:649 +msgid "could not rename snapshot %1 to %2" +msgstr "" + +#: libs/ardour/session_state.cc:688 +msgid "Ardour's audio engine is not connected and state saving would lose all I/O connections. Session not saved" +msgstr "" + +#: libs/ardour/session_state.cc:732 +msgid "state could not be saved to %1" +msgstr "" + +#: libs/ardour/session_state.cc:739 +msgid "could not rename temporary session file %1 to %2" +msgstr "" + +#: libs/ardour/session_state.cc:809 +msgid "%1: session state information file \"%2\" doesn't exist!" +msgstr "" + +#: libs/ardour/session_state.cc:818 +msgid "Could not understand ardour file %1" +msgstr "" + +#: libs/ardour/session_state.cc:827 +msgid "Session file %1 is not an Ardour session" +msgstr "" + +#: libs/ardour/session_state.cc:858 +msgid "" +"Copying old session file %1 to %2\n" +"Use %2 with Ardour versions before 2.0 from now on" +msgstr "" + +#: libs/ardour/session_state.cc:1168 +msgid "programming error: Session: incorrect XML node sent to set_state()" +msgstr "" + +#: libs/ardour/session_state.cc:1237 +msgid "Session: XML state has no options section" +msgstr "" + +#: libs/ardour/session_state.cc:1241 +msgid "Session: XML state has no locations section" +msgstr "" + +#: libs/ardour/session_state.cc:1274 +msgid "Session: XML state has no sources section" +msgstr "" + +#: libs/ardour/session_state.cc:1281 +msgid "Session: XML state has no Regions section" +msgstr "" + +#: libs/ardour/session_state.cc:1288 +msgid "Session: XML state has no playlists section" +msgstr "" + +#: libs/ardour/session_state.cc:1307 +msgid "Session: XML state has no diskstreams section" +msgstr "" + +#: libs/ardour/session_state.cc:1314 +msgid "Session: XML state has no connections section" +msgstr "" + +#: libs/ardour/session_state.cc:1321 +msgid "Session: XML state has no edit groups section" +msgstr "" + +#: libs/ardour/session_state.cc:1328 +msgid "Session: XML state has no mix groups section" +msgstr "" + +#: libs/ardour/session_state.cc:1335 +msgid "Session: XML state has no Tempo Map section" +msgstr "" + +#: libs/ardour/session_state.cc:1342 +msgid "Session: XML state has no routes section" +msgstr "" + +#: libs/ardour/session_state.cc:1349 +msgid "Session: XML state has no click section" +msgstr "" + +#: libs/ardour/session_state.cc:1384 +msgid "Session: cannot create Route from XML description." +msgstr "" + +#: libs/ardour/session_state.cc:1388 +msgid "Loaded track/bus %1" +msgstr "" + +#: libs/ardour/session_state.cc:1427 +msgid "Session: cannot create Region from XML description." +msgstr "" + +#: libs/ardour/session_state.cc:1431 +msgid "Can not load state for region '%1'" +msgstr "" + +#: libs/ardour/session_state.cc:1468 +msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)" +msgstr "" + +#: libs/ardour/session_state.cc:1476 +#: libs/ardour/session_state.cc:1497 +#: libs/ardour/session_state.cc:1517 +msgid "Session: XMLNode describing a AudioRegion references an unknown source id =%1" +msgstr "" + +#: libs/ardour/session_state.cc:1482 +#: libs/ardour/session_state.cc:1503 +#: libs/ardour/session_state.cc:1523 +msgid "Session: XMLNode describing a AudioRegion references a non-audio source id =%1" +msgstr "" + +#: libs/ardour/session_state.cc:1546 +msgid "Session: XMLNode describing an AudioRegion is missing some master sources; ignored" +msgstr "" + +#: libs/ardour/session_state.cc:1597 +msgid "cannot create new file from region name \"%1\" with ident = \"%2\": too many existing files with similar names" +msgstr "" + +#: libs/ardour/session_state.cc:1620 +msgid "Session: cannot create Source from XML description." +msgstr "" + +#: libs/ardour/session_state.cc:1625 +msgid "A sound file is missing. It will be replaced by silence." +msgstr "" + +#: libs/ardour/session_state.cc:1646 +msgid "Found a sound file that cannot be used by Ardour. Talk to the progammers." +msgstr "" + +#: libs/ardour/session_state.cc:1668 +msgid "Could not create mix templates directory \"%1\" (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:1682 +msgid "Template \"%1\" already exists - new version not created" +msgstr "" + +#: libs/ardour/session_state.cc:1689 +msgid "mix template not saved" +msgstr "" + +#: libs/ardour/session_state.cc:1748 +msgid "cannot create session directory \"%1\"; ignored" +msgstr "" + +#: libs/ardour/session_state.cc:1759 +msgid "cannot create sounds directory \"%1\"; ignored" +msgstr "" + +#: libs/ardour/session_state.cc:1768 +msgid "cannot create dead sounds directory \"%1\"; ignored" +msgstr "" + +#: libs/ardour/session_state.cc:1777 +msgid "cannot create peak file directory \"%1\"; ignored" +msgstr "" + +#: libs/ardour/session_state.cc:1909 +#: libs/ardour/session_state.cc:1930 +msgid "Session: cannot create Playlist from XML description." +msgstr "" + +#: libs/ardour/session_state.cc:1969 +msgid "Session: cannot create Named Selection from XML description." +msgstr "" + +#: libs/ardour/session_state.cc:2171 +msgid "Unknown node \"%1\" found in Connections list from state file" +msgstr "" + +#: libs/ardour/session_state.cc:2982 +msgid "cannot remove dead sound file %1 (%2)" +msgstr "" + +#: libs/ardour/session_state.cc:3098 +msgid "could not backup old history file, current history not saved." +msgstr "" + +#: libs/ardour/session_state.cc:3110 +msgid "history could not be saved to %1" +msgstr "" + +#: libs/ardour/session_state.cc:3117 +msgid "could not remove corrupt history file %1" +msgstr "" + +#: libs/ardour/session_state.cc:3121 +msgid "could not restore history file from backup %1" +msgstr "" + +#: libs/ardour/session_state.cc:3143 +msgid "Loading history from '%1'." +msgstr "" + +#: libs/ardour/session_state.cc:3150 +msgid "Could not understand session history file \"%1\"" +msgstr "" + +#: libs/ardour/session_state.cc:3193 +msgid "Couldn't figure out how to make a Command out of a %1 XMLNode." +msgstr "" + +#: libs/ardour/session_time.cc:483 +msgid "Unknown JACK transport state %1 in sync callback" +msgstr "" + +#: libs/ardour/session_transport.cc:119 +msgid "Cannot loop - no loop range defined" +msgstr "" + +#: libs/ardour/session_transport.cc:537 +msgid "" +"Seamless looping cannot be supported while Ardour is using JACK transport.\n" +"Recommend changing the configured options" +msgstr "" + +#: libs/ardour/session_transport.cc:822 +msgid "Global varispeed cannot be supported while Ardour is connected to JACK transport control" +msgstr "" + +#: libs/ardour/session_transport.cc:1015 +msgid "please stop the transport before adjusting slave settings" +msgstr "" + +#: libs/ardour/session_transport.cc:1048 +msgid "No MTC port defined: MTC slaving is impossible." +msgstr "" + +#: libs/ardour/sndfile_helpers.cc:34 +msgid "WAV" +msgstr "WAV" + +#: libs/ardour/sndfile_helpers.cc:35 +msgid "AIFF" +msgstr "AIFF" + +#: libs/ardour/sndfile_helpers.cc:36 +msgid "CAF" +msgstr "CAF" + +#: libs/ardour/sndfile_helpers.cc:37 +msgid "W64 (64 bit WAV)" +msgstr "W64 (64 bit WAV)" + +#: libs/ardour/sndfile_helpers.cc:38 +msgid "raw (no header)" +msgstr "raw (brak nagłówka)" + +#: libs/ardour/sndfile_helpers.cc:43 +msgid ".wav" +msgstr ".wav" + +#: libs/ardour/sndfile_helpers.cc:44 +msgid ".aiff" +msgstr ".aiff" + +#: libs/ardour/sndfile_helpers.cc:45 +msgid ".caf" +msgstr ".caf" + +#: libs/ardour/sndfile_helpers.cc:46 +msgid ".w64" +msgstr ".w64" + +#: libs/ardour/sndfile_helpers.cc:47 +msgid ".raw" +msgstr ".raw" + +#: libs/ardour/sndfile_helpers.cc:60 +msgid "16 bit" +msgstr "16 bit" + +#: libs/ardour/sndfile_helpers.cc:61 +msgid "24 bit" +msgstr "24 bit" + +#: libs/ardour/sndfile_helpers.cc:62 +msgid "32 bit" +msgstr "32 bit" + +#: libs/ardour/sndfile_helpers.cc:63 +msgid "8 bit" +msgstr "8 bit" + +#: libs/ardour/sndfile_helpers.cc:64 +msgid "float" +msgstr "float" + +#: libs/ardour/sndfile_helpers.cc:77 +msgid "Little-endian (Intel)" +msgstr "Little-endian (Intel)" + +#: libs/ardour/sndfile_helpers.cc:78 +msgid "Big-endian (Mac)" +msgstr "Big-endian (Mac)" + +#: libs/ardour/sndfilesource.cc:149 +msgid "FileSource: cannot get host information for BWF header (%1)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:173 +msgid "cannot set broadcast info for audio file %1 (%2); dropping broadcast info for this file" +msgstr "" + +#: libs/ardour/sndfilesource.cc:226 +msgid "SndFileSource: cannot open file \"%1\" for %2 (%3)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:234 +msgid "SndFileSource: file only contains %1 channels; %2 is invalid as a channel number" +msgstr "" + +#: libs/ardour/sndfilesource.cc:332 +msgid "SndFileSource: could not seek to frame %1 within %2 (%3)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:377 +#: libs/ardour/sndfilesource.cc:412 +msgid "attempt to write a non-writable audio file source (%1)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:382 +#: libs/ardour/utils.cc:523 +#: libs/ardour/utils.cc:547 +#: libs/ardour/utils.cc:561 +#: libs/ardour/utils.cc:580 +msgid "programming error: %1 %2" +msgstr "" + +#: libs/ardour/sndfilesource.cc:516 +msgid "attempt to flush a non-writable audio file source (%1)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:526 +msgid "attempt to store broadcast info in a non-writable audio file source (%1)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:562 +#: libs/ardour/sndfilesource.cc:583 +msgid "cannot set broadcast info for audio file %1; Dropping broadcast info for this file" +msgstr "" + +#: libs/ardour/sndfilesource.cc:596 +msgid "%1: cannot seek to %2 (libsndfile error: %3" +msgstr "" + +#: libs/ardour/sndfilesource.cc:705 +msgid "SndFileSource: \"%1\" bad read retval: %2 of %5 (%3: %4)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:718 +#: libs/ardour/sndfilesource.cc:768 +#: libs/ardour/sndfilesource.cc:775 +msgid "SndFileSource: \"%1\" bad write (%2)" +msgstr "" + +#: libs/ardour/sndfilesource.cc:798 +msgid "Filesource: start time is already set for existing file (%1): Cannot change start time." +msgstr "" + +#: libs/ardour/tempo.cc:71 +msgid "TempoSection XML node has no \"start\" property" +msgstr "" + +#: libs/ardour/tempo.cc:79 +msgid "TempoSection XML node has an illegal \"start\" value" +msgstr "" + +#: libs/ardour/tempo.cc:86 +msgid "TempoSection XML node has no \"beats-per-minute\" property" +msgstr "" + +#: libs/ardour/tempo.cc:91 +msgid "TempoSection XML node has an illegal \"beats_per_minute\" value" +msgstr "" + +#: libs/ardour/tempo.cc:100 +msgid "TempoSection XML node has an illegal \"note-type\" value" +msgstr "" + +#: libs/ardour/tempo.cc:106 +msgid "TempoSection XML node has no \"movable\" property" +msgstr "" + +#: libs/ardour/tempo.cc:147 +msgid "MeterSection XML node has no \"start\" property" +msgstr "" + +#: libs/ardour/tempo.cc:155 +msgid "MeterSection XML node has an illegal \"start\" value" +msgstr "" + +#: libs/ardour/tempo.cc:162 +msgid "MeterSection XML node has no \"beats-per-bar\" property" +msgstr "" + +#: libs/ardour/tempo.cc:167 +msgid "MeterSection XML node has an illegal \"beats-per-bar\" value" +msgstr "" + +#: libs/ardour/tempo.cc:172 +msgid "MeterSection XML node has no \"note-type\" property" +msgstr "" + +#: libs/ardour/tempo.cc:177 +msgid "MeterSection XML node has an illegal \"note-type\" value" +msgstr "" + +#: libs/ardour/tempo.cc:182 +msgid "MeterSection XML node has no \"movable\" property" +msgstr "" + +#: libs/ardour/tempo.cc:561 +msgid "no tempo sections defined in tempo map - cannot change tempo @ %1" +msgstr "" + +#: libs/ardour/tempo.cc:585 +#: libs/ardour/tempo.cc:601 +msgid "programming error: no tempo section in tempo map!" +msgstr "" + +#: libs/ardour/tempo.cc:644 +#: libs/ardour/tempo.cc:702 +msgid "programming error: unhandled MetricSection type" +msgstr "" + +#: libs/ardour/tempo.cc:1461 +#: libs/ardour/tempo.cc:1473 +msgid "Tempo map: could not set new state, restoring old one." +msgstr "" + +#: libs/ardour/utils.cc:300 +msgid "illegal or badly-formed string used for path (%1)" +msgstr "" + +#: libs/ardour/utils.cc:305 +msgid "path (%1) is ambiguous" +msgstr "" + +#: libs/ardour/utils.cc:367 +#: libs/ardour/utils.cc:391 +msgid "Splice Edit" +msgstr "Edycja klockowa" + +#: libs/ardour/utils.cc:369 +#: libs/ardour/utils.cc:384 +msgid "Slide Edit" +msgstr "Edycja ślizgowa" + +#: libs/ardour/utils.cc:371 +#: libs/ardour/utils.cc:387 +msgid "Lock Edit" +msgstr "Edycja zablokowana" + +#: libs/ardour/utils.cc:374 +msgid "programming error: unknown edit mode string \"%1\"" +msgstr "" + +#: libs/ardour/utils.cc:398 +#: libs/ardour/utils.cc:427 +msgid "Internal" +msgstr "Wew." + +#: libs/ardour/utils.cc:402 +#: libs/ardour/utils.cc:423 +msgid "MTC" +msgstr "MTC" + +#: libs/ardour/utils.cc:406 +#: libs/ardour/utils.cc:420 +msgid "JACK" +msgstr "JACK" + +#: libs/ardour/utils.cc:410 +msgid "programming error: unknown slave source string \"%1\"" +msgstr "" + +#: libs/ardour/vst_plugin.cc:167 +msgid "cannot create VST chunk directory: %1" +msgstr "" + +#: libs/ardour/vst_plugin.cc:175 +msgid "cannot check VST chunk directory: %1" +msgstr "" + +#: libs/ardour/vst_plugin.cc:181 +msgid "%1 exists but is not a directory" +msgstr "" + +#: libs/ardour/vst_plugin.cc:219 +msgid "Bad node sent to VSTPlugin::set_state" +msgstr "" + +#: libs/ardour/vst_plugin.cc:323 +#: libs/ardour/vst_plugin.cc:334 +msgid "no support for presets using chunks at this time" +msgstr "" + +#: libs/ardour/vst_plugin.cc:486 +msgid "VST: cannot load module from \"%1\"" +msgstr "" + +#: libs/ardour/vst_plugin.cc:491 +msgid "You asked ardour to not use any VST plugins" +msgstr "" + +#: libs/ardour/coreaudiosource.cc:80 +msgid "CoreAudioSource: cannot open file \"%1\" for %2" +msgstr "" + +#: libs/ardour/rb_effect.cc:155 +#: libs/ardour/rb_effect.cc:193 +msgid "tempoize: error reading data from %1 at %2 (wanted %3, got %4)" +msgstr "" + +#: libs/ardour/rb_effect.cc:218 +#: libs/ardour/rb_effect.cc:235 +msgid "error writing tempo-adjusted data to %1" +msgstr "" + +#: libs/ardour/rb_effect.cc:242 +msgid "timefx code failure. please notify ardour-developers." +msgstr "" + +#: libs/ardour/audio_unit.cc:104 +msgid "AudioUnit: Could not convert CAComponent to CAAudioUnit" +msgstr "" + +#: libs/ardour/audio_unit.cc:147 +msgid "AUPlugin: cannot set processing block size" +msgstr "" + +#: libs/ardour/audio_unit.cc:351 +msgid "AUPlugin: %1 cannot initialize plugin (err = %2)" +msgstr "" + +#: libs/ardour/audio_unit.cc:431 +msgid "AUPlugin: could not set stream format for %1/%2 (err = %3)" +msgstr "" + +#: libs/ardour/audio_unit.cc:476 +msgid "AUPlugin: %1 output_streams() called without any format set!" +msgstr "" + +#: libs/ardour/audio_unit.cc:488 +msgid "AUPlugin: input_streams() called without any format set!" +msgstr "" + +#: libs/ardour/audio_unit.cc:504 +msgid "AUPlugin: render callback called illegally!" +msgstr "" + +#~ msgid "%s/out %u" +#~ msgstr "%s/wyjście %u" +#~ msgid "%s/in" +#~ msgstr "%s/wejście" + diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 508f09a480..456fc15235 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -316,6 +316,9 @@ Region::~Region () for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->remove_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (pl); + } } notify_callbacks (); @@ -341,16 +344,26 @@ Region::set_playlist (boost::weak_ptr wpl) (*i)->remove_playlist (_playlist); (*i)->add_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (_playlist); + (*i)->add_playlist (pl); + } } else { for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->add_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->add_playlist (pl); + } } } else { if (old_playlist) { for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->remove_playlist (old_playlist); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (old_playlist); + } } } } @@ -532,11 +545,8 @@ Region::set_position_internal (nframes_t pos, bool allow_bbt_recompute) _length = max_frames - _position; } - if (allow_bbt_recompute && _positional_lock_style == MusicTime) { - boost::shared_ptr pl (playlist()); - if (pl) { - pl->session().tempo_map().bbt_time (_position, _bbt_time); - } + if (allow_bbt_recompute) { + recompute_position_from_lock_style (); } invalidate_transients (); @@ -574,6 +584,17 @@ Region::set_position_on_top (nframes_t pos, void *src) send_change (PositionChanged); } +void +Region::recompute_position_from_lock_style () +{ + if (_positional_lock_style == MusicTime) { + boost::shared_ptr pl (playlist()); + if (pl) { + pl->session().tempo_map().bbt_time (_position, _bbt_time); + } + } +} + void Region::nudge_position (nframes64_t n, void *src) { diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc index bd4b0873a7..84d8167240 100644 --- a/libs/ardour/region_factory.cc +++ b/libs/ardour/region_factory.cc @@ -37,8 +37,8 @@ sigc::signal > RegionFactory::CheckNewRegion; boost::shared_ptr RegionFactory::create (boost::shared_ptr region, nframes_t start, - nframes_t length, std::string name, - layer_t layer, Region::Flag flags, bool announce) + nframes_t length, std::string name, + layer_t layer, Region::Flag flags, bool announce) { boost::shared_ptr other_a; boost::shared_ptr other_m; @@ -68,16 +68,16 @@ RegionFactory::create (boost::shared_ptr region, nframes_t start, } boost::shared_ptr -RegionFactory::create (boost::shared_ptr region) +RegionFactory::create (boost::shared_ptr region) { - boost::shared_ptr ar; - boost::shared_ptr mr; + boost::shared_ptr ar; + boost::shared_ptr mr; - if ((ar = boost::dynamic_pointer_cast(region)) != 0) { + if ((ar = boost::dynamic_pointer_cast(region)) != 0) { boost::shared_ptr ret (new AudioRegion (ar)); /* pure copy constructor - no CheckNewRegion emitted */ return ret; - } else if ((mr = boost::dynamic_pointer_cast(region)) != 0) { + } else if ((mr = boost::dynamic_pointer_cast(region)) != 0) { boost::shared_ptr ret (new MidiRegion (mr)); /* pure copy constructor - no CheckNewRegion emitted */ return ret; @@ -91,8 +91,8 @@ RegionFactory::create (boost::shared_ptr region) boost::shared_ptr RegionFactory::create (boost::shared_ptr region, nframes_t start, - nframes_t length, std::string name, - layer_t layer, Region::Flag flags, bool announce) + nframes_t length, std::string name, + layer_t layer, Region::Flag flags, bool announce) { return create (boost::static_pointer_cast (region), start, length, name, layer, flags, announce); } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 85e849de2e..e655efedb2 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 0c5a4453e6..8357b7e901 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -107,6 +107,7 @@ Session::apply_gain_to_buffer_t Session::apply_gain_to_buffer = 0; Session::mix_buffers_with_gain_t Session::mix_buffers_with_gain = 0; Session::mix_buffers_no_gain_t Session::mix_buffers_no_gain = 0; +sigc::signal Session::Dialog; sigc::signal Session::AskAboutPendingState; sigc::signal Session::AskAboutSampleRateMismatch; sigc::signal Session::SendFeedback; @@ -115,6 +116,9 @@ sigc::signal Session::SMPTEOffsetChanged; sigc::signal Session::StartTimeChanged; sigc::signal Session::EndTimeChanged; +sigc::signal Session::AutoBindingOn; +sigc::signal Session::AutoBindingOff; + Session::Session (AudioEngine &eng, const string& fullpath, const string& snapshot_name, @@ -957,7 +961,6 @@ Session::auto_loop_changed (Location* location) } last_loopend = location->end(); - } void @@ -995,6 +998,10 @@ Session::set_auto_punch_location (Location* location) auto_punch_changed_connection = location->changed.connect (mem_fun (this, &Session::auto_punch_changed)); location->set_auto_punch (true, this); + + + auto_punch_changed (location); + auto_punch_location_changed (location); } @@ -1034,6 +1041,13 @@ Session::set_auto_loop_location (Location* location) auto_loop_changed_connection = location->changed.connect (mem_fun (this, &Session::auto_loop_changed)); location->set_auto_loop (true, this); + + /* take care of our stuff first */ + + auto_loop_changed (location); + + /* now tell everyone else */ + auto_loop_location_changed (location); } @@ -2835,8 +2849,6 @@ Session::remove_source (boost::weak_ptr src) return; } - cerr << "remove source for " << source->name() << endl; - { Glib::Mutex::Lock lm (source_lock); diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index 99a6dbbc88..50b9ff320e 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -66,25 +66,6 @@ legalize_for_path (ustring str) return legal; } -#if 0 -string -legalize_for_path (string str) -{ - string::size_type pos; - string legal_chars = "abcdefghijklmnopqrtsuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_+=: "; - string legal; - - legal = str; - pos = 0; - - while ((pos = legal.find_first_not_of (legal_chars, pos)) != string::npos) { - legal.replace (pos, 1, "_"); - pos += 1; - } - - return legal; -} -#endif string bump_name_once(std::string name) { diff --git a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h index ba2e1f3f7b..fe67e9ecec 100644 --- a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h +++ b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h @@ -63,6 +63,7 @@ class BarController : public Gtk::Frame /* export this to allow direct connection to button events */ Gtk::Widget& event_widget() { return darea; } + PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); } protected: Gtk::Adjustment& adjustment; diff --git a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h index 2ddd3628fc..1cde32c5ba 100644 --- a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h +++ b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h @@ -47,7 +47,8 @@ class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton return true; } } - + + PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); } private: BindingProxy binding_proxy; }; @@ -71,6 +72,8 @@ class BindableButton : public Gtkmm2ext::StatefulButton } } + PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); } + private: BindingProxy binding_proxy; }; diff --git a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h index d8f37c7649..dd9b94319d 100644 --- a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h +++ b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h @@ -40,6 +40,7 @@ class BindingProxy : public sigc::trackable bool button_press_handler (GdkEventButton *); + PBD::Controllable* get_controllable() { return &controllable; } protected: Gtkmm2ext::PopUp* prompter; diff --git a/libs/gtkmm2ext/po/pl_PL.po b/libs/gtkmm2ext/po/pl_PL.po new file mode 100644 index 0000000000..df2414d7ba --- /dev/null +++ b/libs/gtkmm2ext/po/pl_PL.po @@ -0,0 +1,53 @@ +# translation of libgtkmm2ext.po to Polish +# Copyright (C) YEAR "Paul Davis" +# This file is distributed under the same license as the PACKAGE package. +# +# Piotr Zaryk , 2008. +msgid "" +msgstr "" +"Project-Id-Version: libgtkmm2ext\n" +"Report-Msgid-Bugs-To: Piotr Zaryk \n" +"POT-Creation-Date: 2008-04-03 16:17+0200\n" +"PO-Revision-Date: 2008-04-10 10:54+0100\n" +"Last-Translator: Piotr Zaryk \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: libs/gtkmm2ext/binding_proxy.cc:69 +msgid "operate controller now" +msgstr "Teraz operuj kontrolerem" + +#: libs/gtkmm2ext/gtk_ui.cc:95 +msgid "Log" +msgstr "Log" + +#: libs/gtkmm2ext/gtk_ui.cc:536 +msgid "Press To Exit" +msgstr "Wciśnij by zakończyć" + +#: libs/gtkmm2ext/gtk_ui.cc:570 +msgid "Error" +msgstr "Błąd" + +#: libs/gtkmm2ext/pathlist.cc:29 +msgid "+" +msgstr "+" + +#: libs/gtkmm2ext/pathlist.cc:30 +msgid "-" +msgstr "-" + +#: libs/gtkmm2ext/pathlist.cc:35 +msgid "Paths" +msgstr "Położenia" + +#: libs/gtkmm2ext/pathlist.cc:87 +msgid "Path Chooser" +msgstr "Wybór położenia" + +#: libs/gtkmm2ext/textviewer.cc:34 +msgid "Close" +msgstr "Zamknij" + diff --git a/libs/libgnomecanvasmm/libgnomecanvasmm/line.cc b/libs/libgnomecanvasmm/libgnomecanvasmm/line.cc index 5b12c69ba6..9c3bf6f4a5 100644 --- a/libs/libgnomecanvasmm/libgnomecanvasmm/line.cc +++ b/libs/libgnomecanvasmm/libgnomecanvasmm/line.cc @@ -40,7 +40,9 @@ Points::Points(size_type nbpoints) Points::Points(GnomeCanvasPoints *castitem) : points_(castitem),owned_(false) { - reserve(points_->num_points); + while (size() < points_->num_points) { + push_back (Art::Point()); + } //GnomeCanvasPoints has an array of doubles, used 2 at a time: int i = 0; diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc index 039eb43e3a..c15b7a8cf2 100644 --- a/libs/pbd/controllable.cc +++ b/libs/pbd/controllable.cc @@ -28,6 +28,8 @@ using namespace PBD; sigc::signal Controllable::Destroyed; sigc::signal Controllable::StartLearning; sigc::signal Controllable::StopLearning; +sigc::signal Controllable::CreateBinding; +sigc::signal Controllable::DeleteBinding; Glib::Mutex* Controllable::registry_lock = 0; Controllable::Controllables Controllable::registry; diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h index 6dc421cfd9..dbb23fdff4 100644 --- a/libs/pbd/pbd/controllable.h +++ b/libs/pbd/pbd/controllable.h @@ -43,6 +43,8 @@ class Controllable : public PBD::StatefulDestructible { virtual bool can_send_feedback() const { return true; } sigc::signal LearningFinished; + static sigc::signal CreateBinding; + static sigc::signal DeleteBinding; static sigc::signal StartLearning; static sigc::signal StopLearning; diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc index 93cbf088c7..a76eedcbcd 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc @@ -59,9 +59,17 @@ GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s) _feedback_interval = 10000; // microseconds last_feedback_time = 0; + auto_binding = FALSE; + Controllable::StartLearning.connect (mem_fun (*this, &GenericMidiControlProtocol::start_learning)); Controllable::StopLearning.connect (mem_fun (*this, &GenericMidiControlProtocol::stop_learning)); Session::SendFeedback.connect (mem_fun (*this, &GenericMidiControlProtocol::send_feedback)); + + Controllable::CreateBinding.connect (mem_fun (*this, &GenericMidiControlProtocol::create_binding)); + Controllable::DeleteBinding.connect (mem_fun (*this, &GenericMidiControlProtocol::delete_binding)); + + Session::AutoBindingOn.connect (mem_fun (*this, &GenericMidiControlProtocol::auto_binding_on)); + Session::AutoBindingOff.connect (mem_fun (*this, &GenericMidiControlProtocol::auto_binding_off)); } GenericMidiControlProtocol::~GenericMidiControlProtocol () @@ -229,6 +237,71 @@ GenericMidiControlProtocol::stop_learning (Controllable* c) } } +void +GenericMidiControlProtocol::delete_binding ( PBD::Controllable* control ) +{ + if( control != 0 ) { + Glib::Mutex::Lock lm2 (controllables_lock); + + for( MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end(); ++iter) { + MIDIControllable* existingBinding = (*iter); + + if( control == &(existingBinding->get_controllable()) ) { + delete existingBinding; + controllables.erase (iter); + } + + } // end for midi controllables + } // end null check +} +void +GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos, int control_number) +{ + if( control != NULL ) { + Glib::Mutex::Lock lm2 (controllables_lock); + + MIDI::channel_t channel = (pos & 0xf); + MIDI::byte value = control_number; + + // Create a MIDIControllable:: + MIDIControllable* mc = new MIDIControllable (*_port, *control); + + // Remove any old binding for this midi channel/type/value pair + // Note: can't use delete_binding() here because we don't know the specific controllable we want to remove, only the midi information + for( MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end(); ++iter) { + MIDIControllable* existingBinding = (*iter); + + if( (existingBinding->get_control_channel() & 0xf ) == channel && + existingBinding->get_control_additional() == value && + (existingBinding->get_control_type() & 0xf0 ) == MIDI::controller ) { + + delete existingBinding; + controllables.erase (iter); + } + + } // end for midi controllables + + + // Update the MIDI Controllable based on the the pos param + // Here is where a table lookup for user mappings could go; for now we'll just wing it... + mc->bind_midi( channel, MIDI::controller, value ); + + controllables.insert (mc); + } // end null test +} + +void +GenericMidiControlProtocol::auto_binding_on() +{ + auto_binding = TRUE; +} + +void +GenericMidiControlProtocol::auto_binding_off() +{ + auto_binding = FALSE; +} + XMLNode& GenericMidiControlProtocol::get_state () { @@ -273,46 +346,47 @@ GenericMidiControlProtocol::set_state (const XMLNode& node) _feedback_interval = 10000; } - Controllable* c; - - { - Glib::Mutex::Lock lm (pending_lock); - pending_controllables.clear (); - } - - Glib::Mutex::Lock lm2 (controllables_lock); - - controllables.clear (); - - nlist = node.children(); // "controls" - - if (nlist.empty()) { - return 0; - } - - nlist = nlist.front()->children (); - - for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - - if ((prop = (*niter)->property ("id")) != 0) { - - ID id = prop->value (); - - c = Controllable::by_id (id); + // Are we using the autobinding feature? If so skip this part + if ( !auto_binding ) { + + Controllable* c; + + { + Glib::Mutex::Lock lm (pending_lock); + pending_controllables.clear (); + } + + Glib::Mutex::Lock lm2 (controllables_lock); + controllables.clear (); + nlist = node.children(); // "controls" + + if (nlist.empty()) { + return 0; + } + + nlist = nlist.front()->children (); + + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - if (c) { - MIDIControllable* mc = new MIDIControllable (*_port, *c); - if (mc->set_state (**niter) == 0) { - controllables.insert (mc); - } + if ((prop = (*niter)->property ("id")) != 0) { + + ID id = prop->value (); + c = session->controllable_by_id (id); - } else { - warning << string_compose (_("Generic MIDI control: controllable %1 not found (ignored)"), id) - << endmsg; + if (c) { + MIDIControllable* mc = new MIDIControllable (*_port, *c); + if (mc->set_state (**niter) == 0) { + controllables.insert (mc); + } + + } else { + warning << string_compose (_("Generic MIDI control: controllable %1 not found in session (ignored)"), + id) + << endmsg; + } } } - } - + } // end autobinding check return 0; } diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h index 95aeb77cdb..dfff8810d1 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.h +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h @@ -44,6 +44,7 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol { ARDOUR::microseconds_t last_feedback_time; bool do_feedback; + bool auto_binding; void _send_feedback (); void send_feedback (); @@ -59,6 +60,13 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol { void stop_learning (PBD::Controllable*); void learning_stopped (MIDIControllable*); + + void create_binding (PBD::Controllable*, int, int); + void delete_binding (PBD::Controllable*); + + void auto_binding_on(); + void auto_binding_off(); + }; #endif /* ardour_generic_midi_control_protocol_h */ diff --git a/libs/surfaces/generic_midi/midicontrollable.h b/libs/surfaces/generic_midi/midicontrollable.h index c1ee8c1bb1..976c2d00fb 100644 --- a/libs/surfaces/generic_midi/midicontrollable.h +++ b/libs/surfaces/generic_midi/midicontrollable.h @@ -63,6 +63,10 @@ class MIDIControllable : public PBD::Stateful XMLNode& get_state (void); int set_state (const XMLNode&); + void bind_midi (MIDI::channel_t, MIDI::eventType, MIDI::byte); + MIDI::channel_t get_control_channel () { return control_channel; } + MIDI::eventType get_control_type () { return control_type; } + MIDI::byte get_control_additional () { return control_additional; } private: PBD::Controllable& controllable; MIDI::Port& _port; @@ -86,8 +90,6 @@ class MIDIControllable : public PBD::Stateful void midi_sense_controller (MIDI::Parser &, MIDI::EventTwoBytes *); void midi_sense_program_change (MIDI::Parser &, MIDI::byte); void midi_sense_pitchbend (MIDI::Parser &, MIDI::pitchbend_t); - - void bind_midi (MIDI::channel_t, MIDI::eventType, MIDI::byte); }; #endif // __gm_midicontrollable_h__ -- cgit v1.2.3