@hackage csound-expression3.2.3

library to make electronic music

Let's make music with text! We can use Csound to describe our music. Csound has so many fantastic sound generators. It's very efficient. But sometimes Csound is too low level. So many details: integer identifiers for instruments and arrays, should I use control rate or audio rate signals, lack of abstractions, no nested expressions and it has limited set of types. This library embeds Csound in Haskell. We can use powerful Csound's primitives and glue them together with Haskell abstractions. The module Csound.Base exports all types and functions.

Tutorials:

Key principles

  • Keep it simple and compact (as functional as possible).

  • Make it open (No dependency on Score-generation libraries. Score (or list of events) is represented with type class. You can use your favorite Score-generation library if you provide an instance for the CsdSco type class. Currently there is support for temporal-music-notation library (see temporal-csound package).

How to install (for Csound and Haskell users)

To use the library we need:

  • GHC - haskell compiler. This library uses GHC-specific features (www.haskell.org/ghc).

  • cabal-install to install haskell packages (www.haskell.org/cabal).

  • Csound compiler (version 5.13 or higher). You must get it installed on your system. Since we are going to generate the csound code we need to compile it to sound somehow. We can find out how to install the Csound on www.csounds.com. To test whether csound is installed open the command line and type:

csound

It should print a long message with version and available flags and libraries.

If everything is installed to install the library we can open the command line terminal and type:

cabal install csound-expression

Acknowledgements (I'd like to mention those who supported me a lot with their music and ideas):

  • music: entertainment for the braindead, annsannat & alizbar, toe, iamthemorning, atoms for piece / radiohead, loscil, boards of canada, Hozan Yamamoto, Tony Scott and Shinichi Yuize.

  • ideas: Conal Elliott, Oleg Kiselyov, Paul Hudak, Gabriel Gonzalez, Rich Hickey and Csound's community.

WARNING: the library works best within ghci. The real-time sound rendering function dac spawns a child process in the background which may continue to execute after you stop the main process that runs the programm. It's not so in vim but it happens in the Sublime Editor and when you invoke runhaskell. So the best is to write you program in the separate file and then load it in the ghci and invoke the function main (which runs the sound rendering with the function dac).