Snack v2.2 manual

Last updated
snack::audio
snack::debug
snack::filter
snack::mixer
snack::sound
spectrogram canvas item
spectrum section canvas item
waveform canvas item
 
Standard extension packages (sound, snackogg, snacksphere)
 
Snack library

NAME

snack::audio - Get/set properties of audio devices

SYNOPSIS

snack::audio property ?arg? ...

DESCRIPTION

The audio command is used to get properties of audio devices such as supported sample encoding formats and sample rates.

snack::audio encodings

snack::audio rates snack::audio inputDevices
Returns a list of available audio input devices.
snack::audio playLatency
Sets/queries (in ms) how much sound will be queued up at any time to the audio device for playback. A low value makes new sound samples reach the loudspeakers quickly at the risk of gaps in the output stream. An appropriate value should be chosen with regard to processor speed and load. The default value has been choosen to give adequate performance for a mix of tasks and might be to low for simple playback in some cases. If spurious gaps in the playback stream occur, try using a latency of a couple of thousand milliseconds. On UNIX systems, the environment variable PLAYLATENCY can also be used to control this property.
snack::audio pause snack::audio play snack::audio play_gain ?value? snack::audio outputDevices
Returns a list of available audio output devices.
snack::audio record_gain ?value? snack::audio selectOutput device
Selects an audio output device to be used as default.
snack::audio scaling ?factor?
Scale the global output stream by multiplying with factor. Useful to prevent clipping when playing many simultaneous sounds. If no value is specified the current factor is returned, default is 1.0.
snack::audio selectInput device
Selects an audio input device to be used as default.
snack::audio stop

NAME

snack::debug - Control Snack debugging facilities

SYNOPSIS

snack::debug level ?logFile? ?audioDumpFile?

DESCRIPTION

The debug command is used to control the debugging facilities of Snack. The level flag is an integer (1-5) specifying the detail level of the generated debug log. Level 1 just prints entry/exit points of sound commands during execution. An optional second filename argument can be given to specify a file where the log will be written. An optional third filename can be given to specify a file where a raw dump of all audio being played through the audio device is to be generated. The sound file will be created in RAW (headerless) format. Note that debugging has to be turned on for each individual sound object of interest. Reports on bugs/problems with Snack should typically include a minimal script that shows the problem, any associated sound files, and a debug log in order to facilitate a quick solution.


NAME

snack::filter - Create and manipulate filters

SYNOPSIS

snack::filter type ?arg? ...

filterName option ?arg arg ...?

DESCRIPTION

The filter command is used to create filter objects. These can interact with sound objects either using the sound filter command or during playback. Note that since a filter object may contain state information about a sound stream it should only be used for one play operation at a time.

FILTER COMMAND

When a filter object is created, Snack returns the name of a newly created object command. This command may be used to invoke various operations on the filter.

filterCmd configure ?arg ...?

Configures the filter command, see the filter types for their respective options.
filterCmd destroy
Removes the filter command and frees the storage associated with it. If the filter is currently used for playback an unfiltered stream will be output as soon as the internal buffer has been played.

FILTERS TYPES

Current filter types.

compose filter filter ...

Creates a new filter which is a linear combination of two or more other filters. The output of the first is fed into the input of the next and so on.
echo inGain outGain delay decay ?delay decay ...?
Creates an echo effect. inGain is a multiplicative factor applied on the input stream. outGain is applied on the output. Both factors should be between 0.0 and 1.0.  For each echo a delay/decay pair should be specified. The delay is specified in milliseconds and decay is a factor relative to inGain.
formant frequency bandwidth
A formant filter with given frequency and bandwidth.
generator frequency ?amplitude? ?shape? ?type? ?ntot?
A signal generator with given frequency and amplitude. shape is a value between 0.0 and 1.0 used to influence the shape of the signal. type can be any of rectangle, triangle, sine, noise, or sampled. In the case of sampled the generator will repeatedly get data from the sound it is applied on. ntot specifies how many samples to generate. The default, -1, will generate forever.
iir ?-denominator list? ?-dither value? ?-impulse list? ?-noise value? ?-numerator list?
Creates an IIR or FIR filter. For FIR filters the coefficients are given as a list using the -impulse option. For IIR filters the coefficients are given as lists using the options -numerator and -denominator. The option -dither specifies the amount of triangular dithering to add to the output. The option -noise specifies the amount of additive gaussian noise to add to the output.
map val ?val val val ...?
Applies a linear transformation on each sample frame. For one channel sounds this is simply a multiplication. For multi-channel sounds, a transformation matrix can be specified with values row by row. One column per channel is needed. If mono output is used, only one row needs to be specified. If stereo output is used, only two rows needs to be specified. If only one value is specified and the filter is used for multi-channel data, each channel is multiplied with the given value.
reverb outGain time delay ?delay ...?
A reverb effect. outGain is a value between 0.0 and 1.0. time and delay are given in milliseconds.

