13
0
Commit Graph

8335 Commits

Author SHA1 Message Date
5ded2ad928 децибел 2015-04-05 03:03:43 +02:00
Edgar Aichinger
fdad174932 fix mistake in small .de update 2015-04-04 19:46:49 +02:00
Edgar Aichinger
a45feecb1b another small .de update 2015-04-04 19:18:11 +02:00
7c146a9e22 fix OSC parameter mapping, fixes #6224
(ignore non control ports in numbering)
2015-04-04 03:16:53 +02:00
84c1bbb4c7 when copying A3 config files, consider that the user may have /config rather than /ardour.rc.
This will be true if they have been self-building from git or
using nightlies.
2015-04-02 19:03:06 -04:00
Valeriy Kamyshniy
21193c6fca [Summary] Adding option to avoid sorting the routs in Session::foreach method. Now ARDOUR_UI::every_second do not spend time for unnecessary sorting when calling update_disk_space().
[Reviewed] Paul Davis
[Required review] YPozdnyakov, GZharun
2015-04-02 16:32:41 -04:00
cc75edd5d1 Update libs/ardour UK English localisation 2015-04-02 19:31:30 +01:00
192e1c6156 fix #6227, ‘old_peak_path()’ does not exist on win.
or rather mountpoint() does not. in any case
there never was a windows release without libsndfile, so checking for peaks pre-libsndfile
is moot.
2015-04-02 18:51:20 +02:00
826e25cbf3 NOOP, just whitespace 2015-04-01 17:59:32 +02:00
7b844a52ee add header to deal with destruction issues for tempo map 2015-04-01 11:58:31 -04:00
nick_m
35f69656e8 Window focus handling fixes.
Many windows were not getting key events.
Use magic focus infrastructure (built for widgets) to deliver key events
via window focus in/out.
2015-04-02 02:41:49 +11:00
9a4827374c remove race condition when editing tempo/meter information.
Lock was not held across a replace_{tempo,meter}() operation because of re-use
of {remove,add}_{tempo,meter}. Moved functional code into _locked variants so
that replace operation can hold lock across its entire active lifetime.
2015-04-01 11:22:35 -04:00
73f967c330 delete tempo map at appropriate times 2015-04-01 10:58:56 -04:00
36140d4d01 updated i18n files from ./waf i18n 2015-03-31 20:16:25 -04:00
c89f24e207 fixes for recent waves tracks => ardour cherry-picks of the wavesaudio backend 2015-03-31 18:03:51 -04:00
a5fc4dc614 add new signals to AudioEngine from waves backend changes.
These were missed somehow during cherry-picking.
2015-03-31 17:29:42 -04:00
458fc3ad75 manually merge current version of WavesMidiDevice::{open,close}() 2015-03-31 17:29:42 -04:00
Valeriy Kamyshniy
83001e7e52 [Summary] Audio Backend code cleanup - PORTION B
Conflicts:
	libs/backends/wavesaudio/waves_midi_device.cc
2015-03-31 17:29:42 -04:00
Valeriy Kamyshniy
91f5eb9fef [Summary] Audio Backend code cleanup - PORTION A
Conflicts:
	libs/backends/wavesaudio/waves_midi_device.cc
2015-03-31 17:29:42 -04:00
Greg Zharun
47adf3ba37 [Summary] Changed midi stop order related to audio 2015-03-31 17:29:42 -04:00
Greg Zharun
708f4bf12b [Summary] Removed unnecessary abortion 2015-03-31 17:29:42 -04:00
Greg Zharun
22d68d14ce [Summary] Very seldom crash. Cleared temp data gave almost stable work
Conflicts:
	libs/backends/wavesaudio/waves_midi_device.cc
2015-03-31 17:29:42 -04:00
Greg Zharun
23214f6e61 [Summary] Fixed several backend issues: made reset counter check atomic, removed copy/paste mistakes
Conflicts:
	libs/ardour/audioengine.cc
	libs/ardour/engine_state_controller.cc
	libs/backends/wavesaudio/waves_audiobackend.cc
2015-03-31 17:29:41 -04:00
GZharun
3f5bf264c3 [Summary] Fixed crash on MAC when MIDI device name is 0 ref 2015-03-31 17:29:41 -04:00
Greg Zharun
85b4577d7a [Summary] Removed useless output 2015-03-31 17:29:41 -04:00
Greg Zharun
a2f82f8c5d [Summary] Added actions to handle abnormal behavior during stream stop for 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
2015-03-31 17:29:41 -04:00
Greg Zharun
ce069da682 [Summary] Made device control panel open request synchronized with other 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
2015-03-31 17:29:41 -04:00
Valeriy Kamyshniy
91ae97d5c9 [Summary] Following review Paul did after 9b0fc7b743219b8daecbef91c9772937fd874822 [9b0fc7b] and 72e1510766608180fc7975fde35c9155494a8b5d [72e1510]. 2015-03-31 17:29:41 -04:00
207ac16731 move "been here before" path concept into libardour, and use it appropriately at startup 2015-03-31 11:27:47 -04:00
47110c983c fix OSX/PPC 10.4 long maths 2015-03-31 16:05:15 +02:00
16be88cdb6 Skeleton backend for brave volunteers.
callback based backend based on CoreAudio/Midi
backend (sans the actual system/HW _pcmio, 
_midiio)
2015-03-30 21:23:52 +02:00
f74acc6e79 note to midi devs. 2015-03-30 19:52:21 +02:00
8ca0680871 fix typo in skip/state-tracker 2015-03-30 19:51:34 +02:00
e03882eec7 Update Russian translation 2015-03-30 09:19:00 -05:00
205ade377a coreaudio: swap default aggregate clock source.
Thanks to Stephane & the JACK2 team.
2015-03-30 09:19:00 -05:00
6888436416 hack AudioAnalyzer for VAMP Onsetdetect
This works around a bug in OnsetDetector.
It requests a buffer of 1114 samples but later FFT
bails out if the buffer size is not a power-of-two.
Also large buffersizes fail.

Work-around: use ADAPT_ALL_SAFE (no buffersize
adapter), use a reasonably small buffersize.
The current settings work, even though it produces
the following warnings (vamp-plugins/OnsetDetect.cpp)

