https://bugs.gentoo.org/637110 Original patch by Matt Whitlock Forward-ported from version 2.2.0 to 2.2.2 --- audacity-minsrc-2.2.2-rc1/src/AudioIO.cpp +++ audacity-minsrc-2.2.2-rc1/src/AudioIO.cpp @@ -976,6 +976,7 @@ }; #endif +#ifdef EXPERIMENTAL_MIDI_OUT // return the system time as a double static double streamStartTime = 0; // bias system time to small number @@ -995,6 +996,7 @@ return PaUtil_GetTime() - streamStartTime; } +#endif const int AudioIO::StandardRates[] = { 8000, @@ -1803,6 +1805,7 @@ } #endif +#ifdef EXPERIMENTAL_MIDI_OUT // We use audio latency to estimate how far ahead of DACS we are writing if (mPortStreamV19 != NULL && mLastPaError == paNoError) { const PaStreamInfo* info = Pa_GetStreamInfo(mPortStreamV19); @@ -1811,6 +1814,7 @@ mAudioOutLatency = info->outputLatency; mSystemMinusAudioTimePlusLatency += mAudioOutLatency; } +#endif return (mLastPaError == paNoError); } @@ -1955,8 +1959,10 @@ double playbackTime = 4.0; +#ifdef EXPERIMENTAL_MIDI_OUT streamStartTime = 0; streamStartTime = SystemTime(mUsingAlsa); +#endif #ifdef EXPERIMENTAL_SCRUBBING_SUPPORT bool scrubbing = (options.pScrubbingOptions != nullptr); @@ -2830,7 +2836,9 @@ mPlaybackTracks.clear(); mCaptureTracks.clear(); +#ifdef HAVE_MIDI mMidiPlaybackTracks.clear(); +#endif #ifdef EXPERIMENTAL_SCRUBBING_SUPPORT mScrubQueue.reset(); @@ -4669,13 +4677,13 @@ (float *)alloca(framesPerBuffer*numPlaybackChannels * sizeof(float)) : (float *)outputBuffer; +#ifdef EXPERIMENTAL_MIDI_OUT if (gAudioIO->mCallbackCount++ == 0) { // This is effectively mSystemMinusAudioTime when the buffer is empty: gAudioIO->mStartTime = SystemTime(gAudioIO->mUsingAlsa) - gAudioIO->mT0; // later, mStartTime - mSystemMinusAudioTime will tell us latency } -#ifdef EXPERIMENTAL_MIDI_OUT /* GSW: Save timeInfo in case MidiPlayback needs it */ gAudioIO->mAudioCallbackClockTime = PaUtil_GetTime(); @@ -5051,7 +5059,9 @@ : gAudioIO->mTime >= gAudioIO->mT1)) // PRL: singalling MIDI output complete is necessary if // not USE_MIDI_THREAD, otherwise it's harmlessly redundant +#ifdef EXPERIMENTAL_MIDI_OUT gAudioIO->mMidiOutputComplete = true, +#endif callbackReturn = paComplete; } @@ -5114,7 +5124,9 @@ // PRL: singalling MIDI output complete is necessary if // not USE_MIDI_THREAD, otherwise it's harmlessly redundant +#ifdef EXPERIMENTAL_MIDI_OUT gAudioIO->mMidiOutputComplete = true, +#endif callbackReturn = paComplete; } } --- audacity-minsrc-2.2.2-rc1/src/Project.cpp +++ audacity-minsrc-2.2.2-rc1/src/Project.cpp @@ -460,10 +460,11 @@ } ); for (const auto &name : sortednames) { - +#ifdef USE_MIDI if (Importer::IsMidi(name)) AudacityProject::DoImportMIDI(mProject, name); else +#endif mProject->Import(name); } @@ -3046,9 +3047,11 @@ #endif { +#ifdef USE_MIDI if (Importer::IsMidi(fileName)) DoImportMIDI(this, fileName); else +#endif Import(fileName); ZoomAfterImport(nullptr); --- audacity-minsrc-2.2.2-rc1/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp +++ audacity-minsrc-2.2.2-rc1/src/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp @@ -9,6 +9,9 @@ **********************************************************************/ #include "../../../../Audacity.h" + +#ifdef USE_MIDI + #include "NoteTrackButtonHandle.h" #include "../../../../HitTestResult.h" @@ -113,3 +116,4 @@ return RefreshCode::RefreshNone; } +#endif --- audacity-minsrc-2.2.2-rc1/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp +++ audacity-minsrc-2.2.2-rc1/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp @@ -9,6 +9,9 @@ **********************************************************************/ #include "../../../../Audacity.h" + +#ifdef USE_MIDI + #include "NoteTrackVZoomHandle.h" #include "../../../../Experimental.h" #include "NoteTrackVRulerControls.h" @@ -332,3 +335,5 @@ TrackVRulerControls::DrawZooming ( dc, mRect, panelRect, mZoomStart, mZoomEnd ); } + +#endif --- audacity-minsrc-2.2.2-rc1/src/tracks/ui/TimeShiftHandle.cpp +++ audacity-minsrc-2.2.2-rc1/src/tracks/ui/TimeShiftHandle.cpp @@ -604,7 +604,7 @@ { trySnap = true; if (pTrack->GetKind() == Track::Wave) { - auto wt = static_cast(pTrack); + auto wt = static_cast(pTrack.get()); const double rate = wt->GetRate(); // set it to a sample point desiredSlideAmount = rint(desiredSlideAmount * rate) / rate;