1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-18 00:50:05 +02:00

379 Commits

Author SHA1 Message Date
Pokechu22
03f9592f58 Bug 1690: Playback does not stop at the end of MIDI playback
This was caused by the indicator-passed-selection check being inside a loop over all wave tracks.  If there are no wave tracks, then the check never happened.  I added a duplicate version of the check if there are no wave tracks.  This may not be the best solution, but it works for now.

I'm not entirely sure why the check is in the loop (or what's going on with the len and maxLen variables); as such, I just haven't touched that.  Perhaps it would be safe to move the check always outside of the loop, but I'm not completely confident in that.
2017-07-16 20:52:09 -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
8a02687b5f Fix velocity offset edge case
If the velocity of a note was, for instance, 30, and the velocity slider was at -30, then you'd get a data2 of 0, which wouldn't be clamped (and would produce a note off).  However, if the note were 29 or 31, you'd get a velocity of 1.  This makes it so that note ons always have a velocity of at least 1, even in that edge case.
2017-07-16 11:07:28 -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
bd294ea4ed Midi diag mentions conditional compilation flags, but only in ALPHA 2017-07-16 11:06:13 -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
Paul Licameli
a8ac80eda9 Bug1651: NoteTrack sync-lock and crash fixes...
Simplify the logic of duplication of NoteTrack.  Duplicates are always in
serialized state.  Un-serialization can happen on demand in any of the
NoteTrack operations that require a defined sequence.

Changing the duration of the sequence after paste is needed,
as it was also needed, when I fixed Stretch at commit
90eb4ec142f7d575d0870dd9c755589bff520cbe.  I don't know if this should be
considered a bug in Allegro that we are compensating.
2017-05-25 08:08:31 -04:00
Pokechu22
a76ad22c91 Fix midi channel toggling
This reintroduces the buttons to toggle display of individual midi
channels, and cleans up the code behind that feature.

This functionality has actually been present in production versions of
audacity for a while, at least for clicking.  However, the buttons
themselves were not drawn, making it exteremly painful (but possible) to
use.

As requested by PRL, this is always enabled if USE_MIDI is defined.
2017-05-02 00:37:31 -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
aa83c4cf29 Implement the more than weak guarantees needed for recording...
... in WaveClip and WaveTrack, to save as much recording as we can,
assuming the strong guarantees that Sequence will give.

Also comment that some other WaveTrack methods can give strong guarantee,
incidentally to making HandleClear give strong.
2017-04-02 12:46:47 -04:00
Paul Licameli
e1473dfe76 void return, not boolean success, from some Track virtual functions...
... The return codes were mostly ignored anyway, and exceptions will be thrown
instead.

It seems there was also confusion whether the return values of Track::Paste
and Track::SyncLockAdjust were to indicate success or indicate whether there
was any change.  No matter now.
2017-03-31 18:26:52 -04:00
Paul Licameli
80984c9f1d From Pokechu22: Rename gain to velocity on note tracks
"Velocity" is the technical term, and it's the term that's used everywhere.
"Gain" was probably only used because "gain" is used on wave tracks; since
note tracks aren't wave tracks (and shouldn't be treated as them) the
corresponding variables should be named velocity.
2017-03-29 13:27:22 -04:00
Pokechu22
0ce9598274 Fix midi-related compile problems in AudioIO and NoteTrack
The compilation was broken in 67cec5a but fixed in ed8c7fd.  However, the warnings weren't fixed.  The same general sign-related changes from 67cec5a were applied, fixing several warnings.

This also changes the arguments for NoteTrack's label click handler, to match the ones found in TrackPanel.  That's needed to handle some other const-related changes.

Additionally, EXPERIMENTAL_MIDI_PLAYBACK was changed to EXPERIMENTAL_MIDI_OUT in the documentation, as that is the correct name.
2017-03-27 01:12:16 -04:00
Paul Licameli
38b8e57e4e Specify whether to throw on bad read in Mixer and WaveTrackCache...
... Do throw when exporting or mixing-and-rendering; don't if playing back or
drawing a spectrogram, but then just use zeroes.
2017-03-21 17:23:35 -04:00
Paul Licameli
eeb301e50d Gracefully handle disk exhaustion exceptions during recording 2017-03-17 17:53:00 -04:00
Paul Licameli
f4e2fb5eac AudioIO::StopStream stops exceptions in many non-editing actions 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
ed8c7fd60d Make EXPERIMENTAL_MIDI_OUT compile, but it fails to link 2017-03-17 17:52:18 -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
078ff056e2 Make many conversions sampleCount->size_t are explicit and checked...
... with run-time assertions.