WARNING: OnsetDetector::initialise: Possibly sub-optimal step size for this sample rate: 512 (wanted 557)
WARNING: OnsetDetector::initialise: Possibly sub-optimal block size for this sample rate: 1024 (wanted 1114)

This commit should be reverted once VAMP/QM/aubio
is updated/fixed.
2015-03-30 09:19:00 -05:00
d1d266696b fix crash #6161 - another throw w/o catch
The real problem is: libardourvampplugins:* cannot
be instantiated this remains to be fixed.
2015-03-30 09:19:00 -05:00
9313930bb3 For the canvas library, #include 'gtkmm2ext/gui_thread.h' rather than 'gtk2_ardour/gui_thread.h'
Technically it doesn't make much difference but from what I can tell, the only files which #include 'gtk2_ardour/gui_thread.h' are the source files from gtk2_ardour itself. The support libraries always #include 'gtkmm2ext/gui_thread.h' directly (which seems sensible). So for consistency's sake, let's keep it the same for libcanvas.
2015-03-30 09:19:00 -05:00
9128cdefe9 Add some newly introduced sources to our MSVC project (libardour) 2015-03-30 09:19:00 -05:00
546cd974ec Fix mute of MIDI tracks with channel forcing.
This moves MIDI channel filtering into a reusable class and moves filtering to
the source, rather than modifying the buffer afterwards.  This is necessary so
that the playlist trackers reflect the emitted notes (and thus are able to stop
them in situations like mute).

As a perk, this is also faster because events are just dropped on read, rather
than pushed into a buffer then later removed (which is very slow).

Really hammering on mute or solo still seems to produce stuck notes
occasionally (perhaps related to multiple-on warnings).  I am not yet sure why,
but occasional beats always.
2015-03-30 09:19:00 -05:00
88146f0e3a Add CD Metadata "PERFORMER" & "TITLE" fields to .toc & .cue export
Add "PERFORMER" to the exported .toc & .cue files based on the value of the
"album_artist" metadata field, and also use the value of the "album" field
for the TITLE if is set, falling back to the session or range name if it is
blank.
2015-03-30 09:19:00 -05:00
aca81bd894 Export EAN barcode number to 'CATALOG' field in .cue & .toc files 2015-03-30 09:19:00 -05:00
fe3fecde93 Add EAN barcode field to session metadata 2015-03-30 09:19:00 -05:00
cc4eb495d9 More informative debug output from SessionMetadata::{get|set}_value() 2015-03-30 09:19:00 -05:00
nick_m
7f187d4169 Better fix for 6183.
Invalidate all source entries from the image cache when we get our
region's DropReferences signal, while ignoring any subsequent regions with
no source.
2015-03-30 09:18:59 -05:00
Edgar Aichinger
2d0adea86e update German Translation #6213 2015-03-30 09:18:59 -05:00
nick_m
97ae714f8f Backend - change midi optons string.
Multimedia Extensions -> System MIDI (MME)
2015-03-30 09:18:59 -05:00
Raphaël Doursenaud
6bfeb54168 Merge French translations 2015-03-28 23:35:11 +01:00
Frédéric Rech
71a32919a0 French translation update 2015-03-28 21:05:43 +01:00
Raphaël Doursenaud
e5422f3617 First pass updating french translation 2015-03-28 21:04:16 +01:00
7e2c8ace4b Follow MIDI control values with automation faders.
Fixes bug #6166 (except record).

This attempts to follow the "current" control value somewhat aggressively:

* On locate, slider is set to the value from the top region at the new
  transport position.

* Playback or MIDI input is followed "live".

* Whenever the slider is moved (including automatically), that value is emitted
  as an immediate event to keep external gear in sync.

General idea is that the Ardour slider should act as a mirror of an external
hardware knob, and both should be synced to whatever the control is at the
current transport position.  Since we lack real playback/touch/etc modes for
these for now, we must choose one behaviour, and this seems like the most
reasonable one.

Follow is handled in the audio thread, which is probably not ideal, but since
these controls have no lists and do not record, should be fine.  Probably.
2015-03-26 00:47:34 -04:00
07997a6d38 likely fix for debug build 2015-03-25 14:47:18 -05:00
4a7236b773 fix touch-recording of automation in a loop 2015-03-25 14:28:36 -05:00
089c334d0c Resolve only active notes when muted/non-soloed.
Fixes bug #6206.
2015-03-24 13:48:43 -04:00
nick_m
eff25b06f5 Fix 0006183 (waveview crash).
Should fix crash when audiosource disappears.
Reworked from submitted patch from tlat.
2015-03-24 23:35:43 +11:00
pablus
5c634f1d65 update spanish translation, #6204 2015-03-23 20:24:30 +01:00
53ac99a26a rework check for old configuration files
check early on (before announcement-check, bundle-
env and ARDOUR_UI ctor have a chance to create the
new config dir)
2015-03-23 18:31:55 +01:00
8e7c065f83 limit plugin-preset ‘seen_set_state’ message. 2015-03-23 01:53:07 +01:00
e4428ece34 update system_config 2015-03-22 23:20:55 +01:00
4f6f7f45f6 add GPL boilerplate. 2015-03-22 16:12:41 +01:00
fbe673d9c7 fix #6208, negative broadcast timestamps 2015-03-22 16:12:40 +01:00
39e5f7b94b Add a new MSVC project for building the Portaudio backend 2015-03-22 11:54:58 +00:00
bb71a8956b disable pre-fader mute by default
<oofus> rgareus: pre fader sends are not really used
for FX sends, they would either be sending to other
busses or to something like headphone/cue feeds.
You don't want those mixes having stuff muted in
them as you are muting you main mix.
2015-03-21 19:44:58 +01:00
nick_m
bc20da35f7 Revert mistaken change in e7b0e67bc8 2015-03-22 05:35:13 +11:00
a10e17411f fix --disable-plugins (bypass ‘em all) 2015-03-21 17:52:27 +01:00
nick_m
69a6c4d747 Provide an image if there are no peaks. 2015-03-22 00:31:32 +11:00
0f2ead3d6b fix redraw of automation ControlPoints 2015-03-20 23:31:21 +01:00
2a9d7286f9 fix AWOL semicolon in 9f842f3 2015-03-20 22:08:17 +01:00
9f842f3247 NOOP, whitespace 2015-03-20 21:38:26 +01:00
410cf8e79d OSC log errors 2015-03-20 21:32:56 +01:00
7619edd1f6 OSC: fix crash when trying to set output params 2015-03-20 21:19:25 +01:00
17e1e2641b OSC fix plugin numbering:
ignore non-plugin processors for OSC
/ardour/routes/plugin/parameter

