diff -wrcB audacity-r10680/src/Audacity.h w80/src/Audacity.h *** audacity-r10680/src/Audacity.h 2010-11-18 16:25:35.000000000 -0500 --- w80/src/Audacity.h 2010-11-25 16:25:31.000000000 -0500 *************** *** 17,22 **** --- 17,25 ---- *//********************************************************************/ + #ifndef _AUDACITY_AUDACITY_ + #define _AUDACITY_AUDACITY_ + // Set to 0 for a release version and 1 for a beta version #define IS_BETA 1 *************** *** 154,156 **** --- 157,161 ---- // This macro is used widely, so declared here. #define QUANTIZED_TIME(time, rate) ((double)((sampleCount)floor(((double)(time) * (rate)) + 0.5))) / (rate) + + #endif diff -wrcB audacity-r10680/src/AudioIO.cpp w80/src/AudioIO.cpp *** audacity-r10680/src/AudioIO.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/AudioIO.cpp 2010-11-23 15:21:05.000000000 -0500 *************** *** 392,398 **** public: typedef int ExitCode; AudioThread() { mDestroy = false; mThread = NULL; } ! virtual ExitCode Entry(); void Create() {} void Delete() { mDestroy = true; --- 392,401 ---- public: typedef int ExitCode; AudioThread() { mDestroy = false; mThread = NULL; } ! #ifdef EXPERIMENTAL_MIDI_OUT ! virtual ! #endif ! ExitCode Entry(); void Create() {} void Delete() { mDestroy = true; *************** *** 425,431 **** class AudioThread : public wxThread { public: AudioThread():wxThread(wxTHREAD_JOINABLE) {} ! virtual ExitCode Entry(); }; #endif --- 428,437 ---- class AudioThread : public wxThread { public: AudioThread():wxThread(wxTHREAD_JOINABLE) {} ! #ifdef EXPERIMENTAL_MIDI_OUT ! virtual ! #endif ! ExitCode Entry(); }; #endif *************** *** 3208,3213 **** --- 3214,3233 ---- linkFlag = vt->GetLinked(); } + #define ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END + #ifdef ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END + // this is original code prior to r10680 -RBD + if (cut) + { + gAudioIO->mPlaybackBuffers[t]->Discard(framesPerBuffer); + continue; + } + + unsigned int len = (unsigned int) + gAudioIO->mPlaybackBuffers[t]->Get((samplePtr)tempFloats, + floatSample, + (int)framesPerBuffer); + #else // This code was reorganized so that if all audio tracks // are muted, we still return paComplete when the end of // a selection is reached. *************** *** 3223,3228 **** --- 3243,3249 ---- floatSample, (int)framesPerBuffer); } + #endif // If our buffer is empty and the time indicator is past // the end, then we've actually finished playing the entire // selection. *************** *** 3232,3240 **** { callbackReturn = paComplete; } ! if (cut) // no samples to process, they've been discarded continue; if (vt->GetChannel() == Track::LeftChannel || vt->GetChannel() == Track::MonoChannel) --- 3253,3262 ---- { callbackReturn = paComplete; } ! #ifndef ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END if (cut) // no samples to process, they've been discarded continue; + #endif if (vt->GetChannel() == Track::LeftChannel || vt->GetChannel() == Track::MonoChannel) diff -wrcB audacity-r10680/src/AudioIO.h w80/src/AudioIO.h *** audacity-r10680/src/AudioIO.h 2010-11-18 16:37:36.000000000 -0500 --- w80/src/AudioIO.h 2010-11-28 09:32:18.000000000 -0500 *************** *** 21,28 **** #ifdef EXPERIMENTAL_MIDI_OUT #include "portmidi.h" #include "porttime.h" - #endif // EXPERIMENTAL_MIDI_OUT #include "allegro.h" #endif // USE_MIDI #if USE_PORTMIXER --- 21,28 ---- #ifdef EXPERIMENTAL_MIDI_OUT #include "portmidi.h" #include "porttime.h" #include "allegro.h" + #endif // EXPERIMENTAL_MIDI_OUT #endif // USE_MIDI #if USE_PORTMIXER *************** *** 525,531 **** --- 525,533 ---- AudioIOListener* mListener; friend class AudioThread; + #ifdef EXPERIMENTAL_MIDI_OUT friend class MidiThread; + #endif friend void InitAudioIO(); friend void DeinitAudioIO(); diff -wrcB audacity-r10680/src/Menus.cpp w80/src/Menus.cpp *** audacity-r10680/src/Menus.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/Menus.cpp 2010-11-23 12:36:31.000000000 -0500 *************** *** 3653,3666 **** Track *n = iter.First(); while (n) { if (n->GetSelected()) { switch (n->GetKind()) { - #if defined(USE_MIDI) case Track::Note: ((NoteTrack*)n)->Trim(mViewInfo.sel0, mViewInfo.sel1); break; - #endif case Track::Wave: //Delete the section before the left selector --- 3653,3665 ---- Track *n = iter.First(); while (n) { + #if defined(USE_MIDI) if (n->GetSelected()) { switch (n->GetKind()) { case Track::Note: ((NoteTrack*)n)->Trim(mViewInfo.sel0, mViewInfo.sel1); break; case Track::Wave: //Delete the section before the left selector *************** *** 3671,3676 **** --- 3670,3681 ---- break; } } + #else + if ((n->GetKind() == Track::Wave) && n->GetSelected()) { + //Delete the section before the left selector + ((WaveTrack*)n)->Trim(mViewInfo.sel0, mViewInfo.sel1); + } + #endif n = iter.Next(); } diff -wrcB audacity-r10680/src/MixerBoard.cpp w80/src/MixerBoard.cpp *** audacity-r10680/src/MixerBoard.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/MixerBoard.cpp 2010-11-27 12:12:12.000000000 -0500 *************** *** 22,28 **** #include "AColor.h" #include "MixerBoard.h" #include "Project.h" ! #ifdef USE_MIDI #include "NoteTrack.h" #endif --- 22,28 ---- #include "AColor.h" #include "MixerBoard.h" #include "Project.h" ! #ifdef EXPERIMENTAL_MIDI_OUT #include "NoteTrack.h" #endif *************** *** 118,124 **** { mMixerBoard = grandParent; mProject = project; ! #ifdef USE_MIDI if (pLeftTrack->GetKind() == Track::Note) { mLeftTrack = NULL; mNoteTrack = (NoteTrack*) pLeftTrack; --- 118,124 ---- { mMixerBoard = grandParent; mProject = project; ! #ifdef EXPERIMENTAL_MIDI_OUT if (pLeftTrack->GetKind() == Track::Note) { mLeftTrack = NULL; mNoteTrack = (NoteTrack*) pLeftTrack; *************** *** 128,134 **** mNoteTrack = NULL; } #else ! mTrack = mLeftTrack = pLeftTrack; #endif mRightTrack = pRightTrack; --- 128,134 ---- mNoteTrack = NULL; } #else ! mLeftTrack = pLeftTrack; #endif mRightTrack = pRightTrack; *************** *** 142,151 **** --- 142,157 ---- // track name wxPoint ctrlPos(kDoubleInset, kDoubleInset); wxSize ctrlSize(size.GetWidth() - kQuadrupleInset, TRACK_NAME_HEIGHT); + #ifdef EXPERIMENTAL_MIDI_OUT wxString name = mTrack->GetName(); mStaticText_TrackName = new wxStaticText(this, -1, name, ctrlPos, ctrlSize, wxALIGN_CENTRE | wxST_NO_AUTORESIZE | wxSUNKEN_BORDER); + #else + mStaticText_TrackName = + new wxStaticText(this, -1, mLeftTrack->GetName(), ctrlPos, ctrlSize, + wxALIGN_CENTRE | 0x0001 | wxBORDER_SUNKEN); + #endif //v Useful when different tracks are different colors, but not now. // mStaticText_TrackName->SetBackgroundColour(this->GetTrackColor()); *************** *** 156,162 **** const int nGainSliderHeight = size.GetHeight() - ctrlPos.y - kQuadrupleInset; ctrlSize.Set(kLeftSideStackWidth - kQuadrupleInset, nGainSliderHeight); ! #ifdef USE_MIDI if (mNoteTrack) { mSlider_Gain = new MixerTrackSlider( --- 162,168 ---- const int nGainSliderHeight = size.GetHeight() - ctrlPos.y - kQuadrupleInset; ctrlSize.Set(kLeftSideStackWidth - kQuadrupleInset, nGainSliderHeight); ! #ifdef EXPERIMENTAL_MIDI_OUT if (mNoteTrack) { mSlider_Gain = new MixerTrackSlider( *************** *** 182,188 **** --- 188,198 ---- // musical instrument image ctrlPos.x += kLeftSideStackWidth + kInset; // + kInset to center it in right side stack ctrlSize.Set(MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH); + #ifdef EXPERIMENTAL_MIDI_OUT wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(name); + #else + wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(mLeftTrack); + #endif wxASSERT(bitmap); mBitmapButton_MusicalInstrument = new wxBitmapButton(this, ID_BITMAPBUTTON_MUSICAL_INSTRUMENT, *bitmap, *************** *** 250,256 **** --- 260,270 ---- Meter::MixerTrackCluster); // Style style = HorizontalStereo, #if wxUSE_TOOLTIPS + #ifdef EXPERIMENTAL_MIDI_OUT mStaticText_TrackName->SetToolTip(name); + #else + mStaticText_TrackName->SetToolTip(mLeftTrack->GetName()); + #endif mToggleButton_Mute->SetToolTip(_("Mute")); mToggleButton_Solo->SetToolTip(_("Solo")); mMeter->SetToolTip(_("Signal Level Meter")); *************** *** 301,318 **** void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/) { float fValue = mSlider_Gain->Get(); if (mLeftTrack) mLeftTrack->SetGain(fValue); - #ifdef EXPERIMENTAL_MIDI_OUT else mNoteTrack->SetGain(fValue); #endif if (mRightTrack) mRightTrack->SetGain(fValue); // Update the TrackPanel correspondingly. mProject->RefreshTPTrack(mTrack); ! if (bWantPushState) mProject->TP_PushState(_("Moved gain slider"), _("Gain"), true /* consolidate */); } --- 315,337 ---- void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/) { float fValue = mSlider_Gain->Get(); + #ifdef EXPERIMENTAL_MIDI_OUT if (mLeftTrack) mLeftTrack->SetGain(fValue); else mNoteTrack->SetGain(fValue); + #else + mLeftTrack->SetGain(fValue); #endif if (mRightTrack) mRightTrack->SetGain(fValue); // Update the TrackPanel correspondingly. + #ifdef EXPERIMENTAL_MIDI_OUT mProject->RefreshTPTrack(mTrack); ! #else ! mProject->RefreshTPTrack(mLeftTrack); ! #endif if (bWantPushState) mProject->TP_PushState(_("Moved gain slider"), _("Gain"), true /* consolidate */); } *************** *** 320,332 **** --- 339,357 ---- void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/) { float fValue = mSlider_Pan->Get(); + #ifdef EXPERIMENTAL_MIDI_OUT if (mLeftTrack) // test in case track is a NoteTrack + #endif mLeftTrack->SetPan(fValue); if (mRightTrack) mRightTrack->SetPan(fValue); // Update the TrackPanel correspondingly. + #ifdef EXPERIMENTAL_MIDI_OUT mProject->RefreshTPTrack(mTrack); + #else + mProject->RefreshTPTrack(mLeftTrack); + #endif if (bWantPushState) mProject->TP_PushState(_("Moved pan slider"), _("Pan"), true /* consolidate */); *************** *** 334,340 **** --- 359,367 ---- void MixerTrackCluster::ResetMeter() { + #ifdef EXPERIMENTAL_MIDI_OUT if (mLeftTrack) + #endif mMeter->Reset(mLeftTrack->GetRate(), true); } *************** *** 351,369 **** void MixerTrackCluster::UpdateName() { ! wxString newName = mTrack->GetName(); mStaticText_TrackName->SetLabel(newName); #if wxUSE_TOOLTIPS mStaticText_TrackName->SetToolTip(newName); #endif mBitmapButton_MusicalInstrument->SetBitmapLabel( *(mMixerBoard->GetMusicalInstrumentBitmap(newName))); } void MixerTrackCluster::UpdateMute() { mToggleButton_Mute->SetAlternate(mTrack->GetSolo()); if (mTrack->GetMute()) mToggleButton_Mute->PushDown(); else mToggleButton_Mute->PopUp(); --- 378,409 ---- void MixerTrackCluster::UpdateName() { ! #ifdef EXPERIMENTAL_MIDI_OUT ! const wxString newName = mTrack->GetName(); ! #else ! const wxString newName = mLeftTrack->GetName(); ! #endif mStaticText_TrackName->SetLabel(newName); #if wxUSE_TOOLTIPS mStaticText_TrackName->SetToolTip(newName); #endif mBitmapButton_MusicalInstrument->SetBitmapLabel( + #ifdef EXPERIMENTAL_MIDI_OUT *(mMixerBoard->GetMusicalInstrumentBitmap(newName))); + #else + *(mMixerBoard->GetMusicalInstrumentBitmap(mLeftTrack))); + #endif } void MixerTrackCluster::UpdateMute() { + #ifdef EXPERIMENTAL_MIDI_OUT mToggleButton_Mute->SetAlternate(mTrack->GetSolo()); if (mTrack->GetMute()) + #else + mToggleButton_Mute->SetAlternate(mLeftTrack->GetSolo()); + if (mLeftTrack->GetMute()) + #endif mToggleButton_Mute->PushDown(); else mToggleButton_Mute->PopUp(); *************** *** 371,377 **** --- 411,421 ---- void MixerTrackCluster::UpdateSolo() { + #ifdef EXPERIMENTAL_MIDI_OUT bool bIsSolo = mTrack->GetSolo(); + #else + bool bIsSolo = mLeftTrack->GetSolo(); + #endif if (bIsSolo) mToggleButton_Solo->PushDown(); else *************** *** 381,387 **** void MixerTrackCluster::UpdatePan() { ! #ifdef USE_MIDI if (mNoteTrack) { mSlider_Pan->Hide(); return; --- 425,431 ---- void MixerTrackCluster::UpdatePan() { ! #ifdef EXPERIMENTA_MIDI_OUT if (mNoteTrack) { mSlider_Pan->Hide(); return; *************** *** 406,412 **** --- 450,460 ---- void MixerTrackCluster::UpdateMeter(const double t0, const double t1) { if ((t0 < 0.0) || (t1 < 0.0) || (t0 >= t1) || // bad time value or nothing to show + #ifdef EXPERIMENTAL_MIDI_OUT ((mMixerBoard->HasSolo() || mTrack->GetMute()) && !mTrack->GetSolo())) + #else + ((mMixerBoard->HasSolo() || mLeftTrack->GetMute()) && !mLeftTrack->GetSolo())) + #endif { this->ResetMeter(); return; *************** *** 419,425 **** --- 467,477 ---- float* maxRight = new float[nFramesPerBuffer]; float* rmsRight = new float[nFramesPerBuffer]; + #ifdef EXPERIMENTAL_MIDI_OUT bool bSuccess = (mLeftTrack != NULL); + #else + bool bSuccess = true; + #endif const double dFrameInterval = (t1 - t0) / (double)nFramesPerBuffer; double dFrameT0 = t0; double dFrameT1 = t0 + dFrameInterval; *************** *** 497,524 **** --- 549,594 ---- if (bShiftDown) { // ShiftDown => Just toggle selection on this track. + #ifdef EXPERIMENTAL_MIDI_OUT bool bSelect = !mTrack->GetSelected(); mTrack->SetSelected(bSelect); + #else + bool bSelect = !mLeftTrack->GetSelected(); + mLeftTrack->SetSelected(bSelect); + #endif if (mRightTrack) mRightTrack->SetSelected(bSelect); // Refresh only this MixerTrackCluster and WaveTrack in TrackPanel. this->Refresh(true); + #ifdef EXPERIMENTAL_MIDI_OUT mProject->RefreshTPTrack(mTrack); + #else + mProject->RefreshTPTrack(mLeftTrack); + #endif } else { // exclusive select mProject->SelectNone(); + #ifdef EXPERIMENTAL_MIDI_OUT mTrack->SetSelected(true); + #else + mLeftTrack->SetSelected(true); + #endif if (mRightTrack) mRightTrack->SetSelected(true); if (mProject->GetSel0() >= mProject->GetSel1()) { // No range previously selected, so use the range of this track. + #ifdef EXPERIMENTAL_MIDI_OUT mProject->mViewInfo.sel0 = mTrack->GetOffset(); mProject->mViewInfo.sel1 = mTrack->GetEndTime(); + #else + mProject->mViewInfo.sel0 = mLeftTrack->GetOffset(); + mProject->mViewInfo.sel1 = mLeftTrack->GetEndTime(); + #endif } // Exclusive select, so refresh all MixerTrackClusters. *************** *** 555,561 **** --- 625,635 ---- wxSize clusterSize = this->GetSize(); wxRect bev(0, 0, clusterSize.GetWidth() - 1, clusterSize.GetHeight() - 1); + #ifdef EXPERIMENTAL_MIDI_OUT if (mTrack->GetSelected()) + #else + if (mLeftTrack->GetSelected()) + #endif { for (unsigned int i = 0; i < 4; i++) // 4 gives a big bevel, but there were complaints about visibility otherwise. { *************** *** 601,608 **** --- 675,687 ---- void MixerTrackCluster::OnButton_Mute(wxCommandEvent& event) { + #ifdef EXPERIMENTAL_MIDI_OUT mProject->HandleTrackMute(mTrack, mToggleButton_Mute->WasShiftDown()); mToggleButton_Mute->SetAlternate(mTrack->GetSolo()); + #else + mProject->HandleTrackMute(mLeftTrack, mToggleButton_Mute->WasShiftDown()); + mToggleButton_Mute->SetAlternate(mLeftTrack->GetSolo()); + #endif // Update the TrackPanel correspondingly. if (mProject->IsSoloSimple()) *************** *** 613,626 **** } else // Update only the changed track. mProject->RefreshTPTrack(mTrack); } void MixerTrackCluster::OnButton_Solo(wxCommandEvent& event) { mProject->HandleTrackSolo(mTrack, mToggleButton_Solo->WasShiftDown()); - bool bIsSolo = mTrack->GetSolo(); mToggleButton_Mute->SetAlternate(bIsSolo); // Update the TrackPanel correspondingly. --- 692,713 ---- } else // Update only the changed track. + #ifdef EXPERIMENTAL_MIDI_OUT mProject->RefreshTPTrack(mTrack); + #else + mProject->RefreshTPTrack(mLeftTrack); + #endif } void MixerTrackCluster::OnButton_Solo(wxCommandEvent& event) { + #ifdef EXPERIMENTAL_MIDI_OUT mProject->HandleTrackSolo(mTrack, mToggleButton_Solo->WasShiftDown()); bool bIsSolo = mTrack->GetSolo(); + #else + mProject->HandleTrackSolo(mLeftTrack, mToggleButton_Solo->WasShiftDown()); + bool bIsSolo = mLeftTrack->GetSolo(); + #endif mToggleButton_Mute->SetAlternate(bIsSolo); // Update the TrackPanel correspondingly. *************** *** 633,639 **** --- 720,730 ---- } else // Update only the changed track. + #ifdef EXPERIMENTAL_MIDI_OUT mProject->RefreshTPTrack(mTrack); + #else + mProject->RefreshTPTrack(mLeftTrack); + #endif } *************** *** 792,798 **** } // Reassign mixer input strips (MixerTrackClusters) to Track Clusters ! // both have the same order. If USE_MIDI, then Note Tracks appear in the // mixer, and we must be able to convert and reuse a MixerTrackCluster // from audio to midi or midi to audio. This task is handled by // UpdateForStateChange(). --- 883,890 ---- } // Reassign mixer input strips (MixerTrackClusters) to Track Clusters ! // both have the same order. If EXPERIMENTAL_MIDI_OUT, then Note Tracks ! // appear in the // mixer, and we must be able to convert and reuse a MixerTrackCluster // from audio to midi or midi to audio. This task is handled by // UpdateForStateChange(). *************** *** 815,821 **** pRightTrack = pLeftTrack->GetLinked() ? iterTracks.Next() : NULL; if (pLeftTrack->GetKind() == Track::Wave ! #ifdef USE_MIDI || pLeftTrack->GetKind() == Track::Note #endif ) --- 907,913 ---- pRightTrack = pLeftTrack->GetLinked() ? iterTracks.Next() : NULL; if (pLeftTrack->GetKind() == Track::Wave ! #ifdef EXPERIMENTAL_MIDI_OUT || pLeftTrack->GetKind() == Track::Note #endif ) *************** *** 826,832 **** // Track clusters are maintained in the same order as the WaveTracks. // Track pointers can change for the "same" track for different states // on the undo stack, so update the pointers and display name. ! #ifdef USE_MIDI if (pLeftTrack->GetKind() == Track::Note) { mMixerTrackClusters[nClusterIndex]->mNoteTrack = (NoteTrack*)pLeftTrack; mMixerTrackClusters[nClusterIndex]->mLeftTrack = NULL; --- 918,924 ---- // Track clusters are maintained in the same order as the WaveTracks. // Track pointers can change for the "same" track for different states // on the undo stack, so update the pointers and display name. ! #ifdef EXPERIMENTAL_MIDI_OUT if (pLeftTrack->GetKind() == Track::Note) { mMixerTrackClusters[nClusterIndex]->mNoteTrack = (NoteTrack*)pLeftTrack; mMixerTrackClusters[nClusterIndex]->mLeftTrack = NULL; *************** *** 875,881 **** --- 967,977 ---- // that don't call RemoveTrackCluster explicitly. // We've already updated the track pointers for the clusters to the left, so just remove these. for (; nClusterIndex < nClusterCount; nClusterIndex++) + #ifdef EXPERIMENTAL_MIDI_OUT this->RemoveTrackCluster(mMixerTrackClusters[nClusterIndex]->mTrack); + #else + this->RemoveTrackCluster(mMixerTrackClusters[nClusterIndex]->mLeftTrack); + #endif } } *************** *** 888,898 **** --- 984,1003 ---- kDoubleInset; // plus final right margin } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::MoveTrackCluster(const Track* pTrack, bool bUp) // Up in TrackPanel is left in MixerBoard. + #else + void MixerBoard::MoveTrackCluster(const WaveTrack* pLeftTrack, + bool bUp) + #endif { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT int nIndex = FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + int nIndex = this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster == NULL) return; // Couldn't find it. *************** *** 923,933 **** --- 1028,1046 ---- } } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::RemoveTrackCluster(const Track* pTrack) + #else + void MixerBoard::RemoveTrackCluster(const WaveTrack* pLeftTrack) + #endif { // Find and destroy. MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT int nIndex = FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + int nIndex = this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster == NULL) return; // Couldn't find it. *************** *** 949,969 **** --- 1062,1092 ---- this->UpdateWidth(); + #ifdef EXPERIMENTAL_MIDI_OUT // Sanity check: if there is still a MixerTrackCluster with pTrack, then // we deleted the first but should have deleted the last: FindMixerTrackCluster(pTrack, &pMixerTrackCluster); assert(pMixerTrackCluster == NULL); + #endif } + #ifdef EXPERIMENTAL_MIDI_OUT wxBitmap* MixerBoard::GetMusicalInstrumentBitmap(wxString name) + #else + wxBitmap* MixerBoard::GetMusicalInstrumentBitmap(const WaveTrack* pLeftTrack) + #endif { if (mMusicalInstruments.IsEmpty()) return NULL; // random choice: return mMusicalInstruments[(int)pLeftTrack % mMusicalInstruments.GetCount()].mBitmap; + #ifdef EXPERIMENTAL_MIDI_OUT const wxString strTrackName(name.MakeLower()); + #else + const wxString strTrackName(pLeftTrack->GetName().MakeLower()); + #endif size_t nBestItemIndex = 0; unsigned int nBestScore = 0; unsigned int nInstrIndex = 0; *************** *** 1010,1019 **** --- 1133,1150 ---- return false; } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::RefreshTrackCluster(const Track* pTrack, bool bEraseBackground /*= true*/) + #else + void MixerBoard::RefreshTrackCluster(const WaveTrack* pLeftTrack, bool bEraseBackground ) + #endif { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->Refresh(bEraseBackground); } *************** *** 1041,1057 **** --- 1172,1204 ---- mMixerTrackClusters[i]->ResetMeter(); } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::UpdateName(const Track* pTrack) + #else + void MixerBoard::UpdateName(const WaveTrack* pLeftTrack) + #endif { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->UpdateName(); } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::UpdateMute(const Track* pTrack /*= NULL*/) // NULL means update for all tracks. + #else + void MixerBoard::UpdateMute(const WaveTrack* pLeftTrack ) + #endif { + #ifdef EXPERIMENTAL_MIDI_OUT if (pTrack == NULL) + #else + if (pLeftTrack == NULL) + #endif { for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++) mMixerTrackClusters[i]->UpdateMute(); *************** *** 1059,1073 **** --- 1206,1232 ---- else { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->UpdateMute(); } } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::UpdateSolo(const Track* pTrack /*= NULL*/) // NULL means update for all tracks. + #else + void MixerBoard::UpdateSolo(const WaveTrack* pLeftTrack ) + #endif { + #ifdef EXPERIMENTAL_MIDI_OUT if (pTrack == NULL) + #else + if (pLeftTrack == NULL) + #endif { for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++) mMixerTrackClusters[i]->UpdateSolo(); *************** *** 1075,1098 **** --- 1234,1277 ---- else { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->UpdateSolo(); } } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::UpdatePan(const Track* pTrack) + #else + void MixerBoard::UpdatePan(const WaveTrack* pLeftTrack) + #endif { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->UpdatePan(); } + #ifdef EXPERIMENTAL_MIDI_OUT void MixerBoard::UpdateGain(const Track* pTrack) + #else + void MixerBoard::UpdateGain(const WaveTrack* pLeftTrack) + #endif { MixerTrackCluster* pMixerTrackCluster; + #ifdef EXPERIMENTAL_MIDI_OUT FindMixerTrackCluster(pTrack, &pMixerTrackCluster); + #else + this->FindMixerTrackCluster(pLeftTrack, &pMixerTrackCluster); + #endif if (pMixerTrackCluster) pMixerTrackCluster->UpdateGain(); } *************** *** 1209,1221 **** --- 1388,1409 ---- mImageSoloDisabled = new wxImage(mMuteSoloWidth, MUTE_SOLO_HEIGHT); // Leave empty because unused. } + #ifdef EXPERIMENTAL_MIDI_OUT int MixerBoard::FindMixerTrackCluster(const Track* pTrack, MixerTrackCluster** hMixerTrackCluster) const + #else + int MixerBoard::FindMixerTrackCluster(const WaveTrack* pLeftTrack, + MixerTrackCluster** hMixerTrackCluster) const + #endif { *hMixerTrackCluster = NULL; for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++) { + #ifdef EXPERIMENTAL_MIDI_OUT if (mMixerTrackClusters[i]->mTrack == pTrack) + #else + if (mMixerTrackClusters[i]->mLeftTrack == pLeftTrack) + #endif { *hMixerTrackCluster = mMixerTrackClusters[i]; return i; diff -wrcB audacity-r10680/src/MixerBoard.h w80/src/MixerBoard.h *** audacity-r10680/src/MixerBoard.h 2010-11-18 16:37:36.000000000 -0500 --- w80/src/MixerBoard.h 2010-11-27 11:27:00.000000000 -0500 *************** *** 59,69 **** class AudacityProject; class MixerBoard; class Track; - class WaveTrack; - #ifdef USE_MIDI class NoteTrack; #endif class MixerTrackCluster : public wxPanel { --- 59,69 ---- class AudacityProject; class MixerBoard; + #ifdef EXPERIMENTAL_MIDI_OUT class Track; class NoteTrack; #endif + class WaveTrack; class MixerTrackCluster : public wxPanel { *************** *** 109,120 **** //v void OnSliderScroll_Gain(wxScrollEvent& event); public: // mTrack is redundant, but simplifies code that operates on either // mLeftTrack or mNoteTrack. Track* mTrack; // either mLeftTrack or mNoteTrack, whichever is not NULL WaveTrack* mLeftTrack; // NULL if Note Track WaveTrack* mRightTrack; // NULL if mono ! #ifdef USE_MIDI NoteTrack* mNoteTrack; // NULL if Wave Track #endif --- 109,122 ---- //v void OnSliderScroll_Gain(wxScrollEvent& event); public: + #ifdef EXPERIMENTAL_MIDI_OUT // mTrack is redundant, but simplifies code that operates on either // mLeftTrack or mNoteTrack. Track* mTrack; // either mLeftTrack or mNoteTrack, whichever is not NULL + #endif WaveTrack* mLeftTrack; // NULL if Note Track WaveTrack* mRightTrack; // NULL if mono ! #ifdef EXPERIMENTAL_MIDI_OUT NoteTrack* mNoteTrack; // NULL if Wave Track #endif *************** *** 195,219 **** --- 197,241 ---- void UpdateTrackClusters(); int GetTrackClustersWidth(); + #ifdef EXPERIMENTAL_MIDI_OUT void MoveTrackCluster(const Track* pTrack, bool bUp); // Up in TrackPanel is left in MixerBoard. void RemoveTrackCluster(const Track* pTrack); wxBitmap* GetMusicalInstrumentBitmap(const wxString name); + #else + void MoveTrackCluster(const WaveTrack* pLeftTrack, bool bUp); // Up in TrackPanel is left in MixerBoard. + void RemoveTrackCluster(const WaveTrack* pLeftTrack); + + + wxBitmap* GetMusicalInstrumentBitmap(const WaveTrack* pLeftTrack); + #endif bool HasSolo(); + #ifdef EXPERIMENTAL_MIDI_OUT void RefreshTrackCluster(const Track* pTrack, bool bEraseBackground = true); + #else + void RefreshTrackCluster(const WaveTrack* pLeftTrack, bool bEraseBackground = true); + #endif void RefreshTrackClusters(bool bEraseBackground = true); void ResizeTrackClusters(); void ResetMeters(); + #ifdef EXPERIMENTAL_MIDI_OUT void UpdateName(const Track* pTrack); void UpdateMute(const Track* pTrack = NULL); // NULL means update for all tracks. void UpdateSolo(const Track* pTrack = NULL); // NULL means update for all tracks. void UpdatePan(const Track* pTrack); void UpdateGain(const Track* pTrack); + #else + void UpdateName(const WaveTrack* pLeftTrack); + void UpdateMute(const WaveTrack* pLeftTrack = NULL); // NULL means update for all tracks. + void UpdateSolo(const WaveTrack* pLeftTrack = NULL); // NULL means update for all tracks. + void UpdatePan(const WaveTrack* pLeftTrack); + void UpdateGain(const WaveTrack* pLeftTrack); + #endif void UpdateMeters(const double t1, const bool bLoopedPlay); *************** *** 221,228 **** --- 243,255 ---- private: void CreateMuteSoloImages(); + #ifdef EXPERIMENTAL_MIDI_OUT int FindMixerTrackCluster(const Track* pTrack, MixerTrackCluster** hMixerTrackCluster) const; + #else + int FindMixerTrackCluster(const WaveTrack* pLeftTrack, + MixerTrackCluster** hMixerTrackCluster) const; + #endif void LoadMusicalInstruments(); // event handlers diff -wrcB audacity-r10680/src/NoteTrack.cpp w80/src/NoteTrack.cpp *** audacity-r10680/src/NoteTrack.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/NoteTrack.cpp 2010-11-23 15:09:58.000000000 -0500 *************** *** 21,29 **** #include "Audacity.h" #include - #if defined(USE_MIDI) #define ROUND(x) ((int) ((x) + 0.5)) #include "AColor.h" --- 21,29 ---- #include "Audacity.h" + #if defined(USE_MIDI) #include #define ROUND(x) ((int) ((x) + 0.5)) #include "AColor.h" diff -wrcB audacity-r10680/src/NoteTrack.h w80/src/NoteTrack.h *** audacity-r10680/src/NoteTrack.h 2010-11-18 16:37:36.000000000 -0500 --- w80/src/NoteTrack.h 2010-11-27 16:34:57.000000000 -0500 *************** *** 15,23 **** #include "Audacity.h" #include "Experimental.h" #include "Track.h" - #include "allegro.h" #if defined(USE_MIDI) // define this switch to play MIDI during redisplay to sonify run times // Note that if SONIFY is defined, the default MIDI device will be opened --- 15,23 ---- #include "Audacity.h" #include "Experimental.h" #include "Track.h" #if defined(USE_MIDI) + #include "allegro.h" // define this switch to play MIDI during redisplay to sonify run times // Note that if SONIFY is defined, the default MIDI device will be opened *************** *** 90,97 **** --- 90,99 ---- virtual bool Paste(double t, Track *src); virtual bool Shift(double t); + #ifdef EXPERIMENTAL_MIDI_OUT float GetGain() const { return mGain; } void SetGain(float gain) { mGain = gain; } + #endif double NearestBeatTime(double time, double *beat); bool StretchRegion(double b0, double b1, double dur); *************** *** 156,163 **** --- 158,167 ---- void StartVScroll(); void VScroll(int start, int end); + #ifdef EXPERIMENTAL_MIDI_OUT wxRect GetGainPlacementRect() const { return mGainPlacementRect; } void SetGainPlacementRect(const wxRect &r) { mGainPlacementRect = r; } + #endif virtual bool HandleXMLTag(const wxChar *tag, const wxChar **attrs); virtual XMLTagHandler *HandleXMLChild(const wxChar *tag); *************** *** 181,187 **** --- 185,193 ---- DirManager *mDirManager; + #ifdef EXPERIMENTAL_MIDI_OUT float mGain; // velocity offset + #endif // mBottom is the Y offset of pitch 0 (normally off screen) int mBottom; diff -wrcB audacity-r10680/src/TrackArtist.cpp w80/src/TrackArtist.cpp *** audacity-r10680/src/TrackArtist.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/TrackArtist.cpp 2010-11-27 18:03:12.000000000 -0500 *************** *** 2057,2063 **** static const char *LookupStringAttribute(Alg_note_ptr note, Alg_attribute attr, const char *def); static char *LookupAtomAttribute(Alg_note_ptr note, Alg_attribute attr, char *def); static int PITCH_TO_Y(double p, int bottom); - static char *LookupAtomAttribute(Alg_note_ptr note, Alg_attribute attr, char *def); // returns NULL if note is not a shape, // returns atom (string) value of note if note is a shape --- 2057,2062 ---- diff -wrcB audacity-r10680/src/TrackPanel.cpp w80/src/TrackPanel.cpp *** audacity-r10680/src/TrackPanel.cpp 2010-11-18 16:37:36.000000000 -0500 --- w80/src/TrackPanel.cpp 2010-11-28 08:26:28.000000000 -0500 *************** *** 2582,2588 **** --- 2582,2592 ---- double clickTime = PositionToTime(event.m_x, GetLeftOffset()); bool clickedInSelection = + #ifdef USE_MIDI (vt->GetSelected() && + #else + (wt->GetSelected() && + #endif clickTime > mViewInfo->sel0 && clickTime < mViewInfo->sel1); *************** *** 2600,2609 **** } else { mCapturedClipIsSelection = false; mCapturedClipArray.Add(TrackClip(vt, mCapturedClip)); ! // Check for stereo partner Track *partner = mTracks->GetLink(vt); if (partner && partner->GetKind() == Track::Wave) { WaveClip *clip = ((WaveTrack *)partner)->GetClipAtX(event.m_x); if (clip) { --- 2604,2620 ---- } else { mCapturedClipIsSelection = false; + #ifdef USE_MIDI mCapturedClipArray.Add(TrackClip(vt, mCapturedClip)); ! #else ! mCapturedClipArray.Add(TrackClip(wt, mCapturedClip)); ! #endif // Check for stereo partner + #ifdef USE_MIDI Track *partner = mTracks->GetLink(vt); + #else + Track *partner = mTracks->GetLink(wt); + #endif if (partner && partner->GetKind() == Track::Wave) { WaveClip *clip = ((WaveTrack *)partner)->GetClipAtX(event.m_x); if (clip) { *************** *** 2820,2827 **** clipRight = mCapturedTrack->GetEndTime() + desiredSlideAmount; } #else ! desiredSlideAmount = rint(mouseTrack->GetRate() * desiredSlideAmount) / ! mouseTrack->GetRate(); // set it to a sample point if (mSnapManager && mCapturedClip) { double clipLeft = mCapturedClip->GetStartTime() + desiredSlideAmount; double clipRight = mCapturedClip->GetEndTime() + desiredSlideAmount; --- 2831,2837 ---- clipRight = mCapturedTrack->GetEndTime() + desiredSlideAmount; } #else ! desiredSlideAmount = rint(mouseTrack->GetRate() * desiredSlideAmount) / mouseTrack->GetRate(); // set it to a sample point if (mSnapManager && mCapturedClip) { double clipLeft = mCapturedClip->GetStartTime() + desiredSlideAmount; double clipRight = mCapturedClip->GetEndTime() + desiredSlideAmount; *************** *** 2885,2891 **** // See if it can be moved if (MoveClipToTrack(mCapturedClip, (WaveTrack*)mCapturedTrack, ! (WaveTrack*)mouseTrack)) { mCapturedTrack = mouseTrack; mDidSlideVertically = true; --- 2895,2904 ---- // See if it can be moved if (MoveClipToTrack(mCapturedClip, (WaveTrack*)mCapturedTrack, ! #ifdef USE_MIDI ! (WaveTrack*) ! #endif ! mouseTrack)) { mCapturedTrack = mouseTrack; mDidSlideVertically = true; *************** *** 3146,3158 **** if (!mCapturedTrack) return; // don't do anything if track is not wave or Spectrum/log Spectrum if ((mCapturedTrack->GetKind() == Track::Wave ! && ((WaveTrack *) mCapturedTrack)->GetDisplay() <= WaveTrack::SpectrumLogDisplay) ! #ifdef USE_MIDI ! || mCapturedTrack->GetKind() == Track::Note ! #endif ! ) { mMouseCapture = IsVZooming; mZoomStart = event.m_y; mZoomEnd = event.m_y; --- 3159,3170 ---- if (!mCapturedTrack) return; + #ifdef USE_MIDI // don't do anything if track is not wave or Spectrum/log Spectrum if ((mCapturedTrack->GetKind() == Track::Wave ! && ((WaveTrack *) mCapturedTrack)->GetDisplay() <= ! WaveTrack::SpectrumLogDisplay) ! || mCapturedTrack->GetKind() == Track::Note) { mMouseCapture = IsVZooming; mZoomStart = event.m_y; mZoomEnd = event.m_y; *************** *** 3163,3168 **** --- 3175,3190 ---- // } //#endif } + #else + // don't do anything if track is not wave or Spectrum/log Spectrum + if (mCapturedTrack->GetKind() != Track::Wave + || ((WaveTrack *) mCapturedTrack)->GetDisplay() > WaveTrack::SpectrumLogDisplay) + return; + mMouseCapture = IsVZooming; + mZoomStart = event.m_y; + mZoomEnd = event.m_y; + #endif + } /// VZoom drag *************** *** 3236,3242 **** int fftSkipPoints=0; #endif //EXPERIMENTAL_FFT_SKIP_POINTS double rate = ((WaveTrack *)track)->GetRate(); ! spectrum = ((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumDisplay; spectrumLog=(((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumLogDisplay); if(spectrum) { min = mTrackArtist->GetSpectrumMinFreq(0); --- 3258,3266 ---- int fftSkipPoints=0; #endif //EXPERIMENTAL_FFT_SKIP_POINTS double rate = ((WaveTrack *)track)->GetRate(); ! ((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumDisplay ? spectrum = true : spectrum = false; ! // The previous line could be rewritten as follows: ! // spectrum = ((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumDisplay; spectrumLog=(((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumLogDisplay); if(spectrum) { min = mTrackArtist->GetSpectrumMinFreq(0); *************** *** 3973,3979 **** float newValue = slider->Get(); MixerBoard* pMixerBoard = this->GetMixerBoard(); // Update mixer board, too. ! #ifdef USE_MIDI if (mCapturedTrack->GetKind() == Track::Wave) { #endif WaveTrack *link = (WaveTrack *)mTracks->GetLink(mCapturedTrack); --- 3997,4003 ---- float newValue = slider->Get(); MixerBoard* pMixerBoard = this->GetMixerBoard(); // Update mixer board, too. ! #ifdef EXPERIMENTAL_MIDI_OUT if (mCapturedTrack->GetKind() == Track::Wave) { #endif WaveTrack *link = (WaveTrack *)mTracks->GetLink(mCapturedTrack); *************** *** 3994,4000 **** if (pMixerBoard) pMixerBoard->UpdateGain((WaveTrack*)mCapturedTrack); } ! #ifdef USE_MIDI } else { if (!pan) { ((NoteTrack *) mCapturedTrack)->SetGain(newValue); --- 4018,4024 ---- if (pMixerBoard) pMixerBoard->UpdateGain((WaveTrack*)mCapturedTrack); } ! #ifdef EXPERIMENTAL_MIDI_OUT } else { if (!pan) { ((NoteTrack *) mCapturedTrack)->SetGain(newValue); *************** *** 7998,8004 **** GetPanRect(r, panRect); if (gainRect.y + gainRect.height < r.y + r.height - 19) { ! #ifdef USE_MIDI GainSlider(index)->SetStyle(DB_SLIDER); #endif GainSlider(index)->Move(wxPoint(gainRect.x, gainRect.y)); --- 8022,8028 ---- GetPanRect(r, panRect); if (gainRect.y + gainRect.height < r.y + r.height - 19) { ! #ifdef EXPERIMENTAL_MIDI_OUT GainSlider(index)->SetStyle(DB_SLIDER); #endif GainSlider(index)->Move(wxPoint(gainRect.x, gainRect.y)); diff -wrcB audacity-r10680/src/TrackPanel.h w80/src/TrackPanel.h *** audacity-r10680/src/TrackPanel.h 2010-11-18 16:37:36.000000000 -0500 --- w80/src/TrackPanel.h 2010-11-27 11:05:42.000000000 -0500 *************** *** 531,540 **** // us to undo the slide and then slide it by another amount double mHSlideAmount; - #ifdef USE_MIDI - NoteTrack *mCapturedNoteClip; - #endif - bool mDidSlideVertically; bool mRedrawAfterStop; --- 531,536 ---- diff -wrcB audacity-r10680/src/effects/ScoreAlignDialog.cpp w80/src/effects/ScoreAlignDialog.cpp *** audacity-r10680/src/effects/ScoreAlignDialog.cpp 2010-11-18 16:37:35.000000000 -0500 --- w80/src/effects/ScoreAlignDialog.cpp 2010-11-25 16:31:27.000000000 -0500 *************** *** 1,3 **** --- 1,5 ---- + #ifdef USE_MIDI + #include "../Audacity.h" // For compilers that support precompilation, includes "wx/wx.h". *************** *** 262,264 **** --- 264,268 ---- EVT_SLIDER(ID_LINETIME, ScoreAlignDialog::OnSlider) EVT_SLIDER(ID_SMOOTHTIME, ScoreAlignDialog::OnSlider) END_EVENT_TABLE() + + #endif diff -wrcB audacity-r10680/src/widgets/ASlider.cpp w80/src/widgets/ASlider.cpp *** audacity-r10680/src/widgets/ASlider.cpp 2010-11-18 16:37:35.000000000 -0500 --- w80/src/widgets/ASlider.cpp 2010-11-26 08:06:11.000000000 -0500 *************** *** 360,366 **** stepValue, canUseShift, style, heavyweight, popup, 1.0, orientation); } ! void LWSlider::SetStyle(int style) { mStyle = style; --- 360,366 ---- stepValue, canUseShift, style, heavyweight, popup, 1.0, orientation); } ! #ifdef EXPERIMENTAL_MIDI_OUT void LWSlider::SetStyle(int style) { mStyle = style; *************** *** 394,400 **** mMaxValue = SPEED_MAX; mStepValue = STEP_CONTINUOUS; break; ! #ifdef USE_MIDI case VEL_SLIDER: mMinValue = VEL_MIN; mMaxValue = VEL_MAX; --- 394,400 ---- mMaxValue = SPEED_MAX; mStepValue = STEP_CONTINUOUS; break; ! #ifdef EXPERIMENTAL_MIDI_OUT case VEL_SLIDER: mMinValue = VEL_MIN; mMaxValue = VEL_MAX; *************** *** 410,416 **** wxASSERT(false); // undefined style } } ! // Construct predefined slider LWSlider::LWSlider(wxWindow *parent, --- 410,416 ---- wxASSERT(false); // undefined style } } ! #endif // Construct predefined slider LWSlider::LWSlider(wxWindow *parent, *************** *** 423,428 **** --- 423,429 ---- int orientation /* = wxHORIZONTAL */) // wxHORIZONTAL or wxVERTICAL. wxVERTICAL is currently only for DB_SLIDER. { wxString leftLabel, rightLabel; + #ifdef EXPERIMENTAL_MIDI_OUT mOrientation = orientation; mName = name; *************** *** 430,435 **** --- 431,479 ---- Init(parent, mName, pos, size, mMinValue, mMaxValue, mStepValue, true, style, heavyweight, popup, mSpeed, mOrientation); + #else + float minValue, maxValue, stepValue; + float speed = 1.0; + + switch(style) + { + case PAN_SLIDER: + minValue = -1.0f; + maxValue = +1.0f; + stepValue = 0.1f; + orientation = wxHORIZONTAL; //v Vertical PAN_SLIDER currently not handled, forced to horizontal. + break; + case DB_SLIDER: + minValue = -36.0f; + if (orientation == wxHORIZONTAL) + maxValue = 36.0f; + else + maxValue = 36.0f; // for MixerBoard //vvv Previously was 6dB for MixerBoard, but identical for now. + stepValue = 1.0f; + speed = 0.5; + break; + case FRAC_SLIDER: + minValue = 0.0f; + maxValue = 1.0f; + stepValue = STEP_CONTINUOUS; + break; + case SPEED_SLIDER: + minValue = 0.01f; + maxValue = 3.0f; + stepValue = STEP_CONTINUOUS; + break; + + default: + minValue = 0.0f; + maxValue = 1.0f; + stepValue = 0.0f; + wxASSERT(false); // undefined style + } + + Init(parent, name, pos, size, minValue, maxValue, stepValue, + true, style, heavyweight, popup, speed, orientation); + + #endif } void LWSlider::Init(wxWindow * parent, *************** *** 540,546 **** wxString maxStr = mName + wxT(": 000000"); if (mStyle == PAN_SLIDER || mStyle == DB_SLIDER || mStyle == SPEED_SLIDER ! #ifdef USE_MIDI || mStyle == VEL_SLIDER #endif ) --- 584,590 ---- wxString maxStr = mName + wxT(": 000000"); if (mStyle == PAN_SLIDER || mStyle == DB_SLIDER || mStyle == SPEED_SLIDER ! #ifdef EXPERIMENTAL_MIDI_OUT || mStyle == VEL_SLIDER #endif ) *************** *** 909,915 **** case SPEED_SLIDER: label.Printf(wxT("%s: %.2fx"), mName.c_str(), mCurrentValue); break; ! #ifdef USE_MIDI case VEL_SLIDER: label.Printf(wxT("%s: %s%d"), mName.c_str(), (mCurrentValue > 0.0f ? _("+") : _("")), --- 953,959 ---- case SPEED_SLIDER: label.Printf(wxT("%s: %.2fx"), mName.c_str(), mCurrentValue); break; ! #ifdef EXPERIMENTAL_MIDI_OUT case VEL_SLIDER: label.Printf(wxT("%s: %s%d"), mName.c_str(), (mCurrentValue > 0.0f ? _("+") : _("")), *************** *** 1535,1541 **** mLWSlider->Set(value); } ! #ifdef USE_MIDI void ASlider::SetStyle(int style) { mStyle = style; --- 1579,1585 ---- mLWSlider->Set(value); } ! #ifdef EXPERIMENTAL_MIDI_OUT void ASlider::SetStyle(int style) { mStyle = style; *************** *** 1777,1783 **** case SPEED_SLIDER: strValue->Printf( wxT("%.0f"), as->mLWSlider->mCurrentValue * 100 ); break; ! #ifdef USE_MIDI case VEL_SLIDER: strValue->Printf( wxT("%.0f"), as->mLWSlider->mCurrentValue); break; --- 1821,1827 ---- case SPEED_SLIDER: strValue->Printf( wxT("%.0f"), as->mLWSlider->mCurrentValue * 100 ); break; ! #ifdef EXPERIMENTAL_MIDI_OUT case VEL_SLIDER: strValue->Printf( wxT("%.0f"), as->mLWSlider->mCurrentValue); break; diff -wrcB audacity-r10680/src/widgets/ASlider.h w80/src/widgets/ASlider.h *** audacity-r10680/src/widgets/ASlider.h 2010-11-18 16:37:35.000000000 -0500 --- w80/src/widgets/ASlider.h 2010-11-27 11:22:37.000000000 -0500 *************** *** 123,129 **** --- 123,131 ---- float Get(bool convert = true); void Set(float value); + #ifdef EXPERIMENTAL_MIDI_OUT void SetStyle(int style); + #endif void Increase(float steps); void Decrease(float steps); *************** *** 257,263 **** float Get( bool convert = true ); void Set(float value); ! #ifdef USE_MIDI void SetStyle(int style); #endif --- 259,265 ---- float Get( bool convert = true ); void Set(float value); ! #ifdef EXPERIMENTAL_MIDI_OUT void SetStyle(int style); #endif diff -wrcB audacity-r10680/src/xml/XMLTagHandler.h w80/src/xml/XMLTagHandler.h *** audacity-r10680/src/xml/XMLTagHandler.h 2010-11-18 16:25:34.000000000 -0500 --- w80/src/xml/XMLTagHandler.h 2010-11-23 13:15:11.000000000 -0500 *************** *** 42,48 **** --- 42,50 ---- static bool IsGoodInt(const wxString strInt); static bool IsValidChannel(const int nValue); + #ifdef USE_MIDI static bool IsValidVisibleChannels(const int nValue); + #endif static bool IsValidSampleFormat(const int nValue); // true if nValue is one sampleFormat enum values };