summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-02-13 16:38:14 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-02-13 16:38:14 +0000
commit35b9bf0567beb7c795f395bd0ca528812d5aa9ac (patch)
tree02f7b977803c6ee1e321726c7b9fccc31356fade /libs/ardour
parentb248526fe35a846af0f62985c18e62e3e8817f9c (diff)
"boot" messages; more AU fixes; new SAE ui.conf file
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3049 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/ardour.h1
-rw-r--r--libs/ardour/ardour/audio_unit.h5
-rw-r--r--libs/ardour/audio_unit.cc218
-rw-r--r--libs/ardour/globals.cc7
-rw-r--r--libs/ardour/route.cc3
-rw-r--r--libs/ardour/session_state.cc2
6 files changed, 134 insertions, 102 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index dbc08fff7c..9da1e924e3 100644
--- a/libs/ardour/ardour/ardour.h
+++ b/libs/ardour/ardour/ardour.h
@@ -43,6 +43,7 @@ namespace ARDOUR {
extern OSC* osc;
static const nframes_t max_frames = JACK_MAX_FRAMES;
+ extern sigc::signal<void,std::string> BootMessage;
int init (bool with_vst, bool try_optimization);
int cleanup ();
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index 0ddd4c1a50..b63aa5ce85 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -52,6 +52,7 @@ struct AUParameterDescriptor : public Plugin::ParameterDescriptor {
AudioUnitScope scope;
AudioUnitElement element;
float default_value;
+ bool automatable;
};
class AUPlugin : public ARDOUR::Plugin
@@ -113,7 +114,6 @@ class AUPlugin : public ARDOUR::Plugin
private:
boost::shared_ptr<CAComponent> comp;
boost::shared_ptr<CAAudioUnit> unit;
- AUParamInfo* param_info;
AudioStreamBasicDescription streamFormat;
bool initialized;
@@ -128,6 +128,7 @@ class AUPlugin : public ARDOUR::Plugin
int set_input_format ();
int set_stream_format (int scope, uint32_t cnt);
int _set_block_size (nframes_t nframes);
+ void discover_parameters ();
std::vector<std::pair<uint32_t, uint32_t> > parameter_map;
uint32_t current_maxbuf;
@@ -135,7 +136,7 @@ class AUPlugin : public ARDOUR::Plugin
nframes_t cb_offset;
vector<Sample*>* current_buffers;
nframes_t frames_processed;
-
+
std::vector<AUParameterDescriptor> descriptors;
};
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 30f97dea96..6640740ad6 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -59,7 +59,6 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
Plugin (engine, session),
comp (_comp),
unit (new CAAudioUnit),
- param_info (0),
initialized (false),
buffers (0),
current_maxbuf (0),
@@ -110,99 +109,9 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
throw failed_constructor();
}
- /* discover writable parameters */
-
- cerr << "get param info, there are " << global_elements << " global elements\n";
+ discover_parameters ();
- param_info = new AUParamInfo (unit->AU(), false, false, kAudioUnitScope_Global);
-
- cerr << "discovered " << param_info->NumParams() << " parameters\n";
-
- for (uint32_t i = 0; i < param_info->NumParams(); ++i) {
-
- AUParameterDescriptor d;
-
- d.id = param_info->ParamID (i);
-
- const CAAUParameter* param = param_info->GetParamInfo (d.id);
- const AudioUnitParameterInfo& info (param->ParamInfo());
-
- d.scope = param_info->GetScope ();
- d.element = param_info->GetElement ();
-
- /* info.units to consider */
- /*
- kAudioUnitParameterUnit_Generic = 0
- kAudioUnitParameterUnit_Indexed = 1
- kAudioUnitParameterUnit_Boolean = 2
- kAudioUnitParameterUnit_Percent = 3
- kAudioUnitParameterUnit_Seconds = 4
- kAudioUnitParameterUnit_SampleFrames = 5
- kAudioUnitParameterUnit_Phase = 6
- kAudioUnitParameterUnit_Rate = 7
- kAudioUnitParameterUnit_Hertz = 8
- kAudioUnitParameterUnit_Cents = 9
- kAudioUnitParameterUnit_RelativeSemiTones = 10
- kAudioUnitParameterUnit_MIDINoteNumber = 11
- kAudioUnitParameterUnit_MIDIController = 12
- kAudioUnitParameterUnit_Decibels = 13
- kAudioUnitParameterUnit_LinearGain = 14
- kAudioUnitParameterUnit_Degrees = 15
- kAudioUnitParameterUnit_EqualPowerCrossfade = 16
- kAudioUnitParameterUnit_MixerFaderCurve1 = 17
- kAudioUnitParameterUnit_Pan = 18
- kAudioUnitParameterUnit_Meters = 19
- kAudioUnitParameterUnit_AbsoluteCents = 20
- kAudioUnitParameterUnit_Octaves = 21
- kAudioUnitParameterUnit_BPM = 22
- kAudioUnitParameterUnit_Beats = 23
- kAudioUnitParameterUnit_Milliseconds = 24
- kAudioUnitParameterUnit_Ratio = 25
- */
-
- /* info.flags to consider */
-
- /*
-
- kAudioUnitParameterFlag_CFNameRelease = (1L << 4)
- kAudioUnitParameterFlag_HasClump = (1L << 20)
- kAudioUnitParameterFlag_HasName = (1L << 21)
- kAudioUnitParameterFlag_DisplayLogarithmic = (1L << 22)
- kAudioUnitParameterFlag_IsHighResolution = (1L << 23)
- kAudioUnitParameterFlag_NonRealTime = (1L << 24)
- kAudioUnitParameterFlag_CanRamp = (1L << 25)
- kAudioUnitParameterFlag_ExpertMode = (1L << 26)
- kAudioUnitParameterFlag_HasCFNameString = (1L << 27)
- kAudioUnitParameterFlag_IsGlobalMeta = (1L << 28)
- kAudioUnitParameterFlag_IsElementMeta = (1L << 29)
- kAudioUnitParameterFlag_IsReadable = (1L << 30)
- kAudioUnitParameterFlag_IsWritable = (1L << 31)
- */
-
- d.integer_step = false;
- d.toggled = false;
- d.logarithmic = false;
- d.sr_dependent = false;
-
- const int len = CFStringGetLength (param->GetName());;
- char local_buffer[len*2];
- Boolean good = CFStringGetCString(param->GetName(),local_buffer,len*2,kCFStringEncodingMacRoman);
- if (!good) {
- d.label = "???";
- } else {
- d.label = local_buffer;
- }
- d.lower = info.minValue;
- d.upper = info.maxValue;
- d.default_value = info.defaultValue;
- d.step = 1.0;
- d.smallstep = 0.1;
- d.largestep = 10.0;
- d.min_unbound = d.lower;
- d.max_unbound = d.upper;
-
- descriptors.push_back (d);
- }
+ Plugin::setup_controls ();
}
AUPlugin::~AUPlugin ()
@@ -211,15 +120,124 @@ AUPlugin::~AUPlugin ()
unit->Uninitialize ();
}
- if (param_info) {
- delete param_info;
- }
-
if (buffers) {
free (buffers);
}
}
+void
+AUPlugin::discover_parameters ()
+{
+ /* discover writable parameters */
+
+ cerr << "get param info, there are " << global_elements << " global elements\n";
+
+ AudioUnitScope scopes[] = {
+ kAudioUnitScope_Global,
+ kAudioUnitScope_Output,
+ kAudioUnitScope_Input
+ };
+
+ descriptors.clear ();
+
+ for (uint32_t i = 0; i < sizeof (scopes) / sizeof (scopes[0]); ++i) {
+
+ AUParamInfo param_info (unit->AU(), false, false, scopes[i]);
+
+ cerr << "discovered " << param_info.NumParams() << " parameters in scope " << i << endl;
+
+ for (uint32_t i = 0; i < param_info.NumParams(); ++i) {
+
+ AUParameterDescriptor d;
+
+ d.id = param_info.ParamID (i);
+
+ const CAAUParameter* param = param_info.GetParamInfo (d.id);
+ const AudioUnitParameterInfo& info (param->ParamInfo());
+
+ d.scope = param_info.GetScope ();
+ d.element = param_info.GetElement ();
+
+ /* info.units to consider */
+ /*
+ kAudioUnitParameterUnit_Generic = 0
+ kAudioUnitParameterUnit_Indexed = 1
+ kAudioUnitParameterUnit_Boolean = 2
+ kAudioUnitParameterUnit_Percent = 3
+ kAudioUnitParameterUnit_Seconds = 4
+ kAudioUnitParameterUnit_SampleFrames = 5
+ kAudioUnitParameterUnit_Phase = 6
+ kAudioUnitParameterUnit_Rate = 7
+ kAudioUnitParameterUnit_Hertz = 8
+ kAudioUnitParameterUnit_Cents = 9
+ kAudioUnitParameterUnit_RelativeSemiTones = 10
+ kAudioUnitParameterUnit_MIDINoteNumber = 11
+ kAudioUnitParameterUnit_MIDIController = 12
+ kAudioUnitParameterUnit_Decibels = 13
+ kAudioUnitParameterUnit_LinearGain = 14
+ kAudioUnitParameterUnit_Degrees = 15
+ kAudioUnitParameterUnit_EqualPowerCrossfade = 16
+ kAudioUnitParameterUnit_MixerFaderCurve1 = 17
+ kAudioUnitParameterUnit_Pan = 18
+ kAudioUnitParameterUnit_Meters = 19
+ kAudioUnitParameterUnit_AbsoluteCents = 20
+ kAudioUnitParameterUnit_Octaves = 21
+ kAudioUnitParameterUnit_BPM = 22
+ kAudioUnitParameterUnit_Beats = 23
+ kAudioUnitParameterUnit_Milliseconds = 24
+ kAudioUnitParameterUnit_Ratio = 25
+ */
+
+ /* info.flags to consider */
+
+ /*
+
+ kAudioUnitParameterFlag_CFNameRelease = (1L << 4)
+ kAudioUnitParameterFlag_HasClump = (1L << 20)
+ kAudioUnitParameterFlag_HasName = (1L << 21)
+ kAudioUnitParameterFlag_DisplayLogarithmic = (1L << 22)
+ kAudioUnitParameterFlag_IsHighResolution = (1L << 23)
+ kAudioUnitParameterFlag_NonRealTime = (1L << 24)
+ kAudioUnitParameterFlag_CanRamp = (1L << 25)
+ kAudioUnitParameterFlag_ExpertMode = (1L << 26)
+ kAudioUnitParameterFlag_HasCFNameString = (1L << 27)
+ kAudioUnitParameterFlag_IsGlobalMeta = (1L << 28)
+ kAudioUnitParameterFlag_IsElementMeta = (1L << 29)
+ kAudioUnitParameterFlag_IsReadable = (1L << 30)
+ kAudioUnitParameterFlag_IsWritable = (1L << 31)
+ */
+
+ d.integer_step = (info.unit & kAudioUnitParameterUnit_Indexed);
+ d.toggled = (info.unit & kAudioUnitParameterUnit_Boolean);
+ d.sr_dependent = (info.unit & kAudioUnitParameterUnit_SampleFrames);
+
+ d.automatable = !(info.flags & kAudioUnitParameterFlag_NonRealTime);
+ d.logarithmic = (info.flags & kAudioUnitParameterFlag_DisplayLogarithmic);
+
+ const int len = CFStringGetLength (param->GetName());;
+ char local_buffer[len*2];
+ Boolean good = CFStringGetCString(param->GetName(),local_buffer,len*2,kCFStringEncodingMacRoman);
+ if (!good) {
+ d.label = "???";
+ } else {
+ d.label = local_buffer;
+ }
+
+ d.lower = info.minValue;
+ d.upper = info.maxValue;
+ d.default_value = info.defaultValue;
+ d.step = 1.0;
+ d.smallstep = 0.1;
+ d.largestep = 10.0;
+ d.min_unbound = 0; // lower is bound
+ d.max_unbound = 0; // upper is bound
+
+ descriptors.push_back (d);
+ }
+ }
+}
+
+
string
AUPlugin::unique_id () const
{
@@ -235,7 +253,7 @@ AUPlugin::label () const
uint32_t
AUPlugin::parameter_count () const
{
- return param_info->NumParams ();
+ return descriptors.size();
}
float
@@ -508,7 +526,9 @@ AUPlugin::automatable() const
set<uint32_t> automates;
for (uint32_t i = 0; i < descriptors.size(); ++i) {
- automates.insert (i);
+ if (descriptors[i].automatable) {
+ automates.insert (i);
+ }
}
return automates;
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index fc0b074834..be9a194a62 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -94,6 +94,8 @@ Change ARDOUR::PositionChanged = ARDOUR::new_change ();
Change ARDOUR::NameChanged = ARDOUR::new_change ();
Change ARDOUR::BoundsChanged = Change (0); // see init(), below
+sigc::signal<void,std::string> ARDOUR::BootMessage;
+
#ifdef HAVE_LIBLO
static int
setup_osc ()
@@ -105,6 +107,7 @@ setup_osc ()
osc = new OSC (Config->get_osc_port());
if (Config->get_use_osc ()) {
+ BootMessage (_("Starting OSC"));
return osc->start ();
} else {
return 0;
@@ -120,6 +123,8 @@ setup_midi ()
return 0;
}
+ BootMessage (_("Configuring MIDI ports"));
+
for (std::map<string,XMLNode>::iterator i = Config->midi_ports.begin(); i != Config->midi_ports.end(); ++i) {
MIDI::Manager::instance()->add_port (i->second);
}
@@ -294,6 +299,8 @@ ARDOUR::init (bool use_vst, bool try_optimization)
lrdf_init();
Library = new AudioLibrary;
+ BootMessage (_("Loading configuration"));
+
Config = new Configuration;
if (Config->load_state ()) {
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 0ff6a02799..1b26dd8c7f 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -41,6 +41,7 @@
#include <ardour/panner.h>
#include <ardour/dB.h>
#include <ardour/mix.h>
+#include <ardour/profile.h>
#include "i18n.h"
@@ -916,8 +917,8 @@ Route::add_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_t*
reset_panner ();
}
-
redirects_changed (src); /* EMIT SIGNAL */
+
return 0;
}
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 168885ea8e..06291991d8 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -1380,6 +1380,8 @@ Session::load_routes (const XMLNode& node)
return -1;
}
+ BootMessage (string_compose (_("Loaded track/bus %1"), route->name()));
+
new_routes.push_back (route);
}