-- | Timbres
module Csound.Catalog.Wave(  
    
    -- * Woodwind instruments
    flute, bassClarinet, frenchHorn, sheng, hulusi, dizi,

    -- * Michael Gogins gallery
    pulseWidth,
    xanadu1, xanadu2, stringPad, toneWheel,
    guitar, harpsichord, xing,
    fmMod, filteredChorus, plainString, fmTubularBell, 
    delayedString, melody, rhodes, 
    
    -- * Amsterdam catalog instruments
    tibetan,

    -- * Bay at night
    -- | Instruments from the piece \"Bay at night\" by JL Diaz.
    nightPad,

    -- * Vestige of time
    -- | Instruments from the piece \"Vestige of time\" by Matthew Mariano.
    filteredSaw, filteredSawRising, filteredSawFalling,
    filteredNoise, 
    resonInstr, simpleResonInstr, resonVibrato, 
    delaySaw, femaleVowel, amBell,

    -- * Desrted
    -- | Instruments from the piece \"Desrted\" by Jen Scaturro.
    simpleMarimba, marimbaWave, phasingSynth, noiz, wind,
    
    -- * The Heartbeat
    -- | Instruments from the piece \"The Heartbeat\" by Julie Friedman.
    heartbeat, monoPluck, chorusel,
    
    -- * Trapped in convert
    -- | Instruments from the piece \"Trapped in convert\" by Richard Boulanger
    ivory, blue, black, blackMarimba,
   
    -- * Modes
    -- | Percussive instruments defined with modal synthesis    -- (see the functions 'Csound.Air.modes' and 'Csound.Catalog.Reson.modesInstr'). All instruments take in a frequency and produce the output signal with percussive envelope.
    dahina, banyan, xylophone, tibetanBowl180, 
    spinelSphere, potLid, redCedarWoodPlate, 
    tubularBell, redwoodPlate, douglasFirWoodPlate,
    uniformWoodenBar, uniformAluminumBar, vibraphone1, 
    vibraphone2, chalandiPlates, tibetanBowl152, 
    tibetanBowl140, wineGlass, smallHandbell, 
    albertClockBellBelfast, woodBlock,

    -- * Vowel
    --
    -- | An emulation of the singing of the vowels with granular synthesis (fof-opcode in the Csound)
    -- It's best to use these functions with vibrato.
    --
    -- > vibrato 0.12 5 $ oneVowel maleA 330
    vowels, loopVowels, oneVowel, Vowel,
    
    -- ** Vowels
    maleA, maleE, maleIY, maleO, maleOO, maleU, maleER, maleUH,
    femaleA, femaleE, femaleIY, femaleO, femaleOO,

    -- * Sean Costello
    RissetBellSpec(..), rissetBell, timpani, timpaniSpec, noiseBell, noiseBellSpec,
    snowCrackle, 
    fmDrone, fmDrones,
    tenorOsc, sopranoOsc,

    -- * Flavio
    amFlavio, fmFlavio, simpleSust, simpleFading,

    -- * Thor
    cathedralOrgan, cathedralOrganFx, hammondOrgan,

    amPiano, amPianoBy,

    pwBass, pwHarpsichord, pwEnsemble,
    pwBassBy, pwHarpsichordBy, pwEnsembleBy,

    simpleBass, 

    ReleaseTime,
    EpianoOsc(..), epiano, epianoBy, pianoEnv, xpianoEnv,

    noisyChoir, thorWind, mildWind, boom, windWall, 

    razorPad, razorLead,

    -- * FM
    fmBass1, fmBass2,

    -- * Bitwig

    pwPad, triPad, triPadFx, triPadBy, pwPadBy,
    Accordeon(..), accordeon, accordeonFx,

    -- * Pads
    polySynthFx, polySynth,
    dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad,
    dreamPadBy, lightIsTooBrightPadBy, whaleSongPadBy,

    -- * SHARC instruments
    -- | SHARC ported to Csound. SHARC is a database of musical timbre information by Gregory Sandell.
    -- It's a collection of sustain notes for real orchestra instruments.

    -- ** Oscillators
    sharcOsc, sigSharcOsc, rndSharcOsc, rndSigSharcOsc,
    soloSharcOsc, orcSharcOsc, purePadSharcOsc, padSharcOsc,

    -- ** Padsynth
    PadSharcSpec(..), padsynthSharcOsc, padsynthSharcOsc2,
    padsynthSharcOsc', padsynthSharcOsc2',

    -- ** Instriments
    SharcInstr(..),
    shViolin, shViolinPizzicato, shViolinMuted, shViolinMarteleBowing, shViolinsEnsemble, shViola, shViolaPizzicato, shViolaMuted,
    shViolaMarteleBowing, shTuba, shTromboneMuted, shTrombone, shPiccolo, shOboe, shFrenchHornMuted, shFrenchHorn, shFlute,
    shEnglishHorn, shClarinetEflat, shTrumpetMutedC, shTrumpetC, shContrabassClarinet, shContrabassoon, shCello, shCelloPizzicato,
    shCelloMuted, shCelloMarteleBowing, shContrabassPizzicato, shContrabassMuted, shContrabassMarteleBowing, shContrabass,
    shClarinet, shBassTrombone, shBassClarinet, shBassoon, shBassFlute, shTrumpetBach, shAltoTrombone, shAltoFlute,

    -- ** Low-level getters
    getInstrTab, note2sig, note2tab,

    -- * Other instruments
    okComputer, deepBass,
    impulseMarimba1, impulseMarimba2,
    celloWave

) where

