# Snd Quick Overview

related documentation: | snd.html | extsnd.html | grfsnd.html | sndclm.html | sndlib.html | sndscm.html | libxm.html | index.html

Colors

> Other color-related stuff:
> X/Motif color resources: Snd Resources
> Color names: rgb.scm, rgb.rb
> colors in the file dialogs: install-searcher-with-colors in snd-motif.scm
> color-orientation-dialog: color-orientation-dialog
> colored samples: display-colored-samples and others in draw.scm
> colored edits: display-previous-edits in draw.scm
> colored marks: mark-sync-color in snd-motif.scm
> colors in rxvt: red-text et al in examp.scm
> flashing colors: flash-selected-data in examp.scm
> openGL: snd-gl.scm, Snd and OpenGL
> fancy widget backgrounds: new-backgrounds.scm in the tutorial
> color hook: color-hook
> Snd graphics contexts: snd-gcs

Conversions

> array->file
> channel->vct
> color->list
> db->linear
> degrees->radians
> edit-list->function
> file->array
> file->frame
> file->sample
> file->sound-data
> file->vct
> frame->file
> frame->list

> frame->sample
> frame->sound
> frame->sound-data
> frame->vct
> gl-graph->ps
> graph->ps
> hz->radians
> linear->db
> list->vct
> mix->vct
> mono->stereo
> partials->polynomial
> polar->rectangular

> radians->degrees
> radians->hz
> rectangular->polar
> region->frame
> region->sound-data
> region->vct
> samples->seconds
> seconds->samples
> sound->frame
> sound->sound-data
> sound-data->file
> sound-data->frame
> sound-data->sound

> sound-data->vct
> strero->mono
> transform->vct
> vct->file
> vct->frame
> vct->list
> vct->sound-data
> vct->string
> vct->vector
> vector->vct

Copying

> copy file: in Ruby: File.copy or File.syscopy
> copy vct: vct-copy, vct->vector, vct->frame
> copy mix: mix->vct
> copy sampler: copy-sampler
> copy (clone) current sound edit state: clone-sound-as
> copy channel data: channel->vct, or save-sound-as
> copy selection data: selection->vct or save-selection
> copy region data: region->vct, region->vct, save-region, or region->sound-data
> copy transform data: transform->vct
> copy sound-data: sound-data->vct
> copy a frame: frame-copy, frame->vct
> copy vector: vector->vct

Cursor

> Tracking cursor: with-tracking-cursor
> Change cursor shape or size: cursor-style, cursor-size
> Cursor moving keys: Moving the Cursor
> Display data about sample under cursor: with-verbose cursor
> play from the current cursor position with a tracking cursor: pfc
> display tracking cursor as a full height vertical line: tracking-cursor-style
> track play once: control-click 'play'. (You can add a mark at the current tracking cursor location during the play with C-m)
> leave the cursor at the final position after tracking play: if-cursor-follows-play-it-stays-where-play-stopped in examp.scm
> tracking cursor accuracy: cursor-location-offset
> tracking cursor updating: cursor-update-interval

Deletions

> delete a file: in scheme delete-file or Ruby's File.delete
> delete a region: forget-region
> delete the currently selected samples: delete-selection
> delete the selection and smooth the splice: delete-selection-and-smooth
> delete a mark or all marks: delete-mark
> delete a colormap: delete-colormap
> delete samples: delete-samples
> remove a file from the sound cache: mus-sound-forget
> remove a menu item: remove-from-menu or remove-main-menu in snd-motif.scm
> delete a mix or all mixes: silence-mixes
> add a 'delete' option to the file selection dialog: add-delete-option
> Scheme delete funcs: remove-if assoc-remove! hash-remove! delete-if! delete! string-delete

Envelopes

> envelope sound: env-channel, env-sound
> other enveloping functions: ramp-channel, xramp-channel, smooth-channel
> The CLM env generator: env, many examples in examp.scm, new-effects.scm, etc
> Various operations on envelopes: env.scm
> The envelope editor: Edit or View and Envelope
> Panning: place-sound in examp.scm
> Envelope over mix: enveloped-mix
> Local envelope editor: enved.scm, xm-enved.scm
> Read sound indexed through envelope: env-sound-interp
> repeating envelope: pulsed-env
> Cosine as envelope: cosine-channel, cosine-channel-via-ptree, bell-curve
> envelope with sinusoidal connections between points: sine-env-channel
> envelope with separate base for each segment: powenv-channel
> envelope with x^2 connections: env-squared-channel
> envelope with x^n connections: env-expt-channel
> envelope with ncos connections: blackman4-env-channel
> Customizing the envelope editor: enved-hook
> peak amp follower: moving-max
> step envelope in pitch: brassy in generators.scm