fixes issue with hidden internal processors. (rec-en
track adds a hidden [meter] processor at the top,
internal returns on busses have returns etc.)
2015-03-20 20:27:15 +01:00
a563007fcc add missing return value 2015-03-20 16:17:07 +01:00
nick_m
53f452dde1 Don't open peakfiles O_NONBLOCK or O_NOATIME.
O_NOATIME removed due to what appears to be a bug in fuse where open fails.
O_NONBLOCK was basically unjustifiable.
2015-03-21 01:02:51 +11:00
26ce7b5f1b add a non-interleaved mode to the Portaudio backend 2015-03-20 11:45:56 +01:00
abfdcb5439 fix windows + VST debug versions
pthread.h needs to be included before pbd/debug.h
otherwise PTW32_VERSION is not defined, bug in 831f298
2015-03-17 16:30:16 +01:00
5188f02cfe hide issues with g_close() not being available in somewhat older versions of glib 2015-03-16 13:34:35 -05:00
72b19e60fe fix compiler warning 2015-03-16 13:02:20 -05:00
8ff477ab1a add PBD::toggle_file_existence() 2015-03-16 13:00:28 -05:00
4c2ea510e3 add API to query Gtk::ComboBoxText entries
..the overly complex C++ style variant.
iterate twice..  hell yeah.
2015-03-16 14:38:21 +01:00
nick_m
135e865302 Add route dialog order hint changes.
Add an option to insert new routes at the top of the list ("First").
Reorder/rename the entries in the dialog.
Session's _order_hint is now the signed int it always wanted to be.
2015-03-16 04:01:30 +11:00
d8d9f9b486 proper port unregistration (just some refactoring, noop) 2015-03-14 22:59:07 +01:00
83babb8a52 automatic error log window popup be gone. 2015-03-14 18:28:36 +01:00
0028630ece Fix stretch for MIDI regions (#6164). 2015-03-14 00:39:52 -04:00
86c6541323 Move PC flags to avoid obscuring region name.
Fixes bug #6179.  Top vs. bottom seems pretty arbitrary to me, and this solves
the obscuring issue (which is quite common since there are often PC events at
the start of MIDI files), so bottom it is.
2015-03-14 00:21:29 -04:00
524f322250 ignore master & monitor when “solo all [in group]”
should fix #6193
2015-03-14 01:49:32 +01:00
94e36450d2 Fix some build anomalies between PROGRAM_NAME and PROGRAM_VERSION
When building with MSVC, some libraries had PROGRAM_NAME set to "Mixbus" and PROGRAM_VERSION set to "3". Whereas other libraries had PROGRAM_NAME set to "Mixbus3" while PROGRAM_VERSION was an empty string.

I've a horrible feeling there must have been a reason for this but I can't quite think what it was. Hopefully though, this change will standardize everything.
2015-03-13 17:40:53 +00:00
5090934a2c clean out cruft from CoreAudio Backend 2015-03-13 14:05:12 +01:00
7a4f1cb98f only jack+windows use portaudio.
fixes missing lib if portaudio-backend is used on on non-windows
platforms (pkg-config defines HAVE_PORTAUDIO)
2015-03-13 13:32:14 +01:00
1cca79258a call me Mr. Backend
simple blocking (no callback) PortAudio Backend
2015-03-13 13:32:14 +01:00
9a05a0fbfb alter config file copying infrastructure so it can be used at a suitable time in the instance's lifetime 2015-03-12 17:45:42 -05:00
b622bc18fc amend 7bb9d04, fix midi looping 2015-03-12 16:18:06 +01:00
7bb9d04859 cont’d work on a16dd7c, fixes #6170 2015-03-12 15:23:05 +01:00
a16dd7c071 explain midi starvation, issue #6170
this is not a fix yet, just some comments and
code cleanup done while reading/investigating:

* limit reads to available write-space
* skip inactive tracks
* handle potential unsigned + negative value.
2015-03-12 15:22:18 +01:00
831f2989ac Revert commit 635578b3 relating to pthread debugging
This breaks the build for windows builds that don't use the pthreads_win32
library. Using the opaque pthread_t type like this is probably not a great
idea. Using PBD::pthread_name is another option that I've used elsewhere
that seems more useful.
2015-03-12 23:05:31 +10:00
0f8da2d4cd Define DEBUG_THREAD_SELF when debug is enabled 2015-03-12 23:04:25 +10:00
a9c449c4af Use DEBUG_THREAD_SELF macro in session_vst.cc 2015-03-12 23:04:14 +10:00
5476b48539 Don't try linking libclearlooks files with mingw build
I believe this is unnecessary for cross and native builds
2015-03-12 23:03:59 +10:00
47b1c2889c Include windows.h in Dummy backend for LARGE_INTEGER
This is necessary for a native build using MSYS2 and mingw-w64
2015-03-12 23:03:45 +10:00
4c4863248c Include windows.h on windows build for LARGE_INTEGER
This is necessary for a native build using MSYS2 with mingw-w64
2015-03-12 23:03:32 +10:00
89a3c78175 finish (?) infrastructure for copying configuration files from a3 to a4 2015-03-11 14:28:30 -05:00
087b5dc43b interpret CoreMidi unique ID as unsigned for consistency.
coremidi specifies it as SInt32 but system:midi_playback_-126632214 ,
even if only used internally, just does not seem right.
2015-03-11 20:06:41 +01:00
8587855b99 more infrastructure for copying old configuration files 2015-03-11 13:24:47 -05:00
59880b7fa3 efficiency is overrated - don't cache the return value of user_config_directory_name() since it can be called with different arguments 2015-03-11 13:24:47 -05:00
f9ce27fd65 global ARDOUR signal to ask GUI to copy configuration files across versions 2015-03-11 13:24:47 -05:00
d563b1173b only create user configuration directory if no explicit version was given 2015-03-11 13:24:47 -05:00
1644fc1068 hide user_config_dir_name; alter API for user_config_dir() to allow specification of a version number 2015-03-11 10:39:15 -05:00
99260742d2 mingw: all code is position independent 2015-03-11 14:58:02 +01:00
77821ba373 NOOP, midi-auditioner clean API usage 2015-03-11 12:29:45 +01:00
ac23461ed9 remove duplicate code
set_header_timeline_position() does exactly that. Also doing it
twice may have lead to a NULL-pointer dereference.
2015-03-11 12:28:47 +01:00
6d2189f9e3 reasonably sized CoreMidi Buffers 2015-03-11 12:23:05 +01:00
nick_m
a1ac941a00 Fix windows compilation for merged waveview branch. 2015-03-11 10:50:35 +11:00
c3d7654884 coreaudio backend: switch threads early 2015-03-11 00:27:14 +01:00
fe85575a12 fix “no per-thread pool” abort
For some backends the process thread can change (e.g.
switch coreaudio headphone + internal speakers)

If there are existing x-thread event calls this can lead to
the following situation:

1) SessionEvent::operator new
2) audioengine process thread change
3) SessionEvent::operator delete  -> crash, wrong thread

