ACX Check problems in v2.4.2 (Win10)

Analyze> ACX Check (using Nyquist file ACX-Check.ny) started running erratically this week, approx. 9/1/21 after running OK since the new Nyquist file was installed at Audacity forum contributors’ suggestion in January 2021. it works OK on some tracks in some projects but yields only errors on others, including projects and tracks where it worked OK until this week. An example of error results is shown below.

Even when ACX Check yields plausible numerical results on a track, clicking OK in the ACX Check results box now brings up a Debug Output box, with no content. The Debug Output box never appeared before.

What do you make of this problem and how do you suggest fixing it?

Sample ACX Check Error Diagnostics:

ACX Check results box showed only: “Nyquist returned the value 1”.
Then clicking OK brought up a Debug Output box with the following:


[Then clicking OK yields the following]

error: invalid dotted pair
1> error: unbound variable - UDITION
if continued: try evaluating symbol again
2> " 'NAME)\n(putprop '*TRACK* "
2> error: unbound variable - WAVE
if continued: try evaluating symbol again
3> " 'TYPE)\n(putprop '*TRACK* "
3> error: unbound variable - WAVEFORM
if continued: try evaluating symbol again
4> " 'VIEW)\n(putprop '*TRACK* 1 'CHANNELS)\n(putprop '*TRACK* T 'SPECTRAL-EDIT-ENABLED)\n(putprop '*TRACK* (float 0.0) 'START-TIME)\n(putprop '*TRACK* (float 51.318435) 'END-TIME)\n(putprop '*TRACK* (float 1.0) 'GAIN)\n(putprop '*TRACK* (float 0.0) 'PAN)\n(putprop '*TRACK* (float 44100.0) 'RATE)\n(putprop '*TRACK* 24 'FORMAT)\n(putprop '*TRACK* (list (list (float 0.0) (float 51.318435)) ) 'CLIPS)\n(putprop '*SELECTION* (float 0.691831)  'PEAK)\n(putprop '*SELECTION* (float 0.691831) 'PEAK-LEVEL)\n(putprop '*SELECTION* (float 0.073661)  'RMS)\n(setf *tracenable* T)\n\n\n\n\n\n\n\n\n\n\n\n(defun getfloor ()\n  ;; Calculate RMS where rate=10 Hz, window-size=0.4 seconds.\n  ;; Return the lowest 0.4 to 0.5 s in the selection.\n  (let ((floor 999)\n        (window-size (round (* 0.4 *sound-srate*)))\n        samples)\n    (setf *track* (s-rms *track* 10 window-size))\n    ;; Calculate new length in samples without retaining samples in RAM.\n    (setf samples (truncate (* len (/ (snd-srate *track*) *sound-srate*))))\n    (do ((val (snd-fetch *track*) (snd-fetch *track*))\n         (count samples (1- count)))\n        ((< count 4) floor) ;stop at last full window.\n      (setf floor (min floor val)))))\n\n\n(defun s-rms (sig &optional (rate 100.0) window-size)\n  ;;; Like RMS function but also supports stereo sounds\n  ;;; Stereo RMS is the root mean of all (samples ^ 2) [both channels]\n  (when (soundp sig)\n    (if window-size\n        (return-from s-rms (rms sig rate window-size))\n        (return-from s-rms (rms sig rate))))\n  (let (left-ms right-ms rslt step-size)\n    (setf step-size (round (/ (snd-srate (aref sig 0)) rate)))\n    (unless window-size\n      (setf window-size step-size))\n    (setf (aref sig 0) (mult (aref sig 0)(aref sig 0)))\n    (setf (aref sig 1) (mult (aref sig 1)(aref sig 1)))\n    (setf left-ms (snd-avg (aref sig 0) window-size step-size OP-AVERAGE))\n    (setf right-ms (snd-avg (aref sig 1) window-size step-size OP-AVERAGE))\n    (s-sqrt (mult 0.5 (sum left-ms right-ms)))))\n\n\n(defun track-rms ()\n  ;;; Teturn the RMS of *track*.\n  ;;; Stereo RMS is the root mean of all (samples ^ 2) [both channels]\n  (let ((rms (get '*selection* 'rms)))\n    (if (arrayp rms)\n        (let ((left-mean-sq (* (aref rms 0)(aref rms 0)))\n              (right-mean-sq (* (aref rms 1)(aref rms 1))))\n          (sqrt (/ (+ left-mean-sq right-mean-sq) 2.0)))\n    rms)))\n\n\n(defun check-peak (peak)\n  ;;; Return Pass, fail or warning.\n  ;;; Peak too low is unlikely, but indicate the problem.\n  (if (> peak -2.99)\n      "
4> error: unbound variable - FAIL
if continued: try evaluating symbol again
5> error: unbound function - TOO
if continued: try evaluating symbol again
6> "\n      (if (< peak -6)\n          "
6> error: unbound variable - WARNING
if continued: try evaluating symbol again
7> error: unbound function - TOO
if continued: try evaluating symbol again
8> "\n          "
8> error: unbound variable - PASS
if continued: try evaluating symbol again
9> ")))\n\n\n(defun check-rms (rms)\n  ;;; Return Pass or Fail.\n  (if (> rms -17.99)\n      "
9> error: unbound variable - FAIL
if continued: try evaluating symbol again
10> error: unbound function - TOO
if continued: try evaluating symbol again
11> "\n      (if (< rms -23)\n          "
11> error: unbound variable - FAIL
if continued: try evaluating symbol again
12> error: unbound function - TOO
if continued: try evaluating symbol again
13> "\n          "
13> error: unbound variable - PASS
if continued: try evaluating symbol again
14> ")))\n\n\n(defun check-floor (floor)\n  ;;; Return Pass, Fail or warning.\n  ;;; Room tone is expected - warn if extremely low.\n  (if (> floor -59.99)\n      "
14> error: unbound variable - FAIL
if continued: try evaluating symbol again
15> error: unbound function - TOO
if continued: try evaluating symbol again
16> "\n      (if (< floor -90)\n          "
16> error: unbound variable - WARNING
if continued: try evaluating symbol again
17> error: unbound function - TOO
if continued: try evaluating symbol again
18> "\n          "
18> error: unbound variable - PASS
if continued: try evaluating symbol again
19> ")))\n\n\n(defun check-rate ()\n  ;; Return warning or empty string.\n  ;;; ACX require 44100 sample rate.\n  (if (/= (round *sound-srate*) 44100)\n      "
19> error: unbound variable - |nnWARNING:|
if continued: try evaluating symbol again
20> error: unbound variable - ACX
if continued: try evaluating symbol again
21> error: unbound variable - REQUIRE
if continued: try evaluating symbol again
22> 44100
22> error: unbound variable - HZ
if continued: try evaluating symbol again
23> error: unbound variable - SAMPLE
if continued: try evaluating symbol again
24> error: unbound variable - RATE.
if continued: try evaluating symbol again
25> "\n      "
25> "))\n\n\n(defun check-length ()\n  ;;; Return warning or empty string.\n  ;;; ACX require running time no longer than 120 minutes.\n  (let* ((start (get '*track* 'start-time))\n         (end (get '*track* 'end-time))\n         (dur (- end start)))\n    (if (> dur (* 60 120))\n        "
25> error: unbound variable - |nnWARNING:|
if continued: try evaluating symbol again
26> error: unbound variable - ACX
if continued: try evaluating symbol again
27> error: unbound variable - REQUIRE
if continued: try evaluating symbol again
28> error: unbound variable - RUNNING
if continued: try evaluating symbol again
29> error: unbound variable - TIME
if continued: try evaluating symbol again
30> error: unbound variable - NO
if continued: try evaluating symbol again
31> error: unbound variable - LONGER
if continued: try evaluating symbol again
32> error: unbound variable - THAN
if continued: try evaluating symbol again
33> 120
33> error: unbound variable - MINUTES
if continued: try evaluating symbol again
34> "\n        "
34> ")))\n\n\n(defun selection-too-long ()\n  ;; Return true if selection is more than "
34> NIL
34> error: misplaced right paren
35> error: unbound function - SELECTION-TOO-LONG
if continued: try evaluating symbol again
36> 35> 34> 33> 32> 31> 30> 29> 28> 27> 26> 25> 24> 23> 22> 21> 20> 19> 18> 17> 16> 15> 14> 13> 12> 11> 10> 9> 8> 7> 6> 5> 4> 3> 2> 1>