FFTs

> Snd fft function: fft
> CLM fft function: mus-fft
> CLM spectrum: spectrum
> Snd spectrum: snd-spectrum
> autocorrelation: autocorrelate
> cross correlation: correlate, display-correlation
> FFT window: make-fft-window
> Dolph-Chebyshev window in Scheme: dolph
> Hartley transform in Scheme: dht
> Spectral edit dialog: Envelope Editor
> fft-based filter: fft-edit, fft-env-edit, fft-env-interp, fft-squelch, fft-cancel
> phase-vocoder: phase-vocoder. pvoc
> transposition via fft: down-oct
> phase rotation via fft: zero-phase, rotate-phase
> duration change via autocorrelation: rubber-sound
> smoothing via fft: fft-smoother
> cross-synthesis: cross-synthesis
> voiced->unvoiced effect: voiced->unvoiced
> noise reduction: clean-channel, anoi
> spectral modeling: pins
> power spectral density: green.scm
> polynomial approach to spectral multiplies (convolution): spectral-polynomial
> Superimpose ffts: superimpose-ffts
> Waterfall real-time spectrograph: start-waterfall
> Simple rt spectrum: show-input-fft, show-draggable-input-fft
> More transforms: fractional-fourier-transform, z-transform in dsp.scm
> 3D (single) fft display: complexify
> bark, mel, erb scale display: display-bark-fft
> apply function to spectrum, inverse fft: filter-fft

Filters

> filter a sound: filter-sound, filter-channel, and clm-channel
> filter the selection: filter-selection, filter-selection-and-smooth
> CLM filter generators: filter, one-pole, formant, comb, notch, all-pass, etc
> lowpass filter: make-lowpass in dsp.scm
> highpass filter: make-highpass in dsp.scm
> bandpass filter: make-bandpass in dsp.scm
> bandstop filter: make-bandstop in dsp.scm
> the usual analog filters (Butterworth, Chebyshev, Bessel, Elliptic): analog-filter.scm
> Butterworth filters: make-butter-high-pass, make-butter-low etc in dsp.scm, used in new-effects.scm
> IIR filters of various orders/kinds: dsp.scm
> Hilbert transform: make-hilbert-transform in dsp.scm
> differentiator: make-differentiator in dsp.scm
> block DC: see example above, dc-block in prc95.scm, or stereo-flute in clm-ins.scm
> hum elimination: see eliminate-hum and notch-channel in dsp.scm
> hiss elimination: notch-out-rumble-and-hiss
> smoothing filters: moving-average, weighted-moving-average, exponentially-weighted-moving-average
> notch-filters: notch-channel and notch-selection
> arbitrary spectrum via FIR filter: spectrum->coeffs in dsp.scm
> invert an FIR filter: invert-filter in dsp.scm
> filtered echo sound effect: flecho in examp.scm
> time varying filter: fltit in examp.scm
> draw frequency response: use envelope editor or filter control in control panel
> Moog filter: moog.scm
> Savitzky-Golay filter: savitzky-golay-filter
> Click reduction: remove-clicks, clean-channel
> FIR filter as virtual edit: virtual-filter-channel
> LADSPA-based filter effects: see ladspa.scm
> Max Mathews resonator: firmant, maxf.scm, maxf.rb
> Spectral edit dialog: Envelope Editor
> graphical equalizer filter bank: graphEq
> nonlinear (Volterra) filter: volterra-filter
> Kalman filter: kalman-filter-channel
> see also convolution, physical modeling, reverb, and fft-based filtering

Insertions

> insert some portion of a channel: insert-channel
> insert a silence: pad-channel, insert-silence, pad-sound
> insert a region: insert-region
> insert the selection: insert-selection
> insert a vct of samples: insert-samples, insert-vct
> insert a sound: insert-sound
> append a sound and silence: append-sound
> insert a frame: insert-frame
> insert sound-data: insert-sound-data

Marks

> global find-mark: mark-name->id
> mark history: describe-mark
> synchronize marks by inserting silences: syncup
> squeeze selection between marks: fit-selection-between-marks
> insert silence before marks: pad-marks
> move syncd marks: move-syncd-marks
> play starting from syncd marks: play-syncd-marks
> evaluate function between marks: eval-between-marks
> place marks at selection start and end: snap-marks
> define selection via marks: define-selection-via-marks
> force dragged mark to land on a beat: snap-mark-to-beat
> loop continuously between the two specified marks: loop-between-marks
> split sound into separate files based on mark placement: mark-explode
> mark property lists: mark-property
> save mark properties in saved state file: save-mark-properties
> show mark properties upon click: mark-click-info

Maxamps

