Bill's granular-based time stretching used in Leviathan is one of the first
and the most elegant solutions to changing the time scale of sampled sounds
in the time domain without changing the pitch. And Leviathan is still one
of the most beautiful pieces using that technique nearly 40 years later! I
used Bill's code (thank you Bill!!) in my own piece Il Nome right around
the time Bill composed Leviathan and inspired by his code I made a version
of the technique as a Csound unit generator a few years later, over-used it
for a decade, and then in SuperCollider!

On Thu, Feb 20, 2025 at 5:42 PM James Hearon <[email protected]> wrote:

> re: Leviathan listening.
>
> Nice piece which is made more enjoyable by an understanding of the
> technique used to create it (wave sequencing).
>
> I was intrigued by this technique, which seemed to have a basis in the
> Korg Wavestation.
>
> But the description I found online read something like:
> "Single-cycle waveforms in succession with cross fades etc. Place the
> cycle in a table and use an array of tables for the oscillator. Morph
> between different single-cycle waveforms (tables) while playing.Use
> multiple oscillators. Can use looping (forward and back), of all steps as
> well as individual cycles, and modulation (forward and back) as well."
>
> I was giving this a primitive try in Snd and not sure I was on the right
> track.  I found make-wave-train (instead of oscillator playing tables) was
> a bit more accurate than pure table-lookup for some reason, and therefore
> just wrote the waveforms directly to vectors.  I couldn't understand the
> need for a single-cycle waveform, but maybe that's a Korg thing.
>
> Be interested to know if there was a much better approach I probably
> missed.
>
> (definstrument (mysequence start-time duration frequency size amp (amp-env
> '(0 0 2 .5 3 -.25 5 0)) sampling-rate )
> (let* ((beg (floor (* start-time sampling-rate)))
>  (end (+ beg (floor (* duration sampling-rate))))
>  (fsize size)
>          (dur (/ fsize sampling-rate))
>          (myenv (make-env amp-env :duration dur :scaler 1.0))
>          (myvec (make-float-vector fsize)) ;envel vector for waveform
>          (fadeinout (make-env '(0 0 1 .25 3 1.0 5 0):duration duration
> :scaler 1.0)) ;crossfade
>          )
> (do ((k 0 (+ k 1)))
> ((>= k fsize))
> (set! (myvec k) (myenv k)) ;place env values in float-vector
> )
>    (let ((gen (make-wave-train
>             :frequency frequency
>             :initial-phase 0.0
>             :wave myvec
>             :size fsize
>             :type mus-interp-none
>             )))
>     (do ((i beg (+ i 1)))
>         ((= i end))
>       (outa i (* amp (* (env fadeinout) (wave-train gen)))))
>       )))
>
> (with-sound (:play #f :srate 48000 :channels 1
>                      :header-type  mus-riff
>                      :statistics #t)
> (mysequence 0 2 440.0 128 0.5 '(0 0 2 .5 3 -.5 5 0) 48000)
> (mysequence 1 2 440.0 128 0.5 '(0 0 1 1 2 -1 3 1 4 -1 5 0) 48000)
> )
>
> ...by the way, there's a nice line in Moby Dick where Gregory Peck refers
> to the white whale as a leviathan.
> _______________________________________________
> Cmdist mailing list
> [email protected]
>
> https://urldefense.com/v3/__https://cm-mail.stanford.edu/mailman/listinfo/cmdist__;!!K-Hz7m0Vt54!g_qLaVgMQw2iewlxM9hjHFX3CinQ3sIpJaTcVRqyqv0nMIZ-iP351v52mSVROGC4x-iMJZleSLsqbaeIZu5SM7E$
>
_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist

Reply via email to