21 #include "jsonrpc_methods.h" 22 #include <netinet/in.h> 23 #include <netinet/tcp.h> 24 #include <sys/ioctl.h> 26 #include <bluetooth/bluetooth.h> 27 #include <bluetooth/rfcomm.h> 31 extern char __rt_text__start[], __rt_text__end[];
32 extern char __rt_data__start[], __rt_data__end[];
37 { __rt_text__start, __rt_text__end - __rt_text__start },
38 { __rt_data__start, __rt_data__end - __rt_data__start },
40 for (
unsigned int i = 0; i <
sizeof(regions)/
sizeof(regions[0]); i++) {
41 if (mlock(regions[i].
start, regions[i].len) != 0) {
44 boost::format(_(
"failed to lock memory: %1%")) % strerror(errno));
84 engine.controller_map, engine),
85 tuner_switcher(settings, engine),
90 pmap(engine.get_param()) {
99 {
"qjackctl",
"qjackctl" },
100 {
"autostart",
"autostart" },
104 "ui.jack_starter_idx",
"", starter, static_cast<int*>(0),
false, 1);
106 pmap.
reg_string(
"ui.jack_starter",
"", 0,
"");
110 static const value_pair streaming_labels[] = {{
"scale"}, {
"stream"}, {0}};
111 pmap.
reg_non_midi_enum_par(
"racktuner.streaming",
"Streaming Mode", streaming_labels, (
int*)0,
false, 1);
112 static const value_pair tuning_labels[] = {{
"(Chromatic)"},{
"Standard"}, {
"Standard/Es"}, {
"Open E"},
113 {
"Drop D"},{
"Half Step Down"},{
"Full Step Down"},{
"1 and 1/2 Steps Down"},{
"Double Drop D"},{
"Drop C"},
114 {
"Drop C#"},{
"Drop B"},{
"Drop A#"},{
"Drop A"},{
"Open D"},{
"Open D Minor"}, {
"Open G"},{
"Open G Minor"},
115 {
"Open C"},{
"Open C#"},{
"Open C Minor"},{
"Open E7"},{
"Open E Minor7"},{
"Open G Major7"},{
"Open A Minor"},
116 {
"Open A Minor7"},{
"Open A"},{
"C Tuning"},{
"C# Tuning"},{
"Bb Tuning"},{
"A to A (Baritone)"},{
"Open Dsus2"},
117 {
"Open Gsus2"},{
"G6"},{
"Modal G"},{
"Overtone"},{
"Pentatonic"},{
"Minor Third"},{
"Major Third"},{
"All Fourths"},
118 {
"Augmented Fourths"},{
"Slow Motion"},{
"Admiral"},{
"Buzzard"},{
"Face"},{
"Four and Twenty"},{
"Ostrich"},{
"Capo 200"},
119 {
"Balalaika"},{
"Cittern One"},{
"Cittern Two"},{
"Dobro"},{
"Lefty"},{
"Mandoguitar"},{
"Rusty Cage"},{
"Hardcore"}, {0}};
121 static const value_pair tuning_temperament[] = {{
"12-ET"},{
"19-ET"},{
"24-ET"},{
"31-ET"},{
"53-ET"}, {0}};
122 pmap.
reg_non_midi_enum_par(
"racktuner.temperament",
"Temperament", tuning_temperament, (
int*)0,
false, 0);
124 pmap.
reg_par_non_preset(
"ui.tuner_reference_pitch",
"?Tuner Reference Pitch", 0, 440, 225, 453, 0.1);
127 pmap.
reg_par(
"ui.live_play_switcher",
"Liveplay preset mode" , (
bool*)0,
false,
false)->
setSavable(
false);
128 pmap.
reg_par(
"ui.racktuner",
N_(
"Tuner on/off"), (
bool*)0,
false,
false);
131 pmap.
reg_par_non_preset(
"ui.liveplay_brightness",
"?liveplay_brightness", 0, 1.0, 0.5, 1.0, 0.01);
132 pmap.
reg_par_non_preset(
"ui.liveplay_background",
"?liveplay_background", 0, 0.8, 0.0, 1.0, 0.01);
142 pmap.
reg_par(
"engine.insert",
N_(
"switch insert ports on/off"), (
bool*)0,
false,
false);
151 sigc::mem_fun(
this, &GxMachine::do_program_change));
153 sigc::mem_fun(
this, &GxMachine::set_mute_state));
155 sigc::mem_fun(
this, &GxMachine::do_bank_change));
156 pmap[
"ui.live_play_switcher"].signal_changed_bool().connect(
157 sigc::mem_fun(
this, &GxMachine::edge_toggle_tuner));
159 sigc::mem_fun(
this, &GxMachine::on_jack_load_change));
173 void GxMachine::on_jack_load_change() {
181 void GxMachine::edge_toggle_tuner(
bool v) {
187 void GxMachine::do_program_change(
int pgm) {
189 if ((bank != switch_bank) && !switch_bank.empty()) {
192 bool in_preset = !bank.empty();
196 in_preset = pgm < f->
size();
210 void GxMachine::reset_switch_bank() {
214 void GxMachine::do_bank_change(
int pgm) {
217 Glib::signal_timeout().connect_once(
218 sigc::mem_fun(
this,&GxMachine::reset_switch_bank), 50);
224 void GxMachine::set_mute_state(
int mute) {
241 pluginlist.
load(options, old_not_found);
245 pluginlist.
save(options);
315 for (
int i = 0; i < channels; i++) {
319 for (
int i = 0; i < channels; i++) {
336 void GxMachine::exit_handler(
bool otherthread) {
345 delete avahi_service;
356 sock =
new GxService(settings, jack, tuner_switcher, quit_mainloop, host, &port);
359 sigc::mem_fun(*
this, &GxMachine::exit_handler));
362 std::string name =
"Guitarix";
459 int GxMachine::get_bank_num(Glib::ustring num) {
460 Glib::ustring array =
"abcdefghijklmnopqrstuvwxyz" ;
463 if(num.compare(array.substr(i,1))==0)
break;
475 #ifdef USE_MIDI_CC_OUT 487 int bl = get_bank_num(sbank.substr(0,1).lowercase());
488 int pgm =
max(0,atoi(sbank.substr(2,Glib::ustring::npos).raw().c_str())-1);
490 do_program_change(pgm);
609 settings.
append(pf, src, pftgt, name);
633 settings.
save(pf, name);
660 return pmap.
hasId(p);
664 return pmap.
hasId(
id);
676 pmap[id].getInt().set(value);
680 pmap[id].getBool().set(value);
692 pmap[id].getFloat().set(value);
696 pmap[id].getString().set(value);
699 int GxMachine::_get_parameter_value_int(
const std::string&
id) {
700 return pmap[id].getInt().get_value();
703 int GxMachine::_get_parameter_value_bool(
const std::string&
id) {
704 return pmap[id].getBool().get_value();
707 float GxMachine::_get_parameter_value_float(
const std::string&
id) {
708 return pmap[id].getFloat().get_value();
711 std::string GxMachine::_get_parameter_value_string(
const std::string&
id) {
712 return pmap[id].getString().get_value();
715 sigc::signal<void, int>& GxMachine::_signal_parameter_value_int(
const std::string&
id) {
716 return pmap[id].signal_changed_int();
719 sigc::signal<void, bool>& GxMachine::_signal_parameter_value_bool(
const std::string&
id) {
720 return pmap[id].signal_changed_bool();
723 sigc::signal<void, float>& GxMachine::_signal_parameter_value_float(
const std::string&
id) {
724 return pmap[id].signal_changed_float();
778 void GxMachine::on_impresp(
const std::string& path) {
784 Glib::signal_idle().connect_once(
786 sigc::mem_fun(
this, &GxMachine::on_impresp), path));
794 int *audio_type,
int *audio_form,
int *audio_rate,
float **buffer) {
795 return gx_engine::read_audio(filename, audio_size, audio_chan, audio_type, audio_form, audio_rate, buffer);
804 #define START_NOTIFY(m) { start_call(RPNM_##m) 806 #define START_NOTIFY(m) { const jsonrpc_method_def& _md = start_call(RPNM_##m) 809 #define SEND() assert(!_md.has_result); send(); } 811 #define START_CALL(m) { const jsonrpc_method_def& _md = start_call(RPCM_##m) 813 #define START_RECEIVE(s) assert(_md.has_result); send(); { \ 814 gx_system::JsonStringParser *jp = receive();\ 815 if (!jp) { return s; }\ 818 #define END_RECEIVE(s) } catch (const gx_system::JsonException& e) { report_rpc_error(jp, e, _md.name); } \ 828 engine_state_change(),
830 presetlist_changed(),
839 midi_value_changed(),
842 bank_drag_get_counter(),
843 bank_drag_get_path(),
844 oscilloscope_activation(),
845 oscilloscope_size_change(),
846 oscilloscope_buffer(0),
847 oscilloscope_buffer_size(0),
848 tuner_switcher_display(),
849 tuner_switcher_set_state(),
850 tuner_switcher_selection_done() {
856 socket->set_blocking(
true);
857 writebuf =
new __gnu_cxx::stdio_filebuf<char>(socket->get_fd(), std::ios::out);
858 os =
new ostream(writebuf);
865 current_bank = pmap[
"system.current_bank"].getString().get_value();
866 current_preset = pmap[
"system.current_preset"].getString().get_value();
877 midi_controller_map.
readJSON(*jp, pmap);
883 jw->
write(
"display");
885 jw->
write(
"presetlist_changed");
888 jw->
write(
"oscilloscope");
889 jw->
write(
"jack_load");
891 jw->
write(
"plugins_changed");
893 jw->
write(
"units_changed");
909 const char *q = getenv(
"GUITARIX_TRACE");
913 if (*q && q != p->
id()) {
916 cerr <<
"set " << p->
id() <<
" = ";
925 }
else if (dynamic_cast<JConvParameter*>(p) != 0) {
926 cerr << dynamic_cast<JConvParameter*>(p)->get_value().getFullIRPath();
931 cerr <<
" (blocked)";
938 void GxMachineRemote::create_bluetooth_socket(
const Glib::ustring& bdaddr) {
939 struct sockaddr_rc addr = { 0 };
940 addr.rc_family = AF_BLUETOOTH;
941 str2ba(bdaddr.c_str(), &addr.rc_bdaddr);
943 for (
int channel = 1; channel <= 9; channel++) {
944 addr.rc_channel = (uint8_t)channel;
945 int s = ::socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
946 if (connect(s, (
const struct sockaddr *)&addr,
sizeof(addr)) < 0) {
949 if (error != EBUSY) {
953 socket = Gio::Socket::create_from_fd(s);
959 Glib::ustring::compose(
960 _(
"Remote Connection: cannot connect to bluetooth %1: %2"),
961 bdaddr, strerror_r(error, buf,
sizeof(buf))));
964 void GxMachineRemote::create_bluetooth_socket(
const Glib::ustring& bdaddr) {
967 _(
"Bluetooth not available; rebuild Guitarix with Bluetooth support"));
971 void GxMachineRemote::create_tcp_socket() {
972 socket = Gio::Socket::create(Gio::SOCKET_FAMILY_IPV4, Gio::SOCKET_TYPE_STREAM, Gio::SOCKET_PROTOCOL_TCP);
974 setsockopt(socket->get_fd(), IPPROTO_TCP, TCP_NODELAY, &
flag,
sizeof(int));
975 typedef std::vector< Glib::RefPtr<Gio::InetAddress> > adr_list;
978 al = Gio::Resolver::get_default()->lookup_by_name(options.
get_rpcaddress());
979 }
catch (Glib::Error e) {
984 for (adr_list::iterator i = al.begin(); i != al.end(); ++i) {
986 socket->connect(Gio::InetSocketAddress::create(*i, options.
get_rpcport()));
988 }
catch (Gio::Error e) {
998 void GxMachineRemote::param_signal(
Parameter *p) {
1007 }
else if (p->
isBool()) {
1013 }
else if (dynamic_cast<JConvParameter*>(p) != 0) {
1026 switch (jp->
next()) {
1038 }
else if (p.
isInt()) {
1040 switch (jp->
next()) {
1059 cerr <<
"change file parameter " << p.
id() << endl;
1060 }
else if (dynamic_cast<JConvParameter*>(&p) != 0) {
1065 cerr <<
"change special type parameter " << p.
id() << endl;
1075 if (method ==
"state_changed") {
1078 }
else if (method ==
"message") {
1088 }
else if (method ==
"preset_changed") {
1094 current_bank = new_bank;
1095 current_preset = new_preset;
1096 selection_changed();
1097 }
else if (method ==
"presetlist_changed") {
1102 presetlist_changed();
1103 }
else if (method ==
"set") {
1106 parameter_changed(jp);
1108 }
else if (method ==
"rack_units_changed") {
1112 std::vector<std::string>& l = (stereo ? rack_units.
stereo : rack_units.
mono);
1120 }
else if (method ==
"midi_changed") {
1121 midi_controller_map.
readJSON(*jp, pmap);
1123 }
else if (method ==
"midi_value_changed") {
1130 midi_value_changed(ctl, value);
1131 }
else if (method ==
"osc_activation") {
1134 }
else if (method ==
"osc_size_changed") {
1137 if (oscilloscope_buffer_size != sz) {
1138 delete oscilloscope_buffer;
1139 oscilloscope_buffer =
new float[sz];
1140 oscilloscope_buffer_size = sz;
1142 oscilloscope_size_change(sz);
1143 }
else if (method ==
"show_tuner") {
1146 }
else if (method ==
"set_display_state") {
1160 tuner_switcher_set_state(state);
1161 }
else if (method ==
"display_bank_preset") {
1166 }
else if (method ==
"impresp_list") {
1167 std::vector<gx_system::FileName> l;
1179 }
else if (method ==
"plugins_changed") {
1181 }
else if (method ==
"jack_load_changed") {
1184 }
else if (method ==
"server_shutdown") {
1191 static int socket_get_available_bytes(
const Glib::RefPtr<Gio::Socket>& socket) {
1194 ioctl(socket->get_fd(), FIONREAD, &avail);
1195 int ret = ioctl(socket->get_fd(), FIONREAD, &avail);
1202 bool GxMachineRemote::socket_input_handler(Glib::IOCondition cond) {
1203 if (cond & (Glib::IO_HUP|Glib::IO_ERR|Glib::IO_NVAL)) {
1207 int n = socket_get_available_bytes(socket);
1217 n = socket->receive(buf,
sizeof(buf));
1218 }
catch(Glib::Error e) {
1240 cerr <<
"JsonException: " << e.
what() <<
": '" << jp->
get_string() <<
"'" << endl;
1244 int avail = socket_get_available_bytes(socket);
1248 }
else if (avail < 0) {
1273 void GxMachineRemote::send() {
1285 cerr <<
"RPC Error in " << method <<
"(): ";
1287 cerr <<
"RPC Error: ";
1293 bool GxMachineRemote::idle_notify_handler() {
1294 for (
unsigned int i = 0; i < notify_list.size(); ++i) {
1299 notify_list.clear();
1303 void GxMachineRemote::add_idle_handler() {
1304 if (!idle_conn.connected()) {
1305 idle_conn = Glib::signal_idle().connect(
1306 sigc::mem_fun(
this, &GxMachineRemote::idle_notify_handler));
1313 Glib::ustring message;
1327 Glib::ustring::compose(
"RPC error %1 : %2", code, message));
1330 void GxMachineRemote::socket_error(
int loc) {
1331 if (!socket->is_closed()) {
1334 gx_print_fatal(
"Network", Glib::ustring::compose(
"Server has closed connection (%1)", loc));
1346 n = socket->receive(buf,
sizeof(buf));
1347 }
catch(Glib::Error e) {
1348 cerr <<
"Glib receive error: " << e.what() << endl;
1370 assert(jp_ret == 0);
1374 notify_list.push_back(jp);
1377 if (n == 0 && jp_ret) {
1379 throw_error(jp_ret);
1389 report_rpc_error(jp, e);
1463 plugin_changed(p, c);
1472 plugin_changed(p, c);
1490 return plugin_changed;
1524 int GxMachineRemote::load_remote_ui_static (
const UiBuilder& builder,
int form) {
1526 return m->load_remote_ui(builder, form);
1529 int GxMachineRemote::load_remote_ui(
const UiBuilder& builder,
int form) {
1546 }
else if (jp->
current_value() ==
"openHorizontalhideBox") {
1548 }
else if (jp->
current_value() ==
"openHorizontalTableBox") {
1564 std::string
id = next_string(jp);
1565 std::string lab = next_string(jp);
1567 }
else if (jp->
current_value() ==
"create_small_rackknob") {
1568 std::string
id = next_string(jp);
1569 std::string lab = next_string(jp);
1571 }
else if (jp->
current_value() ==
"create_small_rackknobr") {
1572 std::string
id = next_string(jp);
1573 std::string lab = next_string(jp);
1576 std::string
id = next_string(jp);
1577 std::string lab = next_string(jp);
1580 std::string
id = next_string(jp);
1581 std::string lab = next_string(jp);
1583 }
else if (jp->
current_value() ==
"create_feedback_slider") {
1584 std::string
id = next_string(jp);
1585 std::string lab = next_string(jp);
1587 }
else if (jp->
current_value() ==
"create_selector_no_caption") {
1588 std::string
id = next_string(jp);
1591 std::string
id = next_string(jp);
1592 std::string lab = next_string(jp);
1595 std::string
id = next_string(jp);
1597 }
else if (jp->
current_value() ==
"create_simple_c_meter") {
1598 std::string
id = next_string(jp);
1599 std::string idl = next_string(jp);
1600 std::string lab = next_string(jp);
1603 std::string
id = next_string(jp);
1604 std::string lab = next_string(jp);
1606 }
else if (jp->
current_value() ==
"create_switch_no_caption") {
1607 std::string sw_type = next_string(jp);
1608 std::string
id = next_string(jp);
1610 }
else if (jp->
current_value() ==
"create_feedback_switch") {
1611 std::string sw_type = next_string(jp);
1612 std::string
id = next_string(jp);
1615 std::string sw_type = next_string(jp);
1616 std::string
id = next_string(jp);
1617 std::string idf = next_string(jp);
1620 std::string sw_type = next_string(jp);
1621 std::string
id = next_string(jp);
1622 std::string lab = next_string(jp);
1623 builder.
create_switch(sw_type.c_str(),
id.c_str(), lab.c_str());
1625 std::string
id = next_string(jp);
1626 std::string lab = next_string(jp);
1629 std::string
id = next_string(jp);
1630 std::string lab = next_string(jp);
1633 std::string
id = next_string(jp);
1634 std::string idl = next_string(jp);
1635 std::string idh = next_string(jp);
1637 }
else if (jp->
current_value() ==
"create_simple_spin_value") {
1638 std::string
id = next_string(jp);
1640 }
else if (jp->
current_value() ==
"create_eq_rackslider_no_caption") {
1641 std::string
id = next_string(jp);
1649 cerr <<
"unknown uiBuilder function " << jp->
current_value() << endl;
1660 pdef->
load_ui = load_remote_ui_static;
1678 return get_bool(jp);
1683 return oscilloscope_buffer;
1696 return pmap[
"oscilloscope.pp"].signal_changed_int();
1700 return pmap[
"ui.oscilloscope"].signal_changed_bool();
1704 return oscilloscope_activation;
1708 return oscilloscope_size_change;
1721 jw->
write(channels);
1724 for (
int i = 0; i < channels; i++) {
1749 if (oscilloscope_buffer_size != sz) {
1750 delete oscilloscope_buffer;
1751 oscilloscope_buffer =
new float[sz];
1752 oscilloscope_buffer_size = sz;
1753 oscilloscope_size_change(sz);
1756 float *p = oscilloscope_buffer;
1778 return tuner_switcher_display;
1782 return tuner_switcher_set_state;
1786 return tuner_switcher_selection_done;
1790 return engine_state_change;
1801 std::vector<std::string>& l = (stereo ? rack_units.
stereo : rack_units.
mono);
1814 cerr <<
"JsonException: " << e.
what() <<
": '" << jp->get_string() <<
"'" << endl;
1844 return get_bool(jp);
1870 static const Glib::ustring empty_string;
1873 return current_bank;
1881 return current_preset;
1907 #ifdef USE_MIDI_CC_OUT 1920 return banks.
size();
1986 return selection_changed;
1990 return presetlist_changed;
1996 Glib::RefPtr<Gio::File> rem = Gio::File::create_for_uri(uri);
1997 fstream f(rem->get_path().c_str());
2047 bool ret = get_bool(jp);
2051 pf.
entries[idx].name = newname;
2059 for (std::vector<Glib::ustring>::const_iterator i = neworder.begin(); i != neworder.end(); ++i) {
2069 for (std::vector<Glib::ustring>::const_iterator i = neworder.begin(); i != neworder.end(); ++i) {
2074 for (std::vector<Glib::ustring>::const_iterator i = neworder.begin(); i != neworder.end(); ++i) {
2077 presetlist_changed();
2083 return get_bool(jp);
2093 if (i->name == name) {
2114 switch (bank_drag_get_counter) {
2116 bank_drag_get_counter++;
2119 bank_drag_get_counter++;
2125 Glib::RefPtr<Gio::File> target = Gio::File::create_for_path(
2127 Gio::File::create_for_path(jp->
current_value())->get_basename()));
2129 Glib::RefPtr<Gio::FileOutputStream> s = target->replace(
2130 "",
false, Gio::FILE_CREATE_REPLACE_DESTINATION);
2134 bank_drag_get_path = target->get_path();
2137 return bank_drag_get_path;
2141 bank_drag_get_counter = 0;
2142 bank_drag_get_path.clear();
2150 return banks.
begin();
2176 if (i->name == pos) {
2192 if (i->name == pos) {
2203 bool ret = get_bool(jp);
2216 bool ret = get_bool(jp);
2218 banks.banklist.remove(f);
2264 }
else if (p->
isInt()) {
2267 }
else if (p->
isBool()) {
2273 }
else if (p->
isFile()) {
2276 }
else if (dynamic_cast<JConvParameter*>(i->second) != 0) {
2281 selection_changed();
2282 Glib::signal_io().connect(
2283 sigc::mem_fun(
this, &GxMachineRemote::socket_input_handler),
2284 socket->get_fd(), Glib::IO_IN);
2286 if (i->second->isInt()) {
2287 i->second->getInt().signal_changed().connect(
2290 sigc::mem_fun(
this, &GxMachineRemote::param_signal), i->second)));
2291 }
else if (i->second->isBool()) {
2292 i->second->getBool().signal_changed().connect(
2295 sigc::mem_fun(
this, &GxMachineRemote::param_signal), i->second)));
2296 }
else if (i->second->isFloat()) {
2297 i->second->getFloat().signal_changed().connect(
2300 sigc::mem_fun(
this, &GxMachineRemote::param_signal), i->second)));
2301 }
else if (i->second->isString()) {
2302 i->second->getString().signal_changed().connect(
2305 sigc::mem_fun(
this, &GxMachineRemote::param_signal), i->second)));
2306 }
else if (dynamic_cast<JConvParameter*>(i->second) != 0) {
2307 dynamic_cast<JConvParameter*
>(i->second)->signal_changed().connect(
2310 sigc::mem_fun(
this, &GxMachineRemote::param_signal), i->second)));
2316 return pmap.
hasId(p);
2320 return pmap.
hasId(
id);
2332 pmap[id].getInt().set(value);
2336 pmap[id].getBool().set(value);
2340 pmap[id].getFloat().set(value);
2344 if (!pmap[
id].getString().
set(value)) {
2353 int GxMachineRemote::_get_parameter_value_int(
const std::string&
id) {
2360 switch (jp->
next()) {
2375 int GxMachineRemote::_get_parameter_value_bool(
const std::string&
id) {
2386 float GxMachineRemote::_get_parameter_value_float(
const std::string&
id) {
2393 switch (jp->
next()) {
2408 std::string GxMachineRemote::_get_parameter_value_string(
const std::string&
id) {
2419 sigc::signal<void, int>& GxMachineRemote::_signal_parameter_value_int(
const std::string&
id) {
2420 return pmap[id].signal_changed_int();
2423 sigc::signal<void, bool>& GxMachineRemote::_signal_parameter_value_bool(
const std::string&
id) {
2424 return pmap[id].signal_changed_bool();
2427 sigc::signal<void, float>& GxMachineRemote::_signal_parameter_value_float(
const std::string&
id) {
2428 return pmap[id].signal_changed_float();
2436 bool ret = get_bool(jp);
2454 return midi_changed;
2458 return midi_value_changed;
2467 return midi_controller_map.size();
2471 return midi_controller_map[n];
2524 int *audio_type,
int *audio_form,
int *audio_rate,
float **buffer) {
2526 jw->
write(filename);
2530 *audio_chan = *audio_type = *audio_form = *audio_rate = 0;
2546 *buffer =
new float[*audio_size * *audio_chan];
void write_kv(const char *key, float v)
bool register_service(std::string name, int port)
virtual void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring &name)
virtual Glib::ustring get_bank_name(int n)
virtual void bank_set_flag(gx_system::PresetFileGui *pf, int flag, bool v)
virtual void midi_set_current_control(int v)
gx_system::PresetFile * bank_insert_uri(const Glib::ustring &uri, bool move)
virtual void tuner_used_for_display(bool on)
void readJSON_remote(JsonParser &jp)
virtual const Glib::ustring & get_current_name()
CmdConnection::msg_type start
virtual void start_socket(sigc::slot< void > quit_mainloop, const Glib::ustring &host, int port)
void throw_unexpected(token expect)
virtual void load_ladspalist(std::vector< std::string > &old_not_found, ladspa::LadspaPluginList &pluginlist)
void begin_array(bool nl=false)
void save(PresetFile &pf, const Glib::ustring &name)
PresetFile * get_current_bank_file()
virtual void insert_rack_unit(const std::string &unit, const std::string &before, PluginType type)
bool rename_preset(PresetFile &pf, const Glib::ustring &oldname, const Glib::ustring &newname)
virtual void msend_midi_cc(int cc, int pgn, int bgn, int num)
int param2controller(Parameter ¶m, const MidiController **p)
Glib::Dispatcher & signal_jack_load_change()
virtual void reorder_preset(gx_system::PresetFileGui &pf, const std::vector< Glib::ustring > &neworder)
virtual void disable_autosave(bool v)
virtual void save_ladspalist(ladspa::LadspaPluginList &pluginlist)
virtual Plugin * pluginlist_lookup_plugin(const std::string &id) const
virtual float get_tuner_freq()
virtual bool rename_preset(gx_system::PresetFileGui &pf, const Glib::ustring &oldname, const Glib::ustring &newname)
virtual int idx_from_id(string v_id)
int get_current_control()
virtual void stop_socket()
virtual sigc::signal< void > & signal_midi_changed()
bool remove_rack_unit(const std::string &unit, bool stereo)
void set_current_control(int ctl)
virtual int midi_param2controller(Parameter ¶m, const MidiController **p)
sigc::signal< void > & signal_changed()
void disable_autosave(bool v)
void writeJSON(gx_system::JsonWriter &jw)
OscilloscopeAdapter oscilloscope
BoolParameter * reg_non_midi_par(const string &id, bool *var, bool preset, bool std=false)
sigc::signal< void, const std::string &, std::vector< gx_system::FileName > > impresp_list
virtual void load_impresp_dirs(std::vector< gx_system::FileName > &dirs)
virtual void pf_insert_after(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
MidiStandardControllers midi_std_ctr
virtual const float * get_oscilloscope_buffer()
virtual void set_state(GxEngineState state)
map< string, Parameter * >::const_iterator iterator
sigc::signal< void, SwitcherState > & signal_set_state()
Parameter * readJSON_one(gx_system::JsonParser &jp)
void create_default_scratch_preset()
std::vector< std::string > & get_rack_unit_order(bool stereo)
void insert(PresetFile *f)
void unregister(Parameter *p)
void(* create_fload_switch)(const char *sw_type, const char *id, const char *idf)
void(* load_glade)(const char *data)
virtual void midi_set_current_control(int v)
virtual bool parameter_unit_has_std_values(const PluginDef *pdef) const
virtual sigc::signal< void, bool > & signal_rack_unit_order_changed()
gx_engine::GxEngineState string_to_engine_state(const std::string &s)
void end_array(bool nl=false)
virtual void midi_modifyCurrent(Parameter ¶m, float lower, float upper, bool toggle)
void set_config_mode(bool mode, int ctl=-1)
virtual int get_oscilloscope_mul_buffer()
bool load_unit(PluginDef *pl)
void dump(const string &fmt)
virtual void maxlevel_get(int channels, float *values)
virtual void writeJSON(gx_system::JsonWriter &jw) const
void activate(bool tuner_active)
virtual void start_socket(sigc::slot< void > quit_mainloop, const Glib::ustring &host, int port)
FloatParameter * reg_par_non_preset(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
virtual sigc::signal< void > & signal_midi_changed()
void readJSON(gx_system::JsonParser &jp, ParamMap ¶m)
void(* openFlipLabelBox)(const char *label)
virtual bool rename_bank(const Glib::ustring &oldname, Glib::ustring &newname)
virtual std::string bank_get_filename(const Glib::ustring &bank)
virtual void disable_autosave(bool v)
virtual void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring &name)
virtual gx_system::PresetFileGui * bank_get_file(const Glib::ustring &bank) const
virtual sigc::signal< void, GxEngineState > & signal_state_change()
std::vector< PluginPresetEntry > UnitPresetList
virtual void stop_socket()
virtual void midi_modifyCurrent(Parameter ¶m, float lower, float upper, bool toggle)
bool remove_bank(const Glib::ustring &bank)
virtual void commit_ladspa_changes()
virtual bool midi_get_config_mode(int *ctl=0)
bool unit_has_std_values(const PluginDef *pdef) const
void(* openTabBox)(const char *label)
virtual void set_statefilename(const std::string &fn)
void(* create_feedback_switch)(const char *sw_type, const char *id)
virtual void reset_unit(const PluginDef *pdef) const
void reorder(const std::vector< Glib::ustring > &neworder)
virtual void set_init_values()
virtual void erase_preset(gx_system::PresetFileGui &pf, const Glib::ustring &name)
virtual bool parameter_hasId(const char *p)
Plugin * lookup_plugin(const std::string &id) const
float get_maxlevel(unsigned int channel)
virtual bank_iterator bank_begin()
virtual void set_jack_insert(bool v)
virtual void set_jack_insert(bool v)
FileParameter & getFile()
PresetFile * get_file(const Glib::ustring &bank) const
const std::string & id_box_visible() const
virtual int midi_param2controller(Parameter ¶m, const MidiController **p)
void(* create_switch_no_caption)(const char *sw_type, const char *id)
virtual midi_controller_list & midi_get(int n)
int param2controller(Parameter ¶m, const MidiController **p)
GxMachine(gx_system::CmdlineOptions &options)
void set_flag(int flag, bool v)
Glib::ustring get_name(int n)
virtual bool read_audio(const std::string &filename, unsigned int *audio_size, int *audio_chan, int *audio_type, int *audio_form, int *audio_rate, float **buffer)
virtual sigc::signal< void, bool > & tuner_switcher_signal_selection_done()
bool hasId(const string &id) const
virtual void clear_oscilloscope_buffer()
sigc::signal< void, bool > & signal_selection_done()
jack_nframes_t get_jack_bs()
std::string get_temp_filepath(const std::string &basename) const
sigc::signal< void, bool > rack_unit_order_changed
void append(PresetFile &pf, const Glib::ustring &src, PresetFile &pftgt, const Glib::ustring &name)
std::vector< Position >::iterator iterator
virtual bool bank_remove(const Glib::ustring &bank)
bool rename_bank(const Glib::ustring &oldname, Glib::ustring &newname)
virtual void set_oscilloscope_mul_buffer(int a)
bool read_audio(const std::string &filename, unsigned int *audio_size, int *audio_chan, int *audio_type, int *audio_form, int *audio_rate, float **buffer)
std::vector< std::string > mono
virtual gx_system::PresetFileGui * bank_insert_uri(const Glib::ustring &uri, bool move)
void load(gx_system::CmdlineOptions &options, std::vector< std::string > &old_not_found)
void(* create_p_display)(const char *id, const char *idl, const char *idh)
void used_for_display(bool on)
sigc::signal< void, int > & signal_new_program()
virtual void pf_append(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &name)
void write_key(const char *p, bool nl=false)
void set_jack_insert(bool v)
void update_maxlevel(CmdConnection *cmd=0)
void ladspaloader_update_plugins(gx_system::JsonWriter *jw, CmdConnection *cmd)
virtual GxEngineState get_state()
const string & id() const
std::vector< Position > entries
sigc::signal< void, const GxJConvSettings * > & signal_changed()
virtual void tuner_used_for_display(bool on)
virtual void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring &name)
virtual void remove_rack_unit(const std::string &unit, PluginType type)
void gx_print_fatal(const char *, const std::string &)
virtual sigc::signal< void, int, int > & signal_midi_value_changed()
sigc::signal< void, float > & signal_changed()
virtual void save_ladspalist(ladspa::LadspaPluginList &pluginlist)
int get_index(const Glib::ustring &bank) const
virtual bool read_audio(const std::string &filename, unsigned int *audio_size, int *audio_chan, int *audio_type, int *audio_form, int *audio_rate, float **buffer)
const Glib::ustring & get_rpcaddress()
int insert_plugin(Plugin *pvars)
StringParameter * reg_string(const string &id, const string &name, Glib::ustring *var, const string &sv, bool preset=false)
virtual void setJSON_value()
virtual const std::vector< std::string > & get_rack_unit_order(PluginType type)
const std::string & id_effect_post_pre() const
sigc::signal< void > & signal_selection_changed()
void reset_unit(const PluginDef *pdef) const
virtual void midi_set_config_mode(bool v, int ctl=-1)
virtual gx_system::PresetFileGui * bank_insert_uri(const Glib::ustring &uri, bool move)
virtual void readJSON_value(gx_system::JsonParser &jp)
sigc::signal< void, Plugin *, PluginChange::pc > & signal_plugin_changed()
virtual void remove_rack_unit(const std::string &unit, PluginType type)
virtual void set_statefilename(const std::string &fn)
virtual void maxlevel_get(int channels, float *values)
sigc::signal< void, int, int > & signal_midi_value_changed()
void gx_print_error(const char *, const std::string &)
virtual bool get_tuner_switcher_active()
sigc::signal< int, bool > activation
virtual void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring &name)
virtual bool bank_remove(const Glib::ustring &bank)
void insert(const string &id, const string &group)
virtual const char * what() const
static string get_default_instancename()
virtual bool setting_is_preset()
virtual bool bank_check_reparse()
sigc::signal< void > & signal_changed()
static GxLogger & get_logger()
gx_system::PresetFile * bank_insert_new(const Glib::ustring &name)
ParameterGroups & get_group_table()
virtual bank_iterator bank_begin()
void(* create_wheel)(const char *id, const char *label)
void plugin_preset_list_load(const PluginDef *pdef, UnitPresetList &presetnames)
virtual void bank_reorder(const std::vector< Glib::ustring > &neworder)
void(* create_selector)(const char *id, const char *label)
bool set(float val) const
virtual void set_init_values()
virtual void pf_insert_before(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
virtual void request_midi_value_update()
void(* openHorizontalBox)(const char *label)
virtual bool parameter_hasId(const char *p)
virtual gx_system::CmdlineOptions & get_options() const
int get_index(const Glib::ustring &name)
virtual bool setting_is_preset()
PresetFileGui * get_guiwrapper()
virtual bool load_unit(gx_gui::UiBuilderImpl &builder, PluginDef *pdef)
void send_midi_cc(int cc_num, int pgm_num, int bgn, int num)
void send_rack_changed(bool stereo, CmdConnection *cmd)
virtual void pf_append(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &name)
void readJSON(gx_system::JsonParser &jp)
virtual int get_oscilloscope_mul_buffer()
const std::string & get_filename() const
virtual void set_parameter_value(const std::string &id, int value)
void on_engine_mute_changed(bool s, GxEngine &engine)
virtual void reorder_preset(gx_system::PresetFileGui &pf, const std::vector< Glib::ustring > &neworder)
void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring &name)
virtual void set_parameter_value(const std::string &id, int value)
virtual void get_oscilloscope_info(int &load, int &frames, bool &is_rt, jack_nframes_t &bsize)
void(* create_port_display)(const char *id, const char *label)
void delete_module(Plugin *pl)
virtual sigc::signal< void, bool > & signal_rack_unit_order_changed()
sigc::signal< void, bool > & signal_changed()
void set_replace_mode(bool mode)
virtual Glib::ustring get_bank_name(int n)
StringParameter & getString()
void save(gx_system::CmdlineOptions &options)
void set_engine_mute(GxEngineState s, BoolParameter &p)
void insert_rack_unit(const std::string &unit, const std::string &before, bool stereo)
virtual bool parameter_unit_has_std_values(const PluginDef *pdef) const
virtual float get_tuner_freq()
virtual void bank_drag_begin()
bool convert_preset(PresetFile &pf)
void(* openFrameBox)(const char *label)
virtual sigc::signal< void, unsigned int > & signal_oscilloscope_size_change()
void ladspaloader_update_plugins()
std::vector< std::string > stereo
void begin_object(bool nl=false)
void(* create_small_rackknobr)(const char *id, const char *label)
void insert_after(PresetFile &pf, const Glib::ustring &src, PresetFile &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
void readJSON(gx_system::JsonParser &jp, ParamMap &pmap)
sigc::signal< void > & signal_presetlist_changed()
MidiAudioBuffer midiaudiobuffer
void(* create_simple_spin_value)(const char *id)
virtual sigc::signal< void > & signal_selection_changed()
void(* create_simple_meter)(const char *id)
static GxExit & get_instance()
virtual sigc::signal< void, int > & signal_oscilloscope_post_pre()
GxMachineRemote(gx_system::CmdlineOptions &options)
void set_statefilename(const std::string &fn)
virtual void tuner_switcher_deactivate()
void set_jack(gx_jack::GxJack *jack)
virtual void bank_reorder(const std::vector< Glib::ustring > &neworder)
virtual void clear_oscilloscope_buffer()
void load_preset(PresetFile *pf, const Glib::ustring &name)
virtual void plugin_preset_list_load(const PluginDef *pdef, gx_preset::UnitPresetList &presetnames)
void(* create_mid_rackknob)(const char *id, const char *label)
virtual sigc::signal< void, bool > & tuner_switcher_signal_selection_done()
virtual int get_bank_index(const Glib::ustring &bank)
virtual Parameter & get_parameter(const char *p)
void(* openVerticalBox2)(const char *label)
virtual sigc::signal< void, GxEngineState > & signal_state_change()
sigc::signal< void, int > & signal_new_bank()
virtual const Glib::ustring & get_current_bank()
virtual void pf_insert_after(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
FloatParameter * reg_par(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
MidiControllerList controller_map
virtual void midi_deleteParameter(Parameter ¶m)
void set_state(GxEngineState state)
sigc::signal< void, bool > & signal_rack_unit_order_changed()
virtual void pf_save(gx_system::PresetFileGui &pf, const Glib::ustring &name)
virtual void commit_ladspa_changes()
virtual gx_system::PresetFileGui * get_bank_file(const Glib::ustring &bank) const
void(* create_small_rackknob)(const char *id, const char *label)
virtual Parameter & get_parameter(const char *p)
sigc::signal< void, unsigned int > size_change
void readJSON_remote(gx_system::JsonParser &jp)
bool set(const Glib::ustring &val) const
void update_plugin(Plugin *pvars)
virtual void create_default_scratch_preset()
virtual void load_ladspalist(std::vector< std::string > &old_not_found, ladspa::LadspaPluginList &pluginlist)
virtual bool rename_preset(gx_system::PresetFileGui &pf, const Glib::ustring &oldname, const Glib::ustring &newname)
virtual void get_oscilloscope_info(int &load, int &frames, bool &is_rt, jack_nframes_t &bsize)
virtual void bank_drag_begin()
virtual void save_to_state(bool preserve_preset=false)
virtual bool midi_get_config_mode(int *ctl=0)
sigc::signal< void, GxEngineState > & signal_state_change()
virtual bool rename_bank(const Glib::ustring &oldname, Glib::ustring &newname)
void(* openpaintampBox)(const char *label)
std::vector< FileName > & get_listing()
virtual sigc::signal< void, int, int > & signal_midi_value_changed()
const GxJConvSettings & get_value() const
FloatParameter & getFloat()
void(* openHorizontalhideBox)(const char *label)
list< MidiController > midi_controller_list
virtual Plugin * pluginlist_lookup_plugin(const std::string &id) const
virtual void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring &name)
static float get(unsigned int channel)
virtual void tuner_switcher_toggle(bool v)
const char * engine_state_to_string(gx_engine::GxEngineState s)
virtual void plugin_preset_list_load(const PluginDef *pdef, gx_preset::UnitPresetList &presetnames)
virtual gx_system::PresetFileGui * get_current_bank_file()
virtual const Glib::ustring & get_current_bank()
virtual sigc::signal< void, const Glib::ustring &, const Glib::ustring & > & tuner_switcher_signal_display()
virtual void tuner_switcher_activate(bool v)
sigc::signal< void, bool > & signal_exit()
virtual bank_iterator bank_end()
virtual gx_system::PresetFileGui * bank_insert_new(const Glib::ustring &newname)
const jsonrpc_method_def jsonrpc_method_list[]
const string & get_instancename()
virtual void msend_midi_cc(int cc, int pgn, int bgn, int num)
int main(int argc, char *argv[])
const Glib::ustring & get_current_name()
void(* create_feedback_slider)(const char *id, const char *label)
virtual void pluginlist_append_rack(UiBuilderBase &ui)
virtual gx_system::PresetFileGui * get_bank_file(const Glib::ustring &bank) const
void(* create_spin_value)(const char *id, const char *label)
virtual void pf_save(gx_system::PresetFileGui &pf, const Glib::ustring &name)
virtual GxEngineState get_state()
virtual sigc::signal< int, bool > & signal_oscilloscope_activation()
virtual void tuner_switcher_activate(bool v)
const Glib::ustring & get_setbank()
void print(const char *func, const std::string &msg, MsgType msgtype)
virtual void pluginlist_append_rack(UiBuilderBase &ui)
virtual sigc::signal< void, int > & signal_oscilloscope_post_pre()
virtual midi_controller_list & midi_get(int n)
sigc::signal< void, MidiAudioBuffer::Load > jack_load_change
virtual sigc::signal< void, Plugin *, PluginChange::pc > & signal_plugin_changed()
virtual void midi_set_config_mode(bool v, int ctl=-1)
void(* create_big_rackknob)(const char *id, const char *label)
const Glib::ustring & get_value() const
void(* openHorizontalTableBox)(const char *label)
void(* set_next_flags)(int flags)
GxEngineState get_state()
virtual void insert_rack_unit(const std::string &unit, const std::string &before, PluginType type)
virtual gx_system::CmdlineOptions & get_options() const
void debug_trace_param(Parameter *p)
virtual const Glib::ustring & get_current_name()
virtual ~GxMachineRemote()
virtual sigc::signal< void, TunerSwitcher::SwitcherState > & tuner_switcher_signal_set_state()
EnumParameter & getEnum()
void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring &name)
virtual gx_jack::GxJack * get_jack()
const Glib::ustring & get_name(int n)
virtual void set_state(GxEngineState state)
virtual int get_bank_index(const Glib::ustring &bank)
virtual gx_system::PresetFileGui * bank_insert_new(const Glib::ustring &newname)
sigc::signal< void, int > & signal_new_mute_state()
sigc::signal< void, const Glib::ustring & > & signal_changed()
virtual bool bank_check_reparse()
virtual void load_preset(gx_system::PresetFileGui *pf, const Glib::ustring &name)
virtual void reload_impresp_list(const std::string &path)
virtual sigc::signal< void > & signal_presetlist_changed()
virtual void save_to_state(bool preserve_preset=false)
string current_value() const
virtual const std::vector< std::string > & get_rack_unit_order(PluginType type)
virtual void bank_set_flag(gx_system::PresetFileGui *pf, int flag, bool v)
virtual sigc::signal< void, unsigned int > & signal_oscilloscope_size_change()
virtual void tuner_switcher_deactivate()
float current_value_float()
virtual void erase_preset(gx_system::PresetFileGui &pf, const Glib::ustring &name)
sigc::signal< void, const Glib::ustring &, const Glib::ustring & > & signal_display()
virtual bool oscilloscope_plugin_box_visible()
void(* create_simple_c_meter)(const char *id, const char *idl, const char *label)
void deleteParameter(Parameter ¶m)
virtual bool get_tuner_switcher_active()
virtual sigc::signal< void, TunerSwitcher::SwitcherState > & tuner_switcher_signal_set_state()
virtual gx_system::PresetFileGui * bank_get_file(const Glib::ustring &bank) const
token next(token expect=no_token)
BoolParameter & getBool()
virtual void load_preset(gx_system::PresetFileGui *pf, const Glib::ustring &name)
void write(float v, bool nl=false)
void(* create_eq_rackslider_no_caption)(const char *id)
void add_time_measurement()
virtual void tuner_switcher_toggle(bool v)
virtual void request_midi_value_update()
virtual void set_oscilloscope_mul_buffer(int a)
virtual bank_iterator bank_end()
void insert_before(PresetFile &pf, const Glib::ustring &src, PresetFile &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
void(* create_switch)(const char *sw_type, const char *id, const char *label)
virtual std::string bank_get_filename(const Glib::ustring &bank)
bool get_box_visible() const
virtual gx_jack::GxJack * get_jack()
void modifyCurrent(Parameter ¶m, float lower, float upper, bool toggle)
void toggle(bool tuner_active)
virtual void reload_impresp_list(const std::string &path)
virtual void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring &name)
EnumParameter * reg_non_midi_enum_par(const string &id, const string &name, const value_pair *vl, int *var, bool preset, int std=0)
virtual bool load_unit(gx_gui::UiBuilderImpl &builder, PluginDef *pdef)
virtual void load_impresp_dirs(std::vector< gx_system::FileName > &dirs)
void(* openVerticalBox1)(const char *label)
void request_midi_value_update()
virtual sigc::signal< void, bool > & signal_oscilloscope_visible()
void append_rack(UiBuilderBase &ui)
sigc::signal< void, int > & signal_changed()
virtual void reset_unit(const PluginDef *pdef) const
virtual sigc::signal< void > & signal_presetlist_changed()
virtual sigc::signal< int, bool > & signal_oscilloscope_activation()
void readJSON(gx_system::JsonParser &jp)
void set_mul_buffer(int a, unsigned int b)
virtual void pf_insert_before(gx_system::PresetFileGui &pf, const Glib::ustring &src, gx_system::PresetFileGui &pftgt, const Glib::ustring &pos, const Glib::ustring &name)
virtual gx_system::PresetFileGui * get_current_bank_file()
virtual void create_default_scratch_preset()
void(* create_master_slider)(const char *id, const char *label)
jack_nframes_t get_time_is()
virtual sigc::signal< void, const Glib::ustring &, const Glib::ustring & > & tuner_switcher_signal_display()
void end_object(bool nl=false)
virtual void midi_deleteParameter(Parameter ¶m)
virtual sigc::signal< void > & signal_selection_changed()
virtual const float * get_oscilloscope_buffer()
const Glib::ustring & get_current_bank()
void save_to_state(bool preserve_preset=false)
void(* create_selector_no_caption)(const char *id)
virtual bool convert_preset(gx_system::PresetFileGui &pf)
void(* openVerticalBox)(const char *label)
void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring &name)
void reorder_preset(PresetFile &pf, const std::vector< Glib::ustring > &neworder)
virtual bool convert_preset(gx_system::PresetFileGui &pf)
void erase_preset(const Glib::ustring &name)
virtual sigc::signal< void, Plugin *, PluginChange::pc > & signal_plugin_changed()
virtual bool oscilloscope_plugin_box_visible()
virtual sigc::signal< void, bool > & signal_oscilloscope_visible()