BUGS

        This command is under development.


NAME

snack::mixer - Get/set properties of mixer devices
 

SYNOPSIS

snack::mixer property ?arg? ...

DESCRIPTION

The mixer command is used to get and set properties of mixer devices such as current input/output jack, supported ports, mixer lines, and gain.

snack::mixer channels line

snack::mixer devices
Returns a list of available mixer devices.
snack::mixer input ?jack? ?varName? snack::mixer inputs snack::mixer lines snack::mixer output ?jack? ?varName? snack::mixer outputs snack::mixer update snack::mixer volume line ?varName? ?varName? snack::mixer select ?device?
Selects a mixer device to be used as default.


NAME
        snack::sound - Create and manipulate sounds
SYNOPSIS
        snack::sound ?name? ?options?
DESCRIPTION
CREATING SOUNDS
        snack::sound ?name? ?-load filename?  ?-file filename?  ?-channel channelname? ?-rate f? ?-channels n? ?-encoding fmt? ?-fileformat fmt? ?-skiphead n? ?-byteorder endianess? ?-guessproperties boolean?  ?-buffersize n? ?-precision prec? -changecommand procedure? ?-debug level?
SOUND COMMAND
soundName append variable ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess? ?-start start? ?-end end? ?-guessproperties boolean?
soundName cget option
soundName changed flag
soundName concatenate sound
soundName configure option value ...
soundName convert option value
soundName copy sound ?-start start? ?-end end?
soundName cut sound start end
soundName crop start end
soundName data variable ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess? ?-start start? ?-end end? ?-guessproperties boolean?
soundName data ?-start start? ?-end end? ?-fileformat fileformat? ?-byteorder endianess?
soundName destroy
soundName dBPowerSpectrum ?-start sample? ?-end sample? ?-skip samples? ?-fftlength length? ?-windowlength length? ?-channel channel? ?-preemphasisfactor factor? ?-windowtype type? ?-analysistype type? ?-lpcorder n?
soundName filter filterName ?-start sample? ?-end sample? ?-continedrain boolean? ?-progress callback?
soundName flush
soundName formant ?-start sample? ?-end sample? ?-framelength t? ?-numformants n? ?-windowlength length? ?-preemphasisfactor factor? ?-windowtype type? ?-lpctype? ?-lpcorder n? ?-ds_freq? ?-nom_f1_freq? ?-progress callback?
soundName info
soundName insert sound position ?-start start? ?-end end?
soundName length ?n? ?-unit u?
soundName max ?-start start? ?-end end? ?-channel channel?
soundName min ?-start start? ?-end end? ?-channel channel?
soundName mix sound ?-start start? ?-end end? ?-mixscale factor? ?-prescale factor? ?-progress callback?
soundName pause
soundName pitch ?-method m? ?-start start? ?-end end? ?-framelength t? ?-windowlength length? ?-maxpitch val? ?-minpitch val? ?-progress callback?
soundName play ?-start start? ?-end end? ?-output jack? ?-blocking boolean? -command ?callback? ?-device outputDevice? ?-devicerate rate? ?-devicechannels channels?
soundName power ?-start sample? ?-end sample? ?-framelength length? ?-windowlength length? ?-windowtype type? ?-preemphasisfactor factor? ?-channel channel? ?-progress callback?
soundName read filename ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess??-start start? ?-end end? ?-guessproperties boolean? ?-progress callback?
soundName record ?-input jack? ?-append boolean? ?-device inputDevice?
soundName reverse ?-start start? ?-end end? ?-progress callback?
soundName sample n ?value? ...
soundName stop
soundName write filename ?-start start? ?-end end? ?-fileformat fileformat? ?-progress callback? -byteorder ?endianess?