SessionEvent::operator delete can safely push the event back to
the pool for later cleanup..
2015-03-11 00:25:10 +01:00
1a5a48436a NOOP, re-indent. 2015-03-10 22:15:44 +01:00
9b2898c533 yet unheard of edge-case. 2015-03-10 22:15:44 +01:00
68146a0969 audio interpolation is really private 2015-03-10 22:15:44 +01:00
7619946b4b MIDI vari-speed playback 2015-03-10 22:15:44 +01:00
3139b7e980 prototype basic midi varispeed 2015-03-10 22:15:44 +01:00
nick_m
a2b35aa634 Fix compilation for osx. 2015-03-11 01:57:16 +11:00
nick_m
fb8bc4e8c9 Manual merge of the backend (peakfile reading) part of waveview branch.
Summary:
    * use mmap() for the whole peakfile instead of lots of small seek/reads
    * cache the computed peaks
    * where possible, open files with O_NOATIME.
2015-03-11 00:40:02 +11:00
nick_m
e7b0e67bc8 Manual merge of the drawing component of waveview branch.
In summary:

    * no antialiasing of waveviews
    * no diagonal lines
    * simplify clip detection
    * don't use LINE_CAP_ROUND for outline
    * use the wave colour when drawing outline only
2015-03-10 23:35:53 +11:00
3547540f98 throttle TransportStateChange signal emissions 2015-03-10 10:49:52 +01:00
db8406dc4a disk-space calc is windows (not MSVC) specific. 2015-03-10 00:21:37 +01:00
a6b9e81ed1 10ms = 1e7 nsec 2015-03-10 00:09:01 +01:00
22a91f47bb rework/optimize CoreMidi 2015-03-09 23:28:57 +01:00
efbc00651f NOOP, add header-guards and namespace to CA backend 2015-03-09 23:28:57 +01:00
f7a2df1c9a Make editing of meter work at the current position
Add a function TempoMap::meter_section_at(), similar to
TempoMap::tempo_section_at() but returning the meter section at the given
position, and use this to make editing meter changes from the main clock
work on the meter that's in effect at the current position.
2015-03-09 19:17:53 +00:00
523f703b3b Move 'poor_mans_glob()' into libpbd 2015-03-09 18:32:55 +00:00
nick_m
03160ee182 Tearoff windows are utility windows rather than toolbars. 2015-03-10 03:58:00 +11:00
52e99750a0 ALSA: fix thinko in sample time calc. 2015-03-09 17:17:50 +01:00
0446ff64f4 implement samples_since cycle start. 2015-03-09 17:17:50 +01:00
2d6e48fb0b Define NO_JACK_METADATA when building the jack backend with MSVC
Jack (on Windows) doesn't seem to have a header file called 'metadata.h' - so hopefully, this'll be correct?
2015-03-09 11:43:05 +00:00
f2592df842 fix typo in 72ed785 2015-03-09 05:59:46 +01:00
09dd3fc369 some backends can handle incorrectly ordered midi events.
(that can happen if multiple sources send to the same
ouput port, in particular async midi events)
2015-03-09 05:41:36 +01:00
72ed785940 allow hotplugging CoreMidi devices. 2015-03-09 00:26:01 +01:00
bc7be6fd3e there’s no jack_creator_thread on windows 2015-03-09 00:09:42 +01:00
a64a311a41 keep port bundles in sync with engine 2015-03-08 22:40:27 +01:00
40c04867ef Bundle API user update
cherry-pickable follow up to 0582221
2015-03-08 22:39:34 +01:00
0582221353 consolidate BundleAdded/Remove signal
The only user (matrix) does not care which bundles are added/removed.
This simplification will make it a lot easier to keep bundles
in sync with actual hardware ports.
2015-03-08 22:38:55 +01:00
9107a4b7fe add a no-jack-metadata option for poor 12.04 souls
(jack does have metadata support but ubuntu packaged
a version with a wrong header)
2015-03-08 21:31:08 +01:00
8008d4262f nicely named session bundles 2015-03-08 19:02:31 +01:00
8fd67c5a88 coremidi separate ID and Name, use fixed IDs. 2015-03-08 19:02:31 +01:00
0cf11acc27 add backend support for port properties (CoreAudio) 2015-03-08 19:02:31 +01:00
20cd14cf36 add backend support for port properties (jack) 2015-03-08 19:02:31 +01:00
f89123b28b libardour API to exercise get_port_property 2015-03-08 19:02:31 +01:00
0f736feee0 add port-engine API to query port-properties 2015-03-08 19:02:30 +01:00
2657992ebb CoreAudio fwheelin’ state-machine cleanup etc. 2015-03-08 19:02:30 +01:00
95558b5878 update https://github.com/x42/weakjack/ 2015-03-08 16:22:14 +01:00
3b57d246d7 Reduce run time/output of PBD::Timer unit test 2015-03-08 22:46:38 +10:00
f694b867c1 Fix PBD::copy_file on windows to work with non-ascii paths
This breakage was indicated by the filesystem unit tests.
2015-03-08 22:46:26 +10:00
b35504a71e Fix compilation with --no-lv2 (#0006169).
Not that I condone such backwards behaviour.

(Different issue in the ticket, but it was still broken at link time).
2015-03-08 01:36:53 -05:00
c3430e5884 Cluster Frak String Reference 2015-03-08 02:51:09 +01:00
50041cb450 avoid non-integer loop conditions. 2015-03-08 02:01:48 +01:00
95631cdc25 properly handle empty CFStringRefs. 2015-03-08 01:40:39 +01:00
7edc7a8d28 CoreAudio: fix allocation alignment 2015-03-07 23:27:33 +01:00
de078a04e2 Fix LV2 preset deletion and clash between plugins.
Before this, LV2 preset deletion in Ardour was doubly broken: the wrong file
was being removed, and removing the correct file would only result in a broken
preset.  This change uses a new version of Lilv which has a more sophisticated
mechanism for preset deletion.

Also, fix "clashing" presets saved with the same name for different plugins, by
prefixing the plugin name to the bundle (this is now a recommendation in the
LV2 preset specification).
2015-03-07 14:54:03 -05:00
d47ad23fe8 no more gcc/ppc complaints 2015-03-07 16:10:45 +01:00
7af3fdb99a fix various -Wformat 2015-03-07 15:04:17 +01:00
f88e566576 fix copy/edit in 659a8a2 2015-03-07 14:50:02 +01:00
659a8a26ae fix latency report, take buffersize changes into account. 2015-03-07 14:35:32 +01:00
ce3adfd3d4 Hard Core Audio
* allow to change buffersizes
* subscribe to buffersize & samplerate changes
* add support for half-duplex devices.
* aggregate Devices (not yet used) code from JACK2
* unify deprecated API wrappers
* properly keep track of MIDI ports
* disable MidiI/O during freewheeling
* various small fixes & cleanup
2015-03-07 14:35:32 +01:00
e99599c7db Add some newly introduced sources to our MSVC project (libardour) 2015-03-07 12:30:22 +00:00
4b401d9e34 Add a missing 'typename' specifier to the declaration for 'Evoral::Sequence::set_notes()' 2015-03-07 12:29:15 +00:00
13bad670fa more ongoing work on the coreaudio backend
* audio port names
* latency compensation
* xrun reporting
* various fixes and cleanup
2015-03-06 23:26:05 +01:00
3b941fc0fa build system tweaks for coreaudio/waves-coreaudio 2015-03-06 23:26:05 +01:00
6b87e706eb cont’d work on the coreaudio backend & cleanup 2015-03-06 06:24:56 +01:00
408090adce Add MIDI readahead to options editor. 2015-03-05 18:48:33 -05:00
a8aae56d92 Handle edits while playing precisely.
This avoids stuck notes if active notes are edited, but without stopping all
active notes in the region on any edit as before.

This implementation injects note ons in places that aren't actually note
starts.  Depending on how percussive the instrument is, this may not be
desired.  In the future, an option for this would be an improvement, but there
are other places where "start notes in the middle" is a reasonable option.  I
think that should be handled universally if we're to do it at all, so not
considering it a part of this fix for now.
2015-03-05 17:30:31 -05:00
09f1571fc0 Clean up MidiPlaylist::read, kill copy-paste code.
Towards putting more advanced logic here, where two copies of everything will
get even more hairy.

The two cases of reading from one or many regions are not very different in the
read phase, the only difference is the target.  So, point a reference to the
appropriate target, use the same read code in either case, then sort/etc
afterwards only if necessary.
2015-03-05 17:11:24 -05:00
5bf90524df fix import of v2 session redirects: active or inactive 2015-03-05 12:48:30 -06:00
1089f19a4c create engine thread before sending notifications.
Fixes missing thread in Pool in session_process,
when switching backend threads (CoreAudio, Waves)
2015-03-05 16:46:20 +01:00
f6f64d3f81 get started on coreaudio/midi backend 2015-03-05 16:46:20 +01:00
2ab26bd86d fix another screwup/typo in 782dd70 2015-03-05 02:10:21 +01:00
7ef22e5e71 remove unused devel.variable in prev commit 2015-03-05 02:04:14 +01:00
782dd70875 alsa: implement timing callback 2015-03-05 01:59:59 +01:00
1acbd7c488 fix for previous checkin; should allow waves midi backend to work 2015-03-04 10:23:19 -06:00
e3dd226ffa Change order of midi entries so a new backend will default to a working midi system.
Needs testing on all platforms.
2015-03-03 15:57:08 -06:00
714677f036 Change order of midi entries so a new backend will default to a working midi system.
Needs testing on all platforms.
2015-03-03 15:52:44 -06:00
a2d1f894b0 recursive VST scans 2015-03-03 19:54:28 +01:00
cf7d5dbc2d recursive regexp file search. 2015-03-03 19:54:27 +01:00
a173c74f2d Adapt our MSVC projects to use our (newly re-built) libsuil 2015-03-03 14:51:59 +00:00
8e3ec4b9ab leave a ToDo note for the butler. 2015-03-02 23:13:19 +01:00
5cfa389978 explicitly close tmpfiles before unlink.
fixes issue on export tmpfiles remaining on windows
2015-03-02 23:12:06 +01:00
a5eb3bae87 add an explicit close function to sndfile
NB. if someday we want to switch back to upstream
SndfileHandle, we need to subclass wrap it.
(not sure what else is different, anyway)
2015-03-02 23:11:04 +01:00
9a30bfd0c6 use Xthreads in session butler.
(hopefully) fixes export randomly stalling on windows: 
dequeue_request() was a single request (no queue) on Windows.

Butler::queue_request() is called 
-> Butler goes to work..
-> while working, another request is queued
-> butler never sees this
-> deadlock
during Freewheeling/Export wait_until_finished()
waits for the 2nd request to be handled, and never returns.
2015-03-01 20:55:39 +01:00
d7727a77e0 Xthread: blocking read + non-blocking write mode.
Needed for switching the butler to use Crossthreads.
2015-03-01 20:49:55 +01:00
60388f975c tiny cleanup due to long comment in between. 2015-03-01 19:12:10 +01:00
0a6df4e521 fix typo in c936c97 2015-03-01 19:11:23 +01:00
380215a08c API to delete AU cache & blacklist 2015-02-28 15:52:28 +01:00
c936c973b5 AU blacklist 2015-02-28 15:52:28 +01:00
ee0826c823 AU fix potential endless loop during discovery 2015-02-28 15:52:28 +01:00
7a1baeee79 promote sustain pedal from meh to reasonable. 2015-02-28 15:52:28 +01:00
32e23db665 In libpbd the sources 'localeguard.cc/.h' and 'locale_guard.cc/.h' are essentially identical now - so let's remove the former pair which were only ever needed when building with MSVC
(should hopefully avoid future confusion !!)
2015-02-28 12:59:00 +00:00
3c3586a4e1 AU presets: allow to save & directly use. 2015-02-28 08:04:14 +01:00
60c39849cf include AU control outputs (as meters on generic UI) 2015-02-28 07:24:33 +01:00
1b0574540f automated toggles? yes we can! 2015-02-28 07:24:13 +01:00
b362f45738 fix AU generic GUI and automation lanes
Don’t include non-automatable params.
2015-02-28 07:23:45 +01:00
105ecfa464 fix routing midi data on export:
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.
2015-02-28 05:49:16 +01:00
933e9c2919 Fix unnecessary const violation. 2015-02-27 14:21:45 -05:00
24efaa2992 likely fix for broken fades (imported from v2 sessions) 2015-02-27 11:31:56 -06:00
763a7c8161 potential fix for the_CLA reported problem: v2 fader values are lost if you are using a non-US locale 2015-02-27 11:31:55 -06:00
b11a18d226 fix generic GUI for AU.
Ardour only queries AU writable (or read+writable)
parameters, hence announce them as such.
2015-02-26 23:57:09 +01:00
7f27d658e1 annotate prev commit. 2015-02-25 00:43:58 +01:00
e38eb0613e no more AU warnings…
Ardour calls input_streams(), output_streams() to determine
if the plugin is about to be re-configured (old stream I/O count
!= new I/O count) and emit PluginIoReConfigure() if that’s true.

If the plugin has not been initialized (no format set), we can
safely assume that it will need to be reconfigured.

Forcing Audio=Midi=0 will do so.

The only time where the format is not yet set and hence the actual
channel count is still unknown) is during the first call to 
PluginInsert::configure_io().

