1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-08 16:11:14 +02:00

A couple of refinements to Nyquist v4 plug-in property lists.

1) Makes *TRACK* CLIPS property easier to use in Nyquist.
2) Allows plugins to bypass track view check on preview.
This commit is contained in:
stevethefiddle@gmail.com 2014-11-20 15:48:25 +00:00
parent 34a6776304
commit 233275f652
3 changed files with 21 additions and 13 deletions

View File

@ -393,7 +393,8 @@ class AUDACITY_DLL_API WaveTrack: public Track {
WaveformDBDisplay,
SpectrumDisplay,
SpectrumLogDisplay,
PitchDisplay
PitchDisplay,
NoDisplay // Preview track has no display
} WaveTrackDisplay;
void SetDisplay(int display) {

View File

@ -1717,6 +1717,7 @@ void Effect::Preview(bool dryOnly)
// Build new tracklist from rendering tracks
mTracks = new TrackList();
mixLeft->SetSelected(true);
mixLeft->SetDisplay(WaveTrack::NoDisplay);
mTracks->Add(mixLeft);
if (mixRight) {
mixRight->SetSelected(true);

View File

@ -731,34 +731,34 @@ bool EffectNyquist::ProcessOne()
type = wxT("wave");
switch (((WaveTrack *) mCurTrack[0])->GetDisplay())
{
case WaveTrack::WaveformDisplay: view = wxT("Waveform"); break;
case WaveTrack::WaveformDBDisplay: view = wxT("Waveform (dB)"); break;
case WaveTrack::SpectrumDisplay: view = wxT("Spectrogram"); break;
case WaveTrack::SpectrumLogDisplay: view = wxT("Spectrogram log(f)"); break;
case WaveTrack::PitchDisplay: view = wxT("Pitch (EAC)"); break;
default: break;
case WaveTrack::WaveformDisplay: view = wxT("\"Waveform\""); break;
case WaveTrack::WaveformDBDisplay: view = wxT("\"Waveform (dB)\""); break;
case WaveTrack::SpectrumDisplay: view = wxT("\"Spectrogram\""); break;
case WaveTrack::SpectrumLogDisplay: view = wxT("\"Spectrogram log(f)\""); break;
case WaveTrack::PitchDisplay: view = wxT("\"Pitch (EAC)\""); break;
default: view = wxT("NIL"); break;
}
break;
#if defined(USE_MIDI)
case Track::Note:
type = wxT("midi");
view = wxT("Midi");
view = wxT("\"Midi\"");
break;
#endif
case Track::Label:
type = wxT("label");
view = wxT("Label");
view = wxT("\"Label\"");
break;
case Track::Time:
type = wxT("time");
view = wxT("Time");
view = wxT("\"Time\"");
break;
}
cmd += wxString::Format(wxT("(putprop '*TRACK* %d 'INDEX)\n"), ++mTrackIndex);
cmd += wxString::Format(wxT("(putprop '*TRACK* \"%s\" 'NAME)\n"), mCurTrack[0]->GetName().c_str());
cmd += wxString::Format(wxT("(putprop '*TRACK* \"%s\" 'TYPE)\n"), type.c_str());
cmd += wxString::Format(wxT("(putprop '*TRACK* \"%s\" 'VIEW)\n"), view.c_str());
cmd += wxString::Format(wxT("(putprop '*TRACK* %s 'VIEW)\n"), view.c_str());
cmd += wxString::Format(wxT("(putprop '*TRACK* %d 'CHANNELS)\n"), mCurNumChannels);
cmd += wxString::Format(wxT("(putprop '*TRACK* (float %g) 'START-TIME)\n"), mCurTrack[0]->GetStartTime());
cmd += wxString::Format(wxT("(putprop '*TRACK* (float %g) 'END-TIME)\n"), mCurTrack[0]->GetEndTime());
@ -785,16 +785,22 @@ bool EffectNyquist::ProcessOne()
for (int i = 0; i < mCurNumChannels; i++) {
WaveClipArray ca;
mCurTrack[i]->FillSortedClipArray(ca);
// A list of clips for mono, or an array of lists for multi-channel.
if (mCurNumChannels > 1) clips += wxT("(list ");
// Each clip is a list (start-time, end-time)
for (size_t j = 0; j < ca.GetCount(); j++) {
clips += wxString::Format(wxT("(list (float %g) (float %g))"), ca[j]->GetStartTime(), ca[j]->GetEndTime());
}
if (mCurNumChannels > 1) clips += wxT(" )");
float min, max;
mCurTrack[i]->GetMinMax(&min, &max, mT0, mT1);
maxPeak = wxMax(wxMax(fabs(min), fabs(max)), maxPeak);
}
cmd += wxString::Format(wxT("(putprop '*TRACK* (list %s) 'CLIPS)\n"), clips.c_str());
// A list of clips for mono, or an array of lists for multi-channel.
cmd += wxString::Format(wxT("(putprop '*TRACK* %s%s ) 'CLIPS)\n"),
(mCurNumChannels == 1) ? wxT("(list ") : wxT("#( "),
clips.c_str());
cmd += wxString::Format(wxT("(putprop '*SELECTION* (float %g) 'PEAK-LEVEL)\n"), maxPeak);
}