NAME

snack::sound - Create and manipulate sounds

SYNOPSIS

snack::sound soundName

soundName option ?arg arg ...?

DESCRIPTION

The snack::sound command is used to create sound objects. Sound objects can interact with files, variables, canvas items and the audio hardware.

CREATING SOUNDS

The sound command is used to create sound objects. It can take several different forms, depending on the option argument. The legal forms are:

snack::sound ?soundName? ?-load filename?  ?-file filename?  ?-channel channelname? ?-rate f? ?-channels n? ?-encoding fmt? ?-fileformat fmt? ?-skiphead n? ?-byteorder endianess? ?-guessproperties boolean?  ?-buffersize n? ?-precision prec? ?-changecommand procedure? ?-debug level?

soundName specifies the name of the sound. If it is omitted then Snack picks a name of the form soundn, where n is an integer. The -load option specifies that the file filename should be read into memory after creating the sound. The -file option specifies an on-disk file which should be linked to the sound. The -channel option specifies that audio data resides on a channel which should be linked to the sound. In these cases the audio data is not loaded into memory, which is useful when playing large files or when using streaming audio. A value of 1 or larger must be specified for the -channels option (Mono, or Stereo are also valid). If not specified a default value of 1 is assumed. Possible values for sample encoding format, given using the -encoding option, are Lin16, Lin8offset, Lin8, Lin24, Lin32, Float, Alaw, or Mulaw. Default encoding is Lin16. The option -rate can take any positive value but usually only sample rates supported by the audio hardware are useful. Note that the default value is 16000, a common value for speech related applications, but less frequent for other uses, such as music. -fileformat works as for the read command. -skiphead is used to skip an unknown file header of size n bytes. Byte order can be specified as littleEndian or bigEndian using the -byteorder option. The option -guessproperties is used to specify that Snack should try to infer properties, such as byte order, sample encoding format, and sample rate for a raw file by analyzing the contents of the file. Byte order is almost always detected correctly. For channel based sounds the -buffersize option can be used to specify the size of the internal buffer in samples. The option -precision is used to specify if sound data is to be handled using simple or double precision internally. -changecommand is used to specify a procedure which is to be called every time a property of the sound is changed. This is the Tcl level counterpart of Snack_AddCallback(). The procedure should expect one argument, one of the strings New, More, or Destroy. This feature is particularly useful when embedding sound objects in other higher level constructs. The flag -debug is used to control debug output for operations on the sound object. The option takes a level argument, an integer in the range 1-5, specifying the detail of the trace information.

SOUND COMMAND
When a sound object is created, Snack also creates a new object command whose name is the same as the sound. This command is used to invoke various operations (or sub-commands) on the sound. This is the current set:

soundName append variable ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess? ?-start start? ?-end end? ?-fileformat fmt? ?-guessproperties boolean?

