|
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
Returns a list of supported sample encoding formats for the current
selected device.
snack::audio rates
Returns a list of supported sample rates for the current 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 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
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::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
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? -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?
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 current 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. See the sound command for
more information on these.
soundName changed flag
This command is used to inform Snack that the sound object has been
modified. Normally Snack tracks changes to sound objects automatically,
but in a few cases this must be performed explicitly. For example, setting
of samples using the sample command is not tracked for preformance reasons.
Here a changed command might be necessary. flag can be either
New
or More. New is used for any type of change while
More
only applies to the case where more samples has been appended.
soundName concatenate sound
Concatenates the sample data from sound to the end of soundName.
The sound to be added must be of the same type as the base sound, i.e. have the same sample rate, sample
encoding format, and number of channels). Note that even an initially empty sound has these properties defined. This command applies to in-memory
sounds only.
soundName configure option value ...
The configure command is used to set options for a sound. Options can
be any of the following: -load, -file, -channel, -rate, -channels, -encoding,
-skiphead, -byteorder, -guessproperties, -precision, -debug and -buffersize.
See the sound command for more information on these.
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 channel? ?-preemphasisfactor
factor? ?-analysistype type? ?-lpcorder n?
Computes the log FFT power spectrum of the sound at -start and
returns a list of dB values. Optionally an end 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 specifies how many points
to move the FFT window forward at each step. See the section item for the rest of the options.
soundName filter filterName ?-start sample?
?-end sample? ?-continuedrain boolean? ?-progress callback?
Applies the filter filterName to the sound.
Optionally, a range to apply the filter on can be specified. The -continuedrain
option
specifies whether the filter should be allowed to drain out past the end
point. See the read command for a description on how
to use the -progress option. 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 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?
Estimates speech formant trajectories. Dynamic programming is used to optimize trajectory estimates by imposing frequency continuity constraints. The formant frequencies are selected from candidates proposed by solving for the roots of the linear predictor polynomial computed periodically. The local costs of all possible mappings of the complex roots to formant frequencies are computed at each frame based on the frequencies and bandwidths of the component formants for each mapping. The cost of connecting each of these mappings with each of the mappings in the previous frame is then minimized using a modified Viterbi algorithm. The command returns a list with one element per frame, each containg a list with formant and bandwidth values, {F1 F2 ... B1 B2 ...}. The first row corresponds to a start time of half the window length, see the -windowlength option. The option -numformants controls how many formants to calculate (default 4, maximum 7). The -framelength option specifies the intervals between the values (default 0.01). The option -windowtype is used to select windowing function, (valid values are Cos^4 (default), Hamming, Hanning, or Rectangle). -windowlength specifies the size of the window in seconds (default 0.049). -preemphasisfactor is used to specify the amount of preemphasis applied to the signal prior to windowing (default 0.7). A range of samples can be given using -start and -end. -lpctype is either 0 (autocorrelation) or 1 (stabilized covariance). The order of the LPC analysis specified using -lpcorder (default 12). The option -ds_freq specifies the sampling rate of the data to be used in the formant frequency analysis (default 10000). -nom_f1_freq specifies the nominal value of the first formant frequency. This value is used to adjust the nominal values of all other formants and of the ranges over which the formants are permitted to exist. The default value of 500Hz assumes that the vocal tract length is 17 cm and that the speed of sound is 34000 cm/sec. Nominal F1 values scale directly with sound velocity and inversely with vocal-tract length. See the read command for a description on how to use the -progress option.
soundName info
Returns a list with information about the sound. The entries are {length
rate "maximum sample" "minimum sample" "sample encoding" "number of channels"
"file format" "header size in bytes"}
soundName insert sound position ?-start start?
?-end end?
Inserts sound at position. Optionally a range of samples to insert
can be specified. This command applies to in-memory sounds only.
soundName length ?n? ?-unit 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 channel?
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 channel?
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 mix sound ?-start start?
?-end end? ?-mixscale factor? ?-prescale factor? ?-progress callback?
Copies sample data from sound. Optionally a range of samples,
where the mix operation will be applied, can be specified. The -mixscaling option controls how much to scale soundName before mixing. The option -prescaling controls how much to scale the original sound before mixing.
This command applies to in-memory sounds only.
soundName pause
Pause current play/record operation. Next pause invocation resumes
play/record. If several play operations for one sound object are in progress all of them are paused using pause.
soundName pitch ?-method m? ?-start start?
?-end end? ?-framelength t? ?-windowlength length? ?-maxpitch val?
?-minpitch val? ?-progress callback?
Returns a list of pitch values computed using either the
normalized cross correlation function and dynamic programming or the
AMDF method. This is selected using the -method option, by specifying either ESPS or AMDF. For ESPS the output list will contain 4 fields for each frame, pitch, probability of voicing, local root mean squared measurements, and the peak normalized cross-correlation value that was found to determine the output pitch value. The values are spaced according to the -framelength option (default 0.01). The first row corresponds to either 0.0 (for AMDF), or to half the window length (for ESPS), see the -windowlength option. 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 (default 400) and -minpitch (default 60). -windowlength specifies the size of the window in seconds (default 0.0075).
See the read command for a description on how to use
the -progress option.
soundName play ?-start start? ?-end end?
?-output jack??-blocking boolean? ?-command callback? ?-device outputDevice?
?-filter filter? ?-devicerate f? ?-devicechannels n?
Plays a sound. A range of samples to be played 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 is only possible if the event loop is running, e.g., if the script uses the
wish interpreter with a graphical user interface. Otherwise
the event loop needs to be started 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
-devicerate and -devicechannels,
which might be useful in some rare cases. The option
-starttime is used to schedule the start of playback
(in ms) relative to a previous play operation. 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 new sound will start
to play as soon as possible given the internal buffering.
The lag before the sound is audible can be controlled
using the snack::audio latency command.
soundName power ?-start sample? ?-end
sample? ?-framelength length? ?-windowlength length? ?-windowtype type? ?-preemphasisfactor factor? ?-channel channel? ?-progress callback?
Returns a list of windowed log power values. The -framelength option specifies the intervals between the values. The option -windowtype is used to select windowing function, (valid values are Hamming, Hanning, Bartlett, Blackman, or Rectangle). -windowlength specifies the size
of the window in points. -preemphasisfactor is used to specify the amount of preemphasis applied to the signal prior to windowing. A range of samples can be given using
-start and -end. See the read command for a description on how to use the -progress option and the section item for the -channel option.
soundName read filename ?-fileformat
fmt? ?-rate f? ?-channels n? ?-encoding fmt? ?-skiphead n? ?-byteorder
endianess? ?-start start? ?-end end? ?-guessproperties boolean?
?-progress callback?
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 the properties of the
sound data should 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,
Lin24,
Lin32,
Float,
Alaw, and
Mulaw are
supported.
-skiphead is used to skip an unknown header of size n
bytes, and -byteorder is used to specify endianess (bigEndian/littleEndian).
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 file. Byte order
is almost always detected correctly. It is possible to add a progress callback
procedure which is to be called at regular intervals using the
-progress
option. This procedure is called with 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 argument 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.
Note that recording is only possible if the event loop is
running, e.g., if the script uses the wish interpreter with a
graphical user interface. Otherwise the event loop needs to be
started using for example vwait. Just using after n between a record/stop command pair is
not enough. Use something like after n {set flag 1} ;
vwait flag in order to make sure the event loop is kept active
soundName reverse ?-start start? ?-end end?
?-progress callback?
Reverses a sound. Optionally a range of samples to be reversed
can be specified. See the read command for a description
on how to use the -progress option. 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. A ? character can be used to specify
that a certain value should not be affected, 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 can 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. Any callbacks
registered using the -command option of the play command
will not be executed.
soundName write filename ?-start
start? ?-end end? ?-fileformat fileformat? ?-byteorder endianess?
?-progress callback?
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 inferred
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. 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 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
The sound package gives you the snack::audio, snack::filter, snack::mixer, and snack::sound commands. Basicly the same functions as the snack package except for graphics. This is useful on some systems if you want to use the tclsh interpreter.
snackogg
The snackogg package adds support for the Ogg/Vorbis compressed sound file format. Ogg format files and streams are detected automatically. Encoding is supported. Simply use the extension .ogg when writing files or use the option -fileformat ogg. When creating Ogg files the additional options -nominalbitrate, -maxbitrate, -minbitrate, and -comment apply.
snacksphere
The snacksphere package adds support for reading the NIST/Sphere sound file formats. Sphere files are detected automatically.
Snack home
|