id_t becomes a fully-fledged object, UUID's used for IDs, generic MIDI now owns bindi...
[ardour.git] / libs / ardour / globals.cc
index 5fca7f07ebfb14c4e1e8a74be2c8d1530e8e57ac..2ade56f8a9ab3fcaadf3c00f492863bb1822b456 100644 (file)
 #include <ardour/audio_library.h>
 #include <ardour/configuration.h>
 #include <ardour/plugin_manager.h>
-#include <ardour/source.h>
+#include <ardour/audiosource.h>
 #include <ardour/utils.h>
 #include <ardour/session.h>
 #include <ardour/control_protocol_manager.h>
 
+#ifdef HAVE_LIBLO
+#include <ardour/osc.h>
+#endif
+
 #include <ardour/mix.h>
 
 #if defined (__APPLE__)
 ARDOUR::Configuration* ARDOUR::Config = 0;
 ARDOUR::AudioLibrary* ARDOUR::Library = 0;
 
+#ifdef HAVE_LIBLO
+ARDOUR::OSC* ARDOUR::osc = 0;
+#endif
+
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 MIDI::Port *default_mmc_port = 0;
 MIDI::Port *default_mtc_port = 0;
@@ -72,6 +81,24 @@ Change ARDOUR::PositionChanged = ARDOUR::new_change ();
 Change ARDOUR::NameChanged = ARDOUR::new_change ();
 Change ARDOUR::BoundsChanged = Change (0); // see init(), below
 
+#ifdef HAVE_LIBLO
+static int
+setup_osc ()
+{
+       /* no real cost to creating this object, and it avoids
+          conditionals anywhere that uses it 
+       */
+       
+       osc = new OSC (Config->get_osc_port());
+       
+       if (Config->get_use_osc ()) {
+               return osc->start ();
+       } else {
+               return 0;
+       }
+}
+#endif
+
 static int 
 setup_midi ()
 {
@@ -162,7 +189,7 @@ setup_midi ()
 }
 
 int
-ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*))
+ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization)
 {
         bool generic_mix_functions = true;
 
@@ -179,9 +206,15 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s
        if (setup_midi ()) {
                return -1;
        }
+    
+#ifdef HAVE_LIBLO
+       if (setup_osc ()) {
+               return -1;
+       }
+#endif
 
 #ifdef VST_SUPPORT
-       if (Config->get_use_vst() && fst_init (sighandler)) {
+       if (Config->get_use_vst() && fst_init ()) {
                return -1;
        }
 #endif
@@ -269,6 +302,11 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s
        /* singleton - first object is "it" */
        new ControlProtocolManager ();
        ControlProtocolManager::instance().discover_control_protocols (Session::control_protocol_path());
+
+       XMLNode* node;
+       if ((node = Config->control_protocol_state()) != 0) {
+               ControlProtocolManager::instance().set_state (*node);
+       }
        
        BoundsChanged = Change (StartChanged|PositionChanged|LengthChanged);
 
@@ -284,10 +322,15 @@ ARDOUR::cleanup ()
        return 0;
 }
 
-ARDOUR::id_t
-ARDOUR::new_id ()
+
+microseconds_t
+ARDOUR::get_microseconds ()
 {
-       return get_uid();
+       /* XXX need JACK to export its functionality */
+
+       struct timeval now;
+       gettimeofday (&now, 0);
+       return now.tv_sec * 1000000ULL + now.tv_usec;
 }
 
 ARDOUR::Change
@@ -296,10 +339,17 @@ ARDOUR::new_change ()
        Change c;
        static uint32_t change_bit = 1;
 
-       /* XXX catch out-of-range */
+       /* catch out-of-range */
+       if (!change_bit)
+       {
+               fatal << _("programming error: ")
+                       << "change_bit out of range in ARDOUR::new_change()"
+                       << endmsg;
+               /*NOTREACHED*/
+       }
 
        c = Change (change_bit);
-       change_bit <<= 1;
+       change_bit <<= 1;       // if it shifts too far, change_bit == 0
 
        return c;
 }
@@ -325,7 +375,7 @@ ARDOUR::get_user_ardour_path ()
 }
 
 string
-ARDOUR::get_system_ardour_path ()
+ARDOUR::get_system_data_path ()
 {
        string path;
 
@@ -335,6 +385,17 @@ ARDOUR::get_system_ardour_path ()
        return path;
 }
 
+string
+ARDOUR::get_system_module_path ()
+{
+       string path;
+
+       path += MODULE_DIR;
+       path += "/ardour2/";
+       
+       return path;
+}
+
 static string
 find_file (string name, string dir, string subdir = "")
 {
@@ -508,14 +569,14 @@ ARDOUR::coverage (jack_nframes_t sa, jack_nframes_t ea,
 
 /* not sure where to put these */
 
-std::istream& operator>>(std::istream& o, HeaderFormat hf) {
+std::istream& operator>>(std::istream& o, HeaderFormat& hf) {
        int val;
        o >> val;
        hf = (HeaderFormat) val;
        return o;
 }
 
-std::istream& operator>>(std::istream& o, SampleFormat sf) {
+std::istream& operator>>(std::istream& o, SampleFormat& sf) {
        int val;
        o >> val;
        sf = (SampleFormat) val;