#include <glibmm/miscutils.h>
#include "ardour/ardour.h"
+#include "ardour/audio_unit.h"
#include "ardour/audioengine.h"
#include "ardour/audio_buffer.h"
#include "ardour/debug.h"
-#include "ardour/midi_buffer.h"
#include "ardour/filesystem_paths.h"
#include "ardour/io.h"
-#include "ardour/audio_unit.h"
+#include "ardour/midi_buffer.h"
#include "ardour/route.h"
#include "ardour/session.h"
#include "ardour/tempo.h"
, input_buffers (0)
, input_map (0)
, samples_processed (0)
+ , audio_input_cnt (0)
, _parameter_listener (0)
, _parameter_listener_arg (0)
, transport_sample (0)
kAudioUnitParameterUnit_Boolean = 2
kAudioUnitParameterUnit_Percent = 3
kAudioUnitParameterUnit_Seconds = 4
- kAudioUnitParameterUnit_SampleSamples = 5
+ kAudioUnitParameterUnit_SampleFrames = 5
kAudioUnitParameterUnit_Phase = 6
kAudioUnitParameterUnit_Rate = 7
kAudioUnitParameterUnit_Hertz = 8
d.integer_step = (info.unit == kAudioUnitParameterUnit_Indexed);
d.toggled = (info.unit == kAudioUnitParameterUnit_Boolean) ||
(d.integer_step && ((d.upper - d.lower) == 1.0));
- d.sr_dependent = (info.unit == kAudioUnitParameterUnit_SampleSamples);
+ d.sr_dependent = (info.unit == kAudioUnitParameterUnit_SampleFrames);
d.automatable = /* !d.toggled && -- ardour can automate toggles, can AU ? */
!(info.flags & kAudioUnitParameterFlag_NonRealTime) &&
(info.flags & kAudioUnitParameterFlag_IsWritable);
deactivate ();
}
- DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("set MaximumSamplesPerSlice in global scope to %1\n", numSamples));
- if ((err = unit->SetProperty (kAudioUnitProperty_MaximumSamplesPerSlice, kAudioUnitScope_Global,
+ DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("set MaximumFramesPerSlice in global scope to %1\n", numSamples));
+ if ((err = unit->SetProperty (kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global,
0, &numSamples, sizeof (numSamples))) != noErr) {
error << string_compose (_("AU: cannot set max samples (err = %1)"), err) << endmsg;
return -1;
#endif
streamFormat.mBitsPerChannel = 32;
- streamFormat.mSamplesPerPacket = 1;
+ streamFormat.mFramesPerPacket = 1;
/* apple says that for non-interleaved data, these
* values always refer to a single channel.
for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
int32_t possible_in = i->first;
int32_t possible_out = i->second;
- if (possible_in < 1 || possible_out < 1) {
+ if (possible_in < 0) {
continue;
}
for (uint32_t i = 1; i < input_elements; ++i) {
// on the 2nd bus.
io_configs.push_back (pair<int,int> (possible_in + bus_inputs[i], possible_out));
}
+ /* only add additional, optional busses to first available config.
+ * AUPluginInfo::cached_io_configuration () already incrementally
+ * adds busses (for instruments w/ multiple configurations)
+ */
+ break;
}
}
for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
int32_t possible_in = i->first;
int32_t possible_out = i->second;
- if (possible_in < 1 || possible_out < 1) {
+ if (possible_out < 0) {
continue;
}
for (uint32_t i = 1; i < output_elements; ++i) {
}
io_configs.push_back (pair<int,int> (possible_in, possible_out + c));
}
+ /* only add additional, optional busses to first available config.
+ * AUPluginInfo::cached_io_configuration () already incrementally
+ * adds busses (for instruments w/ multiple configurations)
+ */
+ break;
}
}
int
AUPlugin::connect_and_run (BufferSet& bufs,
samplepos_t start, samplepos_t end, double speed,
- ChanMapping in_map, ChanMapping out_map,
+ ChanMapping const& in_map, ChanMapping const& out_map,
pframes_t nframes, samplecnt_t offset)
{
Plugin::connect_and_run(bufs, start, end, speed, in_map, out_map, nframes, offset);
DEBUG_TRACE (DEBUG::AudioUnits, string_compose("AU Saving Preset to %1\n", user_preset_path));
- return string ("file:///") + user_preset_path;
+ return user_preset_path;
}
//-----------------------------------------------------------------------------
continue;
case kAudioUnitType_Output:
- info->category = _("AudioUnit Output");
+ info->category = _("Output");
break;
case kAudioUnitType_MusicDevice:
info->category = _("Instrument");
has_midi_in = true;
break;
case kAudioUnitType_MusicEffect:
- info->category = _("Music Effect");
+ info->category = _("Effect");
has_midi_in = true;
break;
case kAudioUnitType_Effect:
info->category = _("Generator");
break;
default:
- info->category = _("AudioUnit (Unknown)");
+ info->category = _("(Unknown)");
break;
}
return descriptor->IsMusicDevice();
}
+bool
+AUPluginInfo::is_utility () const
+{
+ return (descriptor->IsGenerator() || descriptor->componentType == 'aumi');
+ // kAudioUnitType_MidiProcessor ..looks like we aren't even scanning for these yet?
+}
+
void
AUPlugin::set_info (PluginInfoPtr info)
{