mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-13 18:16:35 +01:00
resolve merge with master (?)
This commit is contained in:
commit
08371ae2cf
92 changed files with 29015 additions and 64536 deletions
|
|
@ -722,7 +722,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));
|
||||
|
|
@ -734,9 +734,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.
|
||||
*/
|
||||
|
||||
try {
|
||||
audio_midi_setup.get (true);
|
||||
} catch (...) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (nsm_url) {
|
||||
if ((nsm_url = g_getenv ("NSM_URL")) != 0) {
|
||||
nsm = new NSM_Client;
|
||||
if (!nsm->init (nsm_url)) {
|
||||
nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3");
|
||||
|
|
@ -746,19 +754,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
|
||||
|
|
@ -777,10 +799,11 @@ ARDOUR_UI::starting ()
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
delete nsm;
|
||||
nsm = 0;
|
||||
error << _("NSM: initialization failed") << endmsg;
|
||||
return -1;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
@ -798,16 +821,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);
|
||||
|
|
@ -3226,6 +3239,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 +3305,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 +3325,8 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
|
|||
return;
|
||||
}
|
||||
|
||||
setup_order_hint();
|
||||
|
||||
PBD::ScopedConnection idle_connection;
|
||||
|
||||
if (count > 8) {
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
|
|
|||
|
|
@ -339,7 +339,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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
#include "ardour/stretch.h"
|
||||
|
||||
#ifdef USE_RUBBERBAND
|
||||
#include "rubberband/RubberBandStretcher.h"
|
||||
#include <rubberband/RubberBandStretcher.h>
|
||||
using namespace RubberBand;
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,11 +375,15 @@ 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());
|
||||
|
||||
|
|
|
|||
5783
gtk2_ardour/po/cs.po
5783
gtk2_ardour/po/cs.po
File diff suppressed because it is too large
Load diff
1768
gtk2_ardour/po/de.po
1768
gtk2_ardour/po/de.po
File diff suppressed because it is too large
Load diff
8340
gtk2_ardour/po/el.po
8340
gtk2_ardour/po/el.po
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3812
gtk2_ardour/po/es.po
3812
gtk2_ardour/po/es.po
File diff suppressed because it is too large
Load diff
6376
gtk2_ardour/po/fr.po
6376
gtk2_ardour/po/fr.po
File diff suppressed because it is too large
Load diff
6267
gtk2_ardour/po/it.po
6267
gtk2_ardour/po/it.po
File diff suppressed because it is too large
Load diff
5428
gtk2_ardour/po/nn.po
5428
gtk2_ardour/po/nn.po
File diff suppressed because it is too large
Load diff
7567
gtk2_ardour/po/pl.po
7567
gtk2_ardour/po/pl.po
File diff suppressed because it is too large
Load diff
8151
gtk2_ardour/po/pt.po
8151
gtk2_ardour/po/pt.po
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3241
gtk2_ardour/po/ru.po
3241
gtk2_ardour/po/ru.po
File diff suppressed because it is too large
Load diff
8055
gtk2_ardour/po/sv.po
8055
gtk2_ardour/po/sv.po
File diff suppressed because it is too large
Load diff
4293
gtk2_ardour/po/zh.po
4293
gtk2_ardour/po/zh.po
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@
|
|||
#include "region_selection.h"
|
||||
|
||||
#ifdef USE_RUBBERBAND
|
||||
#include "rubberband/RubberBandStretcher.h"
|
||||
#include <rubberband/RubberBandStretcher.h>
|
||||
using namespace RubberBand;
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
@ -412,18 +414,24 @@ def build(bld):
|
|||
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 += ' GTKMM GNOMECANVASMM GNOMECANVAS FFTW3F'
|
||||
obj.uselib += ' AUDIOUNITS OSX GTKOSX LO '
|
||||
obj.use = [ 'libpbd',
|
||||
'libmidipp',
|
||||
'libtaglib',
|
||||
'ardour',
|
||||
'libardour_cp',
|
||||
'libgtkmm2ext',
|
||||
'libtaglib' ]
|
||||
]
|
||||
|
||||
if bld.env['build_target'] == 'mingw':
|
||||
if bld.env['DEBUG'] == False:
|
||||
obj.linkflags = ['-mwindows']
|
||||
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
obj.uselib += ' TAGLIB'
|
||||
else:
|
||||
obj.use.append('libtaglib')
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
obj.use += ' libappleutility'
|
||||
obj.defines = [
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#include <ostream>
|
||||
#include <fstream>
|
||||
#include <boost/utility.hpp>
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
#include "ardour/types.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@
|
|||
|
||||
#include <string>
|
||||
|
||||
#include "taglib/tag.h"
|
||||
#include "taglib/toolkit/taglib.h"
|
||||
#include "taglib/ogg/xiphcomment.h"
|
||||
#include <taglib/tag.h>
|
||||
#include <taglib/taglib.h>
|
||||
#include <taglib/xiphcomment.h>
|
||||
|
||||
namespace ARDOUR
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,8 +51,6 @@ class MidiControlUI : public AbstractUI<MidiUIRequest>
|
|||
|
||||
static MidiControlUI* instance() { return _instance; }
|
||||
|
||||
static BaseUI::RequestType PortChange;
|
||||
|
||||
void change_midi_ports ();
|
||||
|
||||
protected:
|
||||
|
|
@ -63,7 +61,6 @@ class 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 ();
|
||||
|
|
|
|||
|
|
@ -117,10 +117,11 @@ class 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,
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@
|
|||
|
||||
#include <glibmm/threads.h>
|
||||
|
||||
#include <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,6 +242,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
|||
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 ();
|
||||
|
||||
|
|
@ -502,7 +504,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
|||
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 Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
|||
GraphEdges _current_route_graph;
|
||||
|
||||
uint32_t next_control_id () const;
|
||||
uint32_t _order_hint;
|
||||
bool ignore_route_processor_changes;
|
||||
|
||||
MidiClockTicker* midi_clock;
|
||||
|
|
|
|||
|
|
@ -25,11 +25,11 @@
|
|||
#include <glibmm/threads.h>
|
||||
|
||||
#include <jack/jack.h>
|
||||
#include <ltc.h>
|
||||
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "timecode/time.h"
|
||||
#include "ltc/ltc.h"
|
||||
|
||||
#include "ardour/types.h"
|
||||
#include "midi++/parser.h"
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include <cstring>
|
||||
|
||||
#include "vamp-hostsdk/PluginLoader.h"
|
||||
#include <vamp-hostsdk/PluginLoader.h>
|
||||
|
||||
#include <glibmm/miscutils.h>
|
||||
#include <glibmm/fileutils.h>
|
||||
|
|
|
|||
|
|
@ -1063,8 +1063,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);
|
||||
|
|
|
|||
|
|
@ -24,12 +24,12 @@
|
|||
|
||||
#include "pbd/convert.h"
|
||||
|
||||
#include "taglib/fileref.h"
|
||||
#include "taglib/flac/flacfile.h"
|
||||
#include "taglib/ogg/oggfile.h"
|
||||
#include "taglib/tag.h"
|
||||
#include "taglib/toolkit/taglib.h"
|
||||
#include "taglib/ogg/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)
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
}
|
||||
}
|
||||
|
|
@ -119,23 +101,37 @@ 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;
|
||||
}
|
||||
|
||||
vector<AsyncMIDIPort*> ports;
|
||||
AsyncMIDIPort* p;
|
||||
|
||||
if ((p = dynamic_cast<AsyncMIDIPort*> (_session.midi_input_port()))) {
|
||||
ports.push_back (p);
|
||||
}
|
||||
|
||||
|
||||
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 (!async) {
|
||||
return;
|
||||
}
|
||||
|
||||
int fd;
|
||||
|
||||
if ((fd = async->selectable ()) >= 0) {
|
||||
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*
|
||||
|
||||
|
||||
port_sources.push_back (psrc->gobj());
|
||||
g_source_ref (psrc->gobj());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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"
|
||||
|
|
|
|||
1998
libs/ardour/po/el.po
1998
libs/ardour/po/el.po
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1514
libs/ardour/po/it.po
1514
libs/ardour/po/it.po
File diff suppressed because it is too large
Load diff
1643
libs/ardour/po/nn.po
1643
libs/ardour/po/nn.po
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
|
@ -72,6 +72,9 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
|
|||
|
||||
even = false;
|
||||
|
||||
/* TODO 'swing' probably requires a 2nd iteration:
|
||||
* first quantize notes to the grid, then apply beat shift
|
||||
*/
|
||||
for (Evoral::Sequence<MidiModel::TimeType>::Notes::iterator i = (*s).begin(); i != (*s).end(); ++i) {
|
||||
|
||||
double new_start = round (((*i)->time() - offset) / _start_grid) * _start_grid + offset;
|
||||
|
|
@ -86,6 +89,7 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
|
|||
*/
|
||||
|
||||
new_start = new_start + (2.0/3.0 * _swing * (next_grid - new_start));
|
||||
new_end = new_end + (2.0/3.0 * _swing * (next_grid - new_start));
|
||||
|
||||
} else if (_swing < 0.0 && !even) {
|
||||
|
||||
|
|
@ -96,6 +100,7 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
|
|||
*/
|
||||
|
||||
new_start = new_start - (2.0/3.0 * _swing * (new_start - prev_grid));
|
||||
new_end = new_end - (2.0/3.0 * _swing * (new_start - prev_grid));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,9 @@
|
|||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
#include <rubberband/RubberBandStretcher.h>
|
||||
|
||||
#include "pbd/error.h"
|
||||
#include "rubberband/RubberBandStretcher.h"
|
||||
|
||||
#include "ardour/audioregion.h"
|
||||
#include "ardour/audiosource.h"
|
||||
|
|
|
|||
|
|
@ -257,6 +257,7 @@ Session::Session (AudioEngine &eng,
|
|||
, _step_editors (0)
|
||||
, _suspend_timecode_transmission (0)
|
||||
, _speakers (new Speakers)
|
||||
, _order_hint (0)
|
||||
, ignore_route_processor_changes (false)
|
||||
, _midi_ports (0)
|
||||
, _mmc (0)
|
||||
|
|
@ -558,10 +559,10 @@ Session::setup_ltc ()
|
|||
{
|
||||
XMLNode* child = 0;
|
||||
|
||||
_ltc_input.reset (new IO (*this, _("LTC In"), IO::Input));
|
||||
_ltc_output.reset (new IO (*this, _("LTC Out"), IO::Output));
|
||||
_ltc_input.reset (new IO (*this, X_("LTC In"), IO::Input));
|
||||
_ltc_output.reset (new IO (*this, X_("LTC Out"), IO::Output));
|
||||
|
||||
if (state_tree && (child = find_named_node (*state_tree->root(), "LTC-In")) != 0) {
|
||||
if (state_tree && (child = find_named_node (*state_tree->root(), X_("LTC In"))) != 0) {
|
||||
_ltc_input->set_state (*(child->children().front()), Stateful::loading_state_version);
|
||||
} else {
|
||||
{
|
||||
|
|
@ -571,7 +572,7 @@ Session::setup_ltc ()
|
|||
reconnect_ltc_input ();
|
||||
}
|
||||
|
||||
if (state_tree && (child = find_named_node (*state_tree->root(), "LTC-Out")) != 0) {
|
||||
if (state_tree && (child = find_named_node (*state_tree->root(), X_("LTC Out"))) != 0) {
|
||||
_ltc_output->set_state (*(child->children().front()), Stateful::loading_state_version);
|
||||
} else {
|
||||
{
|
||||
|
|
@ -585,15 +586,15 @@ Session::setup_ltc ()
|
|||
* IO style of NAME/TYPE-{in,out}N
|
||||
*/
|
||||
|
||||
_ltc_input->nth (0)->set_name (_("LTC-in"));
|
||||
_ltc_output->nth (0)->set_name (_("LTC-out"));
|
||||
_ltc_input->nth (0)->set_name (X_("LTC-in"));
|
||||
_ltc_output->nth (0)->set_name (X_("LTC-out"));
|
||||
}
|
||||
|
||||
void
|
||||
Session::setup_click ()
|
||||
{
|
||||
_clicking = false;
|
||||
_click_io.reset (new ClickIO (*this, "click"));
|
||||
_click_io.reset (new ClickIO (*this, X_("Click")));
|
||||
_click_gain.reset (new Amp (*this));
|
||||
_click_gain->activate ();
|
||||
if (state_tree) {
|
||||
|
|
@ -2335,6 +2336,11 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool
|
|||
ChanCount existing_outputs;
|
||||
uint32_t order = next_control_id();
|
||||
|
||||
if (_order_hint != 0) {
|
||||
order = _order_hint;
|
||||
_order_hint = 0;
|
||||
}
|
||||
|
||||
count_existing_track_channels (existing_inputs, existing_outputs);
|
||||
|
||||
{
|
||||
|
|
|
|||
|
|
@ -164,12 +164,12 @@ Session::timecode_duration (framecnt_t when, Timecode::Time& timecode) const
|
|||
}
|
||||
|
||||
void
|
||||
Session::timecode_duration_string (char* buf, framepos_t when) const
|
||||
Session::timecode_duration_string (char* buf, size_t len, framepos_t when) const
|
||||
{
|
||||
Timecode::Time timecode;
|
||||
|
||||
timecode_duration (when, timecode);
|
||||
snprintf (buf, sizeof (buf), "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
|
||||
snprintf (buf, len, "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32, timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -298,7 +298,7 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
|||
|
||||
char label[64];
|
||||
/* some VST plugins expect this buffer to be zero-filled */
|
||||
memset (label, sizeof (label), 0);
|
||||
memset (label, 0, sizeof (label));
|
||||
|
||||
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -339,9 +339,14 @@ def build(bld):
|
|||
obj.uselib = ['GLIBMM','GTHREAD','AUBIO','SIGCPP','XML','UUID',
|
||||
'SNDFILE','SAMPLERATE','LRDF','AUDIOUNITS',
|
||||
'OSX','BOOST','CURL','DL']
|
||||
obj.use = ['libpbd','libmidipp','libevoral','libvamphost',
|
||||
'libvampplugin','libtaglib','librubberband',
|
||||
obj.use = ['libpbd','libmidipp','libevoral','libvampplugin',
|
||||
'libaudiographer','libltc','libtimecode']
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
obj.uselib.extend(['RUBBERBAND', 'TAGLIB', 'LIBLTC', 'VAMPSDK',
|
||||
'VAMPHOSTSDK'])
|
||||
else:
|
||||
obj.use.extend(['libltc', 'librubberband', 'libtaglib', 'libvamphost'])
|
||||
|
||||
obj.vnum = LIBARDOUR_LIB_VERSION
|
||||
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
|
||||
obj.defines = [
|
||||
|
|
@ -406,9 +411,13 @@ def build(bld):
|
|||
'test/test_common.cc', 'test/dummy_lxvst.cc', 'test/audio_region_test.cc', 'test/test_util.cc']
|
||||
testcommon.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
|
||||
'SAMPLERATE','XML','LRDF','COREAUDIO']
|
||||
testcommon.use = ['libpbd','libmidipp','libevoral','libvamphost',
|
||||
'libvampplugin','libtaglib','librubberband',
|
||||
'libaudiographer','libltc','ardour']
|
||||
testcommon.use = ['libpbd','libmidipp','libevoral',
|
||||
'libvampplugin','libaudiographer','ardour']
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
testcommon.uselib.extend(['RUBBERBAND', 'TAGLIB', 'LIBLTC', 'VAMPSDK',
|
||||
'VAMPHOSTSDK'])
|
||||
else:
|
||||
testcommon.use.extend(['libltc', 'librubberband', 'libtaglib', 'libvamphost'])
|
||||
testcommon.defines = [
|
||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||
|
|
@ -546,9 +555,15 @@ def create_ardour_test_program(bld, includes, name, target, sources):
|
|||
testobj.source = sources
|
||||
testobj.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
|
||||
'SAMPLERATE','XML','LRDF','COREAUDIO']
|
||||
testobj.use = ['libpbd','libmidipp','libevoral','libvamphost',
|
||||
'libvampplugin','libtaglib','librubberband',
|
||||
'libaudiographer','libltc','ardour','testcommon']
|
||||
testobj.use = ['libpbd','libmidipp','libevoral','libvampplugin',
|
||||
'libaudiographer','ardour','testcommon']
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
testobj.uselib.extend(['RUBBERBAND', 'TAGLIB', 'LIBLTC', 'VAMPSDK',
|
||||
'VAMPHOSTSDK'])
|
||||
else:
|
||||
testobj.use.extend(['libltc', 'librubberband', 'libtaglib',
|
||||
'libvamphost'])
|
||||
|
||||
testobj.name = name
|
||||
testobj.target = target
|
||||
# not sure about install path
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@ class SilenceTrimmer
|
|||
throw Exception(*this, "process() after reacing end of input");
|
||||
}
|
||||
in_end = c.has_flag (ProcessContext<T>::EndOfInput);
|
||||
|
||||
// If adding to end, delay end of input propagation
|
||||
if (add_to_end) { c.remove_flag(ProcessContext<T>::EndOfInput); }
|
||||
|
||||
framecnt_t frame_index = 0;
|
||||
|
||||
|
|
@ -208,7 +211,8 @@ class SilenceTrimmer
|
|||
|
||||
// Finally, if in end, add silence to end
|
||||
if (in_end && add_to_end) {
|
||||
|
||||
c.set_flag (ProcessContext<T>::EndOfInput);
|
||||
|
||||
if (debug_level (DebugVerbose)) {
|
||||
debug_stream () << DebugUtils::demangled_name (*this) <<
|
||||
" adding to end" << std::endl;
|
||||
|
|
|
|||
|
|
@ -509,6 +509,7 @@ JACKAudioBackend::setup_jack_startup_command (bool for_latency_measurement)
|
|||
/* error, somehow - we will still try to start JACK
|
||||
* automatically but it will be without our preferred options
|
||||
*/
|
||||
std::cerr << "get_jack_command_line_string () failed: using default settings." << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ class JACKAudioBackend : public AudioBackend {
|
|||
|
||||
int set_port_name (PortHandle, const std::string&);
|
||||
std::string get_port_name (PortHandle) const;
|
||||
PortHandle* get_port_by_name (const std::string&) const;
|
||||
PortHandle get_port_by_name (const std::string&) const;
|
||||
|
||||
int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector<std::string>&) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -116,11 +116,11 @@ JACKAudioBackend::get_port_name (PortHandle port) const
|
|||
return jack_port_name ((jack_port_t*) port);
|
||||
}
|
||||
|
||||
PortEngine::PortHandle*
|
||||
PortEngine::PortHandle
|
||||
JACKAudioBackend:: get_port_by_name (const std::string& name) const
|
||||
{
|
||||
GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
|
||||
return (PortHandle*) jack_port_by_name (_priv_jack, name.c_str());
|
||||
return (PortHandle) jack_port_by_name (_priv_jack, name.c_str());
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -756,6 +756,9 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
|
|||
|
||||
string command_line_driver_name;
|
||||
|
||||
string command_line_input_device_name;
|
||||
string command_line_output_device_name;
|
||||
|
||||
if (!get_jack_command_line_audio_driver_name (options.driver, command_line_driver_name)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -763,60 +766,71 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
|
|||
args.push_back ("-d");
|
||||
args.push_back (command_line_driver_name);
|
||||
|
||||
if (options.output_device.empty() && options.input_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string command_line_input_device_name;
|
||||
string command_line_output_device_name;
|
||||
|
||||
if (!get_jack_command_line_audio_device_name (options.driver,
|
||||
options.input_device, command_line_input_device_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!get_jack_command_line_audio_device_name (options.driver,
|
||||
options.output_device, command_line_output_device_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options.input_device.empty()) {
|
||||
// playback only
|
||||
if (options.output_device.empty()) {
|
||||
if (options.driver != dummy_driver_name) {
|
||||
if (options.output_device.empty() && options.input_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
args.push_back ("-P");
|
||||
} else if (options.output_device.empty()) {
|
||||
// capture only
|
||||
|
||||
|
||||
if (!get_jack_command_line_audio_device_name (options.driver,
|
||||
options.input_device, command_line_input_device_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!get_jack_command_line_audio_device_name (options.driver,
|
||||
options.output_device, command_line_output_device_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options.input_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
args.push_back ("-C");
|
||||
} else if (options.input_device != options.output_device) {
|
||||
// capture and playback on two devices if supported
|
||||
if (get_jack_audio_driver_supports_two_devices (options.driver)) {
|
||||
args.push_back ("-C");
|
||||
args.push_back (command_line_input_device_name);
|
||||
// playback only
|
||||
if (options.output_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
args.push_back ("-P");
|
||||
args.push_back (command_line_output_device_name);
|
||||
} else {
|
||||
return false;
|
||||
} else if (options.output_device.empty()) {
|
||||
// capture only
|
||||
if (options.input_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
args.push_back ("-C");
|
||||
} else if (options.input_device != options.output_device) {
|
||||
// capture and playback on two devices if supported
|
||||
if (get_jack_audio_driver_supports_two_devices (options.driver)) {
|
||||
args.push_back ("-C");
|
||||
args.push_back (command_line_input_device_name);
|
||||
args.push_back ("-P");
|
||||
args.push_back (command_line_output_device_name);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.input_channels) {
|
||||
args.push_back ("-i");
|
||||
args.push_back (to_string (options.input_channels, std::dec));
|
||||
}
|
||||
if (options.input_channels) {
|
||||
args.push_back ("-i");
|
||||
args.push_back (to_string (options.input_channels, std::dec));
|
||||
}
|
||||
|
||||
if (options.output_channels) {
|
||||
args.push_back ("-o");
|
||||
args.push_back (to_string (options.output_channels, std::dec));
|
||||
}
|
||||
if (options.output_channels) {
|
||||
args.push_back ("-o");
|
||||
args.push_back (to_string (options.output_channels, std::dec));
|
||||
}
|
||||
|
||||
if (get_jack_audio_driver_supports_setting_period_count (options.driver)) {
|
||||
args.push_back ("-n");
|
||||
args.push_back (to_string (options.num_periods, std::dec));
|
||||
if (get_jack_audio_driver_supports_setting_period_count (options.driver)) {
|
||||
args.push_back ("-n");
|
||||
args.push_back (to_string (options.num_periods, std::dec));
|
||||
}
|
||||
} else {
|
||||
// jackd dummy backend
|
||||
if (options.input_channels) {
|
||||
args.push_back ("-C");
|
||||
args.push_back (to_string (options.input_channels, std::dec));
|
||||
}
|
||||
|
||||
if (options.output_channels) {
|
||||
args.push_back ("-P");
|
||||
args.push_back (to_string (options.output_channels, std::dec));
|
||||
}
|
||||
}
|
||||
|
||||
args.push_back ("-r");
|
||||
|
|
@ -836,9 +850,11 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
|
|||
}
|
||||
}
|
||||
|
||||
if (options.input_device == options.output_device && options.input_device != default_device_name) {
|
||||
args.push_back ("-d");
|
||||
args.push_back (command_line_input_device_name);
|
||||
if (options.driver != dummy_driver_name) {
|
||||
if (options.input_device == options.output_device && options.input_device != default_device_name) {
|
||||
args.push_back ("-d");
|
||||
args.push_back (command_line_input_device_name);
|
||||
}
|
||||
}
|
||||
|
||||
if (options.driver == alsa_driver_name) {
|
||||
|
|
|
|||
|
|
@ -637,7 +637,7 @@ smf_event_is_textual(const smf_event_t *event)
|
|||
if (event->midi_buffer_length < 4)
|
||||
return (0);
|
||||
|
||||
if (event->midi_buffer[3] < 1 && event->midi_buffer[3] > 9)
|
||||
if (event->midi_buffer[3] < 1 || event->midi_buffer[3] > 9)
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2013-06-13 22:33+0200\n"
|
||||
"Last-Translator: Pavel Fric <pavelfric@seznam.cz>\n"
|
||||
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
|
||||
|
|
@ -33,7 +33,7 @@ msgstr "Tlačítko nemůže sledovat stav neexistujícího ovladatelného cíle\
|
|||
msgid "Log"
|
||||
msgstr "Zápis"
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
|
@ -43,11 +43,11 @@ msgstr ""
|
|||
"\n"
|
||||
"Kurzbefehl: "
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr "Stisknout pro ukončení"
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr "Bohužel to nelze udělat, %1"
|
||||
|
||||
|
|
@ -75,11 +75,11 @@ msgstr "Alt"
|
|||
msgid "Meta"
|
||||
msgstr "Meta"
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr "Neznámý"
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
"Soubor s přiřazením kláves \"%2\"se nepodařilo najít, nebo obsahuje chyby."
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2013-02-05 19:50+0100\n"
|
||||
"Last-Translator: Edgar Aichinger <edogawa@aon.at>\n"
|
||||
"Language-Team: German <ardour-dev@lists.ardour.org>\n"
|
||||
|
|
@ -35,7 +35,7 @@ msgstr ""
|
|||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
|
@ -45,11 +45,11 @@ msgstr ""
|
|||
"\n"
|
||||
"Kurzbefehl: "
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr "Zum Beenden drücken"
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr "Leider kann ich das nicht tun, %1"
|
||||
|
||||
|
|
@ -77,11 +77,11 @@ msgstr "Alt"
|
|||
msgid "Meta"
|
||||
msgstr "Meta"
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
"Die Tastenkürzel-Datei \"%1\" konnte nicht gefunden werden oder enthält "
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: 0.99beta23\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2005-01-11\n"
|
||||
"Last-Translator: Muadibas\n"
|
||||
"Language-Team: Hellenic(Greek) <LL@li.org>\n"
|
||||
|
|
@ -21,9 +21,8 @@ msgid "Unknown action name: %1"
|
|||
msgstr ""
|
||||
|
||||
#: binding_proxy.cc:84
|
||||
#, fuzzy
|
||||
msgid "operate controller now"
|
||||
msgstr "λειτουργία ελεγκτή MIDI τώρα"
|
||||
msgstr ""
|
||||
|
||||
#: bindable_button.cc:48
|
||||
msgid "button cannot watch state of non-existing Controllable\n"
|
||||
|
|
@ -33,18 +32,18 @@ msgstr ""
|
|||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Shortcut: "
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -72,11 +71,11 @@ msgstr ""
|
|||
msgid "Meta"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -91,33 +90,3 @@ msgstr ""
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Κλείσιμο"
|
||||
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "OK"
|
||||
|
||||
#~ msgid "Location:"
|
||||
#~ msgstr "Τοποθεσία:"
|
||||
|
||||
#~ msgid "Browse ..."
|
||||
#~ msgstr "Αναζήτηση ..."
|
||||
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Ακύρωση"
|
||||
|
||||
#~ msgid "New folder"
|
||||
#~ msgstr "Νέος φάκελος"
|
||||
|
||||
#~ msgid "Add to favorites"
|
||||
#~ msgstr "Πρόσθεση στα 'Αγαπημένα'"
|
||||
|
||||
#~ msgid "Remove from favorites"
|
||||
#~ msgstr "Απαλοιφή από τα 'Αγαπημένα'"
|
||||
|
||||
#~ msgid "Show Hidden"
|
||||
#~ msgstr "Ανάδειξη κρυμμένων"
|
||||
|
||||
#~ msgid "Hide browser"
|
||||
#~ msgstr "Απόκρυψη browser"
|
||||
|
||||
#~ msgid "Rescan"
|
||||
#~ msgstr "Ανανέωση"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: gtkmm2ext\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2013-02-09 16:21+0100\n"
|
||||
"Last-Translator: Pablo Fernández <pablo.fbus@gmail.com>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
|
|
@ -31,7 +31,7 @@ msgstr ""
|
|||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
|
|
@ -41,11 +41,11 @@ msgstr ""
|
|||
"\n"
|
||||
"Atajo: "
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr "Pulse para salir"
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr "Lo siento %1, no puedo hacer eso"
|
||||
|
||||
|
|
@ -73,11 +73,11 @@ msgstr ""
|
|||
msgid "Meta"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
"El archivo de combinaciones de teclado no se encontró en \"%2\" o contiene "
|
||||
|
|
@ -94,36 +94,3 @@ msgstr "Pulsa para llevarlo a la ventana principal"
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#~ msgid "Error"
|
||||
#~ msgstr "Error"
|
||||
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "ACEPTAR"
|
||||
|
||||
#~ msgid "Location:"
|
||||
#~ msgstr "Localización:"
|
||||
|
||||
#~ msgid "Browse ..."
|
||||
#~ msgstr "Seleccionar ..."
|
||||
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Cancelar"
|
||||
|
||||
#~ msgid "New folder"
|
||||
#~ msgstr "Nueva carpeta"
|
||||
|
||||
#~ msgid "Add to favorites"
|
||||
#~ msgstr "Agregar a favoritos"
|
||||
|
||||
#~ msgid "Remove from favorites"
|
||||
#~ msgstr "Quitar de favoritos"
|
||||
|
||||
#~ msgid "Show Hidden"
|
||||
#~ msgstr "Mostrar ocultos"
|
||||
|
||||
#~ msgid "Hide browser"
|
||||
#~ msgstr "Ocultar explorador"
|
||||
|
||||
#~ msgid "Rescan"
|
||||
#~ msgstr "Buscar de nuevo"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2011-06-13 00:30+0200\n"
|
||||
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
|
||||
"Language: en_US\n"
|
||||
|
|
@ -31,18 +31,18 @@ msgstr "Le bouton ne peut pas surveiller l'état d'un Controllable inexistant\n"
|
|||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Shortcut: "
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr "Appuyer pour quitter"
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -55,9 +55,8 @@ msgid "Control"
|
|||
msgstr "Ctrl"
|
||||
|
||||
#: keyboard.cc:70 keyboard.cc:73 keyboard.cc:87 keyboard.cc:90
|
||||
#, fuzzy
|
||||
msgid "Key|Shift"
|
||||
msgstr "Maj"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:71
|
||||
msgid "Option"
|
||||
|
|
@ -71,14 +70,13 @@ msgstr "Alt"
|
|||
msgid "Meta"
|
||||
msgstr "Meta"
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr "Inconnu"
|
||||
|
||||
#: keyboard.cc:542
|
||||
#, fuzzy
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr "Raccourcis clavier pour %1 introuvable dans \"%1\" ou corrompu."
|
||||
msgstr ""
|
||||
|
||||
#: tearoff.cc:57
|
||||
msgid "Click to tear this into its own window"
|
||||
|
|
@ -91,6 +89,3 @@ msgstr "Cliquez pour remettre dans la fenêtre principale"
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#~ msgid "Mod1"
|
||||
#~ msgstr "Mod1"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: libgtkmm2ext\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2008-04-10 10:54+0100\n"
|
||||
"Last-Translator: Piotr Zaryk <pzaryk@gmail.com>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
|
|
@ -32,18 +32,18 @@ msgstr ""
|
|||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Shortcut: "
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr "Wciśnij by zakończyć"
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -71,11 +71,11 @@ msgstr ""
|
|||
msgid "Meta"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -90,18 +90,3 @@ msgstr ""
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
|
||||
#~ msgid "Error"
|
||||
#~ msgstr "Błąd"
|
||||
|
||||
#~ msgid "+"
|
||||
#~ msgstr "+"
|
||||
|
||||
#~ msgid "-"
|
||||
#~ msgstr "-"
|
||||
|
||||
#~ msgid "Paths"
|
||||
#~ msgstr "Położenia"
|
||||
|
||||
#~ msgid "Path Chooser"
|
||||
#~ msgstr "Wybór położenia"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: gtkmm2ext\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-15 15:09-0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2004-05-17 20:36+0200\n"
|
||||
"Last-Translator: Chris Ross <chris.ross@tebibyte.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
|
|
@ -21,9 +21,8 @@ msgid "Unknown action name: %1"
|
|||
msgstr ""
|
||||
|
||||
#: binding_proxy.cc:84
|
||||
#, fuzzy
|
||||
msgid "operate controller now"
|
||||
msgstr "Operar controladora de MIDI agora"
|
||||
msgstr ""
|
||||
|
||||
#: bindable_button.cc:48
|
||||
msgid "button cannot watch state of non-existing Controllable\n"
|
||||
|
|
@ -33,18 +32,18 @@ msgstr ""
|
|||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:361
|
||||
#: gtk_ui.cc:363
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Shortcut: "
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:633
|
||||
#: gtk_ui.cc:635
|
||||
msgid "Press To Exit"
|
||||
msgstr ""
|
||||
|
||||
#: gtk_ui.cc:669
|
||||
#: gtk_ui.cc:671
|
||||
msgid "I'm sorry %1, I can't do that"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -72,11 +71,11 @@ msgstr ""
|
|||
msgid "Meta"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:139 keyboard.cc:531
|
||||
#: keyboard.cc:139 keyboard.cc:535
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: keyboard.cc:542
|
||||
#: keyboard.cc:546
|
||||
msgid "key bindings file not found at \"%2\" or contains errors."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -91,33 +90,3 @@ msgstr ""
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "OK"
|
||||
|
||||
#~ msgid "Location:"
|
||||
#~ msgstr "localização:"
|
||||
|
||||
#~ msgid "Browse ..."
|
||||
#~ msgstr "Localizar ..."
|
||||
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Cancelar"
|
||||
|
||||
#~ msgid "New folder"
|
||||
#~ msgstr "Novo diretório"
|
||||
|
||||
#~ msgid "Add to favorites"
|
||||
#~ msgstr "Adicionar a favoritos"
|
||||
|
||||
#~ msgid "Remove from favorites"
|
||||
#~ msgstr "Remover de favoritos"
|
||||
|
||||
#~ msgid "Show Hidden"
|
||||
#~ msgstr "Mostrar ocultos"
|
||||
|
||||
#~ msgid "Hide browser"
|
||||
#~ msgstr "Ocultar explorador"
|
||||
|
||||
#~ msgid "Rescan"
|
||||
#~ msgstr "Buscar de novo"
|
||||
|
|
|
|||
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: gtkmm2ext\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-10-15 21:33+0400\n"
|
||||
"POT-Creation-Date: 2013-11-05 11:11-0500\n"
|
||||
"PO-Revision-Date: 2013-10-15 21:54+0300\n"
|
||||
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
|
||||
"Language-Team: русский <>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -96,42 +97,3 @@ msgstr "Щелкните, чтобы превратить это плавающ
|
|||
#: textviewer.cc:34
|
||||
msgid "Close"
|
||||
msgstr "Закрыть"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "\n"
|
||||
#~ "Key: "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "\n"
|
||||
#~ "Клавиша: "
|
||||
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "ОК"
|
||||
|
||||
#~ msgid "Location:"
|
||||
#~ msgstr "Путь:"
|
||||
|
||||
#~ msgid "Browse ..."
|
||||
#~ msgstr "Обзор ..."
|
||||
|
||||
#~ msgid "Cancel"
|
||||
#~ msgstr "Отмена"
|
||||
|
||||
#~ msgid "New folder"
|
||||
#~ msgstr "Новая папка"
|
||||
|
||||
#~ msgid "Add to favorites"
|
||||
#~ msgstr "Добавить в избранное"
|
||||
|
||||
#~ msgid "Remove from favorites"
|
||||
#~ msgstr "Исключить из избранного"
|
||||
|
||||
#~ msgid "Show Hidden"
|
||||
#~ msgstr "Показывать скрытые файлы"
|
||||
|
||||
#~ msgid "Hide browser"
|
||||
#~ msgstr "Скрыть область обзора"
|
||||
|
||||
#~ msgid "Rescan"
|
||||
#~ msgstr "Обновить"
|
||||
|
|
|
|||
|
|
@ -29,10 +29,15 @@ def options(opt):
|
|||
autowaf.set_options(opt)
|
||||
|
||||
def configure(conf):
|
||||
conf.load('compiler_c')
|
||||
autowaf.configure(conf)
|
||||
if conf.is_defined('USE_EXTERNAL_LIBS'):
|
||||
autowaf.check_pkg(conf, 'ltc', uselib_store='LIBLTC', atleast_version=LIBLTC_LIB_VERSION, mandatory=True)
|
||||
else:
|
||||
conf.load('compiler_c')
|
||||
autowaf.configure(conf)
|
||||
|
||||
def build(bld):
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
return
|
||||
obj = bld(features = 'c cshlib')
|
||||
obj.source = '''
|
||||
ltc.c
|
||||
|
|
@ -41,7 +46,7 @@ def build(bld):
|
|||
decoder.c
|
||||
'''
|
||||
|
||||
obj.export_includes = ['.']
|
||||
obj.export_includes = ['./ltc']
|
||||
obj.includes = ['.']
|
||||
obj.name = 'libltc'
|
||||
obj.target = 'ltc'
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
/* LV2 */
|
||||
#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/atom/util.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/midi/midi.h"
|
||||
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
static void * synth_alloc (void);
|
||||
static void synth_init (void *, double rate);
|
||||
static void synth_free (void *);
|
||||
static void synth_parse_midi (void *, uint8_t *data, size_t size);
|
||||
static void synth_parse_midi (void *, const uint8_t *data, const size_t size);
|
||||
static uint32_t synth_sound (void *, uint32_t written, uint32_t nframes, float **out);
|
||||
|
||||
#include "rsynth.c"
|
||||
|
|
@ -66,6 +66,9 @@ instantiate(const LV2_Descriptor* descriptor,
|
|||
const char* bundle_path,
|
||||
const LV2_Feature* const* features)
|
||||
{
|
||||
(void) descriptor; /* unused variable */
|
||||
(void) bundle_path; /* unused variable */
|
||||
|
||||
if (rate < 8000) {
|
||||
fprintf(stderr, "RSynth.lv2 error: unsupported sample-rate (must be > 8k)\n");
|
||||
return NULL;
|
||||
|
|
@ -131,18 +134,22 @@ run(LV2_Handle handle, uint32_t n_samples)
|
|||
|
||||
/* Process incoming MIDI events */
|
||||
if (self->midiin) {
|
||||
LV2_Atom_Event* ev = lv2_atom_sequence_begin(&(self->midiin)->body);
|
||||
while(!lv2_atom_sequence_is_end(&(self->midiin)->body, (self->midiin)->atom.size, ev)) {
|
||||
LV2_Atom_Event const* ev = (LV2_Atom_Event const*)((&(self->midiin)->body) + 1); // lv2_atom_sequence_begin
|
||||
while( // !lv2_atom_sequence_is_end
|
||||
(const uint8_t*)ev < ((const uint8_t*) &(self->midiin)->body + (self->midiin)->atom.size)
|
||||
)
|
||||
{
|
||||
if (ev->body.type == self->midi_MidiEvent) {
|
||||
if (written + BUFFER_SIZE_SAMPLES < ev->time.frames
|
||||
&& ev->time.frames < n_samples) {
|
||||
/* first synthesize sound up until the message timestamp */
|
||||
written = synth_sound(self->synth, written, ev->time.frames, audio);
|
||||
}
|
||||
/* send midi message to synth */
|
||||
synth_parse_midi(self->synth, (uint8_t*)(ev+1), ev->body.size);
|
||||
if (written + BUFFER_SIZE_SAMPLES < ev->time.frames
|
||||
&& ev->time.frames < n_samples) {
|
||||
/* first synthesize sound up until the message timestamp */
|
||||
written = synth_sound(self->synth, written, ev->time.frames, audio);
|
||||
}
|
||||
/* send midi message to synth */
|
||||
synth_parse_midi(self->synth, (const uint8_t*)(ev+1), ev->body.size);
|
||||
}
|
||||
ev = lv2_atom_sequence_next(ev);
|
||||
ev = (LV2_Atom_Event const*) // lv2_atom_sequence_next()
|
||||
((const uint8_t*)ev + sizeof(LV2_Atom_Event) + ((ev->body.size + 7) & ~7));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -161,6 +168,7 @@ cleanup(LV2_Handle handle)
|
|||
static const void*
|
||||
extension_data(const char* uri)
|
||||
{
|
||||
(void) uri; /* unused variable */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -177,9 +185,9 @@ static const LV2_Descriptor descriptor = {
|
|||
|
||||
LV2_SYMBOL_EXPORT
|
||||
const LV2_Descriptor*
|
||||
lv2_descriptor(uint32_t index)
|
||||
lv2_descriptor(uint32_t idx)
|
||||
{
|
||||
switch (index) {
|
||||
switch (idx) {
|
||||
case 0:
|
||||
return &descriptor;
|
||||
default:
|
||||
|
|
@ -187,4 +195,4 @@ lv2_descriptor(uint32_t index)
|
|||
}
|
||||
}
|
||||
|
||||
/* vi:set ts=8 sts=2 sw=2: */
|
||||
/* vi:set ts=8 sts=2 sw=2 et: */
|
||||
|
|
|
|||
|
|
@ -175,9 +175,10 @@ static void synthesize_sineP (RSSynthChannel* sc,
|
|||
const uint8_t note, const float vol, const float fq,
|
||||
const size_t n_samples, float* left, float* right) {
|
||||
|
||||
size_t i;
|
||||
float phase = sc->phase[note];
|
||||
|
||||
for (size_t i=0; i < n_samples; ++i) {
|
||||
for (i=0; i < n_samples; ++i) {
|
||||
float env = adsr_env(sc, note);
|
||||
if (sc->adsr_cnt[note] == 0) break;
|
||||
const float amp = vol * env;
|
||||
|
|
@ -188,7 +189,7 @@ static void synthesize_sineP (RSSynthChannel* sc,
|
|||
left[i] += .080 * amp * sinf(2.0 * M_PI * phase * 4.0);
|
||||
//left[i] -= .007 * amp * sinf(2.0 * M_PI * phase * 5.0);
|
||||
//left[i] += .010 * amp * sinf(2.0 * M_PI * phase * 6.0);
|
||||
//left[i] += .020 * amp * sinf(2.0 * M_PI * phase * 7.0);
|
||||
left[i] += .020 * amp * sinf(2.0 * M_PI * phase * 7.0);
|
||||
phase += fq;
|
||||
right[i] += amp * sinf(2.0 * M_PI * phase);
|
||||
right[i] += .300 * amp * sinf(2.0 * M_PI * phase * 2.0);
|
||||
|
|
@ -196,13 +197,13 @@ static void synthesize_sineP (RSSynthChannel* sc,
|
|||
right[i] -= .080 * amp * sinf(2.0 * M_PI * phase * 4.0);
|
||||
//right[i] += .007 * amp * sinf(2.0 * M_PI * phase * 5.0);
|
||||
//right[i] += .010 * amp * sinf(2.0 * M_PI * phase * 6.0);
|
||||
//right[i] -= .020 * amp * sinf(2.0 * M_PI * phase * 7.0);
|
||||
right[i] -= .020 * amp * sinf(2.0 * M_PI * phase * 7.0);
|
||||
if (phase > 1.0) phase -= 2.0;
|
||||
}
|
||||
sc->phase[note] = phase;
|
||||
}
|
||||
|
||||
static const ADSRcfg piano_adsr = {{ 5, 1300, 100}, { 1.0, 0.0}, {0,0,0}};
|
||||
static const ADSRcfg piano_adsr = {{ 5, 800, 100}, { 1.0, 0.0}, {0,0,0}};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
@ -239,8 +240,8 @@ static void process_key (void *synth,
|
|||
// note off
|
||||
if (sc->adsr_cnt[note] <= sc->adsr.off[1]) {
|
||||
if (sc->adsr_cnt[note] != sc->adsr.off[1]) {
|
||||
// x-fade to release
|
||||
sc->adsr_amp[note] = adsr_env(sc, note);
|
||||
// x-fade to release
|
||||
sc->adsr_amp[note] = adsr_env(sc, note);
|
||||
}
|
||||
sc->adsr_cnt[note] = sc->adsr.off[1] + 1;
|
||||
}
|
||||
|
|
@ -272,9 +273,11 @@ static void synth_fragment (void *synth, const size_t n_samples, float *left, fl
|
|||
memset (left, 0, n_samples * sizeof(float));
|
||||
memset (right, 0, n_samples * sizeof(float));
|
||||
uint8_t keycomp = 0;
|
||||
int c,k;
|
||||
size_t i;
|
||||
|
||||
for (int c=0; c < 16; ++c) {
|
||||
for (int k=0; k < 128; ++k) {
|
||||
for (c=0; c < 16; ++c) {
|
||||
for (k=0; k < 128; ++k) {
|
||||
if (rs->sc[c].miditable[k] == 0) continue;
|
||||
process_key(synth, c, k, n_samples, left, right);
|
||||
}
|
||||
|
|
@ -286,7 +289,7 @@ static void synth_fragment (void *synth, const size_t n_samples, float *left, fl
|
|||
if (kctgt < .5) kctgt = .5;
|
||||
if (kctgt > 1.0) kctgt = 1.0;
|
||||
const float _w = rs->kcfilt;
|
||||
for (unsigned int i=0; i < n_samples; ++i) {
|
||||
for (i=0; i < n_samples; ++i) {
|
||||
rs->kcgain += _w * (kctgt - rs->kcgain);
|
||||
left[i] *= rs->kcgain;
|
||||
right[i] *= rs->kcgain;
|
||||
|
|
@ -296,7 +299,8 @@ static void synth_fragment (void *synth, const size_t n_samples, float *left, fl
|
|||
}
|
||||
|
||||
static void synth_reset_channel(RSSynthChannel* sc) {
|
||||
for (int k=0; k < 128; ++k) {
|
||||
int k;
|
||||
for (k=0; k < 128; ++k) {
|
||||
sc->adsr_cnt[k] = 0;
|
||||
sc->adsr_amp[k] = 0;
|
||||
sc->phase[k] = -10;
|
||||
|
|
@ -307,7 +311,8 @@ static void synth_reset_channel(RSSynthChannel* sc) {
|
|||
|
||||
static void synth_reset(void *synth) {
|
||||
RSSynthesizer* rs = (RSSynthesizer*)synth;
|
||||
for (int c=0; c < 16; ++c) {
|
||||
int c;
|
||||
for (c=0; c < 16; ++c) {
|
||||
synth_reset_channel(&(rs->sc[c]));
|
||||
}
|
||||
rs->kcgain = 0;
|
||||
|
|
@ -332,31 +337,31 @@ static void synth_process_midi_event(void *synth, struct rmidi_event_t *ev) {
|
|||
switch(ev->type) {
|
||||
case NOTE_ON:
|
||||
if (rs->sc[ev->channel].miditable[ev->d.tone.note] <= 0)
|
||||
rs->sc[ev->channel].miditable[ev->d.tone.note] = ev->d.tone.velocity;
|
||||
rs->sc[ev->channel].miditable[ev->d.tone.note] = ev->d.tone.velocity;
|
||||
break;
|
||||
case NOTE_OFF:
|
||||
if (rs->sc[ev->channel].miditable[ev->d.tone.note] > 0)
|
||||
rs->sc[ev->channel].miditable[ev->d.tone.note] *= -1.0;
|
||||
rs->sc[ev->channel].miditable[ev->d.tone.note] *= -1.0;
|
||||
break;
|
||||
case PROGRAM_CHANGE:
|
||||
break;
|
||||
case CONTROL_CHANGE:
|
||||
if (ev->d.control.param == 0x00 || ev->d.control.param == 0x20) {
|
||||
/* 0x00 and 0x20 are used for BANK select */
|
||||
break;
|
||||
/* 0x00 and 0x20 are used for BANK select */
|
||||
break;
|
||||
} else
|
||||
if (ev->d.control.param == 121) {
|
||||
/* reset all controllers */
|
||||
break;
|
||||
/* reset all controllers */
|
||||
break;
|
||||
} else
|
||||
if (ev->d.control.param == 120 || ev->d.control.param == 123) {
|
||||
/* Midi panic: 120: all sound off, 123: all notes off*/
|
||||
synth_reset_channel(&(rs->sc[ev->channel]));
|
||||
break;
|
||||
/* Midi panic: 120: all sound off, 123: all notes off*/
|
||||
synth_reset_channel(&(rs->sc[ev->channel]));
|
||||
break;
|
||||
} else
|
||||
if (ev->d.control.param >= 120) {
|
||||
/* params 122-127 are reserved - skip them. */
|
||||
break;
|
||||
/* params 122-127 are reserved - skip them. */
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
@ -407,7 +412,7 @@ static uint32_t synth_sound (void *synth, uint32_t written, const uint32_t nfram
|
|||
* @param data 8bit midi message
|
||||
* @param size number of bytes in the midi-message
|
||||
*/
|
||||
static void synth_parse_midi(void *synth, uint8_t *data, size_t size) {
|
||||
static void synth_parse_midi(void *synth, const uint8_t *data, const size_t size) {
|
||||
if (size < 2 || size > 3) return;
|
||||
// All messages need to be 3 bytes; except program-changes: 2bytes.
|
||||
if (size == 2 && (data[0] & 0xf0) != 0xC0) return;
|
||||
|
|
@ -454,14 +459,15 @@ static void synth_init(void *synth, double rate) {
|
|||
rs->rate = rate;
|
||||
rs->boffset = BUFFER_SIZE_SAMPLES;
|
||||
const float tuning = 440;
|
||||
for (int k=0; k < 128; k++) {
|
||||
int c,k;
|
||||
for (k=0; k < 128; k++) {
|
||||
rs->freqs[k] = (2.0 * tuning / 32.0f) * powf(2, (k - 9.0) / 12.0) / rate;
|
||||
assert(rs->freqs[k] < M_PI/2); // otherwise spatialization may phase out..
|
||||
}
|
||||
rs->kcfilt = 12.0 / rate;
|
||||
synth_reset(synth);
|
||||
|
||||
for (int c=0; c < 16; c++) {
|
||||
for (c=0; c < 16; c++) {
|
||||
synth_load(&rs->sc[c], rate, &synthesize_sineP, &piano_adsr);
|
||||
}
|
||||
}
|
||||
|
|
@ -487,4 +493,4 @@ static void * synth_alloc(void) {
|
|||
static void synth_free(void *synth) {
|
||||
free(synth);
|
||||
}
|
||||
/* vi:set ts=8 sts=2 sw=2: */
|
||||
/* vi:set ts=8 sts=2 sw=2 et: */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ def options(opt):
|
|||
def configure(conf):
|
||||
conf.load('compiler_c')
|
||||
autowaf.configure(conf)
|
||||
autowaf.set_c99_mode(conf)
|
||||
if Options.options.lv2:
|
||||
autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.0',
|
||||
uselib_store='LV2_1_0_0')
|
||||
|
|
|
|||
|
|
@ -24,10 +24,16 @@ def options(opt):
|
|||
autowaf.set_options(opt)
|
||||
|
||||
def configure(conf):
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
if conf.is_defined('USE_EXTERNAL_LIBS'):
|
||||
autowaf.check_pkg(conf, 'rubberband', uselib_store='RUBBERBAND', atleast_version='1.0', mandatory=True)
|
||||
else:
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
|
||||
def build(bld):
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
return
|
||||
|
||||
# Library
|
||||
obj = bld(features = 'cxx cxxshlib')
|
||||
prefix = 'libs/rubberband/'
|
||||
|
|
|
|||
|
|
@ -24,10 +24,16 @@ def options(opt):
|
|||
autowaf.set_options(opt)
|
||||
|
||||
def configure(conf):
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
if conf.is_defined('USE_EXTERNAL_LIBS'):
|
||||
autowaf.check_pkg(conf, 'taglib', uselib_store='TAGLIB', atleast_version="1.4", mandatory=True)
|
||||
else:
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
|
||||
def build(bld):
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
return
|
||||
|
||||
# Library
|
||||
obj = bld(features = 'cxx cxxshlib')
|
||||
sources = bld.path.ant_glob('taglib/*.cpp')
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#ifndef _AMPLITUDE_FOLLOWER_PLUGIN_H_
|
||||
#define _AMPLITUDE_FOLLOWER_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
|
||||
/**
|
||||
* Example plugin implementing the SuperCollider amplitude follower
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
#ifndef _ONSET_PLUGIN_H_
|
||||
#define _ONSET_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
#include <aubio/aubio.h>
|
||||
|
||||
class Onset : public Vamp::Plugin
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#ifndef _ONSET_DETECT_PLUGIN_H_
|
||||
#define _ONSET_DETECT_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
|
||||
class OnsetDetectorData;
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#ifndef _PERCUSSION_ONSET_DETECTOR_PLUGIN_H_
|
||||
#define _PERCUSSION_ONSET_DETECTOR_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
|
||||
/**
|
||||
* Example plugin that detects percussive events.
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#ifndef _SPECTRAL_CENTROID_PLUGIN_H_
|
||||
#define _SPECTRAL_CENTROID_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
|
||||
/**
|
||||
* Example plugin that calculates the centre of gravity of the
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#ifndef _ZERO_CROSSING_PLUGIN_H_
|
||||
#define _ZERO_CROSSING_PLUGIN_H_
|
||||
|
||||
#include "vamp-sdk/Plugin.h"
|
||||
#include <vamp-sdk/Plugin.h>
|
||||
|
||||
/**
|
||||
* Example plugin that calculates the positions and density of
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@
|
|||
#include "libvampplugins-config.h"
|
||||
#endif
|
||||
|
||||
#include "vamp/vamp.h"
|
||||
#include "vamp-sdk/PluginAdapter.h"
|
||||
#include <vamp/vamp.h>
|
||||
#include <vamp-sdk/PluginAdapter.h>
|
||||
|
||||
#include "ZeroCrossing.h"
|
||||
#include "SpectralCentroid.h"
|
||||
|
|
|
|||
|
|
@ -23,13 +23,19 @@ def options(opt):
|
|||
autowaf.set_options(opt)
|
||||
|
||||
def configure(conf):
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
autowaf.check_pkg(conf, 'fftw3', uselib_store='FFTW3', mandatory=True)
|
||||
autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F', mandatory=True)
|
||||
conf.env.append_value('CXXFLAGS', '-DHAVE_FFTW3')
|
||||
if conf.is_defined('USE_EXTERNAL_LIBS'):
|
||||
autowaf.check_pkg(conf, 'vamp-sdk', uselib_store='VAMPSDK', mandatory=True)
|
||||
autowaf.check_pkg(conf, 'vamp-hostsdk', uselib_store='VAMPHOSTSDK', mandatory=True)
|
||||
else:
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
autowaf.check_pkg(conf, 'fftw3', uselib_store='FFTW3', mandatory=True)
|
||||
autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F', mandatory=True)
|
||||
conf.env.append_value('CXXFLAGS', '-DHAVE_FFTW3')
|
||||
|
||||
def build(bld):
|
||||
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
return
|
||||
# Host Library
|
||||
obj = bld(features = 'cxx cxxshlib')
|
||||
obj.source = '''
|
||||
|
|
|
|||
802
tools/autowaf.py
Normal file
802
tools/autowaf.py
Normal file
|
|
@ -0,0 +1,802 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Autowaf, useful waf utilities with support for recursive projects
|
||||
# Copyright 2008-2011 David Robillard
|
||||
#
|
||||
# Licensed under the GNU GPL v2 or later, see COPYING file for details.
|
||||
|
||||
import glob
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from waflib import Configure, Context, Logs, Node, Options, Task, Utils
|
||||
from waflib.TaskGen import feature, before, after
|
||||
|
||||
global g_is_child
|
||||
g_is_child = False
|
||||
|
||||
# Only run autowaf hooks once (even if sub projects call several times)
|
||||
global g_step
|
||||
g_step = 0
|
||||
|
||||
# Compute dependencies globally
|
||||
#import preproc
|
||||
#preproc.go_absolute = True
|
||||
|
||||
@feature('c', 'cxx')
|
||||
@after('apply_incpaths')
|
||||
def include_config_h(self):
|
||||
self.env.append_value('INCPATHS', self.bld.bldnode.abspath())
|
||||
|
||||
def set_options(opt, debug_by_default=False):
|
||||
"Add standard autowaf options if they havn't been added yet"
|
||||
global g_step
|
||||
if g_step > 0:
|
||||
return
|
||||
|
||||
# Install directory options
|
||||
dirs_options = opt.add_option_group('Installation directories', '')
|
||||
|
||||
# Move --prefix and --destdir to directory options group
|
||||
for k in ('--prefix', '--destdir'):
|
||||
option = opt.parser.get_option(k)
|
||||
if option:
|
||||
opt.parser.remove_option(k)
|
||||
dirs_options.add_option(option)
|
||||
|
||||
# Standard directory options
|
||||
dirs_options.add_option('--bindir', type='string',
|
||||
help="Executable programs [Default: PREFIX/bin]")
|
||||
dirs_options.add_option('--configdir', type='string',
|
||||
help="Configuration data [Default: PREFIX/etc]")
|
||||
dirs_options.add_option('--datadir', type='string',
|
||||
help="Shared data [Default: PREFIX/share]")
|
||||
dirs_options.add_option('--includedir', type='string',
|
||||
help="Header files [Default: PREFIX/include]")
|
||||
dirs_options.add_option('--libdir', type='string',
|
||||
help="Libraries [Default: PREFIX/lib]")
|
||||
dirs_options.add_option('--mandir', type='string',
|
||||
help="Manual pages [Default: DATADIR/man]")
|
||||
dirs_options.add_option('--docdir', type='string',
|
||||
help="HTML documentation [Default: DATADIR/doc]")
|
||||
|
||||
# Build options
|
||||
if debug_by_default:
|
||||
opt.add_option('--optimize', action='store_false', default=True, dest='debug',
|
||||
help="Build optimized binaries")
|
||||
else:
|
||||
opt.add_option('--debug', action='store_true', default=False, dest='debug',
|
||||
help="Build debuggable binaries")
|
||||
|
||||
opt.add_option('--pardebug', action='store_true', default=False, dest='pardebug',
|
||||
help="Build parallel-installable debuggable libraries with D suffix")
|
||||
|
||||
opt.add_option('--grind', action='store_true', default=False, dest='grind',
|
||||
help="Run tests in valgrind")
|
||||
opt.add_option('--strict', action='store_true', default=False, dest='strict',
|
||||
help="Use strict compiler flags and show all warnings")
|
||||
opt.add_option('--ultra-strict', action='store_true', default=False, dest='ultra_strict',
|
||||
help="Use even stricter compiler flags (likely to trigger many warnings in library headers)")
|
||||
opt.add_option('--docs', action='store_true', default=False, dest='docs',
|
||||
help="Build documentation - requires doxygen")
|
||||
|
||||
# LV2 options
|
||||
opt.add_option('--lv2-user', action='store_true', default=False, dest='lv2_user',
|
||||
help="Install LV2 bundles to user location")
|
||||
opt.add_option('--lv2-system', action='store_true', default=False, dest='lv2_system',
|
||||
help="Install LV2 bundles to system location")
|
||||
dirs_options.add_option('--lv2dir', type='string',
|
||||
help="LV2 bundles [Default: LIBDIR/lv2]")
|
||||
g_step = 1
|
||||
|
||||
def check_header(conf, lang, name, define='', mandatory=True):
|
||||
"Check for a header"
|
||||
includes = '' # search default system include paths
|
||||
if sys.platform == "darwin":
|
||||
includes = '/opt/local/include'
|
||||
|
||||
if lang == 'c':
|
||||
check_func = conf.check_cc
|
||||
elif lang == 'cxx':
|
||||
check_func = conf.check_cxx
|
||||
else:
|
||||
Logs.error("Unknown header language `%s'" % lang)
|
||||
return
|
||||
|
||||
if define != '':
|
||||
check_func(header_name=name, includes=includes,
|
||||
define_name=define, mandatory=mandatory)
|
||||
else:
|
||||
check_func(header_name=name, includes=includes, mandatory=mandatory)
|
||||
|
||||
def nameify(name):
|
||||
return name.replace('/', '_').replace('++', 'PP').replace('-', '_').replace('.', '_')
|
||||
|
||||
def define(conf, var_name, value):
|
||||
conf.define(var_name, value)
|
||||
conf.env[var_name] = value
|
||||
|
||||
def check_pkg(conf, name, **args):
|
||||
"Check for a package iff it hasn't been checked for yet"
|
||||
if args['uselib_store'].lower() in conf.env['AUTOWAF_LOCAL_LIBS']:
|
||||
return
|
||||
class CheckType:
|
||||
OPTIONAL=1
|
||||
MANDATORY=2
|
||||
var_name = 'CHECKED_' + nameify(args['uselib_store'])
|
||||
check = not var_name in conf.env
|
||||
mandatory = not 'mandatory' in args or args['mandatory']
|
||||
if not check and 'atleast_version' in args:
|
||||
# Re-check if version is newer than previous check
|
||||
checked_version = conf.env['VERSION_' + name]
|
||||
if checked_version and checked_version < args['atleast_version']:
|
||||
check = True;
|
||||
if not check and mandatory and conf.env[var_name] == CheckType.OPTIONAL:
|
||||
# Re-check if previous check was optional but this one is mandatory
|
||||
check = True;
|
||||
if check:
|
||||
found = None
|
||||
pkg_var_name = 'PKG_' + name.replace('-', '_')
|
||||
pkg_name = name
|
||||
if conf.env.PARDEBUG:
|
||||
args['mandatory'] = False # Smash mandatory arg
|
||||
found = conf.check_cfg(package=pkg_name + 'D', args="--cflags --libs", **args)
|
||||
if found:
|
||||
pkg_name += 'D'
|
||||
if mandatory:
|
||||
args['mandatory'] = True # Unsmash mandatory arg
|
||||
if not found:
|
||||
found = conf.check_cfg(package=pkg_name, args="--cflags --libs", **args)
|
||||
if found:
|
||||
conf.env[pkg_var_name] = pkg_name
|
||||
if 'atleast_version' in args:
|
||||
conf.env['VERSION_' + name] = args['atleast_version']
|
||||
if mandatory:
|
||||
conf.env[var_name] = CheckType.MANDATORY
|
||||
else:
|
||||
conf.env[var_name] = CheckType.OPTIONAL
|
||||
|
||||
|
||||
def normpath(path):
|
||||
if sys.platform == 'win32':
|
||||
return os.path.normpath(path).replace('\\', '/')
|
||||
else:
|
||||
return os.path.normpath(path)
|
||||
|
||||
def configure(conf):
|
||||
global g_step
|
||||
if g_step > 1:
|
||||
return
|
||||
def append_cxx_flags(flags):
|
||||
conf.env.append_value('CFLAGS', flags)
|
||||
conf.env.append_value('CXXFLAGS', flags)
|
||||
print('')
|
||||
display_header('Global Configuration')
|
||||
|
||||
if Options.options.docs:
|
||||
conf.load('doxygen')
|
||||
|
||||
conf.env['DOCS'] = Options.options.docs
|
||||
conf.env['DEBUG'] = Options.options.debug or Options.options.pardebug
|
||||
conf.env['PARDEBUG'] = Options.options.pardebug
|
||||
conf.env['PREFIX'] = normpath(os.path.abspath(os.path.expanduser(conf.env['PREFIX'])))
|
||||
|
||||
def config_dir(var, opt, default):
|
||||
if opt:
|
||||
conf.env[var] = normpath(opt)
|
||||
else:
|
||||
conf.env[var] = normpath(default)
|
||||
|
||||
opts = Options.options
|
||||
prefix = conf.env['PREFIX']
|
||||
|
||||
config_dir('BINDIR', opts.bindir, os.path.join(prefix, 'bin'))
|
||||
config_dir('SYSCONFDIR', opts.configdir, os.path.join(prefix, 'etc'))
|
||||
config_dir('DATADIR', opts.datadir, os.path.join(prefix, 'share'))
|
||||
config_dir('INCLUDEDIR', opts.includedir, os.path.join(prefix, 'include'))
|
||||
config_dir('LIBDIR', opts.libdir, os.path.join(prefix, 'lib'))
|
||||
config_dir('MANDIR', opts.mandir, os.path.join(conf.env['DATADIR'], 'man'))
|
||||
config_dir('DOCDIR', opts.docdir, os.path.join(conf.env['DATADIR'], 'doc'))
|
||||
|
||||
if Options.options.lv2dir:
|
||||
conf.env['LV2DIR'] = Options.options.lv2dir
|
||||
elif Options.options.lv2_user:
|
||||
if sys.platform == "darwin":
|
||||
conf.env['LV2DIR'] = os.path.join(os.getenv('HOME'), 'Library/Audio/Plug-Ins/LV2')
|
||||
elif sys.platform == "win32":
|
||||
conf.env['LV2DIR'] = os.path.join(os.getenv('APPDATA'), 'LV2')
|
||||
else:
|
||||
conf.env['LV2DIR'] = os.path.join(os.getenv('HOME'), '.lv2')
|
||||
elif Options.options.lv2_system:
|
||||
if sys.platform == "darwin":
|
||||
conf.env['LV2DIR'] = '/Library/Audio/Plug-Ins/LV2'
|
||||
elif sys.platform == "win32":
|
||||
conf.env['LV2DIR'] = os.path.join(os.getenv('COMMONPROGRAMFILES'), 'LV2')
|
||||
else:
|
||||
conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
|
||||
else:
|
||||
conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
|
||||
|
||||
conf.env['LV2DIR'] = normpath(conf.env['LV2DIR'])
|
||||
|
||||
if Options.options.docs:
|
||||
doxygen = conf.find_program('doxygen')
|
||||
if not doxygen:
|
||||
conf.fatal("Doxygen is required to build with --docs")
|
||||
|
||||
dot = conf.find_program('dot')
|
||||
if not dot:
|
||||
conf.fatal("Graphviz (dot) is required to build with --docs")
|
||||
|
||||
if Options.options.debug:
|
||||
if conf.env['MSVC_COMPILER']:
|
||||
conf.env['CFLAGS'] = ['/Od', '/Zi', '/MTd']
|
||||
conf.env['CXXFLAGS'] = ['/Od', '/Zi', '/MTd']
|
||||
conf.env['LINKFLAGS'] = ['/DEBUG']
|
||||
else:
|
||||
conf.env['CFLAGS'] = ['-O0', '-g']
|
||||
conf.env['CXXFLAGS'] = ['-O0', '-g']
|
||||
else:
|
||||
if conf.env['MSVC_COMPILER']:
|
||||
conf.env['CFLAGS'] = ['/MD']
|
||||
conf.env['CXXFLAGS'] = ['/MD']
|
||||
append_cxx_flags(['-DNDEBUG'])
|
||||
|
||||
if Options.options.ultra_strict:
|
||||
Options.options.strict = True
|
||||
conf.env.append_value('CFLAGS', ['-Wredundant-decls',
|
||||
'-Wstrict-prototypes',
|
||||
'-Wmissing-prototypes'])
|
||||
|
||||
if Options.options.strict:
|
||||
conf.env.append_value('CFLAGS', ['-std=c99', '-pedantic', '-Wshadow'])
|
||||
conf.env.append_value('CXXFLAGS', ['-ansi',
|
||||
'-Wnon-virtual-dtor',
|
||||
'-Woverloaded-virtual'])
|
||||
append_cxx_flags(['-Wall',
|
||||
'-Wcast-align',
|
||||
'-Wextra',
|
||||
'-Wwrite-strings'])
|
||||
if sys.platform != "darwin":
|
||||
# this is really only to be avoid on OLD apple gcc, but not sure how to version check
|
||||
append_cxx_flags(['-fstrict-overflow'])
|
||||
|
||||
if not conf.check_cc(fragment = '''
|
||||
#ifndef __clang__
|
||||
#error
|
||||
#endif
|
||||
int main() { return 0; }''',
|
||||
features = 'c',
|
||||
mandatory = False,
|
||||
execute = False,
|
||||
msg = 'Checking for clang'):
|
||||
if sys.platform != "darwin":
|
||||
# this is really only to be avoid on OLD apple gcc, but not sure how to version check
|
||||
append_cxx_flags(['-Wunsafe-loop-optimizations'])
|
||||
# this is invalid (still) on Lion apple gcc
|
||||
append_cxx_flags(['-Wlogical-op'])
|
||||
|
||||
|
||||
if not conf.env['MSVC_COMPILER']:
|
||||
append_cxx_flags(['-fshow-column'])
|
||||
|
||||
conf.env.prepend_value('CFLAGS', '-I' + os.path.abspath('.'))
|
||||
conf.env.prepend_value('CXXFLAGS', '-I' + os.path.abspath('.'))
|
||||
|
||||
display_msg(conf, "Install prefix", conf.env['PREFIX'])
|
||||
display_msg(conf, "Debuggable build", str(conf.env['DEBUG']))
|
||||
display_msg(conf, "Build documentation", str(conf.env['DOCS']))
|
||||
print('')
|
||||
|
||||
g_step = 2
|
||||
|
||||
def set_c99_mode(conf):
|
||||
if conf.env.MSVC_COMPILER:
|
||||
# MSVC has no hope or desire to compile C99, just compile as C++
|
||||
conf.env.append_unique('CFLAGS', ['-TP'])
|
||||
else:
|
||||
conf.env.append_unique('CFLAGS', ['-std=c99'])
|
||||
|
||||
def set_local_lib(conf, name, has_objects):
|
||||
var_name = 'HAVE_' + nameify(name.upper())
|
||||
define(conf, var_name, 1)
|
||||
if has_objects:
|
||||
if type(conf.env['AUTOWAF_LOCAL_LIBS']) != dict:
|
||||
conf.env['AUTOWAF_LOCAL_LIBS'] = {}
|
||||
conf.env['AUTOWAF_LOCAL_LIBS'][name.lower()] = True
|
||||
else:
|
||||
if type(conf.env['AUTOWAF_LOCAL_HEADERS']) != dict:
|
||||
conf.env['AUTOWAF_LOCAL_HEADERS'] = {}
|
||||
conf.env['AUTOWAF_LOCAL_HEADERS'][name.lower()] = True
|
||||
|
||||
def append_property(obj, key, val):
|
||||
if hasattr(obj, key):
|
||||
setattr(obj, key, getattr(obj, key) + val)
|
||||
else:
|
||||
setattr(obj, key, val)
|
||||
|
||||
def use_lib(bld, obj, libs):
|
||||
abssrcdir = os.path.abspath('.')
|
||||
libs_list = libs.split()
|
||||
for l in libs_list:
|
||||
in_headers = l.lower() in bld.env['AUTOWAF_LOCAL_HEADERS']
|
||||
in_libs = l.lower() in bld.env['AUTOWAF_LOCAL_LIBS']
|
||||
if in_libs:
|
||||
append_property(obj, 'use', ' lib%s ' % l.lower())
|
||||
append_property(obj, 'framework', bld.env['FRAMEWORK_' + l])
|
||||
if in_headers or in_libs:
|
||||
inc_flag = '-iquote ' + os.path.join(abssrcdir, l.lower())
|
||||
for f in ['CFLAGS', 'CXXFLAGS']:
|
||||
if not inc_flag in bld.env[f]:
|
||||
bld.env.prepend_value(f, inc_flag)
|
||||
else:
|
||||
append_property(obj, 'uselib', ' ' + l)
|
||||
|
||||
@feature('c', 'cxx')
|
||||
@before('apply_link')
|
||||
def version_lib(self):
|
||||
if sys.platform == 'win32':
|
||||
self.vnum = None # Prevent waf from automatically appending -0
|
||||
if self.env['PARDEBUG']:
|
||||
applicable = ['cshlib', 'cxxshlib', 'cstlib', 'cxxstlib']
|
||||
if [x for x in applicable if x in self.features]:
|
||||
self.target = self.target + 'D'
|
||||
|
||||
def set_lib_env(conf, name, version):
|
||||
'Set up environment for local library as if found via pkg-config.'
|
||||
NAME = name.upper()
|
||||
major_ver = version.split('.')[0]
|
||||
pkg_var_name = 'PKG_' + name.replace('-', '_')
|
||||
lib_name = '%s-%s' % (name, major_ver)
|
||||
if conf.env.PARDEBUG:
|
||||
lib_name += 'D'
|
||||
conf.env[pkg_var_name] = lib_name
|
||||
conf.env['INCLUDES_' + NAME] = ['${INCLUDEDIR}/%s-%s' % (name, major_ver)]
|
||||
conf.env['LIBPATH_' + NAME] = [conf.env.LIBDIR]
|
||||
conf.env['LIB_' + NAME] = [lib_name]
|
||||
|
||||
def display_header(title):
|
||||
Logs.pprint('BOLD', title)
|
||||
|
||||
def display_msg(conf, msg, status = None, color = None):
|
||||
color = 'CYAN'
|
||||
if type(status) == bool and status or status == "True":
|
||||
color = 'GREEN'
|
||||
elif type(status) == bool and not status or status == "False":
|
||||
color = 'YELLOW'
|
||||
Logs.pprint('BOLD', " *", sep='')
|
||||
Logs.pprint('NORMAL', "%s" % msg.ljust(conf.line_just - 3), sep='')
|
||||
Logs.pprint('BOLD', ":", sep='')
|
||||
Logs.pprint(color, status)
|
||||
|
||||
def link_flags(env, lib):
|
||||
return ' '.join(map(lambda x: env['LIB_ST'] % x, env['LIB_' + lib]))
|
||||
|
||||
def compile_flags(env, lib):
|
||||
return ' '.join(map(lambda x: env['CPPPATH_ST'] % x, env['INCLUDES_' + lib]))
|
||||
|
||||
def set_recursive():
|
||||
global g_is_child
|
||||
g_is_child = True
|
||||
|
||||
def is_child():
|
||||
global g_is_child
|
||||
return g_is_child
|
||||
|
||||
# Pkg-config file
|
||||
def build_pc(bld, name, version, version_suffix, libs, subst_dict={}):
|
||||
'''Build a pkg-config file for a library.
|
||||
name -- uppercase variable name (e.g. 'SOMENAME')
|
||||
version -- version string (e.g. '1.2.3')
|
||||
version_suffix -- name version suffix (e.g. '2')
|
||||
libs -- string/list of dependencies (e.g. 'LIBFOO GLIB')
|
||||
'''
|
||||
pkg_prefix = bld.env['PREFIX']
|
||||
if pkg_prefix[-1] == '/':
|
||||
pkg_prefix = pkg_prefix[:-1]
|
||||
|
||||
target = name.lower()
|
||||
if version_suffix != '':
|
||||
target += '-' + version_suffix
|
||||
|
||||
if bld.env['PARDEBUG']:
|
||||
target += 'D'
|
||||
|
||||
target += '.pc'
|
||||
|
||||
libdir = bld.env['LIBDIR']
|
||||
if libdir.startswith(pkg_prefix):
|
||||
libdir = libdir.replace(pkg_prefix, '${exec_prefix}')
|
||||
|
||||
includedir = bld.env['INCLUDEDIR']
|
||||
if includedir.startswith(pkg_prefix):
|
||||
includedir = includedir.replace(pkg_prefix, '${prefix}')
|
||||
|
||||
obj = bld(features = 'subst',
|
||||
source = '%s.pc.in' % name.lower(),
|
||||
target = target,
|
||||
install_path = os.path.join(bld.env['LIBDIR'], 'pkgconfig'),
|
||||
exec_prefix = '${prefix}',
|
||||
PREFIX = pkg_prefix,
|
||||
EXEC_PREFIX = '${prefix}',
|
||||
LIBDIR = libdir,
|
||||
INCLUDEDIR = includedir)
|
||||
|
||||
if type(libs) != list:
|
||||
libs = libs.split()
|
||||
|
||||
subst_dict[name + '_VERSION'] = version
|
||||
subst_dict[name + '_MAJOR_VERSION'] = version[0:version.find('.')]
|
||||
for i in libs:
|
||||
subst_dict[i + '_LIBS'] = link_flags(bld.env, i)
|
||||
lib_cflags = compile_flags(bld.env, i)
|
||||
if lib_cflags == '':
|
||||
lib_cflags = ' '
|
||||
subst_dict[i + '_CFLAGS'] = lib_cflags
|
||||
|
||||
obj.__dict__.update(subst_dict)
|
||||
|
||||
def build_dir(name, subdir):
|
||||
if is_child():
|
||||
return os.path.join('build', name, subdir)
|
||||
else:
|
||||
return os.path.join('build', subdir)
|
||||
|
||||
# Clean up messy Doxygen documentation after it is built
|
||||
def make_simple_dox(name):
|
||||
name = name.lower()
|
||||
NAME = name.upper()
|
||||
try:
|
||||
top = os.getcwd()
|
||||
os.chdir(build_dir(name, 'doc/html'))
|
||||
page = 'group__%s.html' % name
|
||||
if not os.path.exists(page):
|
||||
return
|
||||
for i in [
|
||||
['%s_API ' % NAME, ''],
|
||||
['%s_DEPRECATED ' % NAME, ''],
|
||||
['group__%s.html' % name, ''],
|
||||
[' ', ''],
|
||||
['<script.*><\/script>', ''],
|
||||
['<hr\/><a name="details" id="details"><\/a><h2>.*<\/h2>', ''],
|
||||
['<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text\/css\"\/>',
|
||||
''],
|
||||
['<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"\/>',
|
||||
'Doxygen']]:
|
||||
os.system("sed -i 's/%s/%s/g' %s" % (i[0], i[1], page))
|
||||
os.rename('group__%s.html' % name, 'index.html')
|
||||
for i in (glob.glob('*.png') +
|
||||
glob.glob('*.html') +
|
||||
glob.glob('*.js') +
|
||||
glob.glob('*.css')):
|
||||
if i != 'index.html' and i != 'style.css':
|
||||
os.remove(i)
|
||||
os.chdir(top)
|
||||
os.chdir(build_dir(name, 'doc/man/man3'))
|
||||
for i in glob.glob('*.3'):
|
||||
os.system("sed -i 's/%s_API //' %s" % (NAME, i))
|
||||
for i in glob.glob('_*'):
|
||||
os.remove(i)
|
||||
os.chdir(top)
|
||||
except Exception as e:
|
||||
Logs.error("Failed to fix up %s documentation: %s" % (name, e))
|
||||
|
||||
# Doxygen API documentation
|
||||
def build_dox(bld, name, version, srcdir, blddir, outdir=''):
|
||||
if not bld.env['DOCS']:
|
||||
return
|
||||
|
||||
if is_child():
|
||||
src_dir = os.path.join(srcdir, name.lower())
|
||||
doc_dir = os.path.join(blddir, name.lower(), 'doc')
|
||||
else:
|
||||
src_dir = srcdir
|
||||
doc_dir = os.path.join(blddir, 'doc')
|
||||
|
||||
subst_tg = bld(features = 'subst',
|
||||
source = 'doc/reference.doxygen.in',
|
||||
target = 'doc/reference.doxygen',
|
||||
install_path = '',
|
||||
name = 'doxyfile')
|
||||
|
||||
subst_dict = {
|
||||
name + '_VERSION' : version,
|
||||
name + '_SRCDIR' : os.path.abspath(src_dir),
|
||||
name + '_DOC_DIR' : os.path.abspath(doc_dir)
|
||||
}
|
||||
|
||||
subst_tg.__dict__.update(subst_dict)
|
||||
|
||||
subst_tg.post()
|
||||
|
||||
docs = bld(features = 'doxygen',
|
||||
doxyfile = 'doc/reference.doxygen')
|
||||
|
||||
docs.post()
|
||||
|
||||
major = int(version[0:version.find('.')])
|
||||
bld.install_files(
|
||||
os.path.join('${DOCDIR}', '%s-%d' % (name.lower(), major), outdir, 'html'),
|
||||
bld.path.get_bld().ant_glob('doc/html/*'))
|
||||
for i in range(1, 8):
|
||||
bld.install_files('${MANDIR}/man%d' % i,
|
||||
bld.path.get_bld().ant_glob('doc/man/man%d/*' % i,
|
||||
excl='**/_*'))
|
||||
|
||||
# Version code file generation
|
||||
def build_version_files(header_path, source_path, domain, major, minor, micro):
|
||||
header_path = os.path.abspath(header_path)
|
||||
source_path = os.path.abspath(source_path)
|
||||
text = "int " + domain + "_major_version = " + str(major) + ";\n"
|
||||
text += "int " + domain + "_minor_version = " + str(minor) + ";\n"
|
||||
text += "int " + domain + "_micro_version = " + str(micro) + ";\n"
|
||||
try:
|
||||
o = open(source_path, 'w')
|
||||
o.write(text)
|
||||
o.close()
|
||||
except IOError:
|
||||
Logs.error('Failed to open %s for writing\n' % source_path)
|
||||
sys.exit(-1)
|
||||
|
||||
text = "#ifndef __" + domain + "_version_h__\n"
|
||||
text += "#define __" + domain + "_version_h__\n"
|
||||
text += " extern const char* " + domain + "_revision;\n"
|
||||
text += " extern int " + domain + "_major_version;\n"
|
||||
text += " extern int " + domain + "_minor_version;\n"
|
||||
text += " extern int " + domain + "_micro_version;\n"
|
||||
text += "#endif /* __" + domain + "_version_h__ */\n"
|
||||
try:
|
||||
o = open(header_path, 'w')
|
||||
o.write(text)
|
||||
o.close()
|
||||
except IOError:
|
||||
Logs.warn('Failed to open %s for writing\n' % header_path)
|
||||
sys.exit(-1)
|
||||
|
||||
return None
|
||||
|
||||
def build_i18n_pot(bld, srcdir, dir, name, sources, copyright_holder=None):
|
||||
Logs.info('Generating pot file from %s' % name)
|
||||
pot_file = '%s.pot' % name
|
||||
|
||||
cmd = ['xgettext',
|
||||
'--keyword=_',
|
||||
'--keyword=N_',
|
||||
'--keyword=S_',
|
||||
'--keyword=P_:1,2',
|
||||
'--from-code=UTF-8',
|
||||
'-o', pot_file]
|
||||
|
||||
if copyright_holder:
|
||||
cmd += ['--copyright-holder="%s"' % copyright_holder]
|
||||
|
||||
cmd += sources
|
||||
Logs.info('Updating ' + pot_file)
|
||||
subprocess.call(cmd, cwd=os.path.join(srcdir, dir))
|
||||
|
||||
def build_i18n_po(bld, srcdir, dir, name, sources, copyright_holder=None):
|
||||
pwd = os.getcwd()
|
||||
os.chdir(os.path.join(srcdir, dir))
|
||||
pot_file = '%s.pot' % name
|
||||
po_files = glob.glob('po/*.po')
|
||||
for po_file in po_files:
|
||||
cmd = ['msgmerge',
|
||||
'--update',
|
||||
'--no-fuzzy-matching',
|
||||
po_file,
|
||||
pot_file]
|
||||
Logs.info('Updating ' + po_file)
|
||||
subprocess.call(cmd)
|
||||
os.chdir(pwd)
|
||||
|
||||
def build_i18n_mo(bld, srcdir, dir, name, sources, copyright_holder=None):
|
||||
pwd = os.getcwd()
|
||||
os.chdir(os.path.join(srcdir, dir))
|
||||
pot_file = '%s.pot' % name
|
||||
po_files = glob.glob('po/*.po')
|
||||
for po_file in po_files:
|
||||
mo_file = po_file.replace('.po', '.mo')
|
||||
cmd = ['msgfmt',
|
||||
'-c',
|
||||
'-f',
|
||||
'-o',
|
||||
mo_file,
|
||||
po_file]
|
||||
Logs.info('Generating ' + po_file)
|
||||
subprocess.call(cmd)
|
||||
os.chdir(pwd)
|
||||
|
||||
def build_i18n(bld, srcdir, dir, name, sources, copyright_holder=None):
|
||||
build_i18n_pot(bld, srcdir, dir, name, sources, copyright_holder)
|
||||
build_i18n_po(bld, srcdir, dir, name, sources, copyright_holder)
|
||||
build_i18n_mo(bld, srcdir, dir, name, sources, copyright_holder)
|
||||
|
||||
def cd_to_build_dir(ctx, appname):
|
||||
orig_dir = os.path.abspath(os.curdir)
|
||||
top_level = (len(ctx.stack_path) > 1)
|
||||
if top_level:
|
||||
os.chdir(os.path.join('build', appname))
|
||||
else:
|
||||
os.chdir('build')
|
||||
Logs.pprint('GREEN', "Waf: Entering directory `%s'" % os.path.abspath(os.getcwd()))
|
||||
|
||||
def cd_to_orig_dir(ctx, child):
|
||||
if child:
|
||||
os.chdir(os.path.join('..', '..'))
|
||||
else:
|
||||
os.chdir('..')
|
||||
|
||||
def pre_test(ctx, appname, dirs=['src']):
|
||||
diropts = ''
|
||||
for i in dirs:
|
||||
diropts += ' -d ' + i
|
||||
cd_to_build_dir(ctx, appname)
|
||||
clear_log = open('lcov-clear.log', 'w')
|
||||
try:
|
||||
try:
|
||||
# Clear coverage data
|
||||
subprocess.call(('lcov %s -z' % diropts).split(),
|
||||
stdout=clear_log, stderr=clear_log)
|
||||
except:
|
||||
Logs.warn('Failed to run lcov, no coverage report will be generated')
|
||||
finally:
|
||||
clear_log.close()
|
||||
|
||||
def post_test(ctx, appname, dirs=['src'], remove=['*boost*', 'c++*']):
|
||||
diropts = ''
|
||||
for i in dirs:
|
||||
diropts += ' -d ' + i
|
||||
coverage_log = open('lcov-coverage.log', 'w')
|
||||
coverage_lcov = open('coverage.lcov', 'w')
|
||||
coverage_stripped_lcov = open('coverage-stripped.lcov', 'w')
|
||||
try:
|
||||
try:
|
||||
base = '.'
|
||||
if g_is_child:
|
||||
base = '..'
|
||||
|
||||
# Generate coverage data
|
||||
subprocess.call(('lcov -c %s -b %s' % (diropts, base)).split(),
|
||||
stdout=coverage_lcov, stderr=coverage_log)
|
||||
|
||||
# Strip unwanted stuff
|
||||
subprocess.call(
|
||||
['lcov', '--remove', 'coverage.lcov'] + remove,
|
||||
stdout=coverage_stripped_lcov, stderr=coverage_log)
|
||||
|
||||
# Generate HTML coverage output
|
||||
if not os.path.isdir('coverage'):
|
||||
os.makedirs('coverage')
|
||||
subprocess.call('genhtml -o coverage coverage-stripped.lcov'.split(),
|
||||
stdout=coverage_log, stderr=coverage_log)
|
||||
|
||||
except:
|
||||
Logs.warn('Failed to run lcov, no coverage report will be generated')
|
||||
finally:
|
||||
coverage_stripped_lcov.close()
|
||||
coverage_lcov.close()
|
||||
coverage_log.close()
|
||||
|
||||
print('')
|
||||
Logs.pprint('GREEN', "Waf: Leaving directory `%s'" % os.path.abspath(os.getcwd()))
|
||||
top_level = (len(ctx.stack_path) > 1)
|
||||
if top_level:
|
||||
cd_to_orig_dir(ctx, top_level)
|
||||
|
||||
print('')
|
||||
Logs.pprint('BOLD', 'Coverage:', sep='')
|
||||
print('<file://%s>\n\n' % os.path.abspath('coverage/index.html'))
|
||||
|
||||
def run_tests(ctx, appname, tests, desired_status=0, dirs=['src'], name='*'):
|
||||
failures = 0
|
||||
diropts = ''
|
||||
for i in dirs:
|
||||
diropts += ' -d ' + i
|
||||
|
||||
# Run all tests
|
||||
for i in tests:
|
||||
s = i
|
||||
if type(i) == type([]):
|
||||
s = ' '.join(i)
|
||||
print('')
|
||||
Logs.pprint('BOLD', '** Test', sep='')
|
||||
Logs.pprint('NORMAL', '%s' % s)
|
||||
cmd = i
|
||||
if Options.options.grind:
|
||||
cmd = 'valgrind ' + i
|
||||
if subprocess.call(cmd, shell=True) == desired_status:
|
||||
Logs.pprint('GREEN', '** Pass')
|
||||
else:
|
||||
failures += 1
|
||||
Logs.pprint('RED', '** FAIL')
|
||||
|
||||
print('')
|
||||
if failures == 0:
|
||||
Logs.pprint('GREEN', '** Pass: All %s.%s tests passed' % (appname, name))
|
||||
else:
|
||||
Logs.pprint('RED', '** FAIL: %d %s.%s tests failed' % (failures, appname, name))
|
||||
|
||||
def run_ldconfig(ctx):
|
||||
if (ctx.cmd == 'install'
|
||||
and not ctx.env['RAN_LDCONFIG']
|
||||
and ctx.env['LIBDIR']
|
||||
and not 'DESTDIR' in os.environ
|
||||
and not Options.options.destdir):
|
||||
try:
|
||||
Logs.info("Waf: Running `/sbin/ldconfig %s'" % ctx.env['LIBDIR'])
|
||||
subprocess.call(['/sbin/ldconfig', ctx.env['LIBDIR']])
|
||||
ctx.env['RAN_LDCONFIG'] = True
|
||||
except:
|
||||
pass
|
||||
|
||||
def write_news(name, in_files, out_file, top_entries=None, extra_entries=None):
|
||||
import rdflib
|
||||
import textwrap
|
||||
from time import strftime, strptime
|
||||
|
||||
doap = rdflib.Namespace('http://usefulinc.com/ns/doap#')
|
||||
dcs = rdflib.Namespace('http://ontologi.es/doap-changeset#')
|
||||
rdfs = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#')
|
||||
foaf = rdflib.Namespace('http://xmlns.com/foaf/0.1/')
|
||||
rdf = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#')
|
||||
m = rdflib.ConjunctiveGraph()
|
||||
|
||||
try:
|
||||
for i in in_files:
|
||||
m.parse(i, format='n3')
|
||||
except:
|
||||
Logs.warn('Error parsing data, unable to generate NEWS')
|
||||
return
|
||||
|
||||
proj = m.value(None, rdf.type, doap.Project)
|
||||
for f in m.triples([proj, rdfs.seeAlso, None]):
|
||||
if f[2].endswith('.ttl'):
|
||||
m.parse(f[2], format='n3')
|
||||
|
||||
entries = {}
|
||||
for r in m.triples([proj, doap.release, None]):
|
||||
release = r[2]
|
||||
revision = m.value(release, doap.revision, None)
|
||||
date = m.value(release, doap.created, None)
|
||||
blamee = m.value(release, dcs.blame, None)
|
||||
changeset = m.value(release, dcs.changeset, None)
|
||||
dist = m.value(release, doap['file-release'], None)
|
||||
|
||||
if revision and date and blamee and changeset:
|
||||
entry = '%s (%s) stable;\n' % (name, revision)
|
||||
|
||||
for i in m.triples([changeset, dcs.item, None]):
|
||||
item = textwrap.wrap(m.value(i[2], rdfs.label, None), width=79)
|
||||
entry += '\n * ' + '\n '.join(item)
|
||||
if dist and top_entries is not None:
|
||||
if not str(dist) in top_entries:
|
||||
top_entries[str(dist)] = []
|
||||
top_entries[str(dist)] += [
|
||||
'%s: %s' % (name, '\n '.join(item))]
|
||||
|
||||
if extra_entries:
|
||||
for i in extra_entries[str(dist)]:
|
||||
entry += '\n * ' + i
|
||||
|
||||
entry += '\n\n --'
|
||||
|
||||
blamee_name = m.value(blamee, foaf.name, None)
|
||||
blamee_mbox = m.value(blamee, foaf.mbox, None)
|
||||
if blamee_name and blamee_mbox:
|
||||
entry += ' %s <%s>' % (blamee_name,
|
||||
blamee_mbox.replace('mailto:', ''))
|
||||
|
||||
entry += ' %s\n\n' % (
|
||||
strftime('%a, %d %b %Y %H:%M:%S +0000', strptime(date, '%Y-%m-%d')))
|
||||
|
||||
entries[revision] = entry
|
||||
else:
|
||||
Logs.warn('Ignored incomplete %s release description' % name)
|
||||
|
||||
if len(entries) > 0:
|
||||
news = open(out_file, 'w')
|
||||
for e in sorted(entries.keys(), reverse=True):
|
||||
news.write(entries[e])
|
||||
news.close()
|
||||
|
|
@ -2,15 +2,24 @@
|
|||
# this is sourced by build and package, and executed from within build/{osx,linux}_packaging
|
||||
#
|
||||
|
||||
major_version=`grep -m 1 '^MAJOR = ' ../../wscript | awk '{print $3}' | sed "s/'//g"`
|
||||
minor_version=`grep -m 1 '^MINOR = ' ../../wscript | awk '{print $3}' | sed "s/'//g"`
|
||||
release_version=${major_version}.${minor_version}
|
||||
r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed -e 1d -e "s/[0-9][0-9]*\.[0-9][0-9]*-//"`
|
||||
if echo $r | grep -q -e - ; then
|
||||
revcount=`echo $r | cut -d- -f1`
|
||||
if uname -a | grep arwin >/dev/null 2>&1 ; then
|
||||
EXTENDED_RE=-E
|
||||
else
|
||||
EXTENDED_RE=-r
|
||||
fi
|
||||
commit=`echo $r | cut -d- -f2`
|
||||
version=${release_version}${revcount:+.$revcount}
|
||||
|
||||
GIT_REV_REGEXP='([0-9][0-9]*)\.([0-9][0-9]*)-?([0-9][0-9]*)?-?([a-z0-9]*)'
|
||||
|
||||
major_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\1/"`
|
||||
minor_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\2/"`
|
||||
r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\3/"`
|
||||
commit=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\4/"`
|
||||
|
||||
if [ "x$r" != "x" ] ; then
|
||||
revcount=$r
|
||||
fi
|
||||
|
||||
release_version=${major_version}.${minor_version}${revcount:+.$revcount}
|
||||
|
||||
#
|
||||
# Figure out the Build Type
|
||||
|
|
|
|||
|
|
@ -97,8 +97,12 @@ fi
|
|||
|
||||
. ../define_versions.sh
|
||||
|
||||
echo "Version is $version / $commit"
|
||||
info_string="$version ($commit) built on `hostname` by `whoami` on `date`"
|
||||
echo "Version is $release_version"
|
||||
if [ "x$commit" != "x" ] ; then
|
||||
info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
|
||||
else
|
||||
info_string="$release_version built on `hostname` by `whoami` on `date`"
|
||||
fi
|
||||
echo "Info string is $info_string"
|
||||
|
||||
# Figure out our CPU type
|
||||
|
|
@ -134,11 +138,11 @@ fi
|
|||
# setup directory structure
|
||||
|
||||
if [ -z "${BUILDTYPE}" ]; then
|
||||
APPDIR=${APPNAME}_${ARCH}-${version}
|
||||
APP_VER_NAME=${APPNAME}-${version}
|
||||
APPDIR=${APPNAME}_${ARCH}-${release_version}
|
||||
APP_VER_NAME=${APPNAME}-${release_version}
|
||||
else
|
||||
APPDIR=${APPNAME}_${ARCH}-${version}-${BUILDTYPE}
|
||||
APP_VER_NAME=${APPNAME}-${version}-${BUILDTYPE}
|
||||
APPDIR=${APPNAME}_${ARCH}-${release_version}-${BUILDTYPE}
|
||||
APP_VER_NAME=${APPNAME}-${release_version}-${BUILDTYPE}
|
||||
fi
|
||||
|
||||
APPBIN=$APPDIR/bin
|
||||
|
|
@ -569,7 +573,7 @@ fi
|
|||
#
|
||||
# Add the uninstaller
|
||||
#
|
||||
sed -e "s/%REPLACE_PGM%/${APPNAME}/" -e "s/%REPLACE_VENDOR%/${VENDOR}/" -e "s/%REPLACE_VERSION%/${version}/" -e "s/%REPLACE_TYPE%/${BUILDTYPE}/" < uninstall.sh.in > $APPBIN/${APP_VER_NAME}.uninstall.sh
|
||||
sed -e "s/%REPLACE_PGM%/${APPNAME}/" -e "s/%REPLACE_VENDOR%/${VENDOR}/" -e "s/%REPLACE_VERSION%/${release_version}/" -e "s/%REPLACE_TYPE%/${BUILDTYPE}/" < uninstall.sh.in > $APPBIN/${APP_VER_NAME}.uninstall.sh
|
||||
chmod a+x $APPBIN/${APP_VER_NAME}.uninstall.sh
|
||||
|
||||
#Sanity Check file
|
||||
|
|
|
|||
|
|
@ -56,8 +56,8 @@ if [ x$DEBUG = xT ]; then
|
|||
BUILDTYPE="dbg"
|
||||
fi
|
||||
|
||||
X86_BUNDLE="${APPNAME}_x86-${version}"
|
||||
X86_64_BUNDLE="${APPNAME}_x86_64-${version}"
|
||||
X86_BUNDLE="${APPNAME}_x86-${release_version}"
|
||||
X86_64_BUNDLE="${APPNAME}_x86_64-${release_version}"
|
||||
|
||||
if [ ! -z ${BUILDTYPE} ]; then
|
||||
X86_BUNDLE="${X86_BUNDLE}-${BUILDTYPE}"
|
||||
|
|
@ -112,22 +112,22 @@ fi
|
|||
if [ -z ${BUILDTYPE} ]; then
|
||||
if [ "${SINGLE_ARCH}" = "T" ]; then
|
||||
if [ "${X86_BUNDLE_OK}" = "T" ]; then
|
||||
PACKAGE="${APPNAME}_32bit-${version}"
|
||||
PACKAGE="${APPNAME}_32bit-${release_version}"
|
||||
else
|
||||
PACKAGE="${APPNAME}_64bit-${version}"
|
||||
PACKAGE="${APPNAME}_64bit-${release_version}"
|
||||
fi
|
||||
else
|
||||
PACKAGE="${APPNAME}-${version}"
|
||||
PACKAGE="${APPNAME}-${release_version}"
|
||||
fi
|
||||
else
|
||||
if [ "${SINGLE_ARCH}" = "T" ]; then
|
||||
if [ "${X86_BUNDLE_OK}" = "T" ]; then
|
||||
PACKAGE="${APPNAME}_32bit-${version}-${BUILDTYPE}"
|
||||
PACKAGE="${APPNAME}_32bit-${release_version}-${BUILDTYPE}"
|
||||
else
|
||||
PACKAGE="${APPNAME}_64bit-${version}-${BUILDTYPE}"
|
||||
PACKAGE="${APPNAME}_64bit-${release_version}-${BUILDTYPE}"
|
||||
fi
|
||||
else
|
||||
PACKAGE="${APPNAME}-${version}-${BUILDTYPE}"
|
||||
PACKAGE="${APPNAME}-${release_version}-${BUILDTYPE}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
|||
14
tools/nofuzz.sh
Executable file
14
tools/nofuzz.sh
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
## this script should be run from the top-level source dir
|
||||
## it remove all fuzzy and obsolte translations and wraps
|
||||
## long lines.
|
||||
##
|
||||
## update .po and .pot files:
|
||||
./waf i18n_pot
|
||||
|
||||
TEMPFILE=`mktemp`
|
||||
for file in `git ls-files | grep -e '.po$'`; do
|
||||
cp $file $TEMPFILE
|
||||
msgattrib -o $file --no-fuzzy --no-obsolete $TEMPFILE
|
||||
done
|
||||
rm $TEMPFILE
|
||||
|
|
@ -75,8 +75,12 @@ if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
|
|||
fi
|
||||
|
||||
. ../define_versions.sh
|
||||
echo "Version is $release_version / $revision"
|
||||
info_string="$version built on `hostname` by `whoami` on `date`"
|
||||
echo "Version is $release_version"
|
||||
if [ "x$commit" != "x" ] ; then
|
||||
info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
|
||||
else
|
||||
info_string="$release_version built on `hostname` by `whoami` on `date`"
|
||||
fi
|
||||
echo "Info string is $info_string"
|
||||
|
||||
# setup directory structure
|
||||
|
|
@ -177,12 +181,12 @@ env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</st
|
|||
|
||||
# edit plist
|
||||
sed -e "s?@ENV@?$env?g" \
|
||||
-e "s?@VERSION@?$release_version/$revision?g" \
|
||||
-e "s?@VERSION@?$release_version?g" \
|
||||
-e "s?@INFOSTRING@?$info_string?g" < Info.plist.in > Info.plist
|
||||
# and plist strings
|
||||
sed -e "s?@APPNAME@?$appname?" \
|
||||
-e "s?@ENV@?$env?g" \
|
||||
-e "s?@VERSION@?$release_version/$revision?g" \
|
||||
-e "s?@VERSION@?$release_version?g" \
|
||||
-e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
|
||||
|
||||
# copy static files
|
||||
|
|
@ -569,10 +573,10 @@ fi
|
|||
|
||||
echo "Building DMG ..."
|
||||
|
||||
# UC_DMG=$APPNAME-${release_version}-${revision}-UC.dmg
|
||||
# FINAL_DMG=$APPNAME-${release_version}-${revision}.dmg
|
||||
UC_DMG=$APPNAME-$version.dmg
|
||||
VOLNAME=$APPNAME-$version
|
||||
# UC_DMG=$APPNAME-${release_version}-UC.dmg
|
||||
# FINAL_DMG=$APPNAME-${release_version}.dmg
|
||||
UC_DMG=$APPNAME-$release_version.dmg
|
||||
VOLNAME=$APPNAME-$release_version
|
||||
|
||||
# TODO use mktemp
|
||||
export TMPDIR=`pwd`
|
||||
|
|
|
|||
BIN
waf
vendored
BIN
waf
vendored
Binary file not shown.
90
wscript
90
wscript
|
|
@ -7,10 +7,42 @@ import string
|
|||
import subprocess
|
||||
import sys
|
||||
|
||||
MAJOR = '3'
|
||||
MINOR = '5'
|
||||
VERSION = MAJOR + '.' + MINOR
|
||||
def fetch_git_revision ():
|
||||
cmd = "git describe HEAD"
|
||||
output = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines()
|
||||
rev = output[0].decode ('utf-8')
|
||||
return rev
|
||||
|
||||
def fetch_tarball_revision ():
|
||||
if not os.path.exists ('libs/ardour/revision.cc'):
|
||||
print 'This tarball was not created correctly - it is missing libs/ardour/revision.cc'
|
||||
sys.exit (1)
|
||||
with open('libs/ardour/revision.cc') as f:
|
||||
content = f.readlines()
|
||||
remove_punctuation_map = dict((ord(char), None) for char in '";')
|
||||
return content[1].decode('utf-8').strip().split(' ')[7].translate (remove_punctuation_map)
|
||||
|
||||
if os.path.isdir (os.path.join(os.getcwd(), '.git')):
|
||||
rev = fetch_git_revision ()
|
||||
else:
|
||||
rev = fetch_tarball_revision ()
|
||||
|
||||
#
|
||||
# rev is now of the form MAJOR.MINOR-rev-commit
|
||||
#
|
||||
|
||||
parts = rev.split ('.')
|
||||
MAJOR = parts[0]
|
||||
other = parts[1].split ('-')
|
||||
MINOR = other[0]
|
||||
MICRO = other[1]
|
||||
|
||||
V = MAJOR + '.' + MINOR + '.' + MICRO
|
||||
#
|
||||
# it is important that VERSION *not* be unicode string
|
||||
# because if it is, it breaks waf somehow.
|
||||
#
|
||||
VERSION = V.encode ('ascii', 'ignore')
|
||||
APPNAME = 'Ardour' + MAJOR
|
||||
|
||||
# Mandatory variables
|
||||
|
|
@ -57,17 +89,11 @@ def fetch_gcc_version (CC):
|
|||
version = o.split(' ')[2].split('.')
|
||||
return version
|
||||
|
||||
def fetch_git_revision ():
|
||||
cmd = "git describe HEAD"
|
||||
output = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines()
|
||||
rev = output[0].decode('utf-8')
|
||||
return rev
|
||||
|
||||
def create_stored_revision():
|
||||
rev = ""
|
||||
if os.path.exists('.git'):
|
||||
rev = fetch_git_revision();
|
||||
print("ardour.git version: " + rev + "\n")
|
||||
print("Git version: " + rev + "\n")
|
||||
elif os.path.exists('libs/ardour/revision.cc'):
|
||||
print("Using packaged revision")
|
||||
return
|
||||
|
|
@ -76,6 +102,10 @@ def create_stored_revision():
|
|||
sys.exit(-1)
|
||||
|
||||
try:
|
||||
#
|
||||
# if you change the format of this, be sure to fix fetch_tarball_revision() above
|
||||
# so that it still works.
|
||||
#
|
||||
text = '#include "ardour/revision.h"\n'
|
||||
text += 'namespace ARDOUR { const char* revision = \"%s\"; }\n' % rev
|
||||
print('Writing revision info to libs/ardour/revision.cc using ' + rev)
|
||||
|
|
@ -294,13 +324,22 @@ def set_compiler_flags (conf,opt):
|
|||
# prepend boiler plate optimization flags that work on all architectures
|
||||
#
|
||||
|
||||
optimization_flags[:0] = [
|
||||
"-O3",
|
||||
"-fomit-frame-pointer",
|
||||
"-ffast-math",
|
||||
"-fstrength-reduce",
|
||||
"-pipe"
|
||||
]
|
||||
optimization_flags[:0] = ["-pipe"]
|
||||
|
||||
# don't prepend optimization flags if "-O<something>" is present
|
||||
prepend_opt_flags = True
|
||||
for flag in optimization_flags:
|
||||
if flag.startswith("-O"):
|
||||
prepend_opt_flags = False
|
||||
break
|
||||
|
||||
if prepend_opt_flags:
|
||||
optimization_flags[:0] = [
|
||||
"-O3",
|
||||
"-fomit-frame-pointer",
|
||||
"-ffast-math",
|
||||
"-fstrength-reduce"
|
||||
]
|
||||
|
||||
if opt.debug:
|
||||
conf.env.append_value('CFLAGS', debug_flags)
|
||||
|
|
@ -419,6 +458,8 @@ def options(opt):
|
|||
help='Build internal libs as shared libraries')
|
||||
opt.add_option('--internal-static-libs', action='store_false', dest='internal_shared_libs',
|
||||
help='Build internal libs as static libraries')
|
||||
opt.add_option('--use-external-libs', action='store_true', default=False, dest='use_external_libs',
|
||||
help='Use external/system versions of some bundled libraries')
|
||||
opt.add_option('--lv2', action='store_true', default=True, dest='lv2',
|
||||
help='Compile with support for LV2 (if Lilv+Suil is available)')
|
||||
opt.add_option('--no-lv2', action='store_false', dest='lv2',
|
||||
|
|
@ -591,6 +632,9 @@ def configure(conf):
|
|||
if Options.options.internal_shared_libs:
|
||||
conf.define('INTERNAL_SHARED_LIBS', 1)
|
||||
|
||||
if Options.options.use_external_libs:
|
||||
conf.define('USE_EXTERNAL_LIBS', 1)
|
||||
|
||||
if Options.options.boost_include != '':
|
||||
conf.env.append_value('CXXFLAGS', '-I' + Options.options.boost_include)
|
||||
|
||||
|
|
@ -729,6 +773,7 @@ const char* const ardour_config_info = "\\n\\
|
|||
write_config_text('Install prefix', conf.env['PREFIX'])
|
||||
write_config_text('Strict compiler flags', conf.env['STRICT'])
|
||||
write_config_text('Internal Shared Libraries', conf.is_defined('INTERNAL_SHARED_LIBS'))
|
||||
write_config_text('Use External Libraries', conf.is_defined('USE_EXTERNAL_LIBS'))
|
||||
|
||||
write_config_text('Architecture flags', opts.arch)
|
||||
write_config_text('Aubio', conf.is_defined('HAVE_AUBIO'))
|
||||
|
|
@ -774,14 +819,17 @@ def build(bld):
|
|||
# add directories that contain only headers, to workaround an issue with waf
|
||||
|
||||
bld.path.find_dir ('libs/evoral/evoral')
|
||||
bld.path.find_dir ('libs/vamp-sdk/vamp-sdk')
|
||||
if not bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
bld.path.find_dir ('libs/vamp-sdk/vamp-sdk')
|
||||
bld.path.find_dir ('libs/surfaces/control_protocol/control_protocol')
|
||||
bld.path.find_dir ('libs/timecode/timecode')
|
||||
bld.path.find_dir ('libs/libltc/ltc')
|
||||
bld.path.find_dir ('libs/rubberband/rubberband')
|
||||
if not bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
bld.path.find_dir ('libs/libltc/ltc')
|
||||
bld.path.find_dir ('libs/rubberband/rubberband')
|
||||
bld.path.find_dir ('libs/gtkmm2ext/gtkmm2ext')
|
||||
bld.path.find_dir ('libs/ardour/ardour')
|
||||
bld.path.find_dir ('libs/taglib/taglib')
|
||||
if not bld.is_defined('USE_EXTERNAL_LIBS'):
|
||||
bld.path.find_dir ('libs/taglib/taglib')
|
||||
bld.path.find_dir ('libs/pbd/pbd')
|
||||
|
||||
autowaf.set_recursive()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue