Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
shared_ptr<Port> now uses a deleter functor which pushes Port* to a lock-free FIFO so that the Port is
always deleted (and thus unregistered with the PortEngine/backend) in a safe context w.r.t. various
callbacks in the host. Currently the auto_connect_thread in Session has been tasked with doing these
deletions.
|
|
Prepare to bundle session-utils with releases.
Session-utils use libardour which needs an Engine. "Dummy" is the only
engine that always works
|
|
AudioEngine::stop() if running() is not true and _backend->stop() is true, mutex was being unlocked without being locked.
|
|
|
|
Various session rt-events set "_send_timecode_update" to true,
but at the same time queue post-transport-work.
The timecode-update is generated, but due to pending transport work
session->silent() is true and the timecode was never sent.
|
|
|
|
|
|
This new design will work even when threads that need to receive
messages from RT threads are created *after* the RT threads. The
existing design would fail because the RT thread(s) would never
be known the later created threads, and so signals emitted by the
RT thread and causing call_slot() in the receiver would end up
being enqueued using a lock-protected list. The new design ensures
that communication always uses a lock-free FIFO instead
|
|
|
|
fixes issue on MacBookPro11,1 OSX 10.10
* Coreaudio: internal speaker + internal Mic
* start recording
* plug-in headphone
* stop recording
-> crash
process_callback -> [..] stop_transport -> no RT memory pool
for realtime event.
|
|
|
|
(skip Halted signal when stopped for latency)
|
|
Currently the last backend error string is only set when calling
AudioBackend::start. Errors that occur when calling other AudioBackend methods
like AudioBackend::set_buffer_size do not set the last backend error string.
So until all the required AudioBackend methods return an ErrorCode and
last_backend_error() can be removed just set it to a default string.
Until all errors that occur are correctly indicated by returning an error code
there will still be situations where last_backend_error() is not indicative of
the true error. For instance AudioEngine::start is called and it fails but
returns a valid error code so last_backend_error() is set, then some other
engine/backend method is called that fails and as last_backend_error is not
set the GUI will display the incorrect error message.
|
|
|
|
|
|
Paul Davis was responsible for introducing almost all of this.
|
|
|
|
|
|
This will allow backends to return a more meaningful error message. Eventually
an error code could be returned by AudioEngine::start and the GUI can then use
AudioBackend::get_error_string to convert the error into a translated error
message directly, or it may be desirable to define its own error messages.
The reasons for not doing that right now is that this is a workable solution
with the least change required.
|
|
|
|
graph process-threads won't terminate properly while active.
|
|
[To be reviewed by] Paul Davis
|
|
lets keep Kyiv happy)
|
|
|
|
current Tracks code
|
|
required resources initialized during process callback handling
Conflicts:
libs/ardour/ardour/audioengine.h
libs/backends/wavesaudio/waves_audiobackend.cc
libs/pbd/pbd/pool.h
|
|
perspective of Ardour: signal sinks are outputs
|
|
|
|
The peak meter needs to withstand various test-signals
without visual jitter (in particular 1kHz sine) regardless
of settings (period-size, sample-rate, custom fall-off).
This needs to be done in sync (and not by a random non-rt
‘smoothing’ thread).
On the downside this voids the ‘visual smoothing’ particularly
with large buffersizes - but then again exactly this “always
fall-off no matter what [the next real data will be]” is the
problem.
One the upside, there’s one less high-frequency (100Hz) thread
(Yay!) PS. it probably never worked on windows, anyway.
Only peak-meters are affected by his change.
K-meters, IEC I/II and VU were never visually smoothed.
|
|
|
|
|
|
cycle_end() can write to invalid buffers.
|
|
1) Disambiguate 1.0 to GAIN_COEFF_UNITY, and 0.0 to GAIN_COEFF_ZERO
2) Add GAIN_COEFF_SMALL which replaces SMALL_SIGNAL (-140dB)
3) GAIN_COEFF_SMALL can used to avoid interpolating towards -inf on a db scale
4) GAIN_COEFF_SMALL is used to detect very small (denormal?) gains and memset to zero
|
|
|
|
|
|
number of seconds
|
|
removed copy/paste mistakes
Conflicts:
libs/ardour/audioengine.cc
libs/ardour/engine_state_controller.cc
libs/backends/wavesaudio/waves_audiobackend.cc
|
|
MIDI and Audio devices.
Made correct error handling for cases we didn't see before.
Removed redundant and experimental code I forgot to remove months ago.
Added debug output which will help in future testing
Conflicts:
libs/ardour/ardour/audioengine.h
libs/ardour/engine_state_controller.cc
libs/backends/wavesaudio/waves_midi_device.cc
|
|
critical device operations. Made device reset correctly when control panel is closed.
Conflicts:
gtk2_ardour/tracks_control_panel.logic.cc
libs/ardour/ardour/audioengine.h
libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
|
|
Fixes missing thread in Pool in session_process,
when switching backend threads (CoreAudio, Waves)
|
|
MidiPort::cycle_end() was never called, hence after the
first cycle all midi buffers were assumed to be
“mixed down” already.
this fixes
Midi-track 1 -[midi]-> Midi-track2 synth -[audio]-> out
on export.
|
|
|
|
emit signal(s) when engine is stopped due to backend
change.
|
|
backends - once instantiated - keep a reference to the engine.
when audioengine is destroyed, the backends must be deinstantiated.
This fixes various unit-test cases.
|
|
|