Snack v2.0b2 manual
Last updated
-
snack::audio
-
snack::filter
-
snack::mixer
-
snack::sound
-
spectrogram canvas item
-
spectrum section canvas item
-
waveform canvas item
-
-
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
Returns a list of supported sample encoding formats for the currently
selected device.
snack::audio rates
Returns a list of supported sample rates for the currently selected
device.
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 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.
snack::audio pause
Toggles between pause/play for all playback on the audio device.
snack::audio play
Resumes paused playback on the audio device.
snack::audio play_gain ?value?
Returns the current play gain value if invoked without a parameter.
If a an integer value is given play gain is set to the given value. Valid
values are in the range 0-100.
snack::audio outputDevices
Returns a list of available audio output devices.
snack::audio record_gain ?value?
Returns the current record gain value if invoked without a parameter.
If a an integer value is given record gain is set to the given value. Valid
values are in the range 0-100.
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
Stops all playback on the audio device.
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
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.
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 should be specified with values row by row. One
column per channel is needed. If mono or stereo output is used, only one
respective two rows need to be specified.
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.
compose filter1 filter2 ...
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
second and so on.
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
Returns a list with the names of the channels for the specified line.
snack::mixer devices
Returns a list of available mixer devices.
snack::mixer input ?jack? ?varName?
Gets/sets the current input jack. Optionally link a boolean Tcl variable.
snack::mixer inputs
Returns a list of available input ports.
snack::mixer lines
Returns a list with the names of the lines of the mixer device.
snack::mixer output ?jack? ?varName?
Gets/sets the current output jack. Optionally link a boolean Tcl variable.
snack::mixer outputs
Returns a list of available output ports.
snack::mixer update
Updates all linked variables to reflect the status of the mixer device.
snack::mixer volume line ?varName? ?varName?
Return the current volume setting for mixer. Optionally link
a Tcl variable to the value. If two variable names are specified they are
used for the left and right channels respectively.
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?
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 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
value -preemphasis factor
soundName flush
soundName filter filterName
soundName info
soundName insert sound position ?-start start?
?-end end?
soundName max ?-start start? ?-end end?
?-channel value?
soundName min ?-start start? ?-end end?
?-channel value?
soundName length ?n? ?-units u?
soundName pause
soundName pitch ?-start start? ?-end end?
?-maxpitch val? ?-minpitch val? ?-progress callback?
soundName play ?-start start? ?-end end? ?-output
jack? ?-blocking boolean? -command ?callback? ?-device outputDevice? ?-rate
rate? ?-channels channels?
soundName read filename ?-rate
f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess??-start
start? ?-end end? ?-guessproperties boolean?
soundName record ?-input jack? ?-append boolean?
?-device inputDevice?
soundName reverse ?-start start? ?-end end?
soundName sample n ?value? ...
soundName stop
soundName write filename ?-start
start? ?-end end? ?-fileformat fileformat? ?-progress procedure?
-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?
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.
However, the Snack canvas item types, e.g. waveform, can not be linked
to sounds of these types. A value of 1 or larger must be specified for
the -channels option (Mono, or Stereo are also valid).
-fileformat
works as for the read command. Possible values for sample encoding
format are Lin16, Lin8offset, Lin8, Lin24,
Lin32,
Float,
Alaw,
or
Mulaw.
-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 raw files by analyzing
the contents of the files. 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.
SOUND COMMAND
When a sound object is created, Snack also creates a new command whose
name is the same as the sound. This command may be used to invoke various
operations on the sound. The following commands are possible for sounds
objects:
soundName append variable ?-rate
f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder endianess? ?-start
start? ?-end end? ?-fileformat fmt? ?-guessproperties boolean?
Appends binary string data to the end of soundName. The same
options apply as for the read command. This command applies to in-memory
sounds only.
soundName cget option
The cget command retrieves the value of an option for a sound. Option
can be any of the following: -load, -file, -channel, -rate, -channels,
-encoding, -skiphead, -byteorder, -guessproperties, -precision,
and -buffersize.
soundName concatenate sound
Concatenates the sample data from sound to the end of soundName.
The sounds must be of the same type, i.e. have the same sample rate, sample
encoding format, and number of channels). This command applies to in-memory
sounds only.
soundName configure option value ...
The configure command sets options for a sound. Options can be any
of the following: -load, -file, -channel, -rate, -channels, -encoding,
-skiphead, -byteorder, -guessproperties, -precision, and -buffersize.
See the sound command for information on how to use
the options.
soundName convert option value ...
The convert command is used to convert a sound to a different sample
encoding, sample rate, or number of channels. Options can be any of the
following: -rate, -channels, -encoding, and -progress.
A value of 1 or larger must be specified for the -channels option
(Mono, or Stereo are also valid). Only conversions from many
channels to one or the reverse are possible. Values for sample encoding
format are Lin16, Lin8offset, Lin8, Lin24,
Lin32,
Float,
Alaw,
or
Mulaw. The current sample rate conversion algorithm is simple
and may not be suitable for all needs. See the read
command for a description on how to use the -progress option. This
command applies to in-memory sounds only.
soundName copy sound ?-start start?
?-end end?
Copies sample data from sound. Optionally a range of samples
to copy can be specified. Any active play operation is stopped before the
command is executed if the format of the new sound differs from the current.
This command applies to in-memory sounds only.
soundName crop start end
Crops the sound to the given range [start end], i.e. all samples
before and after these limits will be removed. This command applies to
in-memory sounds only.
soundName cut start end
Cuts the given range [start end] from the sound, i.e. all samples
between and including these limits will be removed. This command applies
to in-memory sounds only.
soundName data ?variable? ?option value?
...
Loads sound data from, or writes to, a binary string.
When loading data the same options apply as for the read command:
soundName data variable ?-rate f? ?-channels n? ?-encoding
fmt? ?-skiphead n? ?-byteorder endianess? ?-start start? ?-end end??-fileformat
fmt? ?-guessproperties boolean?
The command returns the file format detected. Any active play operation
is stopped before data is loaded.
When writing data to a binary string -start and -end options
can be given (as for the write command). Also, a -fileformat
option can be given if the file format should be different from the original.
In the case of RAW file format the endianess can be specified as either
bigEndian or littleEndian.
soundName data ?-start start? ?-end end? ?-fileformat
fileformat? -byteorder ?endianess?
This command applies to in-memory sounds only.
soundName destroy
Removes the sound command and frees the storage associated with it.
soundName dBPowerSpectrum ?-start sample?
?-end sample? ?-fftlength length? ?-windowlength length? ?-windowtype
type? ?-skip samples? ?-channel value? ?-preemphasisfactor
factor?
Computes the log FFT power spectrum of the sound at -start and
returns a list of dB values. See the
section item
for the rest of the options. Optionally an ending point can be given, using
-end.
In this case the result is the average of consecutive FFT's in the specified
range. Their default spacing is taken from -fftlength but this can
be changed using the -skip option which tells how many points to
move the FFT window each step.
soundName filter filterName
Applies the filter filterName to the sound.
This command applies to in-memory sounds only.
soundName flush
Removes all audio data from the sound. This command applies to in-memory
sounds only.
soundName info
Returns a list with information about the sound. The entries are {length
rate max min encoding channels fileFormat headerSize}
soundName insert sound position ?-start start?
?-end end?
Inserts sound at position. Optionally a range of samples to copy can
be specified. This command applies to in-memory sounds only.
soundName length ?n? ?-units u?
Gets or sets the length of the sound in number of samples (default),
or seconds, by setting u to either SAMPLES or SECONDS. If the new
length is larger than the current the sound is padded with additional silence.
soundName max ?-start start? ?-end end?
?-channel value?
Returns the largest positive sample value of the sound. A range of
samples and a channel to be examined can be specified. The default is to
check all channels and return the maximum value.
soundName min ?-start start? ?-end end?
?-channel value?
Returns the largest negative sample value of the sound. A range of
samples and a channel to be examined can be specified. The default is to
check all channels and return the minimum value.
soundName pause
Pause current play/record operation. Next pause invocation resumes
play/record. If there is a number of instances playing of a sound object
all of them are paused using pause.
soundName pitch ?-start start? ?-endend?
?-maxpitch val? ?-minpitch val? ?-progress callback?
Returns a list of pitch values computed using the AMDF method. The
values are spaced 10ms. A range of samples can be given using -start
and -end. If a frequency range of valid pitch values is known this
can be specified using the options -maxpitch and -minpitch.
See the read command for a description on how to use
the -progress option.
soundName play ?option value? ...
Plays a sound. All options are ignored if play is used to resume
a paused play operation. If a play command is issued while another
one is in progress, the latter one is queued up and starts to play as soon
as possible. The lag before this new sound is audible can be controlled
using the snack::audio latency command. The sound
command for in-memory sounds has the following form:
soundName play ?-start start? ?-end end? ?-output jack??-blocking
boolean? ?-command callback? ?-device outputDevice? ?-filter filter? ?-rate?
?-channels?
A range of samples to play can be specified using the -start
and -end options. The -output option is used to specify any
of the possible output ports returned by the audio outputs
command. The -blocking option is used to specify whether playback
should be asynchronous or not, i.e. if it is to be played in the background
or if the play command should return only after the sound has been
played. Asynchronous playback from tclsh is only possible if the event
loop is running, using for example vwait. The -command option
specifies a command to be executed when the end of the sound is reached.
The -device option selects which audio output device to use. The
-filter
option is used to specify a filter which is to be
applied during output. The audio device can be opened with different properties
from those of the sound object using -rate and -channels,
useful if exact control is needed. The option -starttime is used
to schedule the start of playback (in ms) relative to a previous play operation.
soundName read filename ?-fileformat
fmt? ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder
endianess? ?-start start? ?-end end? ?-guessproperties boolean?
?-progress procedure?
Reads new sound data from a file. Current supported file formats are
WAV, MP3, AU, SND, AIFF, SD, SMP, CSL, and RAW binary. The command returns
the file format detected. It is possible to force a file to be read as
RAW using "-fileformat
RAW". In this case properties of the sound
data can be specified by hand. -rate and -channels are used
to set the sampling rate and the number of channels (Mono/Stereo).
The -encoding option is used to specify sample encoding format.
Currently, the formats Lin16,
Lin8offset, Lin8, Alaw,
and Mulaw are supported.
-skiphead is used to skip an unknown
header of size n bytes, and -byteorder is used to specify
endianess. 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 raw files by analyzing the contents of the
files. Byte order is almost always detected correctly. It is possible to
add a progress callback procedure which is to be called at regular intervalls
using the option
-progress. This procedure gets two arguments, first
the string "Read sound" and then a double value specifying the fraction
of the command that currently has been completed. If the callback
returns with an error code (return -code error) the read operation is cancelled.
The convenience routine snack::progressCallback opens up a message box
with an appropriate message if used as procedure to this option. Any active
play operation is stopped before the command is executed, if the format
of the new sound data differs from the current. This command applies to
in-memory sounds only.
soundName record ?option value? ...
Starts recording data from the audio device into the sound object.
For in-memory sound objects the command has the following form:
soundName record ?-input jack? ?-append boolean? ?-device
inputDevice?
The -input option specifies one of the available input ports returned
by the audio inputs command. -append specifies
that new audio data should be appended at the end of the existing sound
instead of replacing it. The -device option selects which audio
input device to use.
File and channel based sounds have the options:
soundName record ?-input jack? ?-fileformat fmt? ?-device
inputDevice?
The -fileformat option can be used to specify the file format
to be used when writing data to a channel. In this case there is no file
name to infer the format from.
soundName reverse ?-start start? ?-end end?
Reverses a sound. Optionally a range of samples can be specified.
This command applies to in-memory sounds only.
soundName sample n ?value? ...
Gets or sets sample number n. When setting samples one value
should be specified for each channel. You can use a ? character to specify
that you don't want to change a certain value, i. e. "snd sample 10000
? 999", would set the right channel of sample number 10000 of sound snd
to the value of 999 without influencing the left channel. Samples can be
read for all sound types but only be set for in-memory sounds.
soundName stop
Stops current play or record operation. If there is a queue of sounds
to play, each of them can stop playback using stop. If a callback
was registered using the -command option to play it is not
executed.
soundName write filename ?-start
start? ?-end end? ?-fileformat fileformat? ?-byteorder endianess?
?-progress procedure?
Writes sound data to a file. A range of samples to save can be specified
using the -start and -end options. The file format is guessed
from the filename extension. Currently, the supported formats are WAV,
AU, SND, AIFF, SMP, CSL, and RAW. The -fileformat option overrides
the guess from file name extension. This command applies to in-memory sounds
only. If you specify RAW file format the sound will be saved to file without
a header using the natural byte order of the machine. This can be overridden
using the option -byteorder. See the read command
for a description on how to use the -progress option.
NAME
spectrogram - Spectrogram canvas item
SYNOPSIS
pathName create spectrogram x y ?options value option
value ...?
OPTIONS
-anchor anchorPos
-brightness value
-channel value
-colormap colorlist
-contrast value
-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 a spectrogram of a sound on a canvas. The options -anchor,
and -tags work as for ordinary 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), -winlength specifies
the size of the hamming window, which should be equal to or less than the
number of FFT points. -preemphasisfactor is used to specify the
amount of preemphasis applied to the signal prior to the FFT. -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. 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. -topfrequency is
the frequency value at the top of the spectrogram. -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. Currently spectrograms have a width limit of 32767 pixels.
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
-channel value
-end sample
-fftlength length
-fill value
-frame boolean
-height size
-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 an FFT log power spectrum section of a sound on a canvas.
The options -anchor, -fill, -stipple, and -tags
work as for ordinary 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), -winlength
specifies the size of the hamming window, which should be equal to or less
than the number of FFT points. The option -windowtype is used to
set windowing function, one of Hamming, Hanning, Bartlett, Blackman, or
Rectangle. -preemphasisfactor is used to specify the amount of preemphasis
applied to the signal prior to the FFT. -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.
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 value
-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 on a canvas. The options -anchor,
-fill, -stipple, and -tags work as for ordinary 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 which also gives the width.
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 maximal shown value for the sound amplitude. -zerolevel
specifies whether the zero level will be displayed and -frame whether
a frame will be drawn. 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 values. Using large
values may lead to incorrect envelope shapes. The option -shapefile
is used to specify a file for storing/retrieving precomputed waveform shape
information. If the file doesn't exist it is created. 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.
See also code examples in the widget demonstration.
The command package require snack gives you access to all commands
described above.
There is also a package called sound which gives you the sound::audio,
sound::filter, sound::mixer, and sound::sound commands which
are equivalent to their snack counterparts. This is useful on some systems
if you want to use the tclsh interpreter.
Snack home