I’ve never used Nyquist but it should be able to ANYTHING you can express mathematically. (Just as long as it can be done in the digital domain. i.e. With quantized data.)
You can skew a square wave with an [u]All-pass filter[/u]. That changes the wave shape without changing the sound… Without changing the frequency domain components.
Assuming that you only need to process a short bit of mono audio, probably the easiest way to do this sort of thing is to copy the sound data into an array, manipulate the array in whatever way you want, then convert the array back into a sound.
If the selection is more than a few hundred thousand samples, this code will probably crash, but it’s a good solution for short selections:
;type process
(setf ln (truncate len)) ; the number of samples as an int
;; Copy the entire selection into an array
(setf my-array (snd-fetch-array *track* ln ln))
;; Convert the array back into a sound
(snd-from-array 0 *sound-srate* my-array)