soundName cget option soundName changed flag soundName concatenate sound soundName configure option value ... soundName convert option value ... soundName copy sound ?-start start? ?-end end? soundName crop start end soundName cut start end soundName data ?variable? ?option value? ... soundName destroy soundName dBPowerSpectrum ?-start sample? ?-end sample? ?-fftlength length? ?-windowlength length? ?-windowtype type? ?-skip samples? ?-channel channel? ?-preemphasisfactor factor? ?-analysistype type? ?-lpcorder n? soundName filter filterName ?-start sample? ?-end sample? ?-continuedrain boolean? ?-progress callback? soundName flush soundName formant ?-start sample? ?-end sample? ?-framelength t? ?-numformants n? ?-windowlength length? ?-preemphasisfactor factor? ?-windowtype type? ?-lpctype? ?-lpcorder n? ?-ds_freq? ?-nom_f1_freq? ?-progress callback? soundName info soundName insert sound position ?-start start? ?-end end? soundName length ?n? ?-unit u? soundName max ?-start start? ?-end end? ?-channel channel? soundName min ?-start start? ?-end end? ?-channel channel? soundName mix sound ?-start start? ?-end end? ?-mixscale factor? ?-prescale factor? ?-progress callback? soundName pause soundName pitch ?-method m? ?-start start? ?-end end? ?-framelength t? ?-windowlength length? ?-maxpitch val? ?-minpitch val? ?-progress callback? soundName play ?-start start? ?-end end? ?-output jack??-blocking boolean? ?-command callback? ?-device outputDevice? ?-filter filter? ?-devicerate f? ?-devicechannels n? soundName power ?-start sample? ?-end sample? ?-framelength length? ?-windowlength length? ?-windowtype type? ?-preemphasisfactor factor? ?-channel channel? ?-progress callback? soundName read filename ?-fileformat fmt? ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess? ?-start start? ?-end end? ?-guessproperties boolean? ?-progress callback? soundName record ?option value? ... soundName reverse ?-start start? ?-end end? ?-progress callback? soundName sample n ?value? ... soundName stop soundName write filename ?-start start? ?-end end? ?-fileformat fileformat? ?-byteorder endianess? ?-progress callback?


NAME

spectrogram - Spectrogram canvas item

SYNOPSIS

pathName create spectrogram x y ?options value option value ...?

OPTIONS

-anchor anchorPos
-brightness value
-channel channel
-colormap colorlist
-contrast value
-debug level
-end sample
-fftlength length
-gridcolor color
-gridfspacing value
-gridtspacing value
-height size
-pixelspersecond value
-preemphasisfactor factor
-sound name
-start sample
-tags tagList
-topfrequency frequency
-width size
-windowtype type
-winlength length

DESCRIPTION

This command draws the spectrogram of a sound. The options -anchor, and -tags work as for other Tk canvas items. -sound specifies which sound object to link to and -height the height of the spectrogram. The option -fftlength specifies the number of FFT points (8, 16, 32, 64, 128, 256, 512, 1024, 2048, or 4096). The default value is 256. The option -windowtype is used to select windowing function, (valid values are Hamming, Hanning, Bartlett, Blackman, or Rectangle). The default window type is Hamming. -winlength specifies the size of the hamming window, which should be equal to or less than the number of FFT points. The default window length is 128. -preemphasisfactor is used to specify the amount of preemphasis applied to the signal prior to the FFT calculation, default 0.97. -start and -end controls which part of the sound to display. -pixelspersecond determines the scaling factor in the x-direction. The -width option specifies the width of the spectrogram. If both -width and -pixelspersecond are specified the spectrogram will be cut at one end depending on if a -start or -end option was also given. Currently, spectrograms have a width limit of 32767 pixels. Use the -channel option to select which channel to show for multichannel sounds. Use left, right, both, all, -1 (all) or a channel number counting from 0 (left). The default is to show all, i.e. to add all channels. -brightness and -contrast takes values beteween -100.0 and 100.0 with the default being 0.0. -topfrequency is the frequency value at the top of the spectrogram, default is the Nyquist frequency. -gridtspacing is the spacing between markers in seconds (default 0 means no grid) and -gridfspacing is the frequency spacing in Hz (default 0 means no grid). -gridcolor specifies the color of the grid. A colormap for the spectrogram is given with the -colormap option. It takes a list of colors as parameter and at least two must be specified. The first color is used for the lowest intensity in the spectrogram. An empty list gives the default 32-level grey scale. The flag -debug is used to control debug output for the item. The option takes a level argument, an integer in the range 1-5, specifying the detail of the trace information.
See also the code examples in the widget demonstration.


NAME

section - Spectrum section canvas item

SYNOPSIS

pathName create section x y ?options value option value ...?

OPTIONS

