View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002071 | ardour | features | public | 2008-02-12 02:31 | 2009-08-20 19:36 |
| Reporter | ryan_scott | Assigned To | paul | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | acknowledged | Resolution | open | ||
| Product Version | SVN/2.0-ongoing | ||||
| Summary | 0002071: [PATCH] Sending OSC messages to an external program for specific Ardour behaviors | ||||
| Description | This patch provides a mechanism whereby OSC can be used to provide IPC for basic events within Ardour, such as session load, file export, temp change, etc. This allows for non-critical tasks, such as loading an accompanying midi file in an external program or encoding to mp3 on export, to be performed externally by a simple helper script. This patch and corresponding script are setup to load a similarly located/named file in Rosegarden on session load and encode to mp3 on session export via lame. | ||||
| Additional Information | #! /usr/bin/python from liblo import * import pcop, pydcop import os, threading class ArdourHelper( Server ): def run( self ): while True: self.recv() # Handlers @make_method( '/session/loaded', 'ss' ) def sessionLoaded( self, oscPath, args ): ( path, name ) = args[:2] rose = pydcop.anyAppCalled( "rosegarden" ) rose.RosegardenIface.openFile( '%s/%s.rg' % ( path, name ) ) @make_method( '/session/exported', 'ss' ) def sessionExported( self, oscPath, args ): ( path, title ) = args[:2] artist = album = '' # Call lame print 'Encoding %s' % title self.mp3Encode( path, artist, album, title ) def mp3Encode( self, path, artist='', album='', title='' ): filename = os.path.dirname( path ) if artist: filename += '%s - ' % artist filename = '%s/%s.mp3' % ( filename, title ) print 'lame --ta "%s" --tl "%s" --tt "%s" "%s" "%s"' % ( artist, album, title, path, filename ) print os.system( 'lame --ta "%s" --tl "%s" --tt "%s" "%s" "%s"' % ( artist, album, title, path, filename ) ) ############################# helper = ArdourHelper( 7770 ) helper.run() | ||||
| Tags | No tags attached. | ||||
| related to | 0001352 | acknowledged | Run script on export |
|
2008-02-12 02:31
|
ardour2-ongoing-osc-external-hooks.patch (3,162 bytes)
=== libs/ardour/ardour/osc.h
==================================================================
--- libs/ardour/ardour/osc.h (revision 1269)
+++ libs/ardour/ardour/osc.h (local)
@@ -54,12 +54,13 @@
lo_server _osc_server;
lo_server _osc_unix_server;
std::string _osc_unix_socket_path;
- std::string _osc_url_file;
+ std::string _osc_url_file;
pthread_t _osc_thread;
int _request_pipe[2];
static void * _osc_receiver(void * arg);
void osc_receiver();
+ void send(); // This should accept an OSC payload
bool init_osc_thread ();
void terminate_osc_thread ();
@@ -69,6 +70,11 @@
void session_going_away ();
+ // Handlers for "Application Hook" signals
+ void session_loaded( ARDOUR::Session& );
+ void session_exported( std::string, std::string );
+ // end "Application Hook" handles
+
std::string get_server_url ();
std::string get_unix_server_url ();
=== libs/ardour/ardour/session.h
==================================================================
--- libs/ardour/ardour/session.h (revision 1269)
+++ libs/ardour/ardour/session.h (local)
@@ -594,6 +594,7 @@
int start_audio_export (ARDOUR::AudioExportSpecification&);
int stop_audio_export (ARDOUR::AudioExportSpecification&);
void finalize_audio_export ();
+ static sigc::signal<void, std::string, std::string> Exported;
void add_source (boost::shared_ptr<Source>);
void remove_source (boost::weak_ptr<Source>);
=== libs/ardour/osc.cc
==================================================================
--- libs/ardour/osc.cc (revision 1269)
+++ libs/ardour/osc.cc (local)
@@ -401,6 +401,10 @@
{
session = &s;
session->GoingAway.connect (mem_fun (*this, &OSC::session_going_away));
+
+ // "Application Hooks"
+ session_loaded( s );
+ session->Exported.connect( mem_fun( *this, &OSC::session_exported ) );
}
void
@@ -409,6 +413,21 @@
session = 0;
}
+// "Application Hook" Handlers //
+void
+OSC::session_loaded( Session& s ) {
+ lo_address listener = lo_address_new( NULL, "7770" );
+ lo_send( listener, "/session/loaded", "ss", s.path().c_str(), s.name().c_str() );
+}
+
+void
+OSC::session_exported( std::string path, std::string name ) {
+ lo_address listener = lo_address_new( NULL, "7770" );
+ lo_send( listener, "/session/exported", "ss", path.c_str(), name.c_str() );
+}
+
+// end "Application Hook" Handlers //
+
/* path callbacks */
int
=== libs/ardour/session.cc
==================================================================
--- libs/ardour/session.cc (revision 1269)
+++ libs/ardour/session.cc (local)
@@ -113,6 +113,8 @@
sigc::signal<void> Session::StartTimeChanged;
sigc::signal<void> Session::EndTimeChanged;
+sigc::signal<void, std::string, std::string> Session::Exported;
+
int
Session::find_session (string str, string& path, string& snapshot, bool& isnew)
{
=== libs/ardour/session_export.cc
==================================================================
--- libs/ardour/session_export.cc (revision 1269)
+++ libs/ardour/session_export.cc (local)
@@ -454,6 +454,8 @@
spec.freewheel_connection.disconnect ();
spec.clear (); /* resets running/stop etc */
+ Exported( spec.path, name() );
+
return 0;
}
|
|
2008-02-12 02:34
|
ardour-osc-helper.py (1,237 bytes)
#! /usr/bin/python
from liblo import *
import pcop, pydcop
import os, threading
class ArdourHelper( Server ):
def run( self ):
while True:
self.recv()
# Handlers
@make_method( '/session/loaded', 'ss' )
def sessionLoaded( self, oscPath, args ):
( path, name ) = args[:2]
rose = pydcop.anyAppCalled( "rosegarden" )
rose.RosegardenIface.openFile( '%s/%s.rg' % ( path, name ) )
@make_method( '/session/exported', 'ss' )
def sessionExported( self, oscPath, args ):
( path, title ) = args[:2]
artist = album = ''
# Call lame
print 'Encoding %s' % title
self.mp3Encode( path, artist, album, title )
def mp3Encode( self, path, artist='', album='', title='' ):
filename = os.path.dirname( path )
if artist:
filename += '%s - ' % artist
filename = '%s/%s.mp3' % ( filename, title )
print 'lame --ta "%s" --tl "%s" --tt "%s" "%s" "%s"' % ( artist, album, title, path, filename )
print os.system( 'lame --ta "%s" --tl "%s" --tt "%s" "%s" "%s"' % ( artist, album, title, path, filename ) )
#############################
helper = ArdourHelper( 7770 )
helper.run()
|
|
|
does not apply to r5499 - looks like parts of it are in already: nettings@kleineronkel:/build/ardour2> patch -p0 < ardour2-ongoing-osc-external-hooks.patch patching file libs/ardour/ardour/osc.h Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file libs/ardour/ardour/osc.h.rej patching file libs/ardour/ardour/session.h Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file libs/ardour/ardour/session.h.rej patching file libs/ardour/osc.cc Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file libs/ardour/osc.cc.rej patching file libs/ardour/session.cc Hunk 0000001 succeeded at 120 with fuzz 2 (offset 7 lines). patching file libs/ardour/session_export.cc Hunk 0000001 succeeded at 469 with fuzz 2 (offset 15 lines). paul, this looks unintrusive and might be useful to people with streamlined workflows - any interest? if so, maybe ryan could update his patch. |
|
|
This has been applied to 3.0. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2008-02-12 02:31 | ryan_scott | New Issue | |
| 2008-02-12 02:31 | ryan_scott | File Added: ardour2-ongoing-osc-external-hooks.patch | |
| 2008-02-12 02:34 | ryan_scott | File Added: ardour-osc-helper.py | |
| 2009-08-17 19:04 | nettings | Relationship added | related to 0001352 |
| 2009-08-17 19:08 | nettings | Note Added: 0006567 | |
| 2009-08-17 19:09 | nettings | cost | => 0.00 |
| 2009-08-17 19:09 | nettings | Assigned To | => paul |
| 2009-08-17 19:09 | nettings | Status | new => acknowledged |
| 2009-08-17 19:09 | nettings | Summary | Sending OSC messages to an external program for specific Ardour behaviors => [PATCH] Sending OSC messages to an external program for specific Ardour behaviors |
| 2009-08-20 19:36 | cth103 | Note Added: 0006577 |