Ceres Help

Ceres Help



If you have any comments on Ceres, send a mail to

oyvindha@notam.uio.no (Øyvind Hammer).


Introduction

Ceres is a simple program for displaying sonograms and for sound effects in the frequency domain.

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).


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).

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.

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).

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.

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.

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.

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.

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.

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:

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.

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.

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.


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".

Select "Restart" to remove all paint and start anew.


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.

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.


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.

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.


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.

The name Ceres was therefore chosen in allusion to the Roman goddess of grain. So now you know!


FTP

The latest version of Ceres is available by anonymous FTP from ftp://notam.uio.no/pub/sgi/ceres.tar.gz

top of document