csound-expression-1.0.3: src/Csound/Opcode/Interaction.hs
-- | Realtime Interaction
module Csound.Opcode.Interaction (
-----------------------------------------------------
-- * MIDI
-- ** Opcodes For Use In MIDI-Triggered Instruments
cpsmidi, ampmidi, pchbend, aftouch,
-- ** Opcodes For Use In All Instruments
ctrl7,
-----------------------------------------------------
-- * Human Interfaces
-- ** Keys
sensekey,
-- ** Mouse
xyin
) where
import Csound.Exp(Msg)
import Csound.Exp.Wrapper
import Csound.LowLevel
-----------------------------------------------------
-- * MIDI
-- ** Opcodes For Use In MIDI-Triggered Instruments
-- | Get the note number of the current MIDI event, expressed in cycles-per-second.
--
-- > icps cpsmidi
--
-- doc: <http://www.csounds.com/manual/html/cpsmidi.html>
cpsmidi :: Msg -> D
cpsmidi = const $ constOpc "cpsmidi"
-- | Get the velocity of the current MIDI event.
--
-- > iamp ampmidi iscal [, ifn]
--
-- doc: <http://www.csounds.com/manual/html/ampmidi.html>
ampmidi :: Msg -> D
ampmidi = const $ constOpc "ampmidi"
-- | Get the current pitch-bend value for this channel.
--
-- > kbend pchbend [imin] [, imax]
--
-- doc: <http://www.csounds.com/manual/html/pchbend.html>
pchbend :: Msg -> Sig
pchbend = const $ constDiap "pchbend"
-- | Get the current after-touch value for this channel.
--
-- > kaft aftouch [imin] [, imax]
--
-- doc: <http://www.csounds.com/manual/html/.html>
aftouch :: Msg -> Sig
aftouch = const $ constDiap "aftouch"
-- ** Opcodes For Use In All Instruments
-- | Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.
--
-- > idest ctrl7 ichan, ictlno, imin, imax [, ifn]
-- > kdest ctrl7 ichan, ictlno, kmin, kmax [, ifn]
-- > adest ctrl7 ichan, ictlno, kmin, kmax [, ifn] [, icutoff]
--
-- doc: <http://www.csounds.com/manual/html/ctrl7.html>
ctrl7 :: D -> D -> Sig -> Sig -> Sig
ctrl7 = opc4 "ctrl7" [
(i, replicate 5 i),
(k, [i, i, k, k, i]),
(a, [i, i, k, k, i, i])]
constOpc :: Val a => Name -> a
constOpc name = opc0 name [(i, [])]
constDiap :: Val a => Name -> a
constDiap name = opc0 name [(k, [i, i])]
-----------------------------------------------------
-- * Open Sound Control and Network
-- ** Open Sound Control
-- ** Remote Instruments
-- ** Network Audio
-----------------------------------------------------
-- * Human Interfaces
-- ** Widgets
-- ** Keys
-- | Returns the ASCII code of a key that has been pressed, or -1 if no key has been pressed.
--
-- > kres[, kkeydown] sensekey
--
-- doc: <http://www.csounds.com/manual/html/sensekey.html>
sensekey :: (Sig, Sig)
sensekey = mopc0 "sensekey" ([k,k], [])
-- ** Mouse
-- | Sense the cursor position in an output window. When xyin is called the position of the mouse within
-- the output window is used to reply to the request. This simple mechanism does mean that only one xyin
-- can be used accurately at once. The position of the mouse is reported in the output window.
--
-- > kx, ky xyin iprd, ixmin, ixmax, iymin, iymax [, ixinit] [, iyinit]
--
-- doc: <http://www.csounds.com/manual/html/xyin.html>
xyin :: D -> D -> D -> D -> D -> (Sig, Sig)
xyin = mopc5 "xyin" ([k,k], is 7)
-- ** WII
-- ** P5 Glove