import Csound.Base

import Csound.Catalog.Wave.Ac
import Csound.Catalog.Wave.Amsterdam
import Csound.Catalog.Wave.VestigeOfTime
import Csound.Catalog.Wave.Vowel
import Csound.Catalog.Wave.Woodwind
import Csound.Catalog.Wave.Deserted
import Csound.Catalog.Wave.TheHeartbeat
import Csound.Catalog.Wave.TrappedInConvert

import Csound.Catalog.Wave.Sean
import Csound.Catalog.Wave.Flavio
import Csound.Catalog.Wave.Thor
import Csound.Catalog.Wave.Bitwig
import Csound.Catalog.Wave.Fm

import Csound.Catalog.Wave.Misc

import Csound.Catalog.Reson
import Csound.Catalog.Wave.Sharc

-- | 
-- > nightPad fadeInTime cps
nightPad :: D -> Sig -> Sig
nightPad dt = (fadeIn dt * ) . stringPad 1

-- modal synthesis
    
dahina, banyan, xylophone, tibetanBowl180, 
    spinelSphere, potLid, redCedarWoodPlate, 
    tubularBell, redwoodPlate, douglasFirWoodPlate,
    uniformWoodenBar, uniformAluminumBar, vibraphone1, 
    vibraphone2, chalandiPlates, tibetanBowl152, 
    tibetanBowl140, wineGlass, smallHandbell, 
    albertClockBellBelfast, woodBlock :: Sig -> Sig

dahina = strikeModes dahinaModes
banyan = strikeModes banyanModes 
xylophone = strikeModes xylophoneModes 
tibetanBowl180 = strikeModes tibetanBowlModes180  
spinelSphere = strikeModes spinelSphereModes 
potLid = strikeModes potLidModes 
redCedarWoodPlate = strikeModes redCedarWoodPlateModes 
tubularBell = strikeModes tubularBellModes 
redwoodPlate = strikeModes redwoodPlateModes 
douglasFirWoodPlate = strikeModes douglasFirWoodPlateModes 
uniformWoodenBar = strikeModes uniformWoodenBarModes 
uniformAluminumBar = strikeModes uniformAluminumBarModes 
vibraphone1 = strikeModes vibraphoneModes1 
vibraphone2 = strikeModes vibraphoneModes2 
chalandiPlates = strikeModes chalandiPlatesModes 
tibetanBowl152 = strikeModes tibetanBowlModes152 
tibetanBowl140 = strikeModes tibetanBowlModes140 
wineGlass = strikeModes wineGlassModes 
smallHandbell = strikeModes smallHandbellModes 
albertClockBellBelfast = strikeModes albertClockBellBelfastModes 
woodBlock = strikeModes woodBlockModes