It’s never a good sign when a complaint begins: “My computer suddenly…”

Have you ever done a clean Windows shutdown? Shift+Shutdown > Wait until it gets done > Start. Don’t let it automatically restart applications. That can take some time longer than a regular Shutdown or Restart. It doesn’t try to be “convenient” or fast. Just thorough.

Run that virus tool that takes all night, not the little one that runs in the background.

There were two different ACX Checks. The Legacy one didn’t like long performances. The current one doesn’t care.

https://wiki.audacityteam.org/wiki/Nyquist_Analyze_Plug-ins#ACX_Check

That doesn’t account for the “Suddenly—and it used to work” part.

Something happened to your machine.

Koz

There’s some less likely, but possible.

Are you running out of hard drive? Audacity takes up a lot of room when it’s working. For one example, any time it has to set UNDO, it makes a copy of the whole show. Not just the tiny action or change you made.

Windows has Drive Optimization.
https://answers.microsoft.com/en-us/windows/forum/all/how-long-should-it-take-to-optimize-my-hard-drive/916b60ff-9e5b-4c12-b817-2495906a8b88

Did you start using cloud drives or storage? Audacity doesn’t like that very much. It really likes local drives for active production. You can use cloud or network drives for backups and storage, just don’t let Audacity see what you’re doing.

Koz

Koz: Disc capacity shouldn’t be an issue. My computer has two internal drives: a 250GB SSD (C:) used for the system (Windows and apps), and 1TB spinner (D:) used for data files. I store all Audacity projects on the D: drive. The C drive shows 147 GB free of 214 total, and the D drive shows 775 GB free of 931 total.

I did recently start backing up files to a local external 4TB hard drive (F:), but use only Audacity project and data files residing on the internal D: drive. (Note: I submitted a separate problem report about problems using or restoring projects backed up to the external F: drive with Windows’ File History app.)