At the time of writing, this all is a NOOP anyway! The only user
of the PluginIoReConfigure() signal is the GUI to update connection
lines…  and since the first PluginInsert::configure_io() happens 
during insertion before the plugin is painted and subscribed to 
PluginIoReConfigure(), this function could return any value.

Still 0,0 is just more appropriate than assuming mono audio in/out
and no midi.
2015-02-25 00:42:54 +01:00
6774aef412 AU synth. prefer stereo variant if available. 2015-02-24 18:31:35 +01:00
acd6810860 AU: fix return value reference 2015-02-23 02:49:37 +01:00
b75a826b9a fix return value on AU error in e070701 2015-02-22 23:44:23 +01:00
9359a157fa fix logical-op-parentheses 2015-02-22 23:38:42 +01:00
e070701f14 support AudioUnit Generators without global Channel Info 2015-02-22 23:37:18 +01:00
10e183f518 fix two other potential issues with leftover 32 bit integers when reading from sndfilesource.
It is less likely that these would cause issues because the
variables involved define the size of the data read, which
is almost certainly less than the 32 bit limit (i.e. they are
not positional). But to keep things clean and to keep questions
at bay, make them 64 bit values.
2015-02-22 11:12:11 -05:00
b40a305b5a fix incorrect use of int32_t for current position in file while writing to non-destructive sndfilesources 2015-02-22 11:12:11 -05:00
bf1d12708d dummy: add square wave frequency sweep generators 2015-02-21 05:05:48 +01:00
a2e4d6260c fix logic of Session::audio_source_name_is_unique() 2015-02-20 14:12:40 -05:00
7024232855 ensure that stub audio file sources are removed when we destroy a track 2015-02-20 14:12:40 -05:00
dcf69ab3e6 fix erroneous merge for wavesaudio backend 2015-02-20 13:21:44 -05:00
Valeriy Kamyshniy
d5e375f784 [Summary] In internal Waves backend API, switching sample time from 32 bits to 64 bits.
Conflicts:
	libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp
2015-02-20 13:05:43 -05:00
VKamyshniy
3b5da657af [Summary] In internal Waves backend API, switching sample time from 32 bits to 64 bits. Fixing logical inconsistency: None device always brought sample time=0 to the audio engine callback. 2015-02-20 13:03:09 -05:00
nick_m
5d5f83c56b The commit 3da9c3b740
wasn't the no-op it claimed to be.
2015-02-20 23:30:48 +11:00
b68a4e5cdc Normalize notes on all channels.
Probably.
2015-02-19 20:23:11 -05:00
450291adfc Fix record/import of note ons with velocity 0.
Best to just do this as early as possible to avoid having to deal with this
situation all over the code.

Also fixes violation of LV2 MIDI specification, which requires no such events
are delivered to plugins.
2015-02-19 18:38:30 -05:00
6fb4bd578e Don't allocate then discard notes on note off.
Silly to make a junk Note just to pass to append_note_off_unlocked, which just
uses the fields that are on the MIDIEvent anyway then throws it away.

Also explicitly dispatch to append_note_off_unlocked in the caller for note ons
with velocity 0 rather than make append_note_on_unlocked deal with it.
2015-02-19 18:38:30 -05:00
6a033a093b Remove unused ifdef gunk. 2015-02-19 18:38:30 -05:00
76f6ff178e fix incorrect type for Waves' backend's _sample_time_at_cycle_start 2015-02-19 18:23:17 -05:00
582138f280 change Audio backend sample time methods to use a 64 bit timeline 2015-02-19 17:44:01 -05:00
e148ee52ab add a nonsense-midi test sequence:
system:midi_capture_6 
duplicate on/off, zero-velocity note-on
2015-02-19 21:58:30 +01:00
b489385bf1 fix some static-analysis warnings 2015-02-19 20:37:58 +01:00
aea700fbc4 fix transport issues when loop-is-mode is off.
Session::unset_play_loop() needed to be a no-op if play loop was
already false, and this was exacerbated now that it potentially
schedules butler transport work.
2015-02-19 10:33:33 -05:00
3a63b785a9 rsynth: map note-on with zero velocity to note-off 2015-02-19 00:54:30 +01:00
c24bb4a8ee fix initialization order (sigh) 2015-02-18 12:00:36 -05:00
8c812a6df4 Revert "[Summary] Eliminated redundant marker update notification which lead to creation of huge amount of redundant session events"
This reverts commit 3dde9e969c.
2015-02-18 12:00:36 -05:00
2067163f7a Revert "fix indentation from previous commit and previous edits"
This reverts commit 449c9b675d.
2015-02-18 12:00:36 -05:00
58137b8326 try to restore original semantics for scheduling butler transport work in Session::locate() 2015-02-17 11:21:41 -05:00
b72d37a45f another required fix following recent cherry-picks from waves 2015-02-17 11:10:29 -05:00
GZharun
297ebd33bb [Summary] Blocked redundant skip marker (during skip ranges consolidation) updates which used to lead to unnecessary overhead and redundant session events
Conflicts:
	libs/ardour/ardour/session.h
	libs/ardour/session.cc
