Chris Compressor Inexplicably Failing

I download the Car Talk podcast, cut it down, compress the volume range with Chris’s Compressor to be more like the broadcast volume range and export a mono WAV sound file. Or that’s what I used to do. The last two weeks I tried Chris’s Compressor, the cut timeline would flash once and nothing would happen. No compression and as far as I can tell, no change to the show.

I don’t know of any significant changes to the machine. I’ve been doing this for years.

Chris’s settings are default except the first value, Compress Ratio which is changed from 0.5 to 0.77 or 0.78. The program is release 2 or version 1.2.6 depending on how you count.

It fails in Audacity 2.1.0. I saved a project, opened it in Audacity 2.1.2 and that fails. I moved the Project to another machine and those two versions fail as well. I Exported a WAV (Microsoft), opened it in one of the Audacity versions and that succeeded. I don’t remember which version. I ran out of time to mess with it.

See:
http://www.kozco.com/tech/audacity/clips/CarTalkCompressProblem.zip

That’s a ~500MB folder containing the failing AUP, _DATA folder and the eventually successfully compressed and exported show…the goal.

Does the show fail for you? Why? How do I make it stop?

Koz

Missed a step. OS-X 10.9.5.

Koz

Try clicking the “Debug” button instead of the “OK” button. If there’s an error message, post it here.

There’s either a NAN value (not a number) or a division by zero error (which disappears with dithering and export).
Let me see…

Could I have a broken Float-Loop? I think I had that for breakfast the other day.

break: float loop
if continued: return from BREAK
Function: #<Subr-BREAK: #32a3740>
Arguments:
  "float loop"
Function: #<FSubr-WHEN: #32a2738>
Arguments:
  (> COUNT 10000)
  (BREAK "float loop")
Function: #<FSubr-DO: #32a3f68>
Arguments:
  NIL
  ((< (ABS (- DY Y)) 0.1) I)
  (INCF COUNT)
  (WHEN (> COUNT 10000) (BREAK "float loop"))
  (SETF I (+ START (/ (- END START) 2)))
  (SETF DY (- (INTERP (+ I X)) (INTERP I)))
  (IF (> DY Y) (SETF END I) (SETF START I))
Function: #<FSubr-LET: #32a032c>
Arguments:
  ((START (- I 1)) (END (+ I 1)) (DY 0) (COUNT 0))
  (DO NIL ((< (ABS (- DY Y)) 0.1) I) (INCF COUNT) (WHEN (> COUNT 10000) (BREAK "float loop")) (SETF I (+ START (/ (- END START) 2))) (SETF DY (- (INTERP (+ I X)) (INTERP I))) (IF (> DY Y) (SETF END I) (SETF START I)))
Function: #<Closure-BINARY-SEARCH-FLOAT: #499574c>
Arguments:
  5179
  949.863
  1
  NIL
Function: #<FSubr-IF: #32a3f14>
Arguments:
  (OR (= RES 0) (= RES (1- (LENGTH PARA))))
  RES
  (BINARY-SEARCH-FLOAT RES Y X LEFT)
Function: #<FSubr-LET*: #32a260c>
Arguments:
  ((LEFT (< Y 0)) (RES (BINARY-SEARCH-INT Y X LEFT)) (I (IF (OR (= RES 0) (= RES (1- (LENGTH PARA)))) RES (BINARY-SEARCH-FLOAT RES Y X LEFT))) (YOFF (- Y1 (INTERP I))) (I (- I X1)))
  (LAMBDA (X) (+ (INTERP (+ X I)) YOFF))
Function: #<FSubr-LET: #32a032c>
Arguments:
  ((Y (- Y2 Y1)) (X (- X2 X1)))
  (WHEN (> (ABS Y) (AREF PARA (1- (LENGTH PARA)))) (ERROR "y is too big"))
  (WHEN (<= X 0) (ERROR "x is too small"))
  (WHEN (>= X (LENGTH PARA)) (RETURN NIL))
  (LET* ((LEFT (< Y 0)) (RES (BINARY-SEARCH-INT Y X LEFT)) (I (IF (OR (= RES 0) (= RES (1- (LENGTH PARA)))) RES (BINARY-SEARCH-FLOAT RES Y X LEFT))) (YOFF (- Y1 (INTERP I))) (I (- I X1))) (LAMBDA (X) (+ (INTERP (+ X I)) YOFF)))
Function: #<Closure-SOLVE-PARA: #4998b1c>
Arguments:
  0
  -1000
  1
  -50.137
Function: #<FSubr-SETF: #32a0170>
Arguments:
  CUR-PARA
  (SOLVE-PARA I IY J JY)
  CUR-PARA-END
  J
