fix merge with master

This commit is contained in:
Paul Davis
2013-10-31 13:16:51 -04:00
80 changed files with 2603 additions and 73339 deletions

View File

@@ -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 {

View File

@@ -23,9 +23,9 @@
#include <string>
#include "taglib/tag.h"
#include "taglib/taglib.h"
#include "taglib/xiphcomment.h"
#include <taglib/tag.h>
#include <taglib/taglib.h>
#include <taglib/xiphcomment.h>
namespace ARDOUR
{

View File

@@ -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 ();

View File

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

View File

@@ -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,

View File

@@ -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 ();
@@ -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;

View File

@@ -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"

View File

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

View File

@@ -1065,8 +1065,8 @@ AudioEngine::start_latency_detection ()
/* find the ports we will connect to */
PortEngine::PortHandle* out = pe.get_port_by_name (_latency_output_name);
PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name);
PortEngine::PortHandle out = pe.get_port_by_name (_latency_output_name);
PortEngine::PortHandle in = pe.get_port_by_name (_latency_input_name);
if (!out || !in) {
stop (true);

View File

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

View File

@@ -39,7 +39,6 @@ using namespace Glib;
#include "i18n.h"
BaseUI::RequestType MidiControlUI::PortChange = BaseUI::new_request_type();
MidiControlUI* MidiControlUI::_instance = 0;
#include "pbd/abstract_ui.cc" /* instantiate the template */
@@ -60,24 +59,7 @@ MidiControlUI::~MidiControlUI ()
void
MidiControlUI::do_request (MidiUIRequest* req)
{
if (req->type == PortChange) {
/* restart event loop with new ports */
DEBUG_TRACE (DEBUG::MidiIO, "reset ports\n");
reset_ports ();
} else if (req->type == CallSlot) {
#ifndef NDEBUG
if (getenv ("DEBUG_THREADED_SIGNALS")) {
cerr << "MIDI UI calls a slot\n";
}
#endif
req->the_slot ();
} else if (req->type == Quit) {
if (req->type == Quit) {
BaseUI::quit ();
}
}
@@ -117,23 +99,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());
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-26 16:09+0200\n"
"POT-Creation-Date: 2013-10-23 19:07+0200\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:332 session.cc:2613 session.cc:2646 session.cc:3791
#: 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:1790 session.cc:1793
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:5008 session.cc:5024
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:685 session.cc:714
msgid "mono"
msgstr "Mono"
#: io.cc:1537 session.cc:689 session.cc:719
#: io.cc:1537 session.cc:698 session.cc:728
msgid "L"
msgstr "L"
#: io.cc:1537 session.cc:691 session.cc:721
#: io.cc:1537 session.cc:700 session.cc:730
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:4510 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,28 +1550,32 @@ 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"
@@ -1650,78 +1622,62 @@ msgstr "Klick einrichten"
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:634
msgid "could not setup Click I/O"
msgstr "konnte Metronom-E/A nicht einrichten"
#: session.cc:673
#: session.cc:682
#, c-format
msgid "out %<PRIu32>"
msgstr "out %<PRIu32>"
#: session.cc:687
#: session.cc:696
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr "out %<PRIu32>+%<PRIu32>"
#: session.cc:702
#: session.cc:711
#, c-format
msgid "in %<PRIu32>"
msgstr "in %<PRIu32>"
#: session.cc:716
#: session.cc:725
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr "in %<PRIu32>+%<PRIu32>"
#: session.cc:780
#: session.cc:789
msgid "cannot connect master output %1 to %2"
msgstr "kann Master-Ausgang %1 nicht mit %2 verbinden"
#: session.cc:839
#: session.cc:848
msgid "monitor"
msgstr "Monitor"
#: session.cc:884
#: session.cc:893
msgid "cannot connect control input %1 to %2"
msgstr "kann Kontrolleingang %1 nicht mit %2 verbinden"
#: session.cc:904
#: session.cc:913
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:944
msgid "cannot connect control output %1 to %2"
msgstr "kann Kontrollausgang %1 nicht mit %2 verbinden"
#: session.cc:999
#: session.cc:1008
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:1192
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:1232
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:1546
msgid "feedback loop setup between %1 and %2"
msgstr "Feedbackschleife zwischen %1 und %2 erkannt"
#: session.cc:1833
#: session.cc:1842
msgid "Session: could not create new midi track."
msgstr "Session: konnte keine neue MIDI-Spur erzeugen."
#: session.cc:1839
#: session.cc:1848
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:2025 session.cc:2028
msgid "Audio"
msgstr "Audio"
#: session.cc:2043 session.cc:2051 session.cc:2128 session.cc:2136
#: session.cc:2052 session.cc:2060 session.cc:2137 session.cc:2145
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:2083
msgid "Session: could not create new audio track."
msgstr "Session: konnte keine neue Audios.pur erzeugen"
#: session.cc:2106 session.cc:2109
#: session.cc:2115 session.cc:2118
msgid "Bus"
msgstr "Bus"
#: session.cc:2159
#: session.cc:2168
msgid "Session: could not create new audio route."
msgstr "Session: konnte keine neueAudio-Route erzeugen"
#: session.cc:2218 session.cc:2228
#: session.cc:2227 session.cc:2237
msgid "Session: UINT_MAX routes? impossible!"
msgstr "Session: UINT_MAX Routen? unmöglich!"
#: session.cc:2250
#: session.cc:2259
msgid "Session: cannot create track/bus from template description"
msgstr "Session: Kann die Route aus der Vorlagenbeschreibung nicht erzeugen"
#: session.cc:2276
#: session.cc:2285
msgid "Session: could not create new route from template"
msgstr "Session: konnte keine neue Route aus der Vorlage erzeugen."
#: session.cc:2305
#: session.cc:2314
msgid "Adding new tracks/busses failed"
msgstr "Fehler beim Hinzufügen neuer Spuren/Busse"
#: session.cc:3406
#: session.cc:3413
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:3533 session.cc:3591
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:3981
msgid "send ID %1 appears to be in use already"
msgstr "Send ID %1 ist offenbar schon in Gebrauch"
#: session.cc:3986
#: session.cc:3993
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:4005
msgid "return ID %1 appears to be in use already"
msgstr "Return ID %1 ist offenbar schon in Gebrauch"
#: session.cc:4010
#: session.cc:4017
msgid "insert ID %1 appears to be in use already"
msgstr "Insert ID %1 ist offenbar schon in Gebrauch"
#: session.cc:4137
#: session.cc:4144
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:4173
msgid "too many bounced versions of playlist \"%1\""
msgstr "zu viele gebouncete Versionen der Wiedergabeliste \"%1\""
#: session.cc:4176
#: session.cc:4183
msgid "cannot create new audio file \"%1\" for %2"
msgstr "kann keine neue Audiodatei \"%1\" für %2 erzeugen"
@@ -2072,55 +2028,55 @@ msgstr "Session: XML hat keinen Abschnitt \"mix groups\""
msgid "Session: XML state has no click section"
msgstr "Session: XML hat keinen Abschnitt \"click\""
#: session_state.cc:1366
#: session_state.cc:1360
msgid "Session: cannot create Route from XML description."
msgstr "Session: Kann die Route aus der XML-Beschreibung nicht erzeugen"
#: session_state.cc:1370
#: session_state.cc:1364
msgid "Loaded track/bus %1"
msgstr "Spur/Bus %1 wurde geladen"
#: session_state.cc:1468
#: session_state.cc:1462
msgid "Could not find diskstream for route"
msgstr "Konnte Diskstream für Route nicht finden"
#: session_state.cc:1522
#: session_state.cc:1516
msgid "Session: cannot create Region from XML description."
msgstr "Session: kann Region nicht aus XML-Beschreibung erzeugen"
#: session_state.cc:1526
#: session_state.cc:1520
msgid "Can not load state for region '%1'"
msgstr "Kann Status für Region '%1' nicht laden"
#: session_state.cc:1562
#: session_state.cc:1556
msgid "Regions in compound description not found (ID's %1 and %2): ignored"
msgstr ""
"Regionen der Verbindungsbeschreibung nicht gefunden (IDs %1 and %2): "
"ignoriert"
#: session_state.cc:1590
#: session_state.cc:1584
msgid "Nested source has no ID info in session file! (ignored)"
msgstr ""
"Verschachtelte Quelle hat keine ID-Information in Projektdatei! (ignoriert)"
#: session_state.cc:1602
#: session_state.cc:1596
msgid "Cannot reconstruct nested source for region %1"
msgstr "Kann verschachtelte Quelle für Region %1 nicht wiederherstellen"
#: session_state.cc:1664
#: session_state.cc:1658
msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion ist unvollständig "
"(Quelle fehlt)"
#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
#: session_state.cc:1666 session_state.cc:1687 session_state.cc:1707
msgid ""
"Session: XMLNode describing a AudioRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"unbekannte Quell-ID =%1"
#: session_state.cc:1678 session_state.cc:1699 session_state.cc:1719
#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
msgid ""
"Session: XMLNode describing a AudioRegion references a non-audio source id ="
"%1"
@@ -2128,7 +2084,7 @@ msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"Nicht-Audio Quell-ID =%1"
#: session_state.cc:1742
#: session_state.cc:1736
msgid ""
"Session: XMLNode describing an AudioRegion is missing some master sources; "
"ignored"
@@ -2136,27 +2092,27 @@ msgstr ""
"Session: dem XML-Knoten zur Beschreibung einer Audioregion fehlen einige "
"Hauptquellen; ignoriert"
#: session_state.cc:1776
#: session_state.cc:1770
msgid "Session: XMLNode describing a MidiRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region ist unvollständig "
"(Quelle fehlt)"
#: session_state.cc:1784
#: session_state.cc:1778
msgid ""
"Session: XMLNode describing a MidiRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"unbekannte Quell-ID =%1"
#: session_state.cc:1790
#: session_state.cc:1784
msgid ""
"Session: XMLNode describing a MidiRegion references a non-midi source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"Nicht-MIDI Quell-ID =%1"
#: session_state.cc:1858
#: session_state.cc:1852
msgid ""
"cannot create new file from region name \"%1\" with ident = \"%2\": too many "
"existing files with similar names"
@@ -2164,109 +2120,109 @@ msgstr ""
"kann keine neue Datei aus dem Regionennamen \"%1\" mit ident = \"%2\" "
"erzeugen: zu viele Dateien mit ähnlichen Namen existieren"
#: session_state.cc:1881
#: session_state.cc:1875
msgid "Session: cannot create Source from XML description."
msgstr "Session: Kann Quelle aus der XML-Beschreibung nicht erzeugen"
#: session_state.cc:1915
#: session_state.cc:1909
msgid "A sound file is missing. It will be replaced by silence."
msgstr "Eine Audiodatei fehlt. Sie wird durch Stille ersetzt werden."
#: session_state.cc:1938
#: session_state.cc:1932
msgid "Found a sound file that cannot be used by %1. Talk to the progammers."
msgstr ""
"Eine nicht mit %1 benutzbare Audiodatei wurde gefunden. Sprechen Sie mit den "
"Programmierern."
#: session_state.cc:1955
#: session_state.cc:1949
msgid "Could not create templates directory \"%1\" (%2)"
msgstr "Konnte Vorlagenverzeichnis \"%1\" nicht erzeugen (%2)"
#: session_state.cc:1968
#: session_state.cc:1962
msgid "Template \"%1\" already exists - new version not created"
msgstr "Vorlage \"%1\" existiert bereits - neue Version wurde nicht erzeugt"
#: session_state.cc:1974
#: session_state.cc:1968
msgid "Could not create directory for Session template\"%1\" (%2)"
msgstr "Konnte kein Verzeichnis für Projektvorlage \"%1\" erzeugen (%2)"
#: session_state.cc:1984
#: session_state.cc:1978
msgid "template not saved"
msgstr "Vorlage nicht gesichert"
#: session_state.cc:1994
#: session_state.cc:1988
msgid "Could not create directory for Session template plugin state\"%1\" (%2)"
msgstr ""
"Konnte Verzeichnis für Projektvorlagen-Pluginstatus \"%1\" nicht erzeugen "
"(%2)"
#: session_state.cc:2189
#: session_state.cc:2183
msgid "Unknown node \"%1\" found in Bundles list from session file"
msgstr "Unbekannter Knoten \"%1\" in Bündelliste der Projektdatei gefunden"
#: session_state.cc:2731 session_state.cc:2737
#: session_state.cc:2725 session_state.cc:2731
msgid "Cannot expand path %1 (%2)"
msgstr "Kann Pfad %1 nicht expandieren (%2)"
#: session_state.cc:2790
#: session_state.cc:2784
msgid "Session: cannot create dead file folder \"%1\" (%2)"
msgstr "Session: kann den Mülleimer \"%1\" nicht erzeugen (%2)"
#: session_state.cc:2829
#: session_state.cc:2823
msgid "cannot rename unused file source from %1 to %2 (%3)"
msgstr "kann unbenutzte Dateiquelle nicht von %1 nach %2 umbenennen (%3)"
#: session_state.cc:2847
#: session_state.cc:2841
msgid "cannot remove peakfile %1 for %2 (%3)"
msgstr "kann Peakdatei %1 für %2 nicht entfernen (%3)"
#: session_state.cc:3149
#: session_state.cc:3143
msgid "could not backup old history file, current history not saved"
msgstr ""
"konnte kein Backup der alten Aktionsliste erstellen, momentane Aktionsliste "
"ungesichert"
#: session_state.cc:3162
#: session_state.cc:3156
msgid "history could not be saved to %1"
msgstr "Aktionsliste konnte nicht nach %1 gesichert werden"
#: session_state.cc:3165
#: session_state.cc:3159
msgid "Could not remove history file at path \"%1\" (%2)"
msgstr "Konnte Aktionslistendatei im Pfad \"%1\" nicht entfernen (%2)"
#: session_state.cc:3169
#: session_state.cc:3163
msgid "could not restore history file from backup %1 (%2)"
msgstr "konnte Aktionslistendatei nicht aus dem Backup %1 restaurieren (%2)"
#: session_state.cc:3194
#: session_state.cc:3188
msgid "%1: no history file \"%2\" for this session."
msgstr "%1: keine Aktionslistendatei \"%2\" für dieses Projekt."
#: session_state.cc:3200
#: session_state.cc:3194
msgid "Could not understand session history file \"%1\""
msgstr "Konnte Projekt-Aktionslistendatei \"%1\" nicht verstehen"
#: session_state.cc:3242
#: session_state.cc:3236
msgid "Failed to downcast MidiSource for NoteDiffCommand"
msgstr "MidiSource für NoteDiffCommand nicht auffindbar"
#: session_state.cc:3253
#: session_state.cc:3247
msgid "Failed to downcast MidiSource for SysExDiffCommand"
msgstr "MidiSource für SysExDiffCommand nicht auffindbar"
#: session_state.cc:3264
#: session_state.cc:3258
msgid "Failed to downcast MidiSource for PatchChangeDiffCommand"
msgstr "MidiSource für PatchChangeDiffCommand nicht auffindbar"
#: session_state.cc:3272
#: session_state.cc:3266
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr "Konnte im XML-Knoten \"%1\" keinen Befehl erkennen."
#: session_state.cc:3524
#: session_state.cc:3502
msgid "Session: unknown diskstream type in XML"
msgstr "Session: Unbekannter Diskstream im XML"
#: session_state.cc:3529
#: session_state.cc:3507
msgid "Session: could not load diskstream via XML state"
msgstr "Session: konnte Diskstream nicht via XML-Status laden"
@@ -2710,56 +2666,3 @@ msgstr "Programmierfehler: unbekanntes natives Dateikopfformat: %1"
#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "kann Verzeichnis %1 nicht öffnen (%2)"
#~ msgid "Setup signal flow and plugins"
#~ msgstr "Richte Signalfluss and Plugins ein"
#~ msgid "cannot setup Click I/O"
#~ msgstr "kann Metronom-E/A nicht einrichten"
#~ msgid "Compute I/O Latencies"
#~ msgstr "Berechne E/A-Latenzen"
#~ msgid ""
#~ "This version of JACK is old - you should upgrade to a newer version that "
#~ "supports jack_port_type_get_buffer_size()"
#~ msgstr ""
#~ "Diese JACK-Version ist alt - Sie sollten auf eine Version upgraden, die "
#~ "jack_port_type_get_buffer_size() unterstützt"
#~ msgid "Connect session to engine"
#~ msgstr "Verbinde Projekt mit Engine"
#~ msgid "connect called before engine was started"
#~ msgstr "Aufruf von connect vor dem Start der Engine"
#~ msgid "disconnect called before engine was started"
#~ msgstr "Aufruf von disconnect vor dem Start der Engine"
#~ msgid "get_port_by_name() called before engine was started"
#~ msgstr "Aufruf von get_port_by_name() vor dem Start der Engine"
#~ msgid "get_ports called before engine was started"
#~ msgstr "Aufruf von get_ports vor dem Start der Engine"
#~ msgid "failed to connect to JACK"
#~ msgstr "Verbindung zu JACK fehlgeschlagen"
#~ msgid "get_connected_latency_range() called while disconnected from JACK"
#~ msgstr "Aufruf von get_connected_latency_range(), während von JACK getrennt"
#~ msgid "Session: could not send full MIDI time code"
#~ msgstr "Session: konnte vollständigen MIDI-Timecode nicht senden"
#~ msgid "Session"
#~ msgstr "Projekt"
#~ msgid "MidiDiskstream: XML property channel-mask out of range"
#~ msgstr "MidiDiskstream: Wertüberschreitung der XML-Eigenschaft Kanalmaske"
#~ msgid ""
#~ "Copying old session file %1 to %2\n"
#~ "Use %2 with %3 versions before 2.0 from now on"
#~ msgstr ""
#~ "Kopiere alte Projektdatei %1 nach %2\n"
#~ "Benutzen Sie von jetzt an %2 mit %3-Versionen vor 2.0"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libardour 3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 21:42+0400\n"
"POT-Creation-Date: 2013-10-23 19:07+0200\n"
"PO-Revision-Date: 2013-10-15 21:40+0300\n"
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
"Language-Team: русский <>\n"
@@ -391,7 +391,7 @@ msgstr ""
msgid "audio"
msgstr ""
#: data_type.cc:28 session.cc:1788 session.cc:1791
#: data_type.cc:28 session.cc:1790 session.cc:1793
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:5008 session.cc:5024
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:685 session.cc:714
msgid "mono"
msgstr ""
#: io.cc:1537 session.cc:696 session.cc:726
#: io.cc:1537 session.cc:698 session.cc:728
msgid "L"
msgstr ""
#: io.cc:1537 session.cc:698 session.cc:728
#: io.cc:1537 session.cc:700 session.cc:730
msgid "R"
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,26 +1454,30 @@ 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 ""
@@ -1550,127 +1522,111 @@ msgstr ""
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:634
msgid "could not setup Click I/O"
msgstr ""
#: session.cc:680
#: session.cc:682
#, c-format
msgid "out %<PRIu32>"
msgstr ""
#: session.cc:694
#: session.cc:696
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr ""
#: session.cc:709
#: session.cc:711
#, c-format
msgid "in %<PRIu32>"
msgstr ""
#: session.cc:723
#: session.cc:725
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr ""
#: session.cc:787
#: session.cc:789
msgid "cannot connect master output %1 to %2"
msgstr ""
#: session.cc:846
#: session.cc:848
msgid "monitor"
msgstr ""
#: session.cc:891
#: session.cc:893
msgid "cannot connect control input %1 to %2"
msgstr ""
#: session.cc:911
#: session.cc:913
msgid "The preferred I/O for the monitor bus (%1) cannot be found"
msgstr ""
#: session.cc:942
#: session.cc:944
msgid "cannot connect control output %1 to %2"
msgstr ""
#: session.cc:1006
#: session.cc:1008
msgid "cannot create Auditioner: no auditioning of regions possible"
msgstr ""
#: session.cc:1190
#: session.cc:1192
msgid "Session: you can't use that location for auto punch (start <= end)"
msgstr ""
#: session.cc:1230
#: session.cc:1232
msgid ""
"You cannot use this location for auto-loop because it has zero or negative "
"length"
msgstr ""
#: session.cc:1544
#: session.cc:1546
msgid "feedback loop setup between %1 and %2"
msgstr ""
#: session.cc:1840
#: session.cc:1842
msgid "Session: could not create new midi track."
msgstr ""
#: session.cc:1846
#: session.cc:1848
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:2025 session.cc:2028
msgid "Audio"
msgstr ""
#: session.cc:2050 session.cc:2058 session.cc:2135 session.cc:2143
#: session.cc:2052 session.cc:2060 session.cc:2137 session.cc:2145
msgid "cannot configure %1 in/%2 out configuration for new audio track"
msgstr ""
#: session.cc:2081
#: session.cc:2083
msgid "Session: could not create new audio track."
msgstr ""
#: session.cc:2113 session.cc:2116
#: session.cc:2115 session.cc:2118
msgid "Bus"
msgstr ""
#: session.cc:2166
#: session.cc:2168
msgid "Session: could not create new audio route."
msgstr ""
#: session.cc:2225 session.cc:2235
#: session.cc:2227 session.cc:2237
msgid "Session: UINT_MAX routes? impossible!"
msgstr ""
#: session.cc:2257
#: session.cc:2259
msgid "Session: cannot create track/bus from template description"
msgstr ""
#: session.cc:2283
#: session.cc:2285
msgid "Session: could not create new route from template"
msgstr ""
#: session.cc:2312
#: session.cc:2314
msgid "Adding new tracks/busses failed"
msgstr "Не удалось добавить новые дорожки/шины"
@@ -2110,11 +2066,11 @@ msgstr ""
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr ""
#: session_state.cc:3518
#: session_state.cc:3502
msgid "Session: unknown diskstream type in XML"
msgstr ""
#: session_state.cc:3523
#: session_state.cc:3507
msgid "Session: could not load diskstream via XML state"
msgstr ""
@@ -2528,66 +2484,3 @@ msgstr "programming error: unknown native header format: %1"
#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "cannot open directory %1 (%2)"
#~ msgid "Setup signal flow and plugins"
#~ msgstr "Настройка модулей и звукового потока"
#~ msgid "Session"
#~ msgstr "Сеанс"
#, fuzzy
#~ msgid "editor"
#~ msgstr "монитор"
#, fuzzy
#~ msgid "programming error: realpath(%1) failed, errcode %2"
#~ msgstr "ошибка программы: "
#, fuzzy
#~ msgid "programming error:"
#~ msgstr "ошибка программы: "
#~ msgid "cannot activate JACK client"
#~ msgstr "не удалось активировать клиента JACK сервера"
#, fuzzy
#~ msgid "removed event"
#~ msgstr "удалить область"
#, fuzzy
#~ msgid "removed range"
#~ msgstr "удалить область"
#~ msgid "add"
#~ msgstr "добавить"
#~ msgid "remove"
#~ msgstr "удалить"
#~ msgid "remove region"
#~ msgstr "удалить область"
#~ msgid "separate"
#~ msgstr "разделить"
#~ msgid "split"
#~ msgstr "склеить"
#~ msgid "pre"
#~ msgstr "пре"
#~ msgid "post"
#~ msgstr "пост"
#, fuzzy
#~ msgid "Master Out"
#~ msgstr "мастер"
#~ msgid "16 bit"
#~ msgstr "16 бит"
#~ msgid "24 bit"
#~ msgstr "24 бита"
#~ msgid "8 bit"
#~ msgstr "8 бит"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -62,7 +62,7 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
to quantize relative to actual session beats (etc.) rather than from the
start of the model.
*/
const double round_pos = ceil(position / _start_grid) * _start_grid;
const double round_pos = round(position / _start_grid) * _start_grid;
const double offset = round_pos - position;
bool even;
@@ -72,10 +72,13 @@ 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() / _start_grid) * _start_grid + offset;
double new_end = round ((*i)->end_time() / _end_grid) * _end_grid + offset;
double new_start = round (((*i)->time() - offset) / _start_grid) * _start_grid + offset;
double new_end = round (((*i)->end_time() - offset) / _end_grid) * _end_grid + offset;
if (_swing > 0.0 && !even) {
@@ -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));
}

