1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-25 08:38:39 +02:00

127 Commits

Author SHA1 Message Date
Paul Licameli
85b2f80545 Correct mMidiOutputComplete, though it doesn't matter...
... Used to be, it became true too soon when play started after time 0, so
AudioIO::IsStreamActive() might become false too soon -- except that now there
is always a portaudio stream when there is a midi stream, so that didn't happen.

Mistake was to add mT0 to MidiTime(), which already has mT0 for its origin.

This error would affect nothing if you just let play to the end without trying
a keystroke command.  The error might have been enabling the wrong commands.
2017-08-24 19:47:08 -04:00
Paul Licameli
47eaf526a6 Bug1714, more: better calculation of MidiTime...
... after I reflected more on the explanation of it in the long comment at top.

Brings back the use of PaUtil_GetTime() but now calls it also in the audio IO
callback, so we can correct the unspecified origin of times supplied to the
audio IO callback to agree with the PaUtilGetTime() clock.

Thus the Midi time calculation is again based on the clock time of the other
thread that calls MidiTime, making it a few milliseconds more accurate, while
avoiding subtraction of two times based on widely different origins, which
made the big numbers that overlowed and caused Bug1714 to happen.
2017-08-17 23:25:01 -04:00
Paul Licameli
f2ee945da0 Bug1714, partial fix for silent, freezing Midi play on ALSA...
Don't assume Pa_GetStreamTimePaStreamCallbackTimeInfo origin is time-of-day.

portaudio.h says you should not, and in fact it was not.

The report is that this gets us some play, but there are still freezes.
2017-08-13 15:12:48 -04:00
Paul Licameli
07ea0ae03f Workaround for GarageBand as synth not respecting notes-off message 2017-07-25 14:56:02 -04:00
Pokechu22
4d3d32ca4d Remove MIDI-only playback (without portaudio) logic
Instead, always start a portaudio stream (if there is either a note track or a wave track).  This ensures that playback is always in sync (eg when recording), and gets rid of a lot of duplicate logic throughout.

Scrubbing (currently) still doesn't work with only note tracks, but it should be easier to fix that now than trying to reimplement all of the scrubbing time logic.

Conflicts:
	src/AudioIO.cpp
2017-07-16 18:10:48 -04:00
Pokechu22
c50567e1db Time track properly warps the MIDI event times (but not pitches)
mMidiPlaySpeed doesn't handle all of the options provided by time tracks,
and in fact doesn't even use time tracks.  Using the time track
instead allows note tracks to remain synchronized with the rest of the audio.

mMidiPlaySpeed _did_ work where it was used in the transcription tool
bar, but that already updates a time track so no special handling is
needed.
2017-07-16 14:28:58 -04:00
Pokechu22
62ebb2f95d Remove unused and unneeded MIDI methods and variables
The fields in AudioIO are simply unneeded (commented out, declared but never implemented, or otherwise unused).

mLastMidiPosition (in NoteTrack) looks like the vestiges of a far older attempt at MIDI playback; the field itself is completely unused though so it is safe to remove it.
2017-07-16 11:07:28 -04:00
Pokechu22
437de15098 Add more method and field documentation
Mostly for MIDI-specific areas, and general AudioIO fields.
2017-07-16 11:07:28 -04:00
Pokechu22
681161f60b Add MIDI device diagnostics
* MIDI Device Info menu item, like Audio Device Info

 * MIDI device info in crash reports

 * Only enabled with EXPERIMENTAL_MIDI_OUT, but tracks info related to the (unimplemented) EXPERIMENTAL_MIDI_IN
2017-07-16 10:58:53 -04:00
Pokechu22
724091eb15 Fix missing include for allegro
Allegro, for some reason, does not include <cstring>, which causes compile errors when including the header.
2017-07-04 07:50:15 -04:00
James Crook
7f98672e22 MIDI_OUT on by default on windows.
The idea is to get SOME use and test of MIDI_OUT even though it does not compile on Linux yet.
2017-04-27 12:56:39 +01:00
James Crook
419b790235 Make monitoring work after a theme change 2017-04-05 17:29:24 +01:00
Paul Licameli
eeb301e50d Gracefully handle disk exhaustion exceptions during recording 2017-03-17 17:53:00 -04:00
Paul Licameli
2b23667211 Remove naked new[] in: AudioIO 2017-03-17 17:52:46 -04:00
Paul Licameli
81285ee0c1 More const and override 2017-03-17 17:52:20 -04:00
Paul Licameli
0eb2f85bfb Use DBL_MAX, not arbitrary 1000000000.0, as "infinite" time interval 2016-09-19 10:38:42 -04:00
Paul Licameli
ad04187a41 Change sampleCount arguments, variables, return values to size_t...
... whenever they really describe the size of a buffer that fits in memory, or
of a block file (which is never now more than a megabyte and so could be fit in
memory all at once), or a part thereof.
2016-09-15 21:03:17 -04:00
Paul Licameli
39d514b183 Some more const, some stl idioms, remove unused declaration 2016-09-13 22:03:58 -04:00
Paul Licameli
67cec5ad83 Make many counts of tracks and channels unsigned...
... And in some places where a library uses signed types, assert that
the reported number is not negative.