I examined each place and reasoned that the narrowing was safe, and commented
why so.

Again, there are places where the sampleCount variable will later be changed
to have a different type, and they are not changed here.
2016-09-15 21:02:32 -04:00
Paul Licameli
78be459fa1 Convert sampleCount <-> floating or -> long long explicitly ...
... A non-narrowing conversion out to long long is a necessity, but the
conversions to float and double are simply conveniences.

Conversion from floating is explicit, to avoid unintended consequences with
arithmetic operators, when later sampleCount ceases to be an alias for an
integral type.

Some conversions are not made explicit, where I expect to change the type of
the variable later to have mere size_t width.
2016-09-15 21:02:31 -04:00
Paul Licameli
26b5e77050 Define sampleCount as a class, not a type alias...
... Define lots of operators for disambiguation, but they will go away after
all conversions from sampleCount to built-in numerical types are forced
to be explicit.
2016-09-15 21:02:31 -04:00
Paul Licameli
39d514b183 Some more const, some stl idioms, remove unused declaration 2016-09-13 22:03:58 -04:00
James Crook
4eeef25191 More unused parameters and local variables. 2016-09-12 12:33:44 +01: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
5bf8291c97 ClearSamples takes size_t arguments 2016-09-06 20:46:26 -04:00
Paul Licameli
2a2013cb4b More decltype and auto, mostly for loop index variables 2016-09-06 20:46:25 -04:00
Paul Licameli
2910005780 Rewrite RingBuffer methods with size_t arguments and returns 2016-09-06 12:39:58 -04:00
Paul Licameli
c8e7372886 Rewrite Resample::Process to take and return size_t values 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
954a914ff7 A little more type agnosticism 2016-08-26 12:42:22 -04:00
Paul Licameli
79c79f9cd3 Remove many mentions of sampleCount with auto and decltype...
... This makes much code agnostic about how other things (functions and
arguments) are typed.

Many of these neeed to become size_t instead of sampleCount.
2016-08-24 14:50:45 -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
James Crook
0a16141ee5 Flag PortAudio and PortMixer unhandled error returns. 2016-07-10 21:40:49 +01:00
James Crook
18eb2bbc7a Bug 193 - Audacity can't record at > 16-bit under MME or Windows DirectSound
Fix by Uwe and Carsten of DirectSound issue (only).  We can't interrogate for formats, so we use userData to tell PortAudio what the format should be.  I have a 16 bit built in sound device and that continues to function correctly at 16 bit with 24 bit requested.  Unable to test on a 24 bit device.
2016-07-05 11:56:04 +01:00
Paul Licameli
2361121b80 Bug860, edge case: when loop-playing < 1 sample interval, don't hang 2016-06-29 13:06:01 -04:00
Paul Licameli
7d0517a9c9 Don't busy-wait (excess CPU usage) after stopping scrub 2016-06-03 08:34:39 -04:00
Paul Licameli
35b0502ce1 Don't let seek make a stutter at less than unit speed 2016-05-28 12:11:26 -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
b6764d1bf7 Reduce scrub lag yet more, at expense of possible skips in play...
by discarding work from the queue sometimes on the consumer side.

Also more careful mixed long - double arithmetic.
2016-05-28 11:59:14 -04:00
Paul Licameli
57fb3cd12c Scrub lag: lock mutex not more than once per call to FillBuffers 2016-05-28 08:44:25 -04:00
Paul Licameli
b14fa507c9 Reorganize logic of initializing queue entries 2016-05-28 08:44:25 -04:00
Paul Licameli
c585bb16fb Move bounding times and minimum stutter length into ScrubOptions 2016-05-22 15:27:35 -04:00