vivid

Sound synthesis with SuperCollider

Version on this page:0.3.0.2
LTS Haskell 21.25:0.5.2.0
Stackage Nightly 2023-06-21:0.5.2.0
Latest on Hackage:0.5.2.0

See all snapshots vivid appears in

LicenseRef-GPL licensed and maintained by Tom Murphy
This version can be pinned in stack with:vivid-0.3.0.2@sha256:48801bfdd80e35bba5152710da0bd0d81f8422c3e7a57f9df997b6546d7bcb87,8106

Module documentation for 0.3.0.2

  • Vivid
    • Vivid.Actions
      • Vivid.Actions.Class
      • Vivid.Actions.IO
      • Vivid.Actions.NRT
      • Vivid.Actions.Scheduled
    • Vivid.ByteBeat
    • Vivid.Envelopes
    • Vivid.NoPlugins
    • Vivid.OSC
      • Vivid.OSC.Bundles
    • Vivid.Randomness
    • Vivid.SCServer
      • Vivid.SCServer.Connection
      • Vivid.SCServer.State
      • Vivid.SCServer.Types
    • Vivid.SynthDef
      • Vivid.SynthDef.FromUA
      • Vivid.SynthDef.ToSig
      • Vivid.SynthDef.Types
      • Vivid.SynthDef.TypesafeArgs
    • Vivid.UGens
      • Vivid.UGens.Algebraic
      • Vivid.UGens.Analysis
      • Vivid.UGens.Args
      • Vivid.UGens.Buffer
      • Vivid.UGens.Conversion
      • Vivid.UGens.Convolution
      • Vivid.UGens.Delays
      • Vivid.UGens.Demand
      • Vivid.UGens.Dynamics
      • Vivid.UGens.Envelopes
      • Vivid.UGens.Examples
      • Vivid.UGens.FFT
      • Vivid.UGens.Filters
        • Vivid.UGens.Filters.BEQSuite
        • Vivid.UGens.Filters.Linear
        • Vivid.UGens.Filters.Nonlinear
        • Vivid.UGens.Filters.Pitch
      • Vivid.UGens.Generators
        • Vivid.UGens.Generators.Chaotic
        • Vivid.UGens.Generators.Deterministic
        • Vivid.UGens.Generators.Granular
        • Vivid.UGens.Generators.SingleValue
        • Vivid.UGens.Generators.Stochastic
      • Vivid.UGens.InOut
      • Vivid.UGens.Info
      • Vivid.UGens.Maths
      • Vivid.UGens.Multichannel
      • Vivid.UGens.Random
      • Vivid.UGens.Reverbs
      • Vivid.UGens.SynthControl
      • Vivid.UGens.Triggers
      • Vivid.UGens.Undocumented
      • Vivid.UGens.UserInteraction

Music and sound synthesis with SuperCollider.

Example usage (after installing and booting SuperCollider):

{-# LANGUAGE DataKinds, ExtendedDefaultRules #-}
import Vivid

theSound = sd (0 ::I "note") $ do
   wobble <- sinOsc (freq_ 5) ? KR ~* 10 ~+ 10
   s <- 0.1 ~* sinOsc (freq_ $ midiCPS (V::V "note") ~+ wobble)
   out 0 [s,s]

playSong = do
   fork $ do
      s0 <- synth theSound (36 ::I "note")
      wait 1
      free s0
   s1 <- synth theSound (60 ::I "note")
   forM_ [62,66,64] $ \note -> do
      wait (1/4)
      set s1 (note ::I "note")
   wait (1/4)
   free s1

main = do
   putStrLn "Simplest:"
   playSong

   putStrLn "With precise timing:"
   doScheduledIn 0.1 playSong
   wait 1

   putStrLn "Written to a file, non-realtime synthesis:"
   putStrLn "(Need to quit the running server for NRT)"
   quitSCServer
   writeNRT "/tmp/song.wav" playSong