Introduction Screenshots Links
Full version CPS2Browser Update
Changes F.A.Q.'s Manual Mailinglist Announce User Patches Feedback
Users F.A.Q
Users F.A.Q

Here you can find answers to questions that people asked using CPS. Note that each object inside CPS has a helptext which explaines all options and most common things that are important to use it. Select the object and press F1 to read this helptext. You can find example-patches and several tutorials in the CPS folder called /examples .

If you struggle with something that doesn't work like it should be, take a look at the Update section.

Press F1
in CPS when no object is selected. This gives you answers to all things that you need to know before you can work properly with CPS.

Welcome to CPS! CPS is a realtime programming environment.

You define your functionalities by placing objects and making wires between them.

To make a new object, click in an empty place with the popup mousebutton or click & wait, and then choose from the menu. To create a new object by typing it's name, doubleclick in a empty place and type the name; you can also type a number there (which becomes a numberField). To make cornered wires, simply drag onto a wire and a new corner is created; doubleclick on a corner to delete it.

For help about a certain object, select that object only and press 'F1'. Use this frequently to learn working with CPS. If an object has any special options, you can see them by doubleclicking on the object.

To drag Display-objects around, first hold down the shift key (= the 'Display' key). To edit options of Display-objects, hold the shiftkey and doubleclick on the object. To turn the audio on, press the spacebar; to stop the audio, press escape. To select more than one object, hold the CTRL key.

The sensitive area for wires of the Display objects is only outside the objects, for normal objects that is both inside as outside objects.

There are no rules that define in which sequence the signals flow; instead each object on itsself defines what is does. If you connect more than one wire from an object to another object, then the signals will go into the left inputs first. If an object outputs signals, they go out at the left outputs first too.

Top

I want to use a delay. Which one should I choose?
If you want to delay control signals (MIDI, buttons which are pressed), use the 'delayEvent' object. If you want to delay audio, and you want to vary the delaytime in realtime (while the audio is running), use the 'delayOK' object. If you want an audio delay with a delaytime which you do not want to change in time, use the 'delay' object.

Top

Can I use the I-CubeX with CPS?
Sure, it works with MIDI, so CPS can work with it. If you do, notice that you can keep the editor open, so that you can tweak the parameters while you are reading the input from the sensors. That's also why there only a few subpatches present for the I-Cubex (in the /Macros/MidiOut/I-CubeX/ path), you can do the rest with the editor.

