Audacity 3.2.0
Macros | Enumerations | Functions | Variables
Nyquist.cpp File Reference
#include "Nyquist.h"
#include <algorithm>
#include <cmath>
#include <cstring>
#include <locale.h>
#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/choice.h>
#include <wx/datetime.h>
#include <wx/intl.h>
#include <wx/log.h>
#include <wx/scrolwin.h>
#include <wx/sizer.h>
#include <wx/slider.h>
#include <wx/sstream.h>
#include <wx/stattext.h>
#include <wx/textdlg.h>
#include <wx/tokenzr.h>
#include <wx/txtstrm.h>
#include <wx/valgen.h>
#include <wx/wfstream.h>
#include <wx/numformatter.h>
#include <wx/stdpaths.h>
#include "BasicUI.h"
#include "../EffectManager.h"
#include "FileNames.h"
#include "../../LabelTrack.h"
#include "Languages.h"
#include "../../NoteTrack.h"
#include "../../TimeTrack.h"
#include "../../prefs/SpectrogramSettings.h"
#include "PluginManager.h"
#include "Project.h"
#include "ProjectRate.h"
#include "../../ShuttleAutomation.h"
#include "../../ShuttleGetDefinition.h"
#include "../../ShuttleGui.h"
#include "TempDirectory.h"
#include "SyncLock.h"
#include "ViewInfo.h"
#include "../../WaveClip.h"
#include "../../WaveTrack.h"
#include "../../widgets/valnum.h"
#include "../../widgets/AudacityMessageBox.h"
#include "Prefs.h"
#include "wxFileNameWrapper.h"
#include "../../prefs/GUIPrefs.h"
#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
#include "../../widgets/NumericTextCtrl.h"
#include "../../widgets/ProgressDialog.h"
#include "../../widgets/FileDialog/FileDialog.h"
#include <iostream>
#include <ostream>
#include <sstream>
#include <float.h>
#include "../../../lib-src/libnyquist/nyquist/xlisp/xlisp.h"
#include "../../commands/ScriptCommandRelay.h"

Go to the source code of this file.

Macros

#define NYQUIST_WORKER_ID   wxT("Nyquist Worker")
 
#define NYQ_MAX_LEN   (std::numeric_limits<long>::max())
 
#define UNINITIALIZED_CONTROL   ((double)99999999.99)
 

Enumerations

enum  {
  ID_Editor = 10000 , ID_Load , ID_Save , ID_Slider = 11000 ,
  ID_Choice = 13000 , ID_FILE = 15000
}
 

