13
0

Merge branch 'ardour'

This commit is contained in:
Robin Gareus 2024-10-17 15:38:42 +02:00
commit 9c292ed6f4
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
38 changed files with 201 additions and 134 deletions

View File

@ -8,3 +8,5 @@ MimeType=application/x-ardour;
Type=Application Type=Application
Categories=AudioVideo;Audio;AudioEditing;X-Recorders;X-Multitrack;X-Jack; Categories=AudioVideo;Audio;AudioEditing;X-Recorders;X-Multitrack;X-Jack;
StartupWMClass=Ardour StartupWMClass=Ardour
X-NSM-Capable=true
X-NSM-Exec=@ARDOUR_EXEC@

View File

@ -445,11 +445,11 @@ Editor::drop_paths_part_two (const vector<string>& paths, timepos_t const & p, d
/* drop onto canvas background: create new tracks */ /* drop onto canvas background: create new tracks */
InstrumentSelector is(InstrumentSelector::ForTrackDefault); // instantiation builds instrument-list and sets default. InstrumentSelector is(InstrumentSelector::ForTrackDefault); // instantiation builds instrument-list and sets default.
do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos, is.selected_instrument()); do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos, is.selected_instrument());
if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { if (UIConfiguration::instance().get_only_copy_imported_files() || copy) {
do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack,
SrcBest, SMFTrackName, SMFTempoIgnore, pos); SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos);
} else { } else {
do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, pos); do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, pos);
} }
@ -460,11 +460,11 @@ Editor::drop_paths_part_two (const vector<string>& paths, timepos_t const & p, d
if (tv->track()) { if (tv->track()) {
do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack,
SrcBest, SMFTrackNumber, SMFTempoIgnore, pos, std::shared_ptr<ARDOUR::PluginInfo>(), tv->track ()); SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos, std::shared_ptr<ARDOUR::PluginInfo>(), tv->track ());
if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { if (UIConfiguration::instance().get_only_copy_imported_files() || copy) {
do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack,
SrcBest, SMFTrackName, SMFTempoIgnore, pos, std::shared_ptr<PluginInfo>(), tv->track ()); SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos, std::shared_ptr<PluginInfo>(), tv->track ());
} else { } else {
do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, pos, std::shared_ptr<ARDOUR::PluginInfo>(), tv->track ()); do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, pos, std::shared_ptr<ARDOUR::PluginInfo>(), tv->track ());
} }

View File

@ -294,7 +294,7 @@ EditorSources::drag_data_received (const RefPtr<Gdk::DragContext>& context,
if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) { if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) {
_editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion,
SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos);
} else { } else {
_editor->do_embed (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, pos); _editor->do_embed (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, pos);
} }

View File

@ -423,7 +423,7 @@ ExportDialog::show_progress ()
for (auto const& x : _files_to_reimport) { for (auto const& x : _files_to_reimport) {
timepos_t pos (x.first); timepos_t pos (x.first);
Editing::ImportDisposition disposition = Editing::ImportDistinctFiles; Editing::ImportDisposition disposition = Editing::ImportDistinctFiles;
editor.do_import (x.second, disposition, Editing::ImportAsTrack, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); editor.do_import (x.second, disposition, Editing::ImportAsTrack, SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos);
} }
} }

View File

@ -326,7 +326,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:green"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -317,7 +317,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="alert:green"/> <ColorAlias name="pluginui toggle: fill active" alias="alert:green"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:blue"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -318,7 +318,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="theme:contrasting"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -58,7 +58,7 @@
<ColorAlias name="audio bus base" alias="widget:blue darker"/> <ColorAlias name="audio bus base" alias="widget:blue darker"/>
<ColorAlias name="audio master bus base" alias="neutral:backgroundest"/> <ColorAlias name="audio master bus base" alias="neutral:backgroundest"/>
<ColorAlias name="audio track base" alias="neutral:background"/> <ColorAlias name="audio track base" alias="neutral:background"/>
<ColorAlias name="automation line" alias="midi meter 52"/> <ColorAlias name="automation line" alias="neutral:backgroundest"/>
<ColorAlias name="automation track outline" alias="theme:bg1"/> <ColorAlias name="automation track outline" alias="theme:bg1"/>
<ColorAlias name="big clock active: background" alias="neutral:backgroundest"/> <ColorAlias name="big clock active: background" alias="neutral:backgroundest"/>
<ColorAlias name="big clock active: cursor" alias="theme:contrasting alt"/> <ColorAlias name="big clock active: cursor" alias="theme:contrasting alt"/>
@ -324,7 +324,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="alert:green"/> <ColorAlias name="pluginui toggle: fill active" alias="alert:green"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="neutral:backgroundest"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -318,7 +318,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="alert:red"/> <ColorAlias name="pluginui toggle: fill active" alias="alert:red"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="neutral:backgroundest"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -318,7 +318,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:greenish"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -319,7 +319,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:green"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -319,7 +319,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:green"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -317,7 +317,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="widget:blue"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:blue"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:blue"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -318,7 +318,7 @@
<ColorAlias name="pluginui toggle: fill" alias="widget:bg"/> <ColorAlias name="pluginui toggle: fill" alias="widget:bg"/>
<ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/> <ColorAlias name="pluginui toggle: fill active" alias="widget:blue"/>
<ColorAlias name="preference highlight" alias="alert:yellow"/> <ColorAlias name="preference highlight" alias="alert:yellow"/>
<ColorAlias name="processor automation line" alias="theme:bg1"/> <ColorAlias name="processor automation line" alias="alert:greenish"/>
<ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/> <ColorAlias name="processor auxfeedback: fill" alias="theme:contrasting alt"/>
<ColorAlias name="processor auxfeedback: led active" alias="alert:green"/> <ColorAlias name="processor auxfeedback: led active" alias="alert:green"/>
<ColorAlias name="processor control button: fill" alias="neutral:background"/> <ColorAlias name="processor control button: fill" alias="neutral:background"/>