-anchor anchorPos
-analysistype type
-channel channel
-debug level
-end sample
-fftlength length
-fill color
-frame boolean
-height size
-lpcorder n
-maxvalue value
-minvalue value
-preemphasisfactor factor
-skip points
-sound name
-start sample
-stipple value
-tags tagList
-topfrequency frequency
-width size
-windowtype type
-winlength length

DESCRIPTION

This command draws the FFT log power spectrum section of a sound. The options -anchor, -fill, -stipple, and -tags work as for other Tk canvas line items. -sound specifies which sound object to link to and -height and -width the height/width of the section. The option -fftlength specifies the number of FFT points (8, 16, 32, 64, 128, 256, 512, 1024, 2048, or 4096). The default value is 512. The option -windowtype is used to select windowing function, (valid values are Hamming, Hanning, Bartlett, Blackman, or Rectangle). The default window type is Hamming. -analysistype is either FFT (default) or LPC, for LPC analysis the order is specified using -lpcorder (default 20). -winlength specifies the size of the window, which should be equal to or less than the number of FFT points. The default window length is 128. -preemphasisfactor is used to specify the amount of preemphasis applied to the signal prior to the FFT calculation (default 0.0). -start and -end controls which part of the sound to display. -topfrequency is the frequency value at the right end of the section. -maxvalue and -minvalue specify the range (in dB) which will be shown (default 0.0 to -80.0). Use the -channel option to select which channel to show for multichannel sounds. Use left, right, both, all, -1 (all) or a channel number counting from 0 (left). The default is to show all, i.e. to add all channels. -frame specifies whether a frame will be drawn around the spectrum section. The flag -debug is used to control debug output for the item. The option takes a level argument, an integer in the range 1-5, specifying the detail of the trace information.
See also the code examples in the widget demonstration.


NAME

waveform - Waveform canvas item

SYNOPSIS

pathName create waveform x y ?option value option value ...?

OPTIONS

-anchor anchorPos
-channel channel
-debug level
-end sample
-fill color
-frame boolean
-height size
-limit value
-pixelspersecond value
-progress procedure
-shapefile filename
-sound name
-start sample
-stipple bitmap
-subsample value
-tags tagList
-width size
-zerolevel boolean

DESCRIPTION

This command draws the waveform of a sound. The options -anchor, -fill, -stipple, and -tags work as for other Tk canvas line items. -sound specifies which sound object to link to and -height the height of the waveform. The options -start and -end controls which part of the sound to display. -pixelspersecond determines the scaling factor in the x-direction. The -width option specifies the width of the waveform. If both -width and -pixelspersecond are specified the waveform will be cut at one end depending on if a -start or -end option was also given. Use the -channel option to select which channel to show for multichannel sounds. Use left, right, both, all, -1 (all) or a channel number counting from 0. The default is to show all, i.e. to add all channels. Use -limit to specify the maximum shown value for the sound amplitude. -zerolevel specifies whether the zero level will be displayed (default yes) and -frame whether a frame will be drawn around the waveform (default no). The -subsample option is useful for large sounds to specify how precisely they should be analyzed for shape calculation. The default value 1 uses every sample in the sound to draw the waveform envelope, which can be slow for large sounds. A value of 10 uses every 10th. Care should be used when specifying this because a large value could lead to an incorrect envelope shape. The option -shapefile is used to specify a file for storing/retrieving precomputed waveform shape information. The file specified is created if it does not already exist. If it exists it is accessed instead of the sound data itself, thus speeding up on-screen display. There exists two convenience routines, snack::deleteInvalidShapeFile and snack::makeShapeFileDeleteable, which can be used to enclose a create waveform statement when using the shape file functionality. These will make sure that shape files are handled properly, see the demo cool.tcl, for an example of this. See the read command for a description on how to use the -progress option. The flag -debug is used to control debug output for the item. The option takes a level argument, an integer in the range 1-5, specifying the detail of the trace information.
See also code examples in the widget demonstration.


Standard extension packages

The following packages are included in the Snack distribution or can be downloaded separately.

sound

snackogg

snacksphere



Snack home