What led me to this, is that there are many places where a size_t value for
an allocation is the product of a number of channels and some other number.
2016-09-07 10:11:41 -04:00
Paul Licameli
2910005780 Rewrite RingBuffer methods with size_t arguments and returns 2016-09-06 12:39:58 -04:00
Paul Licameli
837a96d18a Scrub queue records positions as sampleCount not long 2016-09-04 16:28:40 -04:00
Paul Licameli
15a60bde4b Fix linux debug complaints of missing thread shut-down...
... caused by commit b47bcb548e7866c1a44a4600ffbeff0ae0445516
2016-08-15 21:21:09 -04:00
Paul Licameli
a52f7f8410 new -> NEW in comments, so text search for naked new excludes them 2016-08-08 10:07:37 -04:00
Paul Licameli
b47bcb548e Remove some naked new amd delete in: AudioIO 2016-08-08 07:51:27 -04:00
Paul Licameli
27527ebf5c One less indirection for arrays of capture and playback tracks 2016-08-08 07:51:26 -04:00
Paul Licameli
84c0337aba Fix TAB key navigation on Mac for all dialogs (not only for panels) 2016-07-10 17:12:27 -04:00
Paul Licameli
a9a404c7cf Further simplified argument passing 2016-05-28 12:02:16 -04:00
Paul Licameli
9a256d3790 Don't let the consumers discard too much from the scrub queue...
Producer adds silences when needed, so that the accounting in Transformer()
is correct
2016-05-28 11:59:22 -04:00
Paul Licameli
ffe596c760 Move some fields into ScrubbingOptions 2016-05-22 15:27:35 -04:00
Paul Licameli
671f60492d Move some static functions into ScrubbingOptions 2016-05-22 15:27:35 -04:00
Paul Licameli
3dcf802bdc Have just one scrub enqueueing function: use options for distinctions 2016-05-22 15:27:35 -04:00
Paul Licameli
cdbdd6480b Define and pass around struct ScrubbingOptions, but nothing in it yet 2016-05-22 15:27:35 -04:00
Paul Licameli
36e5b4fbbc AudioIOStartStreamOptions includes the sample rate 2016-05-22 15:27:35 -04:00
Paul Licameli
e1f4ab6af6 Double-click record with overdub pins record head center not right 2016-05-17 13:21:39 -04:00
Paul Licameli
52910f4f07 Less scrub lag: don't poll for available data, get woken up directly 2016-05-15 16:18:00 -04:00
Paul Licameli
19ef2f6681 Implement drag-scrub, compatibly with the existing move-scrub...
... Start scrub by click or double click on the scrub head; release button or
not; then move.

If you release before moving, you get scrubbing as before, controlled by
motion.  Click or drag to switch in and out of seeking.  Stop with ESC,
spacebar, etc.  No change of selection.

But now if you drag, then scrubbing contines until you release the mouse or
otherwise stop with a key.

If by release of the mouse, then the selection changes as if by a click at
the last play position.  If you hold shift, then, as if by shift-click.

If drag begins with a double-click, then the play head remains centered and
the track moves.
2016-05-10 09:37:10 -04:00
Paul Licameli
eb6e093912 Pass arrays by reference into AudioIO::StartStream 2016-04-09 15:14:07 -04:00
Paul Licameli
b28ec2957a Make EXPERIMENTAL_MIDI_OUT compilable, but it doesn't link 2016-04-09 15:10:05 -04:00
Steve Daulton
484f23dcc7 Fix for bug 814 2016-03-28 21:07:25 +01:00
Paul Licameli
7824e94030 Harmlessly qualify classes as final (or explicitly comment not)...
... Should have no effect on generated code, except perhaps some slight faster
virtual function calls.  Mostly useful as documentation of design intent.

Tried to mark every one of our classes that inherits from another, or is a
base for others, or has abstract virtual functions, and a few others besides.
2016-02-24 20:58:30 -05:00
Paul Licameli
9bf098c7d9 Sweep unnecessary wxString copies: rest 2016-02-23 02:15:56 -05:00
Paul Licameli
7c4c45a0d5 "new"->"NEW" in comments, easier to find remaining naked operator new 2016-02-14 18:52:41 -05:00
Paul Licameli
321d5259a2 More uses of SampleBuffer, eliminating explicit DeleteSamples calls 2016-02-01 10:16:00 -05:00
Paul Licameli
1278b9644a Uniform naming of symbols in Experimental.h 2015-08-31 17:55:56 -04:00
Paul Licameli
d39eaa4e65 Remove WaveTrack.h from other headers 2015-07-28 10:02:05 -04:00
Paul Licameli
4ded4ec9ba Bug969: Just disable pause during scrub. It does not make sense. 2015-05-26 13:00:07 -04:00
Paul Licameli
3c88f8ce4d Bugs 925, 926, 928 fixed again, better, for double click and shift too 2015-05-24 17:31:00 -04:00
Steve Daulton
79b7caac07 Fix play from click position when Quick Play Loop in selection. 2015-04-20 04:06:07 +01:00
Paul-Licameli
d988c3329f Support for scrubbing in playback engine, but unused 2015-04-17 02:35:06 -04:00
Paul-Licameli
5abfd25a34 Support backwards play, a requirement for scrubbing
Uncomment the line at the top of ControlToolBar::PlayPlayRegion to play
everything backwards and test it

It even works correctly with a time track
2015-04-17 02:25:52 -04:00