Function: #<FSubr-TAGBODY: #32a29a8>
Arguments:
  AGAIN
  (SETF J (1+ I) JY (SAMP J))
  (SETF CUR-PARA (SOLVE-PARA I IY J JY) CUR-PARA-END J)
  (LOOP (INCF J) (WHEN (NULL (SAMP J)) (PROGN (WHEN (NULL CUR-PARA) (SETF CUR-PARA (SOLVE-PARA I IY J JY))) (RETURN))) (SETF JY (SAMP J)) (LET (IY-CHANGED (PARY -1)) (WHEN (AND FIRST (> (/ (/ (- JY IY) RIGHT-WIDTH) (- J I)) 0.01)) (PROGN (SETF IY-CHANGED T) (SETF IY (- JY (* 0.01 (* RIGHT-WIDTH (- J I))))))) (WHEN CUR-PARA (SETF PARY (FUNCALL CUR-PARA J))) (WHEN (>= PARY 0) (RETURN)) (WHEN (OR (< PARY JY) IY-CHANGED (NULL CUR-PARA)) (PROGN (SETF CUR-PARA (SOLVE-PARA I IY J JY)) (SETF CUR-PARA-END J)))))
  (WHEN FIRST (PROGN (SETF FIRST NIL) (GO AGAIN)))
Function: #<FSubr-LET: #32a032c>
Arguments:
  ((IY (SAMP I)) (FIRST (NULL CUR-PARA)) J JY)
  (TAGBODY AGAIN (SETF J (1+ I) JY (SAMP J)) (SETF CUR-PARA (SOLVE-PARA I IY J JY) CUR-PARA-END J) (LOOP (INCF J) (WHEN (NULL (SAMP J)) (PROGN (WHEN (NULL CUR-PARA) (SETF CUR-PARA (SOLVE-PARA I IY J JY))) (RETURN))) (SETF JY (SAMP J)) (LET (IY-CHANGED (PARY -1)) (WHEN (AND FIRST (> (/ (/ (- JY IY) RIGHT-WIDTH) (- J I)) 0.01)) (PROGN (SETF IY-CHANGED T) (SETF IY (- JY (* 0.01 (* RIGHT-WIDTH (- J I))))))) (WHEN CUR-PARA (SETF PARY (FUNCALL CUR-PARA J))) (WHEN (>= PARY 0) (RETURN)) (WHEN (OR (< PARY JY) IY-CHANGED (NULL CUR-PARA)) (PROGN (SETF CUR-PARA (SOLVE-PARA I IY J JY)) (SETF CUR-PARA-END J))))) (WHEN FIRST (PROGN (SETF FIRST NIL) (GO AGAIN))))
Function: #<FSubr-WHEN: #32a2738>
Arguments:
  (OR (NULL CUR-PARA) (AND (= I CUR-PARA-END) (SAMP (+ I 2))))
  (LET ((IY (SAMP I)) (FIRST (NULL CUR-PARA)) J JY) (TAGBODY AGAIN (SETF J (1+ I) JY (SAMP J)) (SETF CUR-PARA (SOLVE-PARA I IY J JY) CUR-PARA-END J) (LOOP (INCF J) (WHEN (NULL (SAMP J)) (PROGN (WHEN (NULL CUR-PARA) (SETF CUR-PARA (SOLVE-PARA I IY J JY))) (RETURN))) (SETF JY (SAMP J)) (LET (IY-CHANGED (PARY -1)) (WHEN (AND FIRST (> (/ (/ (- JY IY) RIGHT-WIDTH) (- J I)) 0.01)) (PROGN (SETF IY-CHANGED T) (SETF IY (- JY (* 0.01 (* RIGHT-WIDTH (- J I))))))) (WHEN CUR-PARA (SETF PARY (FUNCALL CUR-PARA J))) (WHEN (>= PARY 0) (RETURN)) (WHEN (OR (< PARY JY) IY-CHANGED (NULL CUR-PARA)) (PROGN (SETF CUR-PARA (SOLVE-PARA I IY J JY)) (SETF CUR-PARA-END J))))) (WHEN FIRST (PROGN (SETF FIRST NIL) (GO AGAIN)))))
