If you have any comments on Ceres, send a mail to
Ceres is started simply with the command "ceres". You may give an
FFT size parameter as a command-line parameter (for advanced users!). A sound
file name may be given as a second parameter. An empty
window will appear with a menu bar at the top.
Select "Load & Analyze" in the "File" menu, and select a sound file. Ceres
accepts files in AIFF or AIFC format, any sampling rate, mono or stereo.
The file will then undergo a phase vocoder FFT analysis with N=1024, and the
analysis will be stored in memory. This means that there is a limit on the
size of the sound file, because the analysis data size will be huge. If
the program crashes for sounds shorter than 30 seconds at 44.1 kHz sampling
frequency, your computer has a too small swap space anyway, and your swap space
should be increased. A sonogram is drawn as the analysis progresses.
At any time, you may change the color map of the display in the
"Settings->Display" dialogue.
You may now use the options in the "Transform" menu to change the spectral
data, as described below.
To hear the result, you must resynthesize the sound with the "Synth & Save"
button in the "File" menu, and then play the sound either with the "Play"
option, with the "sfplay" command in your UNIX shell, or by pressing the
'p' key.
In the "Settings->Resynthesis" dialogue, you may control the way the sound is
resynthesized. "Time stretch" does what it says, but the result may
have irritating pulsation in it. To avoid this, and to avoid a "gritty" sound
that may result from some transforms, select "Additive synthesis". This will
select an additive synthesis method instead of inverse FFT.
Note! The Additive synthesis function was out of order for about three
years, but is now working as good or better as ever (version 0.11).
Using the right mouse button, you may select a rectangular area in the
spectrum. Consecutive transforms and exports will then only apply to
this area.
You may select any N ("Number of harmonics"). This value N may be
multiplied continuously by a factor which you select for exponential increase
(A>1) or decrease (A<1). A=0.5 will thus apply an envelope in such a way that N
is halved each second. This is great for "morphing", because you can let one
sound "desintegrate" and another "integrate", and then mix the two together.
You can also control N from the control function by ticking the box.
A composer here wanted more "life in the top", and so you can weight high
frequencies with the "Boost" parameter. Try the value 1.
Blur can also be used for spectral freezing, by setting the blur value
to 1. This is probably only useful when applied inside a limited area (as
marked with the right mouse button).
Finally, the filter may be reset to the original spectrum at a fixed
frequency, to produce a sample-and-hold effect.
The "Probability" field gives the probability (0-1) that a given frequency
component at a given point in time will be moved to the nearest frequency
in the grid.
i1 Starting_time Duration Frequency Amplitude
Note that "Duration" will always have the same value.
Warning! The Csound score file may become ***huge***. It is
strongly recommended to do a Sieve operation first, to reduce the
number of non-zero pixels.
The LPC functions are described below. We don't recommend using the
"Stabilize poles" feature, as this may actually make matters worse
due to a bad root finder that often doesn't converge.
Select "Restart" to remove all paint and start anew.
The control function may also be saved and loaded under the File menu.
The format is a text file with time/value pairs, both normalized to
the range 0-1.
Some possible uses are as follows:
Pitch shift with additive synthesis, keeping formants, is
accomplished by ticking the "Keep formants" box in the Settings->Resynthesis
dialogue, and setting the pitch shift factor in the same dialogue.
You must have run an LPC analysis first. Use a high synthesis threshold
to reduce noise.
Pitch shift with inverse FFT, keeping formants is accomplished
using the following procedure. Load & analyze your sound, both with
FFT and with LPC. Run "Inverse-filter" in the LPC menu to flatten the
spectrum. Run "Pitch shift" in the Transform menu, and finally
"Filter current spectrum" in the LPC menu. Synth & Save.
A similar technique can be used to retain formant positions after
other transforms (spectrum shift, mirror, exponentiate, move to pitch grid).
Cross-synthesis ("talking orchestra") is done as follows. First,
analyze your source sound (the sound that should be filtered, e.g.
an orchestral sound) with both FFT and LPC. Use a relatively low number
of poles, for example 20. Inverse-filter in the LPC menu to flatten the
spectrum. Then, run a new LPC analysis on your filter sound (e.g. human
voice) using a higher number of poles, for example 60.
Finally, "Filter current spectrum" in the LPC menu and increase gain
(Transform menu) if required. Synth & Save.
The name Ceres was therefore chosen in allusion to the Roman goddess
of grain. So now you know!
Introduction
Ceres is a simple program for displaying sonograms and for sound effects in
the frequency domain.
Transforms
Many of the transform parameters can be controlled over time using
a control function. Select "Settings->Display->Show control function" to
display a breakpoint curve which can be edited using the middle mouse
button (press Backspace or Delete to remove a node).
Sieve
Sieve is a useful operation which will only retain the N strongest
frequency components for each analysis window. This makes an interesting sound
in itself for N less than about 20, and it can be used as an effective noise
reduction method for larger N. Also, it is often necessary to reduce the amount
of data with "Sieve" before you export the analysis to a Csound score file (see
below).
Spectrum shift
Spectrum shift will add the specified number of Hz (positive or negative)
to each frequency component. This will upset the harmonic relationship, and
sounds somewhat like ring modulation. The "Multiplication pr. sec" and
"Control function" fields work as for Sieve. Frequency components which
fall below 0 Hz or above Fs/2 will be removed.
Shear
Shear will delay each frequency component according to its frequency,
producing a dispersion effect.
Blur
Blur will low-pass-filter the amplitude and frequency values
along the time axis, blurring the spectral development. It is recommended
to run "Keep peaks only" before blurring. The blur value is used directly in
the filter recursion formula: y=blur*y+(1-blur)*x. Values close to 1 (like
0.99) are most interesting. There is also a "secret" feature, allowing you
to specify negative values (try -0.99) in order to high-pass-filter the
spectral development. This will reduce gain significantly, so boost it up
again using the "Gain" function.
Comb filter
Comb filter keeps only partials with frequencies that are
multiples of the given fundamental frequency, or less than one half FFT channel
away from such a multiple. By pitch-tracking
(Extract->Pitch) and using this as the control function, you should
ideally be able to remove all inharmonic components.
Mirror
Mirror will fold all frequency components around the specified
mirror frequency - those below it will flip above, and vice versa.
Exponentiate
Exponentiate will raise all frequencies to the power which you
specify. This value should be close to 1 to avoid extreme results.
Spread
Spread displaces the frequency components randomly. Will normally
give noisy results. Using the "Amplitude sensitivity" parameter, you may
enforce increased spreding for larger amplitudes.
Pitch shift
Pitch shift will multiply each frequency with the specified factor, so
that 0.5 will drop you one octave, 1.5 will increase the pitch by a fifth, etc.
Again, you may specify an exponential envelope for glissando effects.
A=1.05946, for example, will increase the pitch by one semitone each second.
"Static frequency" is rather fun. This specifies the frequency which will
remain stationary (normally 0 Hz). If you set this to 800 Hz, you may let
all harmonics converge to (A<1) or diverge from (A>1) 800 Hz.
Filter
Filter will remove all frequencies between the two you specify.
Gain
Gain allows you to scale all amplitudes with a factor. Especially
useful when using inside a marked region, to remove or amplify a limited
area.
Null phase
Null phase is an experimental feature which zeroes all phase (and therefore
frequency) information. You may try it, but the result is not sensational.
You will get some kind of deep "robot" sound.
Keep peaks only
Keep peaks only will remove all partials except the peaks. This is
useful to limit the amount of data for export, and may also be used as a
pre-processing step to improve the quality of some transforms.
Average
Average just averages the spectra over time, making one continuous note.
Useful for subsequent LPC analysis etc., to extract the "mean" frequency
characteristic of a person talking, for instance.
Move to pitch grid
Move to pitch grid is a function which lets you move the frequency
components to a fixed set of frequencies (a chord) called a "pitch grid".
Choose "Settings->Display->Show grid" to display the grid. The chord is
selected in "Settings->Pitch grid". You may there select different standard
scales, or you may choose to read the frequencies (in Hz) from a user-defined
text file. Some of the functionality here is stolen from the "Ceres2"
program of Jonathan F. Lee.
Convolve
Convolve is an experimental function which is probably of little
use. You may select different standard convolution operators (3X3 masks) used
in digital image processing.
Export
The Export functions let you send analysis data to text files
for later processing in other programs.
Parmerud Csound scorefile
This specialized export was made for the Swedish composer Aake Parmerud.
The frequency axis is divided into a number of "strings".
As soon as the amplitude in a frequency band corresponding to a
string exceeds the Trigger value, a new Csound note is written
with a duration given by the Resonance value. After a number
of seconds (Hysteresis), the string will again enter a trigger
mode, waiting for the amplitude to exeed the threshold.
Spectral peaks
Writes all spectral peaks as time-amplitude-frequency triples.
Csound scorefile
Sends the complete spectral analysis to a Csound score file. Each
line represents a "pixel" as shown in the sonogram, and is formatted as
follows:
Inventor visualization
Writes an Inventor ASCII file with a 3D model of the spectral landscape.
This can be viewed with the "Ivview" program on SGI computers. Also,
the format is largely compatible with VRML, and can be viewed in a
web browser with the appropriate plug-in.
Single LTAS frame
Writes a single FFT frame taken from a time point in the middle of the
sound. Useful to extract the spectrum following an "Average" spectrum.
(LTAS is short for Long Time Average Spectrum).
Settings
Most of the options here have been described in their proper context under
Introduction and Transforms above.
Analysis
Here you can select the type of window function to use both in analysis
and resynthesis. It is recommended to use the default (Hanning). Because
the Rectangular and Hamming windows do not taper down to zero in the ends,
they may cause clicks for certain transform operations.Also, you may select
the FFT overlap factor.Paint
Select "Settings->Display->Show paint" to turn on the painting modus.
Instead of marking rectangular areas, the right mouse button can now
be used to paint small squares in the spectrum. Selecting "Keep"
or "Remove" in the Paint menu will then keep the selected squares
(discarding all others) or remove them (keeping all others). An
interesting granular effect can be achieved by painting a lot of little
squares at random, and then selecting "Keep".
Extract
Parameters from the sound may be extracted, producing a control function
(to see it, you must turn it on in the Settings->Display dialogue).
The control function may then be used in the transforms, as usual,
so that eg. a pitch contour may be used to control a spectrum shift.
Amplitude
Extracts the time-varying amplitude (envelope).
Pitch
Extracts the time-varying pitch, or rather frequency of the assumed
fundamental. Requires a clean, monophonic sound! The range of the
resulting control function is 1000 Hz.
Centroid
Extracts the time-varying spectral centroid, which correlates with the
"brightness" of the sound.
Graph
The options in this menu allows you to manipulate the control function.
When using these functions, remember that the range of the control function
is 0-1. This is scaled in different ways in different transforms, as
shown in the transform dialogues.
LPC
Ceres now has some simple functions for spectral envelope following,
using linear-predictive coding. For this to work, you must first use
"Load & Analyze LPC" in the File menu. The number of poles (how detailed the
envelope should track the spectrum) is selected in Settings->Analysis.
Often, you want the same sound to be analyzed by FFT and LPC, and you
will then have to run both these operations, choosing the same file twice.
Note that operations involving LPC will often decrease the gain considerably,
and you must then compensate for this by using the "Gain" transform manually.
A final word
I repeat that Ceres is under development. Please be patient with its flaws.
And yes, it's slow, I know.
If you have bug reports, things you want to see added, or even want to take
part in the programming, please mail me.
Why Ceres?
Much of the functionality in this program (in particular the Sieve, Move
to pitch grid and Export functions) regard the FFT as a granular
sound processing method, where individual pixels in the sonogram can
be considered to be discrete grains placed in time and frequency.
FTP
The latest version of Ceres is available by anonymous FTP from
ftp://notam.uio.no/pub/sgi/ceres.tar.gz