If you do not seem to receive any MIDI from your I-CubeX (and you did receive MIDI inside the I-CubeX editor which you have closed), then the I-CubeX is sending continuous messages, but CPS wasn't listening for MIDI yet when the first MIDI message was sended (which is the first time that you did something with your sensor, for example you turned around a knob). Without the first midi message, it's not possible to interpret the continuous messages, so no MIDI input is received in CPS. To fix this, send a 'systemReset' message (which you can find in the /Macro's/MidiOut/System Realtime Info/ path of the objects list). Or you can plug and unplug the I-Cubex power cable, your choice. CPS (1.4 and higher) warns you if this problem occurs.

Top

How do I save MIDI data to a MIDI file, or send MIDI to another running program?
To save MIDI data to disk, use the 'midiToDisk' object. To route MIDI to other software in Windows (for example Logic, Cubase or Sonar), you can use for example Hubi's MIDI Loopback Device or MidiMux. To route MIDI to other software inside MacOSX, you do not have to install everything, because software also appears automaticly inside hardware-lists.

Top

How do I record realtime audio into a table and then process that table in realtime?
First record it into an regular .wav or .aiff audio file with audioToDisk. Be sure to have a table which uses this audio file, and the 'tabledit' object which can change arguments on the table argument line. By changing any value on the table argument line, the table re-reads the audio file, so if the table line is 'sample -1 noname.wav', then change the first argument of the table (again) into '-1', and then the sample is reloaded. You can also make a preset of the table and reload the preset. An example of this is included in the examples in the /object examples/Table/ section. You can use this for example to record realtime voice into a table and then process it by for example realtime granular synthesis on stage.

Top

Which are good books about sound design?

This question is impossible to objectively answer. Here are some starting points. Try to read them at your local bookstore before you buy them.

If you really want to start at the basic of computers and sound design, start with The Computer Music Tutorial by Curtis Roads. It gives a decent introduction in several sound design area's and related topics. It might be a bit outdated, but it's still extremely valuable in my humble opinion.

A book with some more recent topics, but far less complete, is Composing Music with Computers by Eduardo Miranda.

There are two more general books which are still very good, starting with Elements of Computer Music by F. Richard Moore. It's really a very old book now, but it introduces you into several topics very well and pretty damn deep too - you should not be afraid of math formula's when you buy this book, although there's a lot readable C-code in there as well (which ou can just type in your compiler and press 'compile').

A similar book to this is Computer Music: Synthesis, Composition, and Performance by Charles Dodge, which is perhaps a bit easier to read and goes as deep as the prior one.

I can also mention The 'Csound-book' by Richard Boulanger, which gives a nice introduction in C-sound as well as several sound design topics. I also bought the book, but I was very very disappointed by the topics and how deep they went, but if you want to learn sound design as well as Csound, just buy this one.

Top

I can't find a place to define the score of the instrument.
That is correct. CPS is only a place to define your instruments (SAOL file), and not to define your score (SASL file). You can however use CPS to generate a nice SASL script with the scoreToDisk file. (In a score file, you define where to put the instruments in time and which parameters the instruments should get in time.) You can not yet load a .saol file.

Top

Can I use CPS to send/receive MidiClock?
Unfortunately not. In CPS, everything is running happily in realtime without a clock, so if you need a receive MidiClock (248) in a decent way, you should use a sequencer that is dedicated to sync to a clock, let the sequencer walk in sync with your other gear, and let the sequencer send things to CPS. Sending MidiClock fromout CPS is possible, but it is not recommended because especially under Windows NT (and variants) the internal buffers seem to be too small to send so much data at once. If you simply do not use the MidiClock, everything works allright.

Note that besides the MidiClock, also 'Active Sensing' (254) is filtered out at the does not appear inside CPS by default, simply because not all devices send Active Sensing, which makes it totally useless because you can't rely on it to tell weither a device is attached or not. And, it fills internal buffers with a lot of useless information as well.

Top

How should I see the difference between the audioflow and the controlflow?
In CPS, you can process data in two ways: with buffers going in and out all objects (audiorate), or with single value's going in and out every object (controlrate). Normally, the audio is going at audiorate (left and right in&outputs), and uncontinuous data like MIDI goes at controlrate (upper and lower in&outputs). You can say that the controlrate is 'event'-driven, because objects only start doing what they must do if you fire an event into the correct input. Sometimes you want to put objects into the tight synchronization of the audio; that is possible with the 'k-rate' object. It outputs one number each time a buffer is processed. All objects that you connect to the k-rate object, know that exactly one buffer is processed when they get a number in their input (normally the most right control input, for example the most right control input of the kline object). This is a simple and straightforward way of putting calculations into the audio scheduling.

It goes even further; you can also process the audio with the controlrate in&outputs. If you do this, then not one sample comes out each buffer (with 'k-rate') but every sample in the buffer comes out (with the 'audioControl' object). With this object you can make something that works with sampleprecision. You must be warned though: it takes a lot of extra processing time to do something on sampleprecision; normally decreasing the buffersize is good enough for most purposes (buffersizes in CPS can be as low as 5 samples).

Note that with MPEG-4 Structured Audio there is also a seperation between audiorate and controlrate, but the audio works with single values and not with buffers. With CPS, you have to use the audioControl and controlAudio objects to let the audio work with single values.

If you are interested in these kind of details, read chapter 1 of the manual.

Top

I want to do non-realtime processing. Is this possible?
Yes. Before version 1.3, CPS only ran in the grid of time when there were hardware audio objects (audioIn or audioOut) in the patch, so then CPS would automaticly switch to non-realtime (which can be faster when processing files). After version 1.3 CPS is always running in the grid of time (if there is time left then it waits for the next audio clock), only in the standAlone modes (C++, Java or Director/Lingo) you can switch to non-realtime processing.

Top

Why does the 'k-rate' object has an audio input?
Because you only want to do something on k-rate when you are also processing audio buffers as well. So, 'k-rate' would not make sense stand-alone. Also, it is a nice way of making your MPEG-4 Structured Audio SAOL file; you actually define where to put the k-rate lines in the final SAOL file (in which audio commands and controlrate/k-rate lines are mixed into one file).

Top

I want a feedback loop in my audio. Is that possible?
Yes, it is possible. You must make the 'float' object and the 'order' object, and work on sampleprecision with the 'audioControl' and 'controlAudio' objects. By reading out the 'float' value first, and then setting it (using 'order' to do these steps in this order), you have your feedback loop, as small as one sample.

Note that with MPEG-4 Structured Audio, strictly speaking, there is also a seperation between audiorate and controlrate, but the audio works with single values and not with buffers. With CPS, you have to use the audioControl and controlAudio objects to let the audio work with single values.

Top

Is the a symbolic wire between the 'fft' and 'ifft' objects?
No, there is not a single wire between the fft and the ifft objects at all. They only write and read in the two tables (one is used for the real numbers, the other for the imaginary numbers). The fft and ifft objects have parameters like how many samples should be used to do the fft, how many samples the window should be shifted after processing, and which table to use as the shifting window. Note that there are none (read: absolutely zero) hidden wires inside CPS.

Top

How do I disable that fader positions and numberField values are send out on startup?
As default, Display objects output their value at startup time, but you might as well want to turn this off, for example if you are not using a Display object to change a value, but inside a calculation. Hold the shift key and doubleclick on the object; you can check 'Fire at startup' on or off there.

Top

How do I adjust the precision with which numbers are displayed in the numberFields?
The precision is by default 5 digits after the comma. To adjust this, change the drag-range of the numberField and insert a number there with as much digits as you want. You can adjust the drag-range by holding the shift key and doubleclicking on the numberField (this shows options for all other Display objects as well). For example, if you chose '1.00' as the new drag-range, then numbers will be displayed with two digits after the comma.

Top

The interface of CPS does not react anymore c.q. seems to have crashed, now what?
If you for example set a buffersize which is too low (f.e. 30) on a slow machine, it can happen that the interface has crashed. In 99 out of 100 cases, the engine is crashed (which is more sensitive to errors than the interface) and not the graphical interface. So, you should first try to shutdown the engine, and after that the graphical interface. In practically every case, you are still able to save your patch, after shutting down the CPS-engine.

On the Macintosh: go to the ProcessViewer (in the /Applications/ folder), and shutdown 'CPSEngine' to shutdown the engine, and (very unlikely) 'CPS' to shutdown the graphical interface.

On Windows: go to the Task Manager (press CTRL+ALT+DELETE) and end the task 'CPSEngine.exe' to shutdown the engine, and again (very unlikely) 'CPS.exe' to shutdown the graphical interface.

Top

Can I use names of samples in a 'table' without the full path?
Yes you can. CPS does not alter the 'current' systemlocation at all. This means, that if you doubleclick on a .cps file, that the 'current' systemlocation remains in that folder, so if you have a reference to a file without a path (for example "sample -1 trumpet.wav" in a table), the wav file is trying to be found in that folder. However, if you have created the file from scratch by starting up CPS first, then the current systemlocation is still in the CPS Program folder, so then this will not work. In most occasions you will not notice the difference since by default CPS puts the complete path in the table space, if you browse to a file.

Top

Can I use a .mp3 file in a table?
Yes you can, but notice that mp3 files are created by taking a block of a waveform (typically 1024 or 2048 samples) and then encode them into .mp3. If the original waveform does not have a size which is a multiplication of 2048, then zero's are added until it has the blocksize of the encoder. So, when decoding, the result will always have a size that might be just a little bit bigger. This means in practice that you can use .mp3 files in tables except if you want to use them for loops, since the loop lengths are probably not preserved. A solution for this problem is to use the 'size' parameter with the used 'sample ...' generator. This is the first parameter after the word 'sample'. If you used the 'Use Audio File' button to select the .mp3 file, then this parameter is '-1' by default. Load in the .wav file in a table, write down the table size, make an .mp3 of it, load it in the table, and replace the '-1' with the table-size you have written down before.

Top

How do I switch between tables in realtime?
Make a subpatch, in which you place a table and a presetManager. Now fill your table, and for each table, make a preset with the presetManager. Now you can use the normal k-rate input of the presetManager to switch between tables. It's best to put this in a seperate subpatch because presets are created fromout the current (sub)patch in which the presetManager is located. Notice that there's also the 'tabledit' object to change an argument of the table, which also makes that the table reloads itsself.

Top

How can I make sure that i-rate values are sended out correctly?
By using subpatches; i-rates in subpatches are always fired first, so that any arguments giving to the subpatches from outside, are correctly handled (because the subpatch itsself is completely 'i-rated' first).

Top

Features FAQ Users FAQ Developers FAQ Director/Shockwave specific FAQ Macintosh specific FAQ Windows specific FAQ