RENDERING TO FILE
When To Render To File
Csound can also render audio straight to a sound file stored on your hard drive instead of as live audio sent to the audio hardware. This gives you the possibility to hear the results of very complex processes which your computer can't produce in realtime.
Csound can render to formats like wav, aiff or ogg (and other less popular ones), but not mp3 due to its patent and licencing problems.
Rendering To File
Save the following code as Render.csd:
<CsoundSynthesizer> <CsOptions> -o Render.wav </CsOptions> <CsInstruments> ;Example by Alex Hofmann instr 1 aSin oscils 0dbfs/4, 440, 0 out aSin endin </CsInstruments> <CsScore> i 1 0 1 e </CsScore> </CsoundSynthesizer>
Open the Terminal / Prompt / Console and type:
Now, because you changed the -o flag in the <CsOptions> from "-o dac" to "-o filename", the audio output is no longer written in realtime to your audio device, but instead to a file. The file will be rendered to the default directory (usually the user home directory). This file can be opened and played in any audio player or editor, e.g. Audacity. (By default, csound is a non-realtime program. So if no command line options are given, it will always render the csd to a file called test.wav, and you will hear nothing in realtime.)
The -o flag can also be used to write the output file to a certain directory. Something like this for Windows ...
<CsOptions> -o c:/music/samples/Render.wav </CsOptions>
... and this for Linux or Mac OSX:
<CsOptions> -o /Users/JSB/organ/tatata.wav </CsOptions>
The internal rendering of audio data in Csound is done with 32-bit floating point numbers (or even with 64-bit numbers for the "double" version). Depending on your needs, you should decide the precision of your rendered output file:
- If you want to render 32-bit floats, use the option flag -f.
- If you want to render 24-bit, use the flag -3.
- If you want to render 16-bit, use the flag -s (or nothing, because this is also the default in Csound).
For making sure that the header of your soundfile will be written correctly, you should use the -W flag for a WAV file, or the -A flag for a AIFF file. So these options will render the file "Wow.wav" as WAV file with 24-bit accuracy:
<CsOptions> -o Wow.wav -W -3 </CsOptions>
Realtime And Render-To-File At The Same Time
Sometimes you may want to simultaneously have realtime output and file rendering to disk, like recording your live performance. This can be achieved by using the fout opcode. You just have to specify your output file name. File type and format are given by a number, for instance 18 specifies "wav 24 bit" (see the manual page for more information). The following example creates a random frequency and panning movement of a sine wave, and writes it to the file "live_record.wav" (in the same directory as your .csd file):
<CsoundSynthesizer> <CsOptions> -odac </CsOptions> <CsInstruments> ;Example by Joachim Heintz sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 seed 0 ;each time different seed for random giSine ftgen 0, 0, 2^10, 10, 1 ;a sine wave instr 1 kFreq randomi 400, 800, 1 ;random frequency aSig poscil .2, kFreq, giSine ;sine with this frequency kPan randomi 0, 1, 1 ;random panning aL, aR pan2 aSig, kPan ;stereo output signal outs aL, aR ;live output fout "live_record.wav", 18, aL, aR ;write to soundfile endin </CsInstruments> <CsScore> i 1 0 10 e </CsScore> </CsoundSynthesizer>
All the options which are described in this chapter can be handled very easily in QuteCsound:
- Rendering to file is simply done by clicking the "Render" button, or choosing "Control->Render to File" in the Menu.
- To set file-destination and file-type, you can make your own settings in "QuteCsound Configuration" under the tab "Run -> File (offline render)". The default is a 16-Bit .wav-file.
- To record a live performance, just click the "Record" button. You will find a file with the same name as your .csd file, and a number appended for each record task, in the same folder as your .csd file.