Mixer: Tweaks to by-number learning.
This commit is contained in:
parent
0c6a3ea0f8
commit
fd64b39fa4
2
lib/ntk
2
lib/ntk
|
@ -1 +1 @@
|
||||||
Subproject commit 8ee564bef320b3561e204d17c1aa054311b2ce47
|
Subproject commit fd8c8d419e8e548c8f6328f1b21783c6ca3001a5
|
|
@ -514,13 +514,7 @@ Controller_Module::menu_cb ( const Fl_Menu_ *m )
|
||||||
Port *p = control_output[0].connected_port();
|
Port *p = control_output[0].connected_port();
|
||||||
|
|
||||||
if ( learn_by_number )
|
if ( learn_by_number )
|
||||||
{
|
mixer->osc_endpoint->add_translation( path, p->osc_number_path());
|
||||||
char *our_path = p->osc_number_path();
|
|
||||||
|
|
||||||
mixer->osc_endpoint->add_translation( path, our_path );
|
|
||||||
|
|
||||||
free(our_path);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
mixer->osc_endpoint->add_translation( path, p->osc_path() );
|
mixer->osc_endpoint->add_translation( path, p->osc_path() );
|
||||||
}
|
}
|
||||||
|
@ -608,7 +602,7 @@ Controller_Module::peer_callback( OSC::Signal *sig, OSC::Signal::State state, v
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* building menu */
|
/* building menu */
|
||||||
const char *name = sig->peer_name();
|
// const char *name = sig->peer_name();
|
||||||
|
|
||||||
assert( sig->path() );
|
assert( sig->path() );
|
||||||
|
|
||||||
|
@ -650,7 +644,14 @@ Controller_Module::add_osc_connections_to_menu ( Fl_Menu_Button *m, const char *
|
||||||
|
|
||||||
Port *p = control_output[0].connected_port();
|
Port *p = control_output[0].connected_port();
|
||||||
|
|
||||||
const char ** conn = mixer->osc_endpoint->get_connections( p->osc_path() );
|
const char *number_path = p->osc_number_path();
|
||||||
|
const char *name_path = p->osc_path();
|
||||||
|
|
||||||
|
const char *paths[] = { number_path,name_path,NULL };
|
||||||
|
|
||||||
|
for ( const char **cpath = paths; *cpath; cpath++ )
|
||||||
|
{
|
||||||
|
const char ** conn = mixer->osc_endpoint->get_connections( *cpath );
|
||||||
|
|
||||||
if ( conn )
|
if ( conn )
|
||||||
{
|
{
|
||||||
|
@ -674,6 +675,7 @@ Controller_Module::add_osc_connections_to_menu ( Fl_Menu_Button *m, const char *
|
||||||
free( conn );
|
free( conn );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** build the context menu for this control */
|
/** build the context menu for this control */
|
||||||
Fl_Menu_Button &
|
Fl_Menu_Button &
|
||||||
|
@ -730,24 +732,11 @@ Controller_Module::handle ( int m )
|
||||||
|
|
||||||
if ( p )
|
if ( p )
|
||||||
{
|
{
|
||||||
if ( learn_by_number )
|
const char * path = learn_by_number ? p->osc_number_path() : p->osc_path();
|
||||||
{
|
|
||||||
char *path = p->osc_number_path();
|
|
||||||
|
|
||||||
DMESSAGE( "Will learn %s", path );
|
DMESSAGE( "Will learn %s", path );
|
||||||
|
|
||||||
mixer->osc_endpoint->learn( path );
|
mixer->osc_endpoint->learn( path );
|
||||||
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const char *path = p->osc_path();
|
|
||||||
|
|
||||||
DMESSAGE( "Will learn %s", path );
|
|
||||||
|
|
||||||
mixer->osc_endpoint->learn( path );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include <FL/Fl_File_Chooser.H>
|
#include <FL/Fl_File_Chooser.H>
|
||||||
#include <FL/Fl_Theme_Chooser.H>
|
#include <FL/Fl_Theme_Chooser.H>
|
||||||
#include <FL/Fl_Value_SliderX.H>
|
#include <FL/Fl_Value_SliderX.H>
|
||||||
#include "FL/Fl_Text_Edit_Window.H"
|
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -261,10 +260,6 @@ void Mixer::cb_menu(Fl_Widget* o) {
|
||||||
{
|
{
|
||||||
command_add_strip();
|
command_add_strip();
|
||||||
}
|
}
|
||||||
else if ( !strcmp( picked, "&Mixer/Send Feedback" ) )
|
|
||||||
{
|
|
||||||
send_feedback();
|
|
||||||
}
|
|
||||||
else if ( !strcmp( picked, "&Mixer/Add &N Strips" ) )
|
else if ( !strcmp( picked, "&Mixer/Add &N Strips" ) )
|
||||||
{
|
{
|
||||||
const char *s = fl_input( "Enter number of strips to add" );
|
const char *s = fl_input( "Enter number of strips to add" );
|
||||||
|
@ -293,29 +288,29 @@ void Mixer::cb_menu(Fl_Widget* o) {
|
||||||
{
|
{
|
||||||
Controller_Module::learn_by_number = true;
|
Controller_Module::learn_by_number = true;
|
||||||
}
|
}
|
||||||
else if ( ! strcmp( picked, "&Mixer/Remote Control/Start Learning" ) )
|
else if ( ! strcmp( picked, "&Remote Control/Start Learning" ) )
|
||||||
{
|
{
|
||||||
Controller_Module::learn_mode( true );
|
Controller_Module::learn_mode( true );
|
||||||
tooltip( "Now in learn mode. Click on a highlighted control to teach it something." );
|
tooltip( "Now in learn mode. Click on a highlighted control to teach it something." );
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
else if ( ! strcmp( picked, "&Mixer/Remote Control/Stop Learning" ) )
|
else if ( ! strcmp( picked, "&Remote Control/Stop Learning" ) )
|
||||||
{
|
{
|
||||||
Controller_Module::learn_mode( false );
|
Controller_Module::learn_mode( false );
|
||||||
tooltip( "Learning complete" );
|
tooltip( "Learning complete" );
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
else if ( ! strcmp( picked, "&Mixer/Remote Control/Clear Mappings" ) )
|
else if ( !strcmp( picked, "&Remote Control/Send State" ) )
|
||||||
|
{
|
||||||
|
send_feedback();
|
||||||
|
}
|
||||||
|
else if ( ! strcmp( picked, "&Remote Control/Clear All Mappings" ) )
|
||||||
{
|
{
|
||||||
if ( 1 == fl_ask( "This will remove all mappings, are you sure?") )
|
if ( 1 == fl_ask( "This will remove all mappings, are you sure?") )
|
||||||
{
|
{
|
||||||
command_clear_mappings();
|
command_clear_mappings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( ! strcmp( picked, "&Mixer/Remote Control/Edit Mappings" ) )
|
|
||||||
{
|
|
||||||
edit_translations();
|
|
||||||
}
|
|
||||||
else if ( !strcmp( picked, "&Mixer/Paste" ) )
|
else if ( !strcmp( picked, "&Mixer/Paste" ) )
|
||||||
{
|
{
|
||||||
Fl::paste(*this);
|
Fl::paste(*this);
|
||||||
|
@ -496,20 +491,19 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) :
|
||||||
o->add( "&Project/Se&ttings/&Rows/One", '1', 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
|
o->add( "&Project/Se&ttings/&Rows/One", '1', 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
|
||||||
o->add( "&Project/Se&ttings/&Rows/Two", '2', 0, 0, FL_MENU_RADIO );
|
o->add( "&Project/Se&ttings/&Rows/Two", '2', 0, 0, FL_MENU_RADIO );
|
||||||
o->add( "&Project/Se&ttings/&Rows/Three", '3', 0, 0, FL_MENU_RADIO );
|
o->add( "&Project/Se&ttings/&Rows/Three", '3', 0, 0, FL_MENU_RADIO );
|
||||||
o->add( "&Project/Se&ttings/Make Default", 0,0,0);
|
|
||||||
o->add( "&Project/Se&ttings/Learn/By Strip Number", 0, 0, 0, FL_MENU_RADIO );
|
o->add( "&Project/Se&ttings/Learn/By Strip Number", 0, 0, 0, FL_MENU_RADIO );
|
||||||
o->add( "&Project/Se&ttings/Learn/By Strip Name", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
|
o->add( "&Project/Se&ttings/Learn/By Strip Name", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
|
||||||
|
o->add( "&Project/Se&ttings/Make Default", 0,0,0);
|
||||||
o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 );
|
o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 );
|
||||||
o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 );
|
o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 );
|
||||||
o->add( "&Mixer/&Add Strip", 'a', 0, 0 );
|
o->add( "&Mixer/&Add Strip", 'a', 0, 0 );
|
||||||
o->add( "&Mixer/Add &N Strips" );
|
o->add( "&Mixer/Add &N Strips" );
|
||||||
o->add( "&Mixer/Send Feedback" );
|
|
||||||
o->add( "&Mixer/&Import Strip" );
|
o->add( "&Mixer/&Import Strip" );
|
||||||
o->add( "&Mixer/Paste", FL_CTRL + 'v', 0, 0 );
|
o->add( "&Mixer/Paste", FL_CTRL + 'v', 0, 0 );
|
||||||
o->add( "&Mixer/Remote Control/Start Learning", FL_F + 9, 0, 0 );
|
o->add( "&Remote Control/Start Learning", FL_F + 9, 0, 0 );
|
||||||
o->add( "&Mixer/Remote Control/Stop Learning", FL_F + 10, 0, 0 );
|
o->add( "&Remote Control/Stop Learning", FL_F + 10, 0, 0 );
|
||||||
o->add( "&Mixer/Remote Control/Clear Mappings", 0, 0, 0 );
|
o->add( "&Remote Control/Send State" );
|
||||||
o->add( "&Mixer/Remote Control/Edit Mappings", 0, 0, 0 );
|
o->add( "&Remote Control/Clear All Mappings", 0, 0, 0 );
|
||||||
o->add( "&View/&Theme", 0, 0, 0 );
|
o->add( "&View/&Theme", 0, 0, 0 );
|
||||||
o->add( "&Help/&Manual" );
|
o->add( "&Help/&Manual" );
|
||||||
o->add( "&Help/&About" );
|
o->add( "&Help/&About" );
|
||||||
|
@ -656,30 +650,6 @@ Mixer::save_translations ( void )
|
||||||
fclose( fp );
|
fclose( fp );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Mixer::edit_translations ( void )
|
|
||||||
{
|
|
||||||
char *file_contents = NULL;
|
|
||||||
|
|
||||||
if ( exists( "mappings" ) )
|
|
||||||
{
|
|
||||||
size_t l = ::size( "mappings" );
|
|
||||||
|
|
||||||
file_contents = (char*)malloc( l );
|
|
||||||
|
|
||||||
FILE *fp = fopen( "mappings", "r" );
|
|
||||||
|
|
||||||
fread( file_contents, l, 1, fp );
|
|
||||||
|
|
||||||
fclose( fp );
|
|
||||||
}
|
|
||||||
|
|
||||||
char *s = fl_text_edit( "Mappings", "&Save", file_contents, 800, 600 );
|
|
||||||
|
|
||||||
if ( file_contents )
|
|
||||||
free(file_contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Mixer::init_osc ( const char *osc_port )
|
Mixer::init_osc ( const char *osc_port )
|
||||||
{
|
{
|
||||||
|
|
|
@ -226,11 +226,17 @@ Module::paste_before ( void )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
const char *
|
||||||
Module::Port::osc_number_path ( void )
|
Module::Port::osc_number_path ( void )
|
||||||
{
|
{
|
||||||
int n = _module->chain()->strip()->number();
|
int n = _module->chain()->strip()->number();
|
||||||
|
|
||||||
|
if ( _by_number_path && n == _by_number_number )
|
||||||
|
return _by_number_path;
|
||||||
|
|
||||||
|
if ( _by_number_path )
|
||||||
|
free( _by_number_path );
|
||||||
|
|
||||||
char *rem;
|
char *rem;
|
||||||
char *client_name;
|
char *client_name;
|
||||||
char *strip_name;
|
char *strip_name;
|
||||||
|
@ -246,6 +252,9 @@ Module::Port::osc_number_path ( void )
|
||||||
free( client_name );
|
free( client_name );
|
||||||
free( rem );
|
free( rem );
|
||||||
|
|
||||||
|
_by_number_path = path;
|
||||||
|
_by_number_number = n;
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,13 +284,7 @@ Module::Port::send_feedback ( void )
|
||||||
mixer->osc_endpoint->send_feedback( _scaled_signal->path(), f );
|
mixer->osc_endpoint->send_feedback( _scaled_signal->path(), f );
|
||||||
|
|
||||||
/* send feedback for by number signal */
|
/* send feedback for by number signal */
|
||||||
{
|
mixer->osc_endpoint->send_feedback( osc_number_path(), f );
|
||||||
char *path = osc_number_path();
|
|
||||||
|
|
||||||
mixer->osc_endpoint->send_feedback( path, f );
|
|
||||||
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,8 @@ public:
|
||||||
_module = module;
|
_module = module;
|
||||||
_scaled_signal = 0;
|
_scaled_signal = 0;
|
||||||
_unscaled_signal = 0;
|
_unscaled_signal = 0;
|
||||||
|
_by_number_path = 0;
|
||||||
|
_by_number_number = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Port ( const Port& p )
|
Port ( const Port& p )
|
||||||
|
@ -152,10 +154,16 @@ public:
|
||||||
hints = p.hints;
|
hints = p.hints;
|
||||||
_scaled_signal = p._scaled_signal;
|
_scaled_signal = p._scaled_signal;
|
||||||
_unscaled_signal = p._unscaled_signal;
|
_unscaled_signal = p._unscaled_signal;
|
||||||
|
_by_number_path = 0;
|
||||||
|
_by_number_number = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~Port ( )
|
virtual ~Port ( )
|
||||||
{
|
{
|
||||||
|
if ( _by_number_path )
|
||||||
|
free( _by_number_path );
|
||||||
|
_by_number_path = NULL;
|
||||||
|
|
||||||
// change_osc_path( NULL );
|
// change_osc_path( NULL );
|
||||||
// disconnect();
|
// disconnect();
|
||||||
}
|
}
|
||||||
|
@ -172,6 +180,9 @@ public:
|
||||||
|
|
||||||
OSC::Signal *scaled_signal ( void ) { return _scaled_signal; }
|
OSC::Signal *scaled_signal ( void ) { return _scaled_signal; }
|
||||||
|
|
||||||
|
int _by_number_number;
|
||||||
|
char *_by_number_path;
|
||||||
|
|
||||||
const char *osc_path ( )
|
const char *osc_path ( )
|
||||||
{
|
{
|
||||||
if ( _scaled_signal )
|
if ( _scaled_signal )
|
||||||
|
@ -180,7 +191,7 @@ public:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *osc_number_path ( void );
|
const char *osc_number_path ( void );
|
||||||
|
|
||||||
void update_osc_port ( )
|
void update_osc_port ( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,6 +44,8 @@ using namespace MIDI;
|
||||||
|
|
||||||
#undef APP_NAME
|
#undef APP_NAME
|
||||||
const char *APP_NAME = "non-midi-mapper";
|
const char *APP_NAME = "non-midi-mapper";
|
||||||
|
#undef APP_TITLE
|
||||||
|
const char *APP_TITLE = "Non-MIDI-Mapper";
|
||||||
#undef VERSION
|
#undef VERSION
|
||||||
const char *VERSION = "1.0";
|
const char *VERSION = "1.0";
|
||||||
|
|
||||||
|
@ -100,7 +102,7 @@ say_hello ( void )
|
||||||
lo_message_add( m, "sssss",
|
lo_message_add( m, "sssss",
|
||||||
"/non/hello",
|
"/non/hello",
|
||||||
osc->url(),
|
osc->url(),
|
||||||
APP_NAME,
|
APP_TITLE,
|
||||||
VERSION,
|
VERSION,
|
||||||
instance_name );
|
instance_name );
|
||||||
|
|
||||||
|
@ -618,7 +620,7 @@ main ( int argc, char **argv )
|
||||||
{
|
{
|
||||||
if ( ! nsm_init( nsm, nsm_url ) )
|
if ( ! nsm_init( nsm, nsm_url ) )
|
||||||
{
|
{
|
||||||
nsm_send_announce( nsm, APP_NAME, ":dirty:", argv[0] );
|
nsm_send_announce( nsm, APP_TITLE, ":dirty:", basename( argv[0] ) );
|
||||||
|
|
||||||
/* poll so we can keep OSC handlers running in the GUI thread and avoid extra sync */
|
/* poll so we can keep OSC handlers running in the GUI thread and avoid extra sync */
|
||||||
// Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL );
|
// Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL );
|
||||||
|
@ -629,7 +631,7 @@ main ( int argc, char **argv )
|
||||||
|
|
||||||
DMESSAGE( "Creating JACK engine" );
|
DMESSAGE( "Creating JACK engine" );
|
||||||
|
|
||||||
if ( ! engine->init("midi-to-osc" ) )
|
if ( ! engine->init( APP_NAME ) )
|
||||||
{
|
{
|
||||||
WARNING( "Failed to create JACK client" );
|
WARNING( "Failed to create JACK client" );
|
||||||
}
|
}
|
|
@ -72,8 +72,8 @@ src/main.C
|
||||||
uselib = [ 'JACK', 'LIBLO', 'LRDF', 'NTK', 'NTK_IMAGES', 'PTHREAD', 'DL', 'M' ],
|
uselib = [ 'JACK', 'LIBLO', 'LRDF', 'NTK', 'NTK_IMAGES', 'PTHREAD', 'DL', 'M' ],
|
||||||
install_path = '${BINDIR}')
|
install_path = '${BINDIR}')
|
||||||
|
|
||||||
bld.program( source = 'src/midi-to-osc.C',
|
bld.program( source = 'src/midi-mapper.C',
|
||||||
target = 'midi-to-osc',
|
target = 'non-midi-mapper',
|
||||||
includes = ['.', 'src', '..', '../nonlib'],
|
includes = ['.', 'src', '..', '../nonlib'],
|
||||||
use = ['nonlib', 'fl_widgets'],
|
use = ['nonlib', 'fl_widgets'],
|
||||||
uselib = [ 'JACK', 'LIBLO', 'LRDF', 'NTK', 'NTK_IMAGES', 'PTHREAD', 'DL', 'M' ],
|
uselib = [ 'JACK', 'LIBLO', 'LRDF', 'NTK', 'NTK_IMAGES', 'PTHREAD', 'DL', 'M' ],
|
||||||
|
|
Loading…
Reference in New Issue