Function: #<FSubr-LABELS: #32a15ec>
Arguments:
  ((SAMP (I) (GET-BUFFER-SAMPLE INPUT-BUF I)))
  (WHEN (OR (NULL CUR-PARA) (AND (= I CUR-PARA-END) (SAMP (+ I 2)))) (LET ((IY (SAMP I)) (FIRST (NULL CUR-PARA)) J JY) (TAGBODY AGAIN (SETF J (1+ I) JY (SAMP J)) (SETF CUR-PARA (SOLVE-PARA I IY J JY) CUR-PARA-END J) (LOOP (INCF J) (WHEN (NULL (SAMP J)) (PROGN (WHEN (NULL CUR-PARA) (SETF CUR-PARA (SOLVE-PARA I IY J JY))) (RETURN))) (SETF JY (SAMP J)) (LET (IY-CHANGED (PARY -1)) (WHEN (AND FIRST (> (/ (/ (- JY IY) RIGHT-WIDTH) (- J I)) 0.01)) (PROGN (SETF IY-CHANGED T) (SETF IY (- JY (* 0.01 (* RIGHT-WIDTH (- J I))))))) (WHEN CUR-PARA (SETF PARY (FUNCALL CUR-PARA J))) (WHEN (>= PARY 0) (RETURN)) (WHEN (OR (< PARY JY) IY-CHANGED (NULL CUR-PARA)) (PROGN (SETF CUR-PARA (SOLVE-PARA I IY J JY)) (SETF CUR-PARA-END J))))) (WHEN FIRST (PROGN (SETF FIRST NIL) (GO AGAIN))))))
  (WHEN (= 0 (REM I 1000)) (SET-BUFFER-POS INPUT-BUF I))
  (LET* ((V (FUNCALL CUR-PARA I)) (RES (IF (> V FLOOR) V (+ (* (- V FLOOR) -1 NOISE-FACTOR) FLOOR)))) (IF FIRST-SAMP (PROGN (SETF FIRST-SAMP NIL) RES) (PROGN (INCF I) (IF (AND (NULL (SAMP I)) (NULL (SAMP (1- I)))) NIL RES))))
Function: #<Subr-SEND: #32a4790>
Arguments:
  #<Object: #4974288>
  #<Object: #4974288>
1>

As I suspected, there are too many zeros in the beginning (digital silence). Just remove a part of it, it will work afterwards.

Robert

PS.
I like the one with the “Floaty Loops” for breakfast.
Otherwise, the error message is not very helpful–got the same one. However, trust me, the zeros are the cause (are they eatable too?)

Except I put those there. The show has a long preamble and a bunch of introduction stuff I don’t want. So I drag-select some portion immediately in front of the valuable work and silence it with Command-L. Then I trim a part of that fresh silence along with all the trash and that becomes my new start.

Earlier shows didn’t need the Command-L because the production didn’t snug unwanted work right up against the valuable work. The older edits consisted purely of drag and delete.

Is this a formerly unknown rule for Command-L? Thou shalt not put it at the beginning of a show? How do I perform that edit?

Koz

It’s basically a rule for Chris’ compressor–it has difficulties with any start, I think.
you could normalize the beginning to -120 dB or generate noise there or…

A few zeroes are allowed. The float loop goes up to 10000, it seems. The program tries to fit a parabola to the amplitude over a certain window length. This works only if there is at least one non-zero value. Decreasing the hardness might also be an option.

Robert

Why did you pick Normalize for that rather than Amplify?

Koz

“Amplify” is limited to +/- 50 dB. For more than that you have to apply the effect multiple times. Normalize does not have that limitation.

The easiest workaround for this limitation (in Chris’ Compressor) is to avoid including absolute silence (or “white space”) at the start of the selection. If the track has nothing but absolute silence for the first 6 seconds, start the selection from the 6 second mark.

“Amplify” is limited to +/- 50 dB

I can certify it won’t do -60. I also have evidence of it acting oddly. Generate Noise at 0.3 amplitude, Amplify it -40dB and rejoice in a -20dB noise track.

This has not gone well.

Rather than beat this up at great length, I’m going to do all the editing except the front, compress and then cut it off. Same labor, different order.

Koz

Because amplify doesn’t allow changes by more than 50 dB. You have to “amplify” trice to get under -100 dB.

By the way, a nice radio show, very entertaining although I’m not automobilophile.

a nice radio show

It was. They went their several decades of production and then stopped. One of them died. The shows are now “Classic Car Talk” repeats.

I’m not automobilophile.

The cars are almost completely beside the point. I don’t think they accept callers unless they also have marital or other problems.

“I think there’s a raccoon living in the trunk of my car. No, no. He’s fine there, I want to know if I should tell my husband.”

That caller appeared in the “third half” of the show.

And etc.

The history of the show has one of them doing a tiny, local car call-in program and he got in over his head and asked his brother to stop by briefly to help out. It was one of those magic broadcast marriages.

They are characters in several movies.

Koz

It works for me. 0.3 is -10.458 dB.

Amplify by -40 dB. New Peak Amplitude shows -50.4576 dB.

Apply Amplify and reopen it. Amplify shows the amplitude as -50.4576 dB (Amplification of 50 dB giving New Peak Amplitude of -0.4576).


Gale

It works for me.

And that’s the magic. It’s possible it only does that at the beginning of my Car Talk Project. I need to set it up again and get repeatable conditions.

For a while there I had a poisoned magic wand. Everything I tried either failed or did something unexpected and not useful.

Koz