2015-02-17 10:57:56 -05:00
48fdb28153 mark session dirty when loop location is changed 2015-02-17 10:50:54 -05:00
449c9b675d fix indentation from previous commit and previous edits 2015-02-17 10:47:22 -05:00
GZharun
3dde9e969c [Summary] Eliminated redundant marker update notification which lead to creation of huge amount of redundant session events 2015-02-17 10:43:05 -05:00
GZharun
5a8270373a [Summary] Fixed loop processing in cases when loop is moved/resized
[Reviewed by] REQUIRED REVIEW FROM PAUL DAVIS
2015-02-17 10:37:35 -05:00
b3e7c88988 fixes for desirable playback when using seamless looping.
Try to make sure that we appropriately reset and refill track
buffers whenever we enter/leave loop playback,and whenever
we locate. In addition, if we start playing somewhere other
than the loop range while loop is enabled, then the first
time we hit the loop end, set up the track buffers.

Conflicts:
	libs/ardour/session_transport.cc
2015-02-16 19:35:37 -05:00
8a93a87db0 remove lib versioning for internal plugins
Those objects do not have a versioned API by themselves.
This fixes issues with duplicate deployment (OSX, Linux bundles: cp) and
ardour listing control-surfaces multiple times (file index plugin dir).
2015-02-16 17:32:56 +01:00
2a04ff8641 Add TestUI class to properly handle EventLoop invalidation
This fixes the programming error: Session RT event... warnings
while running ardour tests
2015-02-15 15:05:22 +10:00
964c04eec5 Move TestReceiver class in libardour tests into own header file 2015-02-15 13:48:53 +10:00
d9b4c6be6a Add a few test util functions and refactor existing test code 2015-02-15 12:53:41 +10:00
deb4687d5d fix testPathIsWithin unit-test:
* use absolute path
* fix copy/paste typo: bar->jim for symlink test
2015-02-14 05:50:40 +01:00
7f0cdc3967 hide terminal window for windows vst scanner 2015-02-14 05:50:40 +01:00
5b3ff655f1 Fix LV2 UIs with spacey paths (e.g. Pianoteq). 2015-02-13 22:00:38 -05:00
7a99bc5373 fix seamless looping after a locate out of the loop.
Something, somewhere has to tell tracks to refill their buffers with
the special loop-data-only magic
2015-02-13 18:42:41 -05:00
aa5cf04ca6 correctly set track loop status when locating away from loop range (and later, when coming back to the loop)
Conflicts:
	libs/ardour/ardour/session.h
	libs/ardour/session.cc
	libs/ardour/session_transport.cc
2015-02-13 17:23:50 -05:00
cb3961d953 Add a test for the constrained cubic interpolation of Evoral::Curve
Add a test, based on the worked example in www.korf.co.uk/spline.pdf, for
the constrained cubic spline interpolation.

The delta values for the float comparisons are rather arbitrary, I'm sorry
to say: they're basically chosen so that everything passes.
2015-02-13 12:25:51 +00:00
bd6ef95989 add accessor methods for single_exposure 2015-02-12 11:35:35 -06:00
b8ec035b24 _single_exposure is now a member variable for each GtkCanvas.
Gtk coalesces multiple exposes into a single combined rect.
If _single_exposure is disabled, we break apart the individual expose rects for the canvas rendering.
2015-02-12 11:35:35 -06:00
180b705643 Fix whitespace in pbd/debug.h 2015-02-12 22:10:51 +10:00
0550ec31bc Add local PwdReset class to reset pwd in event of test failure
This fixes subsequent tests that rely on pwd but not PBD::path_is_within
breakage caused by commit 2689848e
2015-02-12 20:06:47 +10:00
9a7ae1ad99 Add some more test assertions so that tests fail when they should 2015-02-12 20:06:47 +10:00
0f0aebf26b remove naive attempt to avoid drawing first vertical pixel line of Canvas::WaveView
And add commented out attempt at more subtle attempt to get it right
2015-02-11 21:59:38 -05:00
a992a2e6e0 simplify Canvas::Rectangle rendering to avoid unnecessary nonsense, and remove TimeRectangle 2015-02-11 21:59:38 -05:00
2a5921ecf1 Canvas::Rect::contains() should treat its right/left coordinates as exclusive 2015-02-11 21:59:38 -05:00
e8c24f1efd fix midi-capture filter
diskstream reads directly from port, Route
use prefilled buffer-set.
2015-02-12 01:05:16 +01:00
eddcd7128f infrastructure to allow tracing of all MIDI ports 2015-02-10 19:48:47 -05:00
34779ee81e add a sort-of hack to allow us to avoid drawing the first pixel of a waveview when necessary 2015-02-10 19:48:47 -05:00
6cad07fc11 fix boot message always sticking on the last loaded route; it looked like an error 2015-02-10 14:43:16 -06:00
c679d616f6 correct drawing of rectangle borders.
They need to use fractional coordinates, and the border position needed
generalizing for other border widths. See verbose comment for details
2015-02-09 16:41:28 -05:00
736038556f canvas items must be able to use fractional positions when rendering.
This is required to be able to draw precise single pixel lines, as described
in the Cairo FAQ
2015-02-09 16:40:10 -05:00
6dbc0c0919 put function into namespace 2015-02-09 14:46:20 -05:00
429da16b60 Fix sending out of bounds events to LV2 plugins. 2015-02-09 13:45:37 -05:00
nick_m
b1dafe9a31 Properly deallocate memory when clearing selection_op_history and
before XMLNode*s.
Improve some comments.
2015-02-07 23:33:09 +11:00
ae09d7132d fix 192k rate 2015-02-06 13:57:22 -06:00
63a1b56560 fix (and comment) on subtle bug with audio file data width function 2015-02-06 10:33:01 -05:00
nick_m
6b9415aedb Make undo/redo work for:
undo (n) where n > 1
redo (m) where m < n
new transaction.