View File

@@ -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"

View File

@@ -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);
{

View File

@@ -333,9 +333,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 = [
@@ -400,9 +405,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']) + '"',
@@ -538,9 +547,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'):
testcommon.uselib.extend(['RUBBERBAND', 'TAGLIB', 'LIBLTC', 'VAMPSDK',
'VAMPHOSTSDK'])
else:
testcommon.use.extend(['libltc', 'librubberband', 'libtaglib',
'libvamphost'])
testobj.name = name
testobj.target = target
# not sure about install path

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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) {

View File

@@ -20,11 +20,6 @@ msgstr ""
msgid "Unknown action name: %1"
msgstr ""
#: binding_proxy.cc:84
#, fuzzy
msgid "operate controller now"
msgstr "λειτουργία ελεγκτή MIDI τώρα"
#: bindable_button.cc:48
msgid "button cannot watch state of non-existing Controllable\n"
msgstr ""
@@ -91,33 +86,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 "Ανανέωση"

View File

@@ -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"

View File

@@ -54,11 +54,6 @@ msgstr "Commande"
msgid "Control"
msgstr "Ctrl"
#: keyboard.cc:70 keyboard.cc:73 keyboard.cc:87 keyboard.cc:90
#, fuzzy
msgid "Key|Shift"
msgstr "Maj"
#: keyboard.cc:71
msgid "Option"
msgstr "Option"
@@ -75,11 +70,6 @@ msgstr "Meta"
msgid "Unknown"
msgstr "Inconnu"
#: keyboard.cc:542
#, fuzzy
msgid "key bindings file not found at \"%2\" or contains errors."
msgstr "Raccourcis clavier pour %1 introuvable dans \"%1\" ou corrompu."
#: tearoff.cc:57
msgid "Click to tear this into its own window"
msgstr "Cliquez pour afficher dans une fenêtre séparée"
@@ -91,6 +81,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

View File

@@ -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"

View File

@@ -20,11 +20,6 @@ msgstr ""
msgid "Unknown action name: %1"
msgstr ""
#: binding_proxy.cc:84
#, fuzzy
msgid "operate controller now"
msgstr "Operar controladora de MIDI agora"
#: bindable_button.cc:48
msgid "button cannot watch state of non-existing Controllable\n"
msgstr ""
@@ -91,33 +86,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"

View File

@@ -96,42 +96,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 "Обновить"

View File

@@ -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'

View File

@@ -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: */

View File

@@ -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: */

View File

@@ -15,10 +15,9 @@ 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.4.0',
uselib_store='LV2_1_4_0')
autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.0',
uselib_store='LV2_1_0_0')
def build(bld):
bundle = 'reasonablesynth.lv2'
@@ -41,7 +40,7 @@ def build(bld):
name = 'reasonablesynth',
target = '../../LV2/%s/reasonablesynth' % bundle,
install_path = '${LV2DIR}/%s' % bundle,
use = 'LV2_1_4_0'
use = 'LV2_1_0_0'
)
obj.env.cshlib_PATTERN = module_pat

View File

@@ -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/'

View File

@@ -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')

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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 = '''