View File

@ -730,8 +730,8 @@ TriggerPage::drop_paths_part_two (std::vector<std::string> paths)
} }
timepos_t pos (0); timepos_t pos (0);
Editing::ImportDisposition disposition = Editing::ImportSerializeFiles; // or Editing::ImportDistinctFiles // TODO use drop modifier? config? Editing::ImportDisposition disposition = Editing::ImportSerializeFiles; // or Editing::ImportDistinctFiles // TODO use drop modifier? config?
PublicEditor::instance().do_import (midi_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos, _trigger_clip_picker.instrument_plugin ()); PublicEditor::instance().do_import (midi_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos, _trigger_clip_picker.instrument_plugin ());
PublicEditor::instance().do_import (audio_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFTrackNumber, SMFTempoIgnore, pos); PublicEditor::instance().do_import (audio_paths, disposition, Editing::ImportAsTrigger, SrcBest, SMFFileAndTrackName, SMFTempoIgnore, pos);
} }
bool bool

View File

@ -76,7 +76,7 @@ IOTaskList::IOTaskList (uint32_t n_threads)
_workers.resize (_n_threads); _workers.resize (_n_threads);
for (uint32_t i = 0; i < _n_threads; ++i) { for (uint32_t i = 0; i < _n_threads; ++i) {
if (!use_rt || pbd_realtime_pthread_create (policy, THREAD_IO, 0, &_workers[i], &_worker_thread, this)) { if (!use_rt || pbd_realtime_pthread_create ("I/O", policy, PBD_RT_PRI_IOFX, 0, &_workers[i], &_worker_thread, this)) {
if (use_rt && i == 0) { if (use_rt && i == 0) {
PBD::warning << _("IOTaskList: cannot acquire realtime permissions.") << endmsg; PBD::warning << _("IOTaskList: cannot acquire realtime permissions.") << endmsg;
} }

View File

@ -73,18 +73,7 @@ using namespace ARDOUR;
using namespace PBD; using namespace PBD;
using namespace Temporal; using namespace Temporal;
#ifdef NDEBUG #define ENSURE_PROCESS_THREAD do {} while (0)
# define ENSURE_PROCESS_THREAD do {} while (0)
#else
# define ENSURE_PROCESS_THREAD \
do { \
if (!AudioEngine::instance()->in_process_thread() \
&& !loading ()) { \
PBD::stacktrace (std::cerr, 30); \
} \
} while (0)
#endif
#define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); } #define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); }
#define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); } #define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); }

View File

@ -3650,7 +3650,7 @@ TriggerBox::set_from_path (uint32_t slot, std::string const & path)
status.replace_existing_source = false; status.replace_existing_source = false;
status.split_midi_channels = false; status.split_midi_channels = false;
status.import_markers = false; status.import_markers = false;
status.midi_track_name_source = ARDOUR::SMFTrackNumber; status.midi_track_name_source = ARDOUR::SMFFileAndTrackName;
_session.import_files (status); _session.import_files (status);

View File

@ -952,7 +952,7 @@ AlsaAudioBackend::_start (bool for_latency_measurement)
_run = true; _run = true;
_port_change_flag.store (0); _port_change_flag.store (0);
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("ALSA Main", PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC,
&_main_thread, pthread_process, this)) { &_main_thread, pthread_process, this)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) {
PBD::error << _("AlsaAudioBackend: failed to create process thread.") << endmsg; PBD::error << _("AlsaAudioBackend: failed to create process thread.") << endmsg;
@ -1152,7 +1152,7 @@ AlsaAudioBackend::create_process_thread (boost::function<void ()> func)
pthread_t thread_id; pthread_t thread_id;
ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC); ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC);
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, &thread_id, alsa_process_thread, td)) { if (pbd_realtime_pthread_create ("ALSA Proc", PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, &thread_id, alsa_process_thread, td)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, alsa_process_thread, td)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, alsa_process_thread, td)) {
PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; PBD::error << _("AudioEngine: cannot create process thread.") << endmsg;
return -1; return -1;
@ -1666,7 +1666,7 @@ AlsaAudioBackend::set_latency_range (PortEngine::PortHandle port_handle, bool fo
{ {
BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle); BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "AlsaPort::set_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "AlsaAudioBackend::set_latency_range (): invalid port.");
return; return;
} }
port->set_latency_range (latency_range, for_playback); port->set_latency_range (latency_range, for_playback);
@ -1679,7 +1679,7 @@ AlsaAudioBackend::get_latency_range (PortEngine::PortHandle port_handle, bool fo
LatencyRange r; LatencyRange r;
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "AlsaPort::get_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "AlsaAudioBackend::get_latency_range (): invalid port.");
r.min = 0; r.min = 0;
r.max = 0; r.max = 0;
return r; return r;

View File

@ -73,7 +73,7 @@ static void * pthread_process (void *arg)
int int
AlsaMidiIO::start () AlsaMidiIO::start ()
{ {
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MIDI, PBD_RT_STACKSIZE_HELP, if (pbd_realtime_pthread_create ("ALSA MIDI", PBD_SCHED_FIFO, PBD_RT_PRI_MIDI, PBD_RT_STACKSIZE_HELP,
&_main_thread, pthread_process, this)) &_main_thread, pthread_process, this))
{ {
if (pbd_pthread_create (PBD_RT_STACKSIZE_HELP, &_main_thread, pthread_process, this)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_HELP, &_main_thread, pthread_process, this)) {

View File

@ -111,7 +111,7 @@ AlsaAudioSlave::start ()
} }
_run = true; _run = true;
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_HELP, if (pbd_realtime_pthread_create ("ALSA Slave", PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_HELP,
&_thread, _process_thread, this)) &_thread, _process_thread, this))
{ {
if (pbd_pthread_create (PBD_RT_STACKSIZE_HELP, &_thread, _process_thread, this)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_HELP, &_thread, _process_thread, this)) {

View File

@ -829,7 +829,7 @@ CoreAudioBackend::create_process_thread (boost::function<void()> func)
} }
#endif #endif
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("CoreAudio Proc", PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC,
&thread_id, coreaudio_process_thread, td)) { &thread_id, coreaudio_process_thread, td)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, coreaudio_process_thread, td)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, coreaudio_process_thread, td)) {
PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; PBD::error << _("AudioEngine: cannot create process thread.") << endmsg;
@ -1158,7 +1158,7 @@ CoreAudioBackend::set_latency_range (PortEngine::PortHandle port_handle, bool fo
{ {
std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort> (port_handle); std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort> (port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "BackendPort::set_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "CoreAudioBackend::set_latency_range (): invalid port.");
return; return;
} }
port->set_latency_range (latency_range, for_playback); port->set_latency_range (latency_range, for_playback);
@ -1170,7 +1170,7 @@ CoreAudioBackend::get_latency_range (PortEngine::PortHandle port_handle, bool fo
std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort> (port_handle); std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort> (port_handle);
LatencyRange r; LatencyRange r;
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "BackendPort::get_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "CoreAudioBackend::get_latency_range (): invalid port.");
r.min = 0; r.min = 0;
r.max = 0; r.max = 0;
return r; return r;

View File

@ -431,7 +431,7 @@ DummyAudioBackend::_start (bool /*for_latency_measurement*/)
_port_change_flag.store (0); _port_change_flag.store (0);
bool ok = _realtime; bool ok = _realtime;
if (_realtime && pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) { if (_realtime && pbd_realtime_pthread_create ("Dummy Main", PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) {
PBD::warning << _("DummyAudioBackend: failed to acquire realtime permissions.") << endmsg; PBD::warning << _("DummyAudioBackend: failed to acquire realtime permissions.") << endmsg;
ok = false; ok = false;
} }
@ -529,7 +529,7 @@ DummyAudioBackend::create_process_thread (boost::function<void()> func)
pthread_t thread_id; pthread_t thread_id;
ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC); ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC);
bool ok = _realtime && 0 == pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, &thread_id, dummy_process_thread, td); bool ok = _realtime && 0 == pbd_realtime_pthread_create ("Dummy Proc", PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, &thread_id, dummy_process_thread, td);
if (!ok && pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, dummy_process_thread, td)) { if (!ok && pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, dummy_process_thread, td)) {
PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; PBD::error << _("AudioEngine: cannot create process thread.") << endmsg;
return -1; return -1;
@ -846,7 +846,7 @@ DummyAudioBackend::set_latency_range (PortEngine::PortHandle port_handle, bool f
{ {
BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle); BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "DummyPort::set_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "DummyAudioBackend::set_latency_range (): invalid port.");
return; return;
} }
port->set_latency_range (latency_range, for_playback); port->set_latency_range (latency_range, for_playback);
@ -858,7 +858,7 @@ DummyAudioBackend::get_latency_range (PortEngine::PortHandle port_handle, bool f
LatencyRange r; LatencyRange r;
BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle); BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_TRACE (PBD::DEBUG::BackendPorts, "DummyPort::get_latency_range (): invalid port."); DEBUG_TRACE (PBD::DEBUG::BackendPorts, "DummyAudioBackend::get_latency_range (): invalid port.");
r.min = 0; r.min = 0;
r.max = 0; r.max = 0;
return r; return r;

View File

@ -775,7 +775,7 @@ PortAudioBackend::process_callback(const float* input,
bool bool
PortAudioBackend::start_blocking_process_thread () PortAudioBackend::start_blocking_process_thread ()
{ {
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("PortAudio Main", PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC,
&_main_blocking_thread, blocking_thread_func, this)) &_main_blocking_thread, blocking_thread_func, this))
{ {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_blocking_thread, blocking_thread_func, this)) if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_blocking_thread, blocking_thread_func, this))
@ -1103,7 +1103,7 @@ PortAudioBackend::create_process_thread (boost::function<void()> func)
pthread_t thread_id; pthread_t thread_id;
ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC); ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC);
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("PortAudio Proc", PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC,
&thread_id, portaudio_process_thread, td)) { &thread_id, portaudio_process_thread, td)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, portaudio_process_thread, td)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, portaudio_process_thread, td)) {
DEBUG_AUDIO("Cannot create process thread."); DEBUG_AUDIO("Cannot create process thread.");
@ -1428,7 +1428,7 @@ PortAudioBackend::set_latency_range (PortEngine::PortHandle port_handle, bool fo
{ {
std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort>(port_handle); std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort>(port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_PORTS("BackendPort::set_latency_range (): invalid port.\n"); DEBUG_PORTS ("PortAudioBackend::set_latency_range (): invalid port.\n");
return; return;
} }
port->set_latency_range (latency_range, for_playback); port->set_latency_range (latency_range, for_playback);
@ -1440,7 +1440,7 @@ PortAudioBackend::get_latency_range (PortEngine::PortHandle port_handle, bool fo
std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort>(port_handle); std::shared_ptr<BackendPort> port = std::dynamic_pointer_cast<BackendPort>(port_handle);
LatencyRange r; LatencyRange r;
if (!valid_port (port)) { if (!valid_port (port)) {
DEBUG_PORTS("BackendPort::get_latency_range (): invalid port.\n"); DEBUG_PORTS ("PortAudioBackend::get_latency_range (): invalid port.\n");
r.min = 0; r.min = 0;
r.max = 0; r.max = 0;
return r; return r;

View File

@ -230,7 +230,7 @@ WinMMEMidiOutputDevice::start_midi_output_thread ()
m_thread_quit = false; m_thread_quit = false;
// TODO Use native threads // TODO Use native threads
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MIDI, PBD_RT_STACKSIZE_HELP, if (pbd_realtime_pthread_create ("WinMME Output", PBD_SCHED_FIFO, PBD_RT_PRI_MIDI, PBD_RT_STACKSIZE_HELP,
&m_output_thread_handle, midi_output_thread, this)) { &m_output_thread_handle, midi_output_thread, this)) {
return false; return false;
} }

View File

@ -584,7 +584,7 @@ PulseAudioBackend::_start (bool /*for_latency_measurement*/)
_run = true; _run = true;
_port_change_flag.store (0); _port_change_flag.store (0);
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("PulseAudio Main", PBD_SCHED_FIFO, PBD_RT_PRI_MAIN, PBD_RT_STACKSIZE_PROC,
&_main_thread, pthread_process, this)) { &_main_thread, pthread_process, this)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &_main_thread, pthread_process, this)) {
PBD::error << _("PulseAudioBackend: failed to create process thread.") << endmsg; PBD::error << _("PulseAudioBackend: failed to create process thread.") << endmsg;
@ -703,7 +703,7 @@ PulseAudioBackend::create_process_thread (boost::function<void()> func)
pthread_t thread_id; pthread_t thread_id;
ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC); ThreadData* td = new ThreadData (this, func, PBD_RT_STACKSIZE_PROC);
if (pbd_realtime_pthread_create (PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC, if (pbd_realtime_pthread_create ("PulseAudio Proc", PBD_SCHED_FIFO, PBD_RT_PRI_PROC, PBD_RT_STACKSIZE_PROC,
&thread_id, pulse_process_thread, td)) { &thread_id, pulse_process_thread, td)) {
if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, pulse_process_thread, td)) { if (pbd_pthread_create (PBD_RT_STACKSIZE_PROC, &thread_id, pulse_process_thread, td)) {
PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; PBD::error << _("AudioEngine: cannot create process thread.") << endmsg;
@ -895,7 +895,7 @@ PulseAudioBackend::set_latency_range (PortEngine::PortHandle port_handle, bool f
{ {
BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle); BackendPortPtr port = std::dynamic_pointer_cast<BackendPort> (port_handle);
if (!valid_port (port)) { if (!valid_port (port)) {
PBD::error << _("PulsePort::set_latency_range (): invalid port.") << endmsg; PBD::error << _("PulseAudioBackend::set_latency_range (): invalid port.") << endmsg;
} }
port->set_latency_range (latency_range, for_playback); port->set_latency_range (latency_range, for_playback);
} }
@ -907,7 +907,7 @@ PulseAudioBackend::get_latency_range (PortEngine::PortHandle port_handle, bool f
LatencyRange r; LatencyRange r;
if (!valid_port (port)) { if (!valid_port (port)) {
PBD::error << _("PulsePort::get_latency_range (): invalid port.") << endmsg; PBD::error << _("PulseAudioBackend::get_latency_range (): invalid port.") << endmsg;
r.min = 0; r.min = 0;
r.max = 0; r.max = 0;
return r; return r;

View File

@ -23,6 +23,7 @@
#include <string> #include <string>
#ifdef PLATFORM_WINDOWS #ifdef PLATFORM_WINDOWS
#include <objidl.h>
#include <windows.h> #include <windows.h>
#else #else
#include <signal.h> #include <signal.h>

View File

@ -35,6 +35,7 @@ def build(bld):
autowaf.ensure_visible_symbols (obj, False) autowaf.ensure_visible_symbols (obj, False)
obj.export_includes = ['hidapi'] obj.export_includes = ['hidapi']
obj.includes = ['hidapi'] obj.includes = ['hidapi']
obj.defines = ['_POSIX_C_SOURCE=200809L']
obj.name = 'hidapi' obj.name = 'hidapi'
obj.target = 'hidapi' obj.target = 'hidapi'
obj.vnum = HIDAPI_VERSION obj.vnum = HIDAPI_VERSION
@ -51,7 +52,6 @@ def build(bld):
obj.source = 'mac/hid.c' obj.source = 'mac/hid.c'
obj.framework = [ 'IOKit', 'CoreFoundation' ] obj.framework = [ 'IOKit', 'CoreFoundation' ]
else: else:
# with '-strict' this needs "-std=gnu99" to compile w/o warnings
obj.source = 'linux/hid.c' obj.source = 'linux/hid.c'
if re.search ("linux", sys.platform) != None: if re.search ("linux", sys.platform) != None:
obj.uselib = 'UDEV' obj.uselib = 'UDEV'

View File

@ -176,7 +176,7 @@ typedef unsigned int nfds_t;
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
LIBPBD_API int __cdecl gettimeofday(struct timeval *__restrict tv, __timezone_ptr_t tz); LIBPBD_API int __cdecl gettimeofday(struct timeval *__restrict tv, __timezone_ptr_t tz) __THROW;
LIBPBD_API ssize_t PBD_APICALLTYPE pread(int handle, void *buf, size_t nbytes, off_t offset); LIBPBD_API ssize_t PBD_APICALLTYPE pread(int handle, void *buf, size_t nbytes, off_t offset);
LIBPBD_API ssize_t PBD_APICALLTYPE pwrite(int handle, const void *buf, size_t nbytes, off_t offset); LIBPBD_API ssize_t PBD_APICALLTYPE pwrite(int handle, const void *buf, size_t nbytes, off_t offset);

View File

@ -58,6 +58,7 @@
# define PBD_RT_PRI_MIDI pbd_pthread_priority (THREAD_MIDI) # define PBD_RT_PRI_MIDI pbd_pthread_priority (THREAD_MIDI)
# define PBD_RT_PRI_PROC pbd_pthread_priority (THREAD_PROC) # define PBD_RT_PRI_PROC pbd_pthread_priority (THREAD_PROC)
# define PBD_RT_PRI_CTRL pbd_pthread_priority (THREAD_CTRL) # define PBD_RT_PRI_CTRL pbd_pthread_priority (THREAD_CTRL)
# define PBD_RT_PRI_IOFX pbd_pthread_priority (THREAD_IOFX)
LIBPBD_API int pthread_create_and_store (std::string name, pthread_t *thread, void * (*start_routine)(void *), void * arg, uint32_t stacklimit = 0x80000 /*512kB*/); LIBPBD_API int pthread_create_and_store (std::string name, pthread_t *thread, void * (*start_routine)(void *), void * arg, uint32_t stacklimit = 0x80000 /*512kB*/);
LIBPBD_API void pthread_cancel_one (pthread_t thread); LIBPBD_API void pthread_cancel_one (pthread_t thread);
@ -73,7 +74,7 @@ enum PBDThreadClass {
THREAD_MIDI, // MIDI I/O threads THREAD_MIDI, // MIDI I/O threads
THREAD_PROC, // realtime worker THREAD_PROC, // realtime worker
THREAD_CTRL, // Automation watch, BaseUI THREAD_CTRL, // Automation watch, BaseUI
THREAD_IO // non-realtime I/O THREAD_IOFX // non-realtime I/O and regionFX
}; };
LIBPBD_API int pbd_pthread_priority (PBDThreadClass); LIBPBD_API int pbd_pthread_priority (PBDThreadClass);
@ -86,6 +87,7 @@ LIBPBD_API int pbd_pthread_create (
LIBPBD_API int pbd_realtime_pthread_create ( LIBPBD_API int pbd_realtime_pthread_create (
std::string const& debug_name,
const int policy, int priority, const size_t stacksize, const int policy, int priority, const size_t stacksize,
pthread_t *thread, pthread_t *thread,
void *(*start_routine) (void *), void *(*start_routine) (void *),

View File

@ -348,7 +348,7 @@ pbd_pthread_priority (PBDThreadClass which)
case THREAD_CTRL: case THREAD_CTRL:
default: default:
return -14; // THREAD_PRIORITY_HIGHEST (2) return -14; // THREAD_PRIORITY_HIGHEST (2)
case THREAD_IO: case THREAD_IOFX:
/* https://github.com/mingw-w64/mingw-w64/blob/master/mingw-w64-libraries/winpthreads/src/sched.c */ /* https://github.com/mingw-w64/mingw-w64/blob/master/mingw-w64-libraries/winpthreads/src/sched.c */
return -15; // THREAD_PRIORITY_ABOVE_NORMAL (1) return -15; // THREAD_PRIORITY_ABOVE_NORMAL (1)
} }
@ -372,7 +372,7 @@ pbd_pthread_priority (PBDThreadClass which)
return base - 2; return base - 2;
case THREAD_CTRL: case THREAD_CTRL:
return base - 3; return base - 3;
case THREAD_IO: case THREAD_IOFX:
return base - 10; return base - 10;
} }
#endif #endif
@ -396,6 +396,7 @@ pbd_absolute_rt_priority (int policy, int priority)
int int
pbd_realtime_pthread_create ( pbd_realtime_pthread_create (
std::string const& debug_name,
const int policy, int priority, const size_t stacksize, const int policy, int priority, const size_t stacksize,
pthread_t* thread, pthread_t* thread,
void* (*start_routine) (void*), void* (*start_routine) (void*),
@ -416,7 +417,7 @@ pbd_realtime_pthread_create (
if (stacksize > 0) { if (stacksize > 0) {
pthread_attr_setstacksize (&attr, stacksize + pbd_stack_size ()); pthread_attr_setstacksize (&attr, stacksize + pbd_stack_size ());
} }
DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Start Realtime Thread policy = %1 priority = %2 stacksize = 0x%3%4\n", policy, parm.sched_priority, std::hex, stacksize)); DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Start RT Thread: '%1' policy = %2 priority = %3 stacksize = 0x%4%5\n", debug_name, policy, parm.sched_priority, std::hex, stacksize));
rv = pthread_create (thread, &attr, start_routine, arg); rv = pthread_create (thread, &attr, start_routine, arg);
pthread_attr_destroy (&attr); pthread_attr_destroy (&attr);

View File

@ -117,7 +117,7 @@ FaderPort8::probe (std::string& i, std::string& o)
#elif defined FADERPORT2 #elif defined FADERPORT2
"PreSonus FP2" "PreSonus FP2"
#else #else
"PreSonus FP8" "PreSonus FP8 Port 1"
#endif #endif
; ;
@ -465,7 +465,7 @@ FaderPort8::connection_handler (std::string name1, std::string name2)
string no = ARDOUR::AudioEngine::instance()->make_port_name_non_relative (std::shared_ptr<ARDOUR::Port>(_output_port)->name()); string no = ARDOUR::AudioEngine::instance()->make_port_name_non_relative (std::shared_ptr<ARDOUR::Port>(_output_port)->name());
if (ni == name1 || ni == name2) { if (ni == name1 || ni == name2) {
DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connection notify %1 and %2\n", name1, name2)); DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connection notify inputs '%1' and '%2'\n", name1, name2));
if (_input_port->connected ()) { if (_input_port->connected ()) {
if (_connection_state & InputConnected) { if (_connection_state & InputConnected) {
return false; return false;
@ -475,7 +475,7 @@ FaderPort8::connection_handler (std::string name1, std::string name2)
_connection_state &= ~InputConnected; _connection_state &= ~InputConnected;
} }
} else if (no == name1 || no == name2) { } else if (no == name1 || no == name2) {
DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connection notify %1 and %2\n", name1, name2)); DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connection notify outputs '%1' and '%2'\n", name1, name2));
if (_output_port->connected ()) { if (_output_port->connected ()) {
if (_connection_state & OutputConnected) { if (_connection_state & OutputConnected) {
return false; return false;
@ -486,7 +486,7 @@ FaderPort8::connection_handler (std::string name1, std::string name2)
} }
} else { } else {
#ifdef VERBOSE_DEBUG #ifdef VERBOSE_DEBUG
DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connections between %1 and %2 changed, but I ignored it\n", name1, name2)); DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("Connections between '%1' and '%2' changed, but I ignored it\n", name1, name2));
#endif #endif
/* not our ports */ /* not our ports */
return false; return false;

View File

@ -57,6 +57,8 @@ SliderController::SliderController (Gtk::Adjustment *adj, std::shared_ptr<PBD::C
_spin_adj.set_page_increment(_ctrl->interface_to_internal(adj->get_page_increment()) - _ctrl->lower ()); _spin_adj.set_page_increment(_ctrl->interface_to_internal(adj->get_page_increment()) - _ctrl->lower ());
} }
ctrl_adjusted ();
adj->signal_value_changed().connect (sigc::mem_fun(*this, &SliderController::ctrl_adjusted)); adj->signal_value_changed().connect (sigc::mem_fun(*this, &SliderController::ctrl_adjusted));
_spin_adj.signal_value_changed().connect (sigc::mem_fun(*this, &SliderController::spin_adjusted)); _spin_adj.signal_value_changed().connect (sigc::mem_fun(*this, &SliderController::spin_adjusted));

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<ArdourMIDIBindings version="1.0.0" name="M-Audio Axiom 49 MkII">
<!-- 2015-04-25 Edgar Aichinger: initial version for Axiom 61 -->
<!-- 2024-10-14 Francois-Xavier Thomas: adaptation for Axiom 49 MkII -->
<!-- I'm assuming Factory default, preset/patch 1 in the Axiom 49 MkII. -->
<!-- Faders, mapped to track faders 1-8 and Master -->
<Binding channel="1" ctl="74" uri="/route/gain 1"/>
<Binding channel="1" ctl="71" uri="/route/gain 2"/>
<Binding channel="1" ctl="91" uri="/route/gain 3"/>
<Binding channel="1" ctl="93" uri="/route/gain 4"/>
<Binding channel="1" ctl="73" uri="/route/gain 5"/>
<Binding channel="1" ctl="72" uri="/route/gain 6"/>
<Binding channel="1" ctl="5" uri="/route/gain 7"/>
<Binding channel="1" ctl="84" uri="/route/gain 8"/>
<Binding channel="1" ctl="7" uri="/bus/gain master"/>
<!-- Zone/Group buttons, below the faders -->
<!-- these toggle record for the corresponding tracks (1-8) and metronome/click on the rightmost button -->
<Binding channel="1" pgm="0" uri="/route/recenable 1"/>
<Binding channel="1" pgm="1" uri="/route/recenable 2"/>
<Binding channel="1" pgm="2" uri="/route/recenable 3"/>
<Binding channel="1" pgm="3" uri="/route/recenable 4"/>
<Binding channel="1" pgm="4" uri="/route/recenable 5"/>
<Binding channel="1" pgm="5" uri="/route/recenable 6"/>
<Binding channel="1" pgm="6" uri="/route/recenable 7"/>
<Binding channel="1" pgm="7" uri="/route/recenable 8"/>
<Binding channel="1" pgm="8" action="Transport/ToggleClick"/>
<!-- Encoders, mapped to pan direction. -->
<Binding channel="1" ctl="75" uri="/route/pandirection 1"/>
<Binding channel="1" ctl="76" uri="/route/pandirection 2"/>
<Binding channel="1" ctl="92" uri="/route/pandirection 3"/>
<Binding channel="1" ctl="95" uri="/route/pandirection 4"/>
<Binding channel="1" ctl="10" uri="/route/pandirection 5"/>
<Binding channel="1" ctl="77" uri="/route/pandirection 6"/>
<Binding channel="1" ctl="78" uri="/route/pandirection 7"/>
<Binding channel="1" ctl="79" uri="/route/pandirection 8"/>
<!-- Transport controls -->
<Binding channel="16" ctl="114" action="Common/jump-backward-to-mark"/>
<Binding channel="16" ctl="115" action="Common/jump-forward-to-mark"/>
<Binding channel="16" ctl="116" function="transport-stop"/>
<Binding channel="16" ctl="117" function="transport-roll"/>
<Binding channel="16" ctl="113" function="loop-toggle"/>
<Binding channel="16" ctl="118" function="toggle-rec-enable"/>
</ArdourMIDIBindings>

View File

@ -0,0 +1,37 @@
ardour {
["type"] = "EditorAction",
name = "Duplicate to grid",
version = "0.1.0",
license = "MIT",
author = "Daniel Appelt",
description = [[Duplicate region to grid]]
}
function factory () return function ()
-- Get first selected region
local regionList = Editor:get_selection().regions:regionlist()
local region = regionList:front()
-- Bail out if no region was selected
if region:isnil() then
LuaDialog.Message("Duplicate to grid", "Please select a region first!",
LuaDialog.MessageType.Info, LuaDialog.ButtonType.Close):run()
return
end
-- Create duplicate of region
local playlist = region:playlist()
local curPos = region:position()
local curBeat = Editor:get_grid_type_as_beats(true, curPos)
local nextPos = Temporal.timepos_t.from_ticks(curPos:ticks() + curBeat:to_ticks())
-- gap could be used to create mulitple duplicates at once
local gap = Temporal.timecnt_t.from_ticks(curBeat:to_ticks())
playlist:duplicate(region, nextPos, gap, 1)
-- Change selection to duplicate to allow repeated application
local selectionList = ArdourUI.SelectionList()
region = playlist:find_next_region(curPos, ARDOUR.RegionPoint.Start, 1)
local regionView = Editor:regionview_from_region(region)
selectionList:push_back(regionView)
Editor:set_selection(selectionList, ArdourUI.SelectionOp.Set)
end end

View File

@ -8,7 +8,7 @@ function factory (params) return function ()
local pos = Temporal.timepos_t(0) local pos = Temporal.timepos_t(0)
Editor:do_import (files, Editor:do_import (files,
Editing.ImportDistinctFiles, Editing.ImportAsTrack, ARDOUR.SrcQuality.SrcBest, Editing.ImportDistinctFiles, Editing.ImportAsTrack, ARDOUR.SrcQuality.SrcBest,
ARDOUR.MidiTrackNameSource.SMFTrackName, ARDOUR.MidiTempoMapDisposition.SMFTempoIgnore, ARDOUR.MidiTrackNameSource.SMFFileAndTrackName, ARDOUR.MidiTempoMapDisposition.SMFTempoIgnore,
pos, ARDOUR.PluginInfo(), ARDOUR.Track(), false) pos, ARDOUR.PluginInfo(), ARDOUR.Track(), false)
end end end end

View File

@ -76,6 +76,7 @@ while [ $# -gt 0 ] ; do
STRIP=all ; STRIP=all ;
WITH_NLS=1 ; WITH_NLS=1 ;
APPNAME=LiveTrax ; APPNAME=LiveTrax ;
EXENAME=LiveTrax ;
shift ;; shift ;;
--vbm) --vbm)
VBM=1 VBM=1

115
wscript
View File

@ -195,6 +195,48 @@ def fetch_tarball_revision_date():
return rev, date return rev, date
def parse_macos_version(version):
# The [.] matches to the dot after the major version, "." would match any character
if re.search ("^[0-7][.]", version) is not None:
return 'panther'
elif re.search ("^8[.]", version) is not None:
return 'tiger'
elif re.search ("^9[.]", version) is not None:
return 'leopard'
elif re.search ("^10[.]", version) is not None:
return 'snowleopard'
elif re.search ("^11[.]", version) is not None:
return 'lion'
elif re.search ("^12[.]", version) is not None:
return 'mountainlion'
elif re.search ("^13[.]", version) is not None:
return 'mavericks'
elif re.search ("^14[.]", version) is not None:
return 'yosemite'
elif re.search ("^15[.]", version) is not None:
return 'el_capitan'
elif re.search ("^16[.]", version) is not None:
return 'sierra'
elif re.search ("^17[.]", version) is not None:
return 'high_sierra'
elif re.search ("^18[.]", version) is not None:
return 'mojave'
elif re.search ("^19[.]", version) is not None:
return 'catalina'
elif re.search ("^20[.]", version) is not None:
return 'bigsur'
elif re.search ("^21[.]", version) is not None:
return 'monterey'
elif re.search ("^22[.]", version) is not None:
return 'ventura'
elif re.search ("^23[.]", version) is not None:
return 'sonoma'
elif re.search ("^24[.]", version) is not None:
return 'sequoia'
else:
return 'sequoia'
def set_version (from_file = False): def set_version (from_file = False):
def sanitize(s): def sanitize(s):
# round-trip to remove anything in the string that is not encodable in # round-trip to remove anything in the string that is not encodable in
@ -458,75 +500,12 @@ int main() { return 0; }''',
# OSX # OSX
if platform == 'darwin': if platform == 'darwin':
if re.search ("^13[.]", version) is not None: conf.env['build_host'] = parse_macos_version (version)
conf.env['build_host'] = 'mavericks'
elif re.search ("^14[.]", version) is not None:
conf.env['build_host'] = 'yosemite'
elif re.search ("^15[.]", version) is not None:
conf.env['build_host'] = 'el_capitan'
elif re.search ("^16[.]", version) is not None:
conf.env['build_host'] = 'sierra'
elif re.search ("^17[.]", version) is not None:
conf.env['build_host'] = 'high_sierra'
elif re.search ("^18[.]", version) is not None:
conf.env['build_host'] = 'mojave'
elif re.search ("^19[.]", version) is not None:
conf.env['build_host'] = 'catalina'
elif re.search ("^20[.]", version) is not None:
conf.env['build_host'] = 'bigsur'
elif re.search ("^21[.]", version) is not None:
conf.env['build_host'] = 'monterey'
elif re.search ("^22[.]", version) is not None:
conf.env['build_host'] = 'ventura'
elif re.search ("^23[.]", version) is not None:
conf.env['build_host'] = 'sonoma'
elif re.search ("^24[.]", version) is not None:
conf.env['build_host'] = 'sequoia'
else:
conf.env['build_host'] = 'irrelevant'
# Autodetect # Autodetect
if opt.dist_target == 'auto': if opt.dist_target == 'auto':
if platform == 'darwin': if platform == 'darwin':
# The [.] matches to the dot after the major version, "." would match any character conf.env['build_target'] = parse_macos_version (version)
if re.search ("^[0-7][.]", version) is not None:
conf.env['build_target'] = 'panther'
elif re.search ("^8[.]", version) is not None:
conf.env['build_target'] = 'tiger'
elif re.search ("^9[.]", version) is not None:
conf.env['build_target'] = 'leopard'
elif re.search ("^10[.]", version) is not None:
conf.env['build_target'] = 'snowleopard'
elif re.search ("^11[.]", version) is not None:
conf.env['build_target'] = 'lion'
elif re.search ("^12[.]", version) is not None:
conf.env['build_target'] = 'mountainlion'
elif re.search ("^13[.]", version) is not None:
conf.env['build_target'] = 'mavericks'
elif re.search ("^14[.]", version) is not None:
conf.env['build_target'] = 'yosemite'
elif re.search ("^15[.]", version) is not None:
conf.env['build_target'] = 'el_capitan'
elif re.search ("^16[.]", version) is not None:
conf.env['build_target'] = 'sierra'
elif re.search ("^17[.]", version) is not None:
conf.env['build_target'] = 'high_sierra'
elif re.search ("^18[.]", version) is not None:
conf.env['build_target'] = 'mojave'
elif re.search ("^19[.]", version) is not None:
conf.env['build_target'] = 'catalina'
elif re.search ("^20[.]", version) is not None:
conf.env['build_target'] = 'bigsur'
elif re.search ("^21[.]", version) is not None:
conf.env['build_target'] = 'monterey'
elif re.search ("^22[.]", version) is not None:
conf.env['build_target'] = 'ventura'
elif re.search ("^23[.]", version) is not None:
conf.env['build_target'] = 'sonoma'
elif re.search ("^24[.]", version) is not None:
conf.env['build_target'] = 'sequoia'
else:
conf.env['build_target'] = 'catalina'
else: else:
match = re.search( match = re.search(
"(?P<cpu>i[0-6]86|x86_64|powerpc|ppc|ppc64|arm|s390x?)", "(?P<cpu>i[0-6]86|x86_64|powerpc|ppc|ppc64|arm|s390x?)",
@ -736,9 +715,9 @@ int main() { return 0; }''',
elif conf.env['build_target'] in ['bigsur'] and not opt.arm64: elif conf.env['build_target'] in ['bigsur'] and not opt.arm64:
compiler_flags.extend( compiler_flags.extend(
("-DMAC_OS_X_VERSION_MAX_ALLOWED=101100", ("-DMAC_OS_X_VERSION_MAX_ALLOWED=101300",
"-mmacosx-version-min=10.11")) "-mmacosx-version-min=10.13"))
linker_flags.append("-mmacosx-version-min=10.11") linker_flags.append("-mmacosx-version-min=10.13")
elif conf.env['build_target'] in ['bigsur', 'monterey', 'ventura', 'sonoma', 'sequoia']: elif conf.env['build_target'] in ['bigsur', 'monterey', 'ventura', 'sonoma', 'sequoia']:
compiler_flags.extend( compiler_flags.extend(