Functions

 EVT_COMMAND_RANGE (ID_Slider, ID_Slider+99, wxEVT_COMMAND_SLIDER_UPDATED, NyquistEffect::OnSlider) EVT_COMMAND_RANGE(ID_Text
 
NyquistEffect::OnText EVT_COMMAND_RANGE (ID_Choice, ID_Choice+99, wxEVT_COMMAND_CHOICE_SELECTED, NyquistEffect::OnChoice) EVT_COMMAND_RANGE(ID_Time
 
NyquistEffect::OnText NyquistEffect::OnTime EVT_COMMAND_RANGE (ID_FILE, ID_FILE+99, wxEVT_COMMAND_BUTTON_CLICKED, NyquistEffect::OnFileButton) NyquistEffect
 
static void RegisterFunctions ()
 
static LVAL gettext ()
 
static LVAL gettextc ()
 
static LVAL ngettext ()
 
static LVAL ngettextc ()
 
void * nyq_make_opaque_string (int size, unsigned char *src)
 
void * nyq_reformat_aud_do_response (const wxString &Str)
 
LVAL xlc_aud_do (void)
 

Variables

static const wxChar * KEY_Command = wxT("Command")
 
static const wxChar * KEY_Parameters = wxT("Parameters")
 
 ID_Text = 12000
 
 wxEVT_COMMAND_TEXT_UPDATED
 
NyquistEffect::OnText ID_Time = 14000
 
static const FileNames::FileType NyquistScripts = { XO("Nyquist scripts"), { wxT("ny") }, true }
 
static const FileNames::FileType LispScripts = { XO("Lisp scripts"), { wxT("lsp") }, true }
 

Macro Definition Documentation

◆ NYQ_MAX_LEN

#define NYQ_MAX_LEN   (std::numeric_limits<long>::max())

Definition at line 114 of file Nyquist.cpp.

◆ NYQUIST_WORKER_ID

#define NYQUIST_WORKER_ID   wxT("Nyquist Worker")

Definition at line 96 of file Nyquist.cpp.

◆ UNINITIALIZED_CONTROL

#define UNINITIALIZED_CONTROL   ((double)99999999.99)

Definition at line 116 of file Nyquist.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
ID_Editor 
ID_Load 
ID_Save 
ID_Slider 
ID_Choice 
ID_FILE 

Definition at line 100 of file Nyquist.cpp.

101{
102 ID_Editor = 10000,
103 ID_Load,
104 ID_Save,
105
106 ID_Slider = 11000,
107 ID_Text = 12000,
108 ID_Choice = 13000,
109 ID_Time = 14000,
110 ID_FILE = 15000
111};
@ ID_Editor
Definition: Nyquist.cpp:102
@ ID_Load
Definition: Nyquist.cpp:103
@ ID_FILE
Definition: Nyquist.cpp:110
@ ID_Choice
Definition: Nyquist.cpp:108
@ ID_Slider
Definition: Nyquist.cpp:106
@ ID_Save
Definition: Nyquist.cpp:104
ID_Text
Definition: Nyquist.cpp:133
NyquistEffect::OnText ID_Time
Definition: Nyquist.cpp:137

Function Documentation

◆ EVT_COMMAND_RANGE() [1/3]

NyquistEffect::OnText EVT_COMMAND_RANGE ( ID_Choice  ,
ID_Choice 99,
wxEVT_COMMAND_CHOICE_SELECTED  ,
NyquistEffect::OnChoice   
)

◆ EVT_COMMAND_RANGE() [2/3]

Definition at line 139 of file Nyquist.cpp.

144{
145 mOutputTrack[0] = mOutputTrack[1] = nullptr;
146
147 mAction = XO("Applying Nyquist Effect...");
148 mIsPrompt = false;
149 mExternal = false;
150 mCompiler = false;
151 mTrace = false;
152 mRedirectOutput = false;
153 mDebug = false;
154 mIsSal = false;
155 mOK = false;
156 mAuthor = XO("n/a");
157 mReleaseVersion = XO("n/a");
158 mCopyright = XO("n/a");
159
160 // set clip/split handling when applying over clip boundary.
161 mRestoreSplits = true; // Default: Restore split lines.
162 mMergeClips = -1; // Default (auto): Merge if length remains unchanged.
163
164 mVersion = 4;
165
166 mStop = false;
167 mBreak = false;
168 mCont = false;
169 mIsTool = false;
170
171 mMaxLen = NYQ_MAX_LEN;
172
173 // Interactive Nyquist
174 if (fName == NYQUIST_PROMPT_ID) {
175 mName = NYQUIST_PROMPT_NAME;
176 mType = EffectTypeTool;
177 mIsTool = true;
178 mPromptName = mName;
179 mPromptType = mType;
180 mOK = true;
181 mIsPrompt = true;
182 return;
183 }
184
185 if (fName == NYQUIST_WORKER_ID) {
186 // Effect spawned from Nyquist Prompt
187/* i18n-hint: It is acceptable to translate this the same as for "Nyquist Prompt" */
188 mName = XO("Nyquist Worker");
189 return;
190 }
191
192 mFileName = fName;
193 // Use the file name verbatim as effect name.
194 // This is only a default name, overridden if we find a $name line:
195 mName = Verbatim( mFileName.GetName() );
196 mFileModified = mFileName.GetModificationTime();
197 ParseFile();
198
199 if (!mOK && mInitError.empty())
200 mInitError = XO("Ill-formed Nyquist plug-in header");
201}
@ EffectTypeTool
#define XO(s)
Definition: Internat.h:31
#define NYQUIST_WORKER_ID
Definition: Nyquist.cpp:96
#define NYQ_MAX_LEN
Definition: Nyquist.cpp:114
#define NYQUIST_PROMPT_ID
#define NYQUIST_PROMPT_NAME
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.

References EffectTypeTool, NYQ_MAX_LEN, NYQUIST_PROMPT_ID, NYQUIST_PROMPT_NAME, NYQUIST_WORKER_ID, Verbatim(), and XO.

Here is the call graph for this function:

◆ EVT_COMMAND_RANGE() [3/3]

EVT_COMMAND_RANGE ( ID_Slider  ,
ID_Slider 99,
wxEVT_COMMAND_SLIDER_UPDATED  ,
NyquistEffect::OnSlider   
)

◆ gettext()

static LVAL gettext ( )
static

Definition at line 3466 of file Nyquist.cpp.

3467{
3468 auto string = UTF8CTOWX(getstring(xlgastring()));
3469#if !HAS_I18N_CONTEXTS
3470 // allow ignored context argument
3471 if ( moreargs() )
3472 nextarg();
3473#endif
3474 xllastarg();
3475 return cvstring(GetCustomTranslation(string).mb_str(wxConvUTF8));
3476}
STRINGS_API const wxString & GetCustomTranslation(const wxString &str1)
Definition: Internat.cpp:71
#define UTF8CTOWX(X)
Definition: Internat.h:159

References GetCustomTranslation(), and UTF8CTOWX.

Referenced by gettextc(), and RegisterFunctions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gettextc()

static LVAL gettextc ( )
static

Definition at line 3478 of file Nyquist.cpp.

3479{
3480#if HAS_I18N_CONTEXTS
3481 auto string = UTF8CTOWX(getstring(xlgastring()));
3482 auto context = UTF8CTOWX(getstring(xlgastring()));
3483 xllastarg();
3484 return cvstring(wxGetTranslation( string, "", 0, "", context )
3485 .mb_str(wxConvUTF8));
3486#else
3487 return gettext();
3488#endif
3489}
static LVAL gettext()
Definition: Nyquist.cpp:3466

References gettext(), and UTF8CTOWX.

Referenced by RegisterFunctions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ngettext()

static LVAL ngettext ( )
static

Definition at line 3491 of file Nyquist.cpp.

3492{
3493 auto string1 = UTF8CTOWX(getstring(xlgastring()));
3494 auto string2 = UTF8CTOWX(getstring(xlgastring()));
3495 auto number = getfixnum(xlgafixnum());
3496#if !HAS_I18N_CONTEXTS
3497 // allow ignored context argument
3498 if ( moreargs() )
3499 nextarg();
3500#endif
3501 xllastarg();
3502 return cvstring(
3503 wxGetTranslation(string1, string2, number).mb_str(wxConvUTF8));
3504}

References UTF8CTOWX.

Referenced by ngettextc(), and RegisterFunctions().

Here is the caller graph for this function:

◆ ngettextc()

static LVAL ngettextc ( )
static

Definition at line 3506 of file Nyquist.cpp.

3507{
3508#if HAS_I18N_CONTEXTS
3509 auto string1 = UTF8CTOWX(getstring(xlgastring()));
3510 auto string2 = UTF8CTOWX(getstring(xlgastring()));
3511 auto number = getfixnum(xlgafixnum());
3512 auto context = UTF8CTOWX(getstring(xlgastring()));
3513 xllastarg();
3514 return cvstring(wxGetTranslation( string1, string2, number, "", context )
3515 .mb_str(wxConvUTF8));
3516#else
3517 return ngettext();
3518#endif
3519}
static LVAL ngettext()
Definition: Nyquist.cpp:3491

References ngettext(), and UTF8CTOWX.

Referenced by RegisterFunctions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nyq_make_opaque_string()

void * nyq_make_opaque_string ( int  size,
unsigned char *  src 
)

Definition at line 3521 of file Nyquist.cpp.

3521 {
3522 LVAL dst;
3523 unsigned char * dstp;
3524 dst = new_string((int)(size+2));
3525 dstp = getstring(dst);
3526
3527 /* copy the source to the destination */
3528 while (size-- > 0)
3529 *dstp++ = *src++;
3530 *dstp = '\0';
3531
3532 return (void*)dst;
3533}

References size.

◆ nyq_reformat_aud_do_response()

void * nyq_reformat_aud_do_response ( const wxString &  Str)

Definition at line 3535 of file Nyquist.cpp.

3535 {
3536 LVAL dst;
3537 LVAL message;
3538 LVAL success;
3539 wxString Left = Str.BeforeLast('\n').BeforeLast('\n').ToAscii();
3540 wxString Right = Str.BeforeLast('\n').AfterLast('\n').ToAscii();
3541 message = cvstring(Left);
3542 success = Right.EndsWith("OK") ? s_true : nullptr;
3543 dst = cons(message, success);
3544 return (void *)dst;
3545}

Referenced by ExecForLisp().

Here is the caller graph for this function:

◆ RegisterFunctions()

static void RegisterFunctions ( )
static

Definition at line 3573 of file Nyquist.cpp.

3574{
3575 // Add functions to XLisp. Do this only once,
3576 // before the first call to nyx_init.
3577 static bool firstTime = true;
3578 if (firstTime) {
3579 firstTime = false;
3580
3581 // All function names must be UP-CASED
3582 static const FUNDEF functions[] = {
3583 { "_", SUBR, gettext },
3584 { "_C", SUBR, gettextc },
3585 { "NGETTEXT", SUBR, ngettext },
3586 { "NGETTEXTC", SUBR, ngettextc },
3587 { "AUD-DO", SUBR, xlc_aud_do },
3588 };
3589
3590 xlbindfunctions( functions, WXSIZEOF( functions ) );
3591 }
3592}
static LVAL gettextc()
Definition: Nyquist.cpp:3478
LVAL xlc_aud_do(void)
Definition: Nyquist.cpp:3552
static LVAL ngettextc()
Definition: Nyquist.cpp:3506

References gettext(), gettextc(), ngettext(), ngettextc(), and xlc_aud_do().

Referenced by NyquistEffect::Process().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xlc_aud_do()

LVAL xlc_aud_do ( void  )

Definition at line 3552 of file Nyquist.cpp.

3553{
3554// Based on string-trim...
3555 unsigned char *leftp;
3556 LVAL src,dst;
3557
3558 /* get the string */
3559 src = xlgastring();
3560 xllastarg();
3561
3562 /* setup the string pointer */
3563 leftp = getstring(src);
3564
3565 // Go call my real function here...
3566 dst = (LVAL)ExecForLisp( (char *)leftp );
3567
3568 //dst = cons(dst, (LVAL)1);
3569 /* return the new string */
3570 return (dst);
3571}
void * ExecForLisp(char *pIn)

References ExecForLisp().

Referenced by RegisterFunctions().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ ID_Text

ID_Text = 12000

◆ ID_Time

ID_Time = 14000

◆ KEY_Command

const wxChar* KEY_Command = wxT("Command")
static

◆ KEY_Parameters

const wxChar* KEY_Parameters = wxT("Parameters")
static

◆ LispScripts

const FileNames::FileType LispScripts = { XO("Lisp scripts"), { wxT("lsp") }, true }
static

Definition at line 3075 of file Nyquist.cpp.

◆ NyquistScripts

const FileNames::FileType NyquistScripts = { XO("Nyquist scripts"), { wxT("ny") }, true }
static

Definition at line 3073 of file Nyquist.cpp.

◆ wxEVT_COMMAND_TEXT_UPDATED

NyquistEffect::OnText wxEVT_COMMAND_TEXT_UPDATED

Definition at line 134 of file Nyquist.cpp.

Referenced by LadspaEffect::Validator::PopulateUI(), and NumericTextCtrl::Updated().