> Sound file maxamp: mus-sound-maxamp
> Region maxamp: region-maxamp
> Selection maxamp: selection-maxamp
> Sound data object maxamp: sound-data-maxamp
> Vct maxamp: vct-peak
> To set the y axis bounds to reflect the channel's maxamp: y-bounds
> Mix maxamp: mix-maxamp
> maxamp locations: maxamp-position, region-maxamp-position, selection-maxamp-position

Mixing

> mix sound file: mix or drag-and-drop it where you want it mixed
> mix channel: see mix-channel in extensions.scm
> mix region: mix-region
> mix selection: mix-selection
> mix vct: mix-vct
> mix sound-data: mix-sound-data
> mix a frame: mix-frame
> enveloped mix: see enveloped-mix in extensions.scm
> read mix samples: make-mix-sampler
> mix data maxamp: mix-maxamp
> mix data to vct: mix->vct
> save mix data in file: save-mix
> mix property list: mix-property in mix.scm
> pan mono sound into stereo: see place-sound in examp.scm
> move a mixed sound via dlocsig: mix-move-sound
> the mix dialog: Mix Dialog
> cross-fade in frequency: cross-fade and dissolve-fade in fade.scm
> zipper cross-fade: zipper.scm
> snap mix to beat after drag: snap-mix-to-beat
> delete all mixes: silence-all-mixes
> with-sound (a notelist) expanded into mixes: with-mixed-sound

Play

> play from cursor: C-q and example above
> play from cursor with tracking cursor: pfc above
> play the selection: (play (selection)), C-x p
> play a region: (play region-object), C-x p, play button in Region dialog
> play a mix: (play mix-object), play button in Mix dialog
> play a sequence of mixes: play-mixes
> play from mark: click or drag triangle (control-click for all chans)
> play continuously between two marks: loop-it
> stop playing: C-g, C-t, stop-playing, set playing to #f
> pause or resume playback: space, set pausing
> play repeatedly: play-often
> play repeatedly until C-g: play-until-c-g
> play region repeatedly: play-region-forever
> play a file upon a keystroke: bind-key
> play using an external program: (system "sndplay wood16.wav")
> play a sine-wave or spectrum: play-sine and play-sines
> play arbitrary mixtures of things: make-player and related functions, play-syncd-marks
> send arbitrary data to the DAC: mus-audio-write, start-dac
> play after sending the data through some function: play-sound
> play with applied amplitude envelope: play-with-envs, play-panned
> play an external file: (play "file")

Random numbers