Previously the redo list was left untouched.
This would lead to utter nonsense in the redo list.

AFAICT this never worked.
2015-02-06 21:54:27 +11:00
78e245d0b5 do not attempt to call an empty/null boost functor in clear_events() 2015-02-05 18:03:40 -05:00
c76523aeaa fix bad fix for cherry-pick conflict 2015-02-05 16:49:14 -05:00
e8b6f852f6 make two obvously const methods actually be const 2015-02-05 16:36:09 -05:00
e72a4ec850 modify behaviour of session when updating skips to use new SessionEvent API
Conflicts:
	libs/ardour/ardour/session.h
	libs/ardour/session.cc
2015-02-05 16:35:56 -05:00
ec9c6a58e2 add SessionEvent::Action to libs/ardour enums registration 2015-02-05 16:32:33 -05:00
6790f8342a expand SessionEvent API to allow ::clear_events() to work correctly.
clear_events() must run in realtime context, which is likely to be asynchronous
with respect to the thread that calls it. So allow caller to pass in a functor
that will be executed (also in realtime context) after the clear is done.

Additionally, allow for a cross-thread callback to the event loop/thread which
initiated/allocated the clear event request so that it can flush its own pending
loop. This part probably isn't necessary but doesn't hurt and is a useful model.
The event would be placed back in the free list at the next event allocation
by the calling thread anyway.
2015-02-05 16:32:21 -05:00
4010884a5b expand PBD::Pool API and add additional DEBUG_TRACE output.
Expanded API splits apart some CrossThreadPool functionality, and provides
access to current pool status information (available(), total(), used(), pending_size())
2015-02-05 16:32:10 -05:00
7152634104 set name of GUI event loop thread 2015-02-05 16:31:59 -05:00
nick_m
63935a86a4 Rework previous commit to avoid extra property lookup (fwiw). 2015-02-06 01:09:04 +11:00
nick_m
2d8b7c352b Make sure we have the property rather than the value of patch change id.
(don't crash whenever someone adds a patch change and reloads the session).
2015-02-06 00:53:12 +11:00
nick_m
ff13ac8b4f Clean up Session's _current_trans when aborting a drag. 2015-02-05 23:32:57 +11:00
b4a0136155 tweak to help with uncoalesced renders 2015-02-03 17:35:37 -06:00
9fab39358a render canvas using the GDK region rather than the GDK area.
The region is the un-coalesced set of rectangles that were requested for redraw. The area
is the coalesced single rectangle. In the worst cases, the coalesced rectangle could span
the entire window even though just two pixels in opposite corners were to be redrawn.

There is a problem with the verbose cursor as it is dragged across MIDI tracks. TO BE
FIXED.
2015-02-03 15:38:14 -05:00
2689848ed7 Add an extra test to prevent 'PBD::path_is_within()' from looping infinitely on Windows
The infinite loop would happen if the 2 supplied paths were on different Windows drives - for example if one was on drive C:\ and the other on drive E:\

I don't think this new test will be detrimental to the other platforms but if it is, we could easily separate it out with a '#ifdef PLATFORM_WINDOWS' directive.
2015-02-03 11:57:38 +00:00
e874bc0be1 If 'force' is TRUE (when using 'Location::set_start()' or 'Location::set_end()') make sure we do actually force the value to get set.
This gets us around a problem when converting a session from the old (Ardour2) format - where the Session Range (start) value was getting incorrectly set if we hadn't already set the end value.
2015-01-30 14:55:23 +00:00
0018ee2b02 fix “invalid use of incomplete type jack_client_t”
introduced in 66eef25
2015-01-30 11:02:07 +01:00
fe0254344f clarify sync-lock and disable it by default. 2015-01-30 10:43:56 +01:00
f15236b9a0 amend 070818f 2015-01-30 10:43:56 +01:00
bdfe32c086 stop transport when process_routes fails, even when using the parallel graph execution model 2015-01-29 22:00:05 -05:00
de8a8272bc fix incorrect return value from sndfile_data_width() 2015-01-29 21:59:55 -05:00
070818f884 take down backend specific threads with backend 2015-01-30 01:28:52 +01:00
66eef257d8 fix jack thread joining
at the time the graph gets around to takes down 
client threads, the jack-backend’s jack_client has been reset.
But never mind: libjack does not care about it, anyway.
2015-01-30 01:28:52 +01:00
55ba5208b9 return to old default disk chunk read size 2015-01-29 18:49:04 -05:00
def2147b4c fix -Wreorder in 6377fe89 2015-01-29 02:28:25 +01:00
c11a7a1bd7 allow bundling of lv2core
Don’t statically initiate the lv2 world, use explicit call after 
scanning bundles.


lilv_world_load_specifications() and lilv_world_load_plugin_classes()
are only ever called after lilv_world_load_all(), so we postpone
the call to it.
2015-01-29 02:13:33 +01:00
cf8e7bc135 ALSA-backend separate report for error and x-run 2015-01-28 13:47:24 +01:00
397ce4ccc7 ALSA-Backend prefer ppoll() 2015-01-28 13:47:24 +01:00
de85bfd857 fix #6117 - fader prelight 2015-01-28 02:22:52 +01:00
36bbd14113 towards fixing #5711
Don’t call ::output() [here: SilenceTrimmer::process()] 
with no data to process. 

If (position + N * period-size) % chunksize == 0;
frames_left == 0 before the last call to ::output().
chunker.h:60 keeps the ProcessContext<T>::EndOfInput
flag and the SilenceTrimmer will already have done ‘in_end’ processing.
2015-01-27 23:13:55 +01:00
Valeriy Kamyshniy
6377fe89a6 [Summary] Adding missing initialization of the date &time formats. “Init trashes” caused a bit ruined logic of the export dialog. 2015-01-27 17:06:54 -05:00