opts = Options('scache.conf')
opts.AddOptions(
('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
+ BoolOption('AUDIOUNITS', 'Compile with Apple\'s AudioUnit library. (experimental)', 0),
BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library', 0),
BoolOption('DEBUG', 'Set to build with debugging information and no optimizations', 0),
PathOption('DESTDIR', 'Set the intermediate install "prefix"', '/'),
libraries['dmalloc'] = conf.Finish ()
-#
-
#
# Audio/MIDI library (needed for MIDI, since audio is all handled via JACK)
#
connection_editor.cc
""")
-coreaudio_files=Split("""
+audiounit_files=Split("""
au_pluginui.cc
""")
extra_sources += vst_files
gtkardour.Append (CCFLAGS="-DVST_SUPPORT", CPPPATH="#libs/fst")
-if gtkardour['COREAUDIO']:
- extra_sources += coreaudio_files
- gtkardour.Append(CCFLAGS='-DHAVE_COREAUDIO')
+if gtkardour['AUDIOUNITS']:
+ extra_sources += audiounit_files
+ gtkardour.Append(CCFLAGS='-DHAVE_AUDIOUNITS')
gtkardour.Append(LINKFLAGS='-framework Carbon')
gtkardour.Merge([libraries['appleutility']])
throw failed_constructor ();
}
- OSStatus err = noErr;
-
- CAComponentDescription desc;
- Component carbonViewComponent = NULL;
- AudioUnitCarbonView carbonView = NULL;
-
- GetComponentInfo(au->get_comp()->Comp(), &desc, 0, 0, 0);
- carbonViewComponent = get_carbon_view_component(desc.componentSubType);
- err = OpenAComponent(carbonViewComponent, &carbonView);
-
- Rect rec;
- rec.top = 0;
- rec.left = 0;
- rec.bottom = 400;
- rec.right = 500;
-
- ProcessSerialNumber ourPSN;
-
- /* Here we will set the MacOSX native section of the process to the foreground for putting up this
- * dialog box. First step is to get our process serial number. We do this by calling
- * GetCurrentProcess.
- * First Argument: On success this PSN will be our PSN on return.
- * Return Value: A Macintosh error indicating success or failure.
- */
- err = GetCurrentProcess(&ourPSN);
-
- //If no error then set this process to be frontmost.
- if (err == noErr) {
- /* Calling SetFrontProcess to make us frontmost.
- * First Argument: The Process Serial Number of the process we want to make frontmost. Here
- * of course we pass our process serial number
- * Return Value: An error value indicating success or failure. We just ignore the return
- * value here.
- */
- (void)SetFrontProcess(&ourPSN);
- } else {
- error << "couldn't get current process" << endmsg;
- }
-
- err = CreateNewWindow (kDocumentWindowClass, kWindowStandardFloatingAttributes, &rec, &wr);
-
- ComponentResult auResult;
- ControlRef rootControl = NULL;
- GetRootControl(wr, &rootControl);
-
- int width = 500;
- int height = 400;
- Float32Point location = {30, 30};
- Float32Point size = {width, height};
- ControlRef audioUnitControl = NULL;
-
- auResult = AudioUnitCarbonViewCreate(carbonView,
- au->get_au()->AU(),
- wr,
- rootControl,
- &location,
- &size,
- &audioUnitControl);
-
- ShowWindow (wr);
- BringToFront (wr);
-// AudioUnitCarbonViewSetEventListener(carbonView, EventListener, this);
-#if 0
- set_name ("PluginEditor");
- add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
-
- signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)));
-#endif
-
- insert->GoingAway.connect (mem_fun(*this, &AUPluginUI::plugin_going_away));
-
info << "AUPluginUI created" << endmsg;
}
// nothing to do here - plugin destructor destroys the GUI
}
-void
-AUPluginUI::plugin_going_away (ARDOUR::Redirect* ignored)
-{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &AUPluginUI::plugin_going_away), ignored));
-
- delete_when_idle (this);
-}
-
-Component
-AUPluginUI::get_carbon_view_component(OSType subtype)
-{
- ComponentDescription desc;
- Component component;
-
- desc.componentType = kAudioUnitCarbonViewComponentType; // 'auvw'
- desc.componentSubType = subtype;
- desc.componentManufacturer = 0;
- desc.componentFlags = 0;
- desc.componentFlagsMask = 0;
-
- // First see if we can find a carbon view designed specifically for this
- // plug-in:
-
- component = FindNextComponent(NULL, &desc);
- if (component)
- return component;
-
- // If not, grab the generic carbon view, which will create a GUI for
- // any Audio Unit.
-
- desc.componentSubType = kAUCarbonViewSubType_Generic;
- component = FindNextComponent(NULL, &desc);
-
- return component;
-}
~AUPluginUI ();
private:
- WindowRef wr;
boost::shared_ptr<ARDOUR::AUPlugin> au;
-
- void plugin_going_away (ARDOUR::Redirect*);
- Component get_carbon_view_component(OSType subtype);
};
#endif // __au_plugin_ui_h__
}
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
aumodel = ListStore::create(aucols);
au_display.set_model (aumodel);
au_display.append_column (_("Available plugins"), aucols.name);
}
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
notebook.pages().push_back (TabElem (auscroller, _("AudioUnit")));
#endif
}
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
au_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked));
au_display.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::au_display_selection_changed));
#endif
vst_refiller ();
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
au_refiller ();
#endif
}
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
cp--;
if (cp == 0) {
#endif //VST_SUPPORT
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
void
PluginSelector::_au_refiller (void *arg)
current_selection = ARDOUR::AudioUnit;
}
-#endif //HAVE_COREAUDIO
+#endif //HAVE_AUDIOUNIT
void
PluginSelector::use_plugin (PluginInfoPtr pi)
#endif
break;
case ARDOUR::AudioUnit:
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
row = *(au_display.get_selection()->get_selected());
name = row[aucols.name];
pi = row[aucols.plugin];
#ifdef VST_SUPPORT
vst_refiller ();
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
au_refiller ();
#endif
}
void vst_display_selection_changed();
#endif // VST_SUPPORT
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
// page 3
struct AUColumns : public Gtk::TreeModel::ColumnRecord {
AUColumns () {
static void _au_refiller (void *);
void au_refiller ();
void au_display_selection_changed();
-#endif //HAVE_COREAUDIO
+#endif //HAVE_AUDIOUNIT
ARDOUR::PluginManager *manager;
#include "i18n.h"
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
#include "au_pluginui.h"
#endif
} else {
plugin_ui->show_all ();
}
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNIT
} else if (type == ARDOUR::AudioUnit) {
AUPluginUI* plugin_ui;
if (plugin_insert->get_gui() == 0) {
void
SoundFileBox::field_edited (const Glib::ustring& str1, const Glib::ustring& str2)
{
- cout << "field_edited" << endl;
+ Gtk::TreeModel::Children rows(fields->children());
+ Gtk::TreeModel::Row row(rows[atoi(str1.c_str())]);
+
+ Library->set_field (path, row[label_columns.field], str2);
+
Library->save_changes ();
}
osc_files = [ 'osc.cc' ]
vst_files = [ 'vst_plugin.cc', 'session_vst.cc' ]
-coreaudio_files = [ 'audio_unit.cc', 'coreaudiosource.cc' ]
+audiounit_files = [ 'audio_unit.cc' ]
+coreaudio_files = [ 'coreaudiosource.cc' ]
extra_sources = [ ]
if ardour['VST']:
if conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'):
ardour.Append(LINKFLAGS="-framework CoreMIDI")
-if conf.CheckCHeader('/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h') and ardour['COREAUDIO'] == 1:
+if conf.CheckCHeader('/System/Library/Frameworks/AudioUnit.framework/Headers/AudioUnit.h') and ardour['AUDIOUNITS']:
+ ardour.Append(CXXFLAGS="-DHAVE_AUDIOUNITS")
+ ardour.Append(LINKFLAGS="-framework AudioUnit")
+ extra_sources += audiounit_files
+
+if conf.CheckCHeader('/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h') and ardour['COREAUDIO']:
ardour.Append(CXXFLAGS="-DHAVE_COREAUDIO")
ardour.Append(LINKFLAGS="-framework AudioToolbox")
extra_sources += coreaudio_files
-
if env['CONFIG_ARCH'] == 'apple':
# this next line avoids issues with circular dependencies between libardour and libardour_cp.
if ardour['LIBLO']:
ardour.Merge ([ libraries['lo'] ])
-if ardour['COREAUDIO']:
+if ardour['COREAUDIO'] or ardour['AUDIOUNITS']:
ardour.Merge ([ libraries['appleutility'] ])
ardour.VersionBuild(['version.cc', 'ardour/version.h'], 'SConscript')
Default(libardour)
if env['NLS']:
- i18n (ardour, ardour_files + vst_files + coreaudio_files, env)
+ i18n (ardour, ardour_files + vst_files + coreaudio_files + audiounit_files, env)
env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libardour))
env.Alias('tarball', env.Distribute (env['DISTTREE'],
[ 'SConscript', 'i18n.h', 'gettext.h', 'sse_functions.s', 'sse_functions_64bit.s' ] +
- ardour_files + vst_files + coreaudio_files +
+ ardour_files + vst_files + coreaudio_files + audiounit_files +
glob.glob('po/*.po') + glob.glob('ardour/*.h')))
#include <string>
#include <cmath>
-#ifdef HAVE_COREAUDIO
+#if defined(HAVE_COREAUDIO) || defined(HAVE_AUDIOUNITS)
#include <CoreFoundation/CoreFoundation.h>
#endif
void compute_equal_power_fades (jack_nframes_t nframes, float* in, float* out);
-#ifdef HAVE_COREAUDIO
+#if defined(HAVE_COREAUDIO) || defined(HAVE_AUDIOUNITS)
std::string CFStringRefToStdString(CFStringRef stringRef);
#endif // HAVE_COREAUDIO
#endif /* __ardour_utils_h__ */
+
file.rfind(".vwe") == string::npos &&
file.rfind(".paf") == string::npos &&
#ifdef HAVE_COREAUDIO
- file.rfind(".mp3") == string::npos &&
- file.rfind(".aac") == string::npos &&
- file.rfind(".mp4") == string::npos &&
+ file.rfind(".mp3") == string::npos &&
+ file.rfind(".aac") == string::npos &&
+ file.rfind(".mp4") == string::npos &&
#endif // HAVE_COREAUDIO
file.rfind(".voc") == string::npos);
}
0, &cinfo, &info_size);
}
}
+
: AudioFileSource (node)
{
init (_name);
-
- AudioSourceCreated (this); /* EMIT SIGNAL */
}
CoreAudioSource::CoreAudioSource (const string& idstr, Flag flags)
: AudioFileSource(idstr, flags)
{
init (idstr);
-
- AudioSourceCreated (this); /* EMIT SIGNAL */
}
void
#include <ardour/vst_plugin.h>
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
#include <ardour/audio_unit.h>
#endif
#ifdef VST_SUPPORT
boost::shared_ptr<VSTPlugin> vp;
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
boost::shared_ptr<AUPlugin> ap;
#endif
} else if ((vp = boost::dynamic_pointer_cast<VSTPlugin> (other)) != 0) {
return boost::shared_ptr<Plugin> (new VSTPlugin (*vp));
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
} else if ((ap = boost::dynamic_pointer_cast<AUPlugin> (other)) != 0) {
return boost::shared_ptr<Plugin> (new AUPlugin (*ap));
#endif
#ifdef VST_SUPPORT
boost::shared_ptr<VSTPlugin> vp;
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
boost::shared_ptr<AUPlugin> ap;
#endif
} else if ((vp = boost::dynamic_pointer_cast<VSTPlugin> (other)) != 0) {
return ARDOUR::VST;
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
} else if ((ap = boost::dynamic_pointer_cast<AUPlugin> (other)) != 0) {
return ARDOUR::AudioUnit;
#endif
{
return n_outputs ();
}
+
break;
#endif
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_AUDIOUNITS
case ARDOUR::AudioUnit:
plugs = AUPluginInfo::discover ();
unique_id = 0; // Neither do AU.
return PluginPtr ((Plugin*) 0);
}
+
#include <ardour/destructive_filesource.h>
#include <ardour/configuration.h>
+#ifdef HAVE_COREAUDIO
+#include <ardour/coreaudiosource.h>
+#endif
+
#include "i18n.h"
using namespace ARDOUR;
sigc::signal<void,boost::shared_ptr<Source> > SourceFactory::SourceCreated;
#ifdef HAVE_COREAUDIO
-
-
boost::shared_ptr<Source>
SourceFactory::create (const XMLNode& node)
{
#endif
}
-#ifdef HAVE_COREAUDIO
+#if defined(HAVE_COREAUDIO) || defined(HAVE_AUDIOUNITS)
string
CFStringRefToStdString(CFStringRef stringRef)
{
in[n] = inVal * (scale * inVal + 1.0f - scale);
}
}
-