csound-expression-3.0.0: library to make electronic music

Safe HaskellNone

Csound.Types

Contents

Description

The Csound types.

There are several primitive types:

  • Sig - signals
  • D - numbers
  • Str - strings
  • Tab - 1-dimensional arrays
  • Spec and Wspec - sound spectrums

A signal is a stream of numbers. Signals carry sound or time varied control values. Numbers are constants. 1-dimensional arrays contain some useful data which is calculated at the initial run of the program.

There is only one compound type. It's a tuple of Csound values. The empty tuple is signified with special type called Unit.

Synopsis

Primitive types

data Sig

Signals

Instances

Floating Sig 
Fractional Sig 
Num Sig 
IfB Sig 
EqB Sig 
OrdB Sig 
Monoid Sig 
Tuple Sig 
Sigs Sig 
Val Sig 
SigOrD Sig 
Default Sig 
AmpInstr Sig 
SigSpace Sig 
RenderCsd Sig 
Fractional (SE (Sig, Sig)) 
Fractional (SE (Sig, Sig, Sig)) 
Fractional (SE (Sig, Sig, Sig, Sig)) 
Fractional (SE Sig) 
Num (SE (Sig, Sig)) 
Num (SE (Sig, Sig, Sig)) 
Num (SE (Sig, Sig, Sig, Sig)) 
Num (SE Sig) 
AmpInstr (SE (Sig, Sig)) 
AmpInstr (SE Sig) 
SigSpace (SE (Sig, Sig)) 
SigSpace (SE (Sig, Sig, Sig)) 
SigSpace (SE (Sig, Sig, Sig, Sig)) 
SigSpace (SE Sig) 
RenderCsd (SE ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig))) 
RenderCsd (SE (Sig, Sig)) 
RenderCsd (SE ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig))) 
RenderCsd (SE (Sig, Sig, Sig, Sig)) 
RenderCsd (SE (Sig, Sig, Sig, Sig, Sig, Sig)) 
RenderCsd (SE (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
RenderCsd (SE Sig) 
Fractional (a -> (Sig, Sig, Sig, Sig)) 
Fractional (a -> (Sig, Sig, Sig)) 
Fractional (a -> (Sig, Sig)) 
Fractional (a -> Sig) 
Fractional (a -> SE (Sig, Sig, Sig, Sig)) 
Fractional (a -> SE (Sig, Sig, Sig)) 
Fractional (a -> SE (Sig, Sig)) 
Fractional (a -> SE Sig) 
Fractional (Sig, Sig) 
Num (a -> SE (Sig, Sig, Sig, Sig)) 
Num (a -> SE (Sig, Sig, Sig)) 
Num (a -> SE (Sig, Sig)) 
Num (a -> SE Sig) 
Num (a -> (Sig, Sig, Sig, Sig)) 
Num (a -> (Sig, Sig, Sig)) 
Num (a -> (Sig, Sig)) 
Num (a -> Sig) 
Num (Sig, Sig) 
Sigs ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
Sigs (Sig, Sig) 
CpsInstr ((Sig, Sig) -> (Sig, Sig)) 
CpsInstr ((Sig, Sig) -> Sig) 
CpsInstr ((Sig, Sig) -> SE (Sig, Sig)) 
CpsInstr ((Sig, Sig) -> SE Sig) 
CpsInstr ((Sig, D) -> (Sig, Sig)) 
CpsInstr ((Sig, D) -> Sig) 
CpsInstr ((Sig, D) -> SE (Sig, Sig)) 
CpsInstr ((Sig, D) -> SE Sig) 
CpsInstr ((D, Sig) -> (Sig, Sig)) 
CpsInstr ((D, Sig) -> Sig) 
CpsInstr ((D, Sig) -> SE (Sig, Sig)) 
CpsInstr ((D, Sig) -> SE Sig) 
CpsInstr ((D, D) -> (Sig, Sig)) 
CpsInstr ((D, D) -> Sig) 
CpsInstr ((D, D) -> SE (Sig, Sig)) 
CpsInstr ((D, D) -> SE Sig) 
CpsInstr (Sig -> (Sig, Sig)) 
CpsInstr (Sig -> Sig) 
CpsInstr (Sig -> SE (Sig, Sig)) 
CpsInstr (Sig -> SE Sig) 
CpsInstr (D -> (Sig, Sig)) 
CpsInstr (D -> Sig) 
CpsInstr (D -> SE (Sig, Sig)) 
CpsInstr (D -> SE Sig) 
AmpInstr (Sig -> (Sig, Sig)) 
AmpInstr (Sig -> Sig) 
AmpInstr (Sig -> SE (Sig, Sig)) 
AmpInstr (Sig -> SE Sig) 
AmpInstr (D -> (Sig, Sig)) 
AmpInstr (D -> Sig) 
AmpInstr (D -> SE (Sig, Sig)) 
AmpInstr (D -> SE Sig) 
AmpInstr (Sig, Sig) 
MidiInstr ((Sig, Sig) -> (Sig, Sig)) 
MidiInstr ((Sig, Sig) -> (Sig, Sig, Sig)) 
MidiInstr ((Sig, Sig) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, Sig) -> Sig) 
MidiInstr ((Sig, Sig) -> SE (Sig, Sig)) 
MidiInstr ((Sig, Sig) -> SE (Sig, Sig, Sig)) 
MidiInstr ((Sig, Sig) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, Sig) -> SE Sig) 
MidiInstr ((Sig, D) -> (Sig, Sig)) 
MidiInstr ((Sig, D) -> (Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> Sig) 
MidiInstr ((Sig, D) -> SE (Sig, Sig)) 
MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> SE Sig) 
MidiInstr ((D, Sig) -> (Sig, Sig)) 
MidiInstr ((D, Sig) -> (Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> Sig) 
MidiInstr ((D, Sig) -> SE (Sig, Sig)) 
MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> SE Sig) 
MidiInstr ((D, D) -> (Sig, Sig)) 
MidiInstr ((D, D) -> (Sig, Sig, Sig)) 
MidiInstr ((D, D) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, D) -> Sig) 
MidiInstr ((D, D) -> SE (Sig, Sig)) 
MidiInstr ((D, D) -> SE (Sig, Sig, Sig)) 
MidiInstr ((D, D) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, D) -> SE Sig) 
MidiInstr (Sig -> (Sig, Sig)) 
MidiInstr (Sig -> (Sig, Sig, Sig)) 
MidiInstr (Sig -> (Sig, Sig, Sig, Sig)) 
MidiInstr (Sig -> Sig) 
MidiInstr (Sig -> SE (Sig, Sig)) 
MidiInstr (Sig -> SE (Sig, Sig, Sig)) 
MidiInstr (Sig -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr (Sig -> SE Sig) 
MidiInstr (D -> (Sig, Sig)) 
MidiInstr (D -> (Sig, Sig, Sig)) 
MidiInstr (D -> (Sig, Sig, Sig, Sig)) 
MidiInstr (D -> Sig) 
MidiInstr (D -> SE (Sig, Sig)) 
MidiInstr (D -> SE (Sig, Sig, Sig)) 
MidiInstr (D -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr (D -> SE Sig) 
MidiInstr (Msg -> (Sig, Sig)) 
MidiInstr (Msg -> (Sig, Sig, Sig)) 
MidiInstr (Msg -> (Sig, Sig, Sig, Sig)) 
MidiInstr (Msg -> Sig) 
MidiInstr (Msg -> SE (Sig, Sig)) 
MidiInstr (Msg -> SE (Sig, Sig, Sig)) 
MidiInstr (Msg -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr (Msg -> SE Sig) 
Instr (a -> SE (Sig, Sig, Sig, Sig, Sig)) 
Instr (a -> SE (Sig, Sig, Sig, Sig)) 
Instr (a -> SE (Sig, Sig, Sig)) 
Instr (a -> SE (Sig, Sig)) 
Instr (a -> SE Sig) 
Instr (a -> (Sig, Sig, Sig, Sig, Sig)) 
Instr (a -> (Sig, Sig, Sig, Sig)) 
Instr (a -> (Sig, Sig, Sig)) 
Instr (a -> (Sig, Sig)) 
Instr (a -> Sig) 
SigSpace (Sig, Sig) 
RenderCsd ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
RenderCsd (Sig, Sig) 
Fractional (Sig, Sig, Sig) 
Num (Sig, Sig, Sig) 
SigSpace (Sig, Sig, Sig) 
Fractional (Sig, Sig, Sig, Sig) 
Num (Sig, Sig, Sig, Sig) 
Sigs ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
Sigs (Sig, Sig, Sig, Sig) 
SigSpace (Sig, Sig, Sig, Sig) 
RenderCsd ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
RenderCsd (Sig, Sig, Sig, Sig) 
Sigs (Sig, Sig, Sig, Sig, Sig, Sig) 
RenderCsd (Sig, Sig, Sig, Sig, Sig, Sig) 
Sigs (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) 
RenderCsd (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) 

data D

Constant numbers

Instances

Floating D 
Fractional D 
Num D 
IfB D 
EqB D 
OrdB D 
Monoid D 
Tuple D 
Arg D 
Val D 
SigOrD D 
Default D 
CpsInstr ((Sig, D) -> (Sig, Sig)) 
CpsInstr ((Sig, D) -> Sig) 
CpsInstr ((Sig, D) -> SE (Sig, Sig)) 
CpsInstr ((Sig, D) -> SE Sig) 
CpsInstr ((D, Sig) -> (Sig, Sig)) 
CpsInstr ((D, Sig) -> Sig) 
CpsInstr ((D, Sig) -> SE (Sig, Sig)) 
CpsInstr ((D, Sig) -> SE Sig) 
CpsInstr ((D, D) -> (Sig, Sig)) 
CpsInstr ((D, D) -> Sig) 
CpsInstr ((D, D) -> SE (Sig, Sig)) 
CpsInstr ((D, D) -> SE Sig) 
CpsInstr (D -> (Sig, Sig)) 
CpsInstr (D -> Sig) 
CpsInstr (D -> SE (Sig, Sig)) 
CpsInstr (D -> SE Sig) 
AmpInstr (D -> (Sig, Sig)) 
AmpInstr (D -> Sig) 
AmpInstr (D -> SE (Sig, Sig)) 
AmpInstr (D -> SE Sig) 
MidiInstr ((Sig, D) -> (Sig, Sig)) 
MidiInstr ((Sig, D) -> (Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> Sig) 
MidiInstr ((Sig, D) -> SE (Sig, Sig)) 
MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((Sig, D) -> SE Sig) 
MidiInstr ((D, Sig) -> (Sig, Sig)) 
MidiInstr ((D, Sig) -> (Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> Sig) 
MidiInstr ((D, Sig) -> SE (Sig, Sig)) 
MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, Sig) -> SE Sig) 
MidiInstr ((D, D) -> (Sig, Sig)) 
MidiInstr ((D, D) -> (Sig, Sig, Sig)) 
MidiInstr ((D, D) -> (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, D) -> Sig) 
MidiInstr ((D, D) -> SE (Sig, Sig)) 
MidiInstr ((D, D) -> SE (Sig, Sig, Sig)) 
MidiInstr ((D, D) -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr ((D, D) -> SE Sig) 
MidiInstr (D -> (Sig, Sig)) 
MidiInstr (D -> (Sig, Sig, Sig)) 
MidiInstr (D -> (Sig, Sig, Sig, Sig)) 
MidiInstr (D -> Sig) 
MidiInstr (D -> SE (Sig, Sig)) 
MidiInstr (D -> SE (Sig, Sig, Sig)) 
MidiInstr (D -> SE (Sig, Sig, Sig, Sig)) 
MidiInstr (D -> SE Sig) 

data Tab

Tables (or arrays)

Instances

data Str

Strings

Instances

data Spec

Spectrum. It's fsig in the Csound.

data Wspec

Another type for spectrum. It's wsig in the Csound.

Instances

data BoolSig

A signal of booleans.

data BoolD

A constant boolean value.

Instances

class Val a where

Contains all Csound values.

Methods

fromGE :: GE E -> a

toGE :: a -> GE E

fromE :: E -> a

class Val a => SigOrD a

Instances

Constructors

double :: Double -> D

Constructs a number.

int :: Int -> D

Constructs an integer.

text :: String -> Str

Constructs a string.

Constants

idur :: D

Querries a total duration of the note. It's equivallent to Csound's p3 field.

Converters

ar :: Sig -> Sig

Sets a rate of the signal to audio rate.

kr :: Sig -> Sig

Sets a rate of the signal to control rate.

ir :: Sig -> D

Converts a signal to the number (initial value of the signal).

sig :: D -> Sig

Makes a constant signal from the number.

Init values

withInits :: (Val a, Tuple b) => a -> b -> a

Appends initialisation arguments. It's up to user to supply arguments with the right types. For example:

 oscil 0.5 440 sinWave `withInits` (0.5 :: D)

withDs :: Val a => a -> [D] -> a

A special case of withInits. Here all inits are numbers.

withSigs :: Val a => a -> [Sig] -> a

A special case of withInits. Here all inits are signals.

withTabs :: Val a => a -> [Tab] -> a

A special case of withInits. Here all inits are arrays.

withD :: Val a => a -> D -> a

Appends an init value which is a number.

withSig :: Val a => a -> Sig -> a

Appends an init value which is a signal.

withTab :: Val a => a -> Tab -> a

Appends an init value which is a table.

withSeed :: SE Sig -> D -> Sig

Applies a seed to the random value. It's equivalent to the withD but it has a special meaning of canceling the side effect. When random opcode is provided with seed value it's no longer contains a side effect so we don't need to restrict it.

Numeric functions

quot' :: SigOrD a => a -> a -> a

rem' :: SigOrD a => a -> a -> a

div' :: SigOrD a => a -> a -> a

mod' :: SigOrD a => a -> a -> a

ceil' :: SigOrD a => a -> a

floor' :: SigOrD a => a -> a

round' :: SigOrD a => a -> a

int' :: SigOrD a => a -> a

frac' :: SigOrD a => a -> a

Logic functions

boolSig :: BoolD -> BoolSig

Creates a constant boolean signal.

when1 :: BoolSig -> SE () -> SE ()

Invokes the given procedure if the boolean signal is true.

whens :: [(BoolSig, SE ())] -> SE () -> SE ()

The chain of when1s. Tests all the conditions in sequence if everything is false it invokes the procedure given in the second argument.

Aliases

Handy for functions that return tuples to specify the utput type

 (aleft, aright) = ar2 $ diskin2 "file.wav" 1

or

 asig = ar1 $ diskin2 "file.wav" 1

type Sig2 = (Sig, Sig)Source

type Sig4 = (Sig, Sig, Sig, Sig)Source

type Sig6 = (Sig, Sig, Sig, Sig, Sig, Sig)Source

type Sig8 = (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)Source

ar1 :: Sig -> Sig

ar2 :: (Sig, Sig) -> (Sig, Sig)

ar4 :: (Sig, Sig, Sig, Sig) -> (Sig, Sig, Sig, Sig)

ar6 :: (Sig, Sig, Sig, Sig, Sig, Sig) -> (Sig, Sig, Sig, Sig, Sig, Sig)

ar8 :: (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) -> (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)

Tuples

class Tuple a where

A tuple of Csound values.

Instances

Tuple Sig 
Tuple D 
Tuple Str 
Tuple Spec 
Tuple Unit 
Tuple Tab 
(Tuple a, Tuple b) => Tuple (a, b) 
(Tuple a, Tuple b, Tuple c) => Tuple (a, b, c) 
(Tuple a, Tuple b, Tuple c, Tuple d) => Tuple (a, b, c, d) 
(Tuple a, Tuple b, Tuple c, Tuple d, Tuple e) => Tuple (a, b, c, d, e) 
(Tuple a, Tuple b, Tuple c, Tuple d, Tuple e, Tuple f) => Tuple (a, b, c, d, e, f) 
(Tuple a, Tuple b, Tuple c, Tuple d, Tuple e, Tuple f, Tuple g) => Tuple (a, b, c, d, e, f, g) 
(Tuple a, Tuple b, Tuple c, Tuple d, Tuple e, Tuple f, Tuple g, Tuple h) => Tuple (a, b, c, d, e, f, g, h) 

makeTupleMethods :: Tuple a => (a -> b) -> (b -> a) -> TupleMethods b

Defines instance of type class Tuple for a new type in terms of an already defined one.

data Unit

Csound's empty tuple.

Instances

unit :: Unit

Constructs Csound's empty tuple.

Logic functions

ifTuple :: Tuple a => BoolSig -> a -> a -> a

ifB for tuples of csound values.

guardedTuple :: Tuple b => [(BoolSig, b)] -> b -> b

guardedB for tuples of csound values.

caseTuple :: Tuple b => a -> [(a -> BoolSig, b)] -> b -> b

caseB for tuples of csound values.

Instruments

An instrument is a function that takes a tpule of csound values as an argument and returns a tuple of signals as an output. The type of the instrument is:

 (Arg a, Out b) => a -> b

Arguments

class Tuple a => Arg a

Instances

Arg D 
Arg Str 
Arg Unit 
Arg Tab 
(Arg a, Arg b) => Arg (a, b) 
(Arg a, Arg b, Arg c) => Arg (a, b, c) 
(Arg a, Arg b, Arg c, Arg d) => Arg (a, b, c, d) 
(Arg a, Arg b, Arg c, Arg d, Arg e) => Arg (a, b, c, d, e) 
(Arg a, Arg b, Arg c, Arg d, Arg e, Arg f) => Arg (a, b, c, d, e, f) 
(Arg a, Arg b, Arg c, Arg d, Arg e, Arg f, Arg h) => Arg (a, b, c, d, e, f, h) 
(Arg a, Arg b, Arg c, Arg d, Arg e, Arg f, Arg h, Arg g) => Arg (a, b, c, d, e, f, h, g) 

Logic functions

ifArg :: (Arg a, Tuple a) => BoolD -> a -> a -> a

ifB for constants.

guardedArg :: (Tuple b, Arg b) => [(BoolD, b)] -> b -> b

guardedB for constants.

caseArg :: (Tuple b, Arg b) => a -> [(a -> BoolD, b)] -> b -> b

caseB for constants.

Outputs

class Tuple a => Sigs a

The tuples of signals.

Instances

Sigs Sig 
Sigs ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
Sigs (Sig, Sig) 
Sigs ((Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig), (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) 
Sigs (Sig, Sig, Sig, Sig) 
Sigs (Sig, Sig, Sig, Sig, Sig, Sig) 
Sigs (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)