> generators, arbitrary distributions, fractals, 1/f: rand and rand-interp, round-interp
> dithering: dither-channel, dither-sound
> noise-making instrument: noise.scm, noise.rb
> physical modeling of noisy instruments: maraca.scm
> arbitrary distribution via rejection method: any-random
> CL: random, *random-state*, make-random-state*: random number between 0 and arg, arg can't be 0!
> Ruby: kernel_rand (alias for Ruby's rand), srand: random integer between 0 and arg, or float between 0 and 1
> mus-random, mus_random: random float between -arg and arg
> mus-rand-seed (settable)
> bounded brownian noise: green-noise
> brown and pink noise: brown-noise

Regions

> Max length of region list: max-regions
> Whether selection creates a region: selection-creates-region
> To play region repeatedly: play-region-forever
> Start region browser from Scheme: view-regions-dialog
> All about regions: regions
> The region dialog: region browser
> Region rms amp: region-rms
> region-play-list and region-play-sequence in examp.scm
> region->frame
> region->sound-data
> make-region-frame-reader

Resampling

> resample channel: src-channel
> resample all chans: src-sound
> resample selection: src-selection
> resample mix: speed control in Mix dialog (also apply-controls)
> resample via drawn envelope: srate in Envelope editor
> resample via CLM gen: src
> resample with independent time control (ssb-am): ssb-bank in dsp.scm
> resample with independent time control (granulate): expand in control panel, expsrc and expsnd
> resample with independent time control (vocoder): phase-vocoder (this never works)
> another time stretcher (autocorrelation):rubber-sound (this takes forever and rarely works)
> resampling-based sound effects: hello-dentist, fp, flange and chorus in dsp.scm and new-effects.scm
> the digital zipper: zipper
> resample via FFT: down-oct
> resample through env: sound-interp and env-sound-interp
> resample through list: scratch
> resample step-size through a function: step-src
> predict duration of resampled sound: src-duration
> linear src: linear-src-channel in dsp.scm

Reverbs

> freeverb: freeverb.scm, freeverb.rb
> jc-reverb: jcrev.scm
> jl-reverb: clm-ins.scm
> nrev: clm-ins.scm
> control panel reverb: Reverb, control variables
> convolution reverb: conrev
> plate-reverb: ladspa.scm (a LADSPA effect)
> *reverb*: with-sound

Reversing

> reverse channel: reverse-channel, reverse-sound
> reverse selected portion: reverse-selection
> read samples in reverse: use make-sampler with direction -1
> reverse at new sampling rate: use src-channel with a negative ratio
> Reverse in control panel: control panel and speed-control variable
> reverse an envelope: reverse-envelope
> reverse block-wise: reverse-by-blocks and reverse-within-blocks
> reverse via FFT: silly-reverse
> reverse order of channels: reverse-channels
> reverse a list: reverse and reverse!
> reverse a string: in Ruby: reverse
> reverse vct: vct-reverse!
> reverse a frame: frame-reverse

Saving

> save sound: save-sound
> save all sounds: `(for-each save-sound (sounds))`
> save a sound under a different name: save-sound-as
> extract one channel from a sound: extract-channel
> extract a set of channels from a sound: extract-channels
> save a sound in a different format or header: save-sound-as
> backup edits automatically: autosave
> check first for unsaved edits: check-for-unsaved-edits
> save Snd's complete state (unsaved edits and all): save-state, save-dir, save-state-hook, save-state-file
> save the selection: save-selection
> save a region: save-region
> save a mix: save-mix
> save the control panel state: save-controls
> save currently defined envelopes (envelope editor): save-envelopes
> start the file save dialog: save-sound-dialog
> start the selection save dialog: save-selection-dialog
> start the region save dialog: save-region-dialog
> save the current listener text: save-listener
> save keyboard macros: save-macros
> save marks: save-marks
> save just the edit history: save-edit-history
> take some action upon a window manager save-yourself signal: upon-save-yourself
> save the current sound setup for a later reopen: remember-sound-state
> save the current fft peak info: peaks

Searches

> find a mark: find-mark
> find a mix: find-mix
> find a sound: find-sound
> Example find procedures: search-for-click, zero+, next-peak, find-pitch
> find in reverse: find-channel-in-reverse
> Search via continuation: scan-again
> Explicit access to search procedures: search-procedure
> The Find dialog: Find or find-dialog
> find silence: map-silence, scramble-channel in examp.scm
> find any difference between two chans: channels-equal
> see also count-matches and scan-channel
> search a multichannel sound: scan-sound
> find a widget: find-child in snd-motif.scm
> add C-s and C-r to the listener key bindings: add-find-to-listener in snd-motif.scm
> Scheme find: find-if

Selections

> show the current selection: show-selection
> color of selected portion: selection-color
> set whether creating a selection creates a region: selection-creates-region
> fft graph refers to the selection: show-selection-transform
> hook called when selection stops playing: stop-playing-selection-hook
> swap chans in selected portion: swap-selection-channels
> replace portion with selection: replace-with-selection
> select portion via function: make-selection
> evaluate func on each sample of selection: eval-over-selection (map-selection in effect)
> selection members as list of lists of sound indices and channels: selection-members
> rms of selection data: selection-rms
> delete selection and smooth the splice: delete-selection-and-smooth
> select portion between two marks: define-selection-via-marks
> place marks at selection start and end: snap-marks
> squeeze selection between marks: fit-selection-between-marks
> add context-sensitive popup menu specific to selection: add-selection-popup
> delete selection and write it to a file: cut-selection->new
> append selection: append-selection
> write selection to a file: selection->new
> notch filter selection: notch-selection
> undo select-all.: deselect-all
> filter the selection: filter-selection, filter-selection-and-smooth
> turn the selection into a mix: selection->mix

Smoothing

> smooth channel: smooth-channel
> smooth all channels: smooth-sound
> smooth selection: smooth-selection
> delete the selection and smooth the splice: delete-selection-and-smooth
> smoothing as virtual op: smooth-channel-via-ptree in examp.scm
> smoothing via fft: fft-smoother
> smooth via low-pass filter
> smooth over click: remove-clicks in examp.scm

Time Domain Display

> Built-in keyboard commands: Moving the Window
> Specialized keyboard commands: bind-key
> Window size: x-zoom-slider, zoom-one-pixel,
> Window position: x-position-slider, move-one-pixel
> Window left edge: left-sample
> Window right edge: right-sample
> fft window:
> window size: drag x axis, spectrum-end
> window start: spectrum-start
> relation to time domain: before-transform-hook
> selection fft: show-selection-transform
> general info:
> Axis description: axis-info

Undo

> undo edit: undo and undo-channel
> undo all edits: revert-sound
> specialize undo: undo-hook
> protect against undo: edit-hook
> redo edit: redo and redo-channel
> move around in edit list: edit-position and current-edit-position
> About edit lists: Edit lists