13
0

Compare commits

...

34 Commits

Author SHA1 Message Date
9c292ed6f4
Merge branch 'ardour' 2024-10-17 15:38:42 +02:00
0986b8d1e8
Revert "Only enable RegionFX in debug builds for the time being"
This reverts commit d525f8d60c.
2024-10-17 15:36:29 +02:00
John Emmas
b6cb758357 Another minor tweak to fix a build issue with MSVC/c++17
Fixes a conflict between 'std::byte' (new in c++17) and earlier declarations / typedef's that defined 'byte'
2024-10-17 12:07:05 +01:00
0a0848b2d6
Set LiveTrax binary name when packaging 2024-10-16 20:21:19 +02:00
d525f8d60c
Only enable RegionFX in debug builds for the time being
This reverts commit 14ff2f2e68.
2024-10-16 18:29:51 +02:00
6149771910 fix yet more cases where SMF are imported and named incorrectly 2024-10-15 22:35:04 -06:00
5c2e1bd807 fix another case where SMF are imported and named incorrectly 2024-10-15 21:22:10 -06:00
3221e9bc85 MIDI map for M-Audio Axiom 49 MkII by Francois-Xavier Thomas 2024-10-16 00:00:28 +02:00
cab7fdf3d0 when d-n-d'ing SMF, use file & track name for the new sources and regions 2024-10-15 09:36:42 -06:00
2d0f472af5 Consolidate macOS version parser 2024-10-15 00:57:10 +02:00
Mads Kiilerich
0d4bce8663
backends: Fix class name in debug and error messages for set_latency_range and get_latency_range traces 2024-10-15 00:41:12 +02:00
Mads Kiilerich
99ba70384a
FaderPort8: Improve DEBUG_TRACE messages 2024-10-15 00:41:12 +02:00
Mads Kiilerich
5c763c99ba
FaderPort8: Use explicit "Port 1" for FP8 too
84e38b4c65 made the same change for FP16.

It has apparently not been necessary for FP8 so far, because backends
have happened to report "Port 1" before the control port. But that is
not necessarily the case. It failed for me when playing around.

Change FP8 handling to also not make assumptions about the device order
returned by the backend.
2024-10-15 00:41:12 +02:00
3171eb5aa1
C++17 requires macOS 10.13 or later 2024-10-15 00:35:50 +02:00
Mads Kiilerich
b7249c8fe7
build: Set _POSIX_C_SOURCE=200809L instead of comment about -std=gnu99 in 8fea1ea42e
We are converging towards setting it globally.
2024-10-14 22:57:15 +02:00
Mads Kiilerich
57c5aa95f7
preferences: Don't lowercase 'ardour' in the 'monitoring' list between 'Audio Driver' and 'Audio Hardware'
c7ec2bb gave the other "Record monitoring handled by" options nice title
casing. Now allow the application name to use a similar style.
2024-10-14 22:56:45 +02:00
eb87b0e2eb
Remove old safety check
These days it only produces false positives (locate at start
of session export).

We leave `ENSURE_PROCESS_THREAD` in place, since it may
come in handy at some point (eg. static analysis, documentation)
2024-10-14 22:52:37 +02:00
Daniel Appelt
6a2d3fcbec
Add script that duplicates regions on the grid 2024-10-14 21:59:14 +02:00
8115578d4e
Add RT thread priority debugging 2024-10-14 21:49:56 +02:00
87fdec1c51
Add preference to configure Disk I/O Thread priority 2024-10-14 20:59:59 +02:00
63d3d1ff3d
Initialize fader's numeric entry adjustment
Previously the internal adjustment used for numeric entry
was left at 0 if the BarController's adjustment was never modified.
2024-10-14 17:58:00 +02:00
John Emmas
fd8808d7b8 Minor declaration issue that upsets MSVC/c++17 2024-10-13 11:39:48 +01:00
cooltehno
944e9720bd
Update recbox-ardour.colors 2024-10-11 14:45:05 +02:00
cooltehno
9727895fc8
Update cubasish-ardour.colors 2024-10-11 14:43:45 +02:00
cooltehno
b88a6733d6
Update clear_gray-ardour.colors 2024-10-11 14:43:00 +02:00
cooltehno
c64abef1d0
Update captain_light-ardour.colors 2024-10-11 14:42:14 +02:00
cooltehno
63406c7139
Update unastudia-ardour.colors 2024-10-11 14:41:07 +02:00
cooltehno
37ef68f17a
Update diehard3-ardour.colors 2024-10-11 14:40:18 +02:00
cooltehno
01f945caee
Update xcolors-ardour.colors 2024-10-11 14:39:20 +02:00
cooltehno
071c5790b0
Update caineville-ardour.colors 2024-10-11 14:38:19 +02:00
cooltehno
8e4398bc37
Update adwaita_dark-ardour.colors 2024-10-11 14:37:26 +02:00
cooltehno
f18291c20d
Update blueberry_milk-ardour.colors 2024-10-11 14:36:33 +02:00
g
6e6511b028
ardour.desktop.in add NSM related keys 2024-10-11 14:35:07 +02:00
0aff098541
Fix IO Thread priority
This adds `pbd_pthread_priority` indirection to correctly get
the absolute thread priority.

and for consistency a 4 letter enum is used.
2024-10-11 10:06:49 +02:00
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(