Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Anton Kholomiov
    @anton-k

    The 5.2 is out. Virtual pedalboards, arrays, new OSC, full support for mono synthesizers, patch skins, all GEN-routines are implemented

    New features:

    • Complete support for monophonic synthesizers:

      • The argument of mono synth was updated.

        Previously it was a pair of amplitude and frequency signals.
        But this representation doesn't captures the notion of note retrigger.
        We can not create the mono-synt with sharp attacks.

        Now this is fixed. We can use adsr140 or adsrMonoSynt functions to create
        mono synths with fixed attacks

      • monoSco - for playing scores with mono-synths

      • monoSched - for playing event streams with mono synt

      • atSco and atSched now work for mono synth too

    • The patch can change the skin. The Patch type has changed. Know it supports the change in common parameters.
      Right now the ccommon parameters include only Low-pass filter type. But this can be extended in future releases.

      The idea is that we can parametrize the patch with some common arguments so that use can tweak them
      without revriting the algorithm.

      The low-pass filter is a vital tool that defines the character of the synthesizer.
      With recent addition of several modern filter emulators (like Korg (korg_lp), or acid filter diode)
      it's good to be able to quickly switch the filters. We can do it for patches with function

       setFilter :: ResonFilter -> Patch a -> Patch a
    • Family of standard effects was added (see module Csound.Air.Fx.FxBox and the guide).
      The effects are kindly provided by Iain McCurdy (recoded from his original implementation in Csound).

      The effects have catchy names and are defined on wide variety of types. Let's briefly discuss the naming conventions:

      • adele - analog delay

      • pongy - ping pong delay

      • tort - distortion

      • flan - flanger

      • fowler - Envelope follower

      • phasy - phaser

      • crusher - bit-crusher

      • chory - stereo chorus

      • tremy - tremolo

      • pany - panning

      • revsy - reverse playback

        Also there are set of presets that imply the notion of add a bit of effect or add a lot of effect.
        They are suffixed with number from 1 to 5. Like flan1 or tort3. Also if the effect support the
        tone knob (center frequency of LP filter) ter are suffixes b for bright color and m for muted color.
        For example tort2m or adele2b.

    The effects are just functions from signals to signals:
    
    ~~~haskell
    dac $ hall 0.2 $ adele2 0.5 0.25 $ flan2 $ tort1m $ asigs
    ~~~
    • UI widgets for standard effects.

      Alongside with effects there are functions to create widgets (UI-controls). They have the same naming convention
      only the prefix ui is added. For example: uiTort, uiAdele or uiHall. Also there are predefined presets like uiFlan2 or uiPhasy3.
      With presets we put the box in the initial state corresponding to the given preset. But lately we can change it with UI-controls.

      With this feature paired with functions fxHor, fxVer and fxGrid we can easily design our virtual pedalboards.

      It can be used like this:

        > let pedals = fxGrid 2 [uiFlan1, uiTort1, uiAdele2m 0.5 0.3, uiHall 0.25]
      
        > dac $ fxApply pedals $ (sawSeq [1, 0.5, 0.25] 2) * sqr 220
    • Complete list of GEN routines. This release adds GEN:

        * 25 bpExps --  Construct functions from segments of exponential curves in breakpoint fashion., 
      
        * 27 bpLins --  Construct functions from segments of straight lines in breakpoint fashion.
      
        * wave waveletTab -- Generates a compactly supported wavelet function.
      
        * farey fareyTab -- Fills a table with the Farey Sequence Fn of the integer n.
      
        * sone soneTab -- Generate a table with values of the so
    It's available on hackage
    cabal update
    cabal install csound-catalog
    should update everything
    Ebmtranceboy
    @Ebmtranceboy
    @anton-k Thank you Anton, these are good news indeed! Special thanks for tabHarmonics and mono atSco ;)
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    hello anyone?
    Ebmtranceboy
    @Ebmtranceboy
    hello. You can drop a message even if noone's here
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    hey
    there
    i use a lot of different tools to createfeedback loops for myself
    then try to recreate a more "realistic" digital audio experience as a compulsive habit
    what are your thoughts on that
    Anton Kholomiov
    @anton-k
    hi!
    do you want to create feedbacks in CE?
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    i
    Damn dude
    That was an intense moment
    I think I already use this?
    ævan.0π.com
    @evanstapler
    Sup
    ævan.0π.com
    @evanstapler
    i'm trying to make a pirate radio station.mp3 and i need as much help as i can get http://xn--van-xla.com
    Ebmtranceboy
    @Ebmtranceboy
    I don't see a relation between spell-music and pirate radio and your link is dead. Be more specific
    ævan.0π.com
    @evanstapler
    i dream of a radio station where the music can be modulated by each listener, contributing to a larger theme in a crowd-sourced performance
    i want to find people who share this idea of "modular music"
    the best i've found is @ampme app and a few bluetooth theremin-like synths
    Ebmtranceboy
    @Ebmtranceboy
    that's a nice idea. You could provide sliders happy/sad, slow/fast to influence trends. I've heard someone on the csound mailing list having programmed an automated radio without interaction except the kind of music trance/jazz/... see https://algorythmradio.com/ . Maybe you could exchange together
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    that's a nice idea. You could provide sliders happy/sad, slow/fast to influence trends. I've heard someone on the csound mailing list having programmed an automated radio without interaction except the kind of music trance/jazz/... see https://algorythmradio.com/ . Maybe you could exchange together
    @Ebmtranceboy
    I had a very peculiar experience a couple nights ago when I attempted to try that website out
    apparently there's an older .net version too lol
    I'm looking forward to participating, although I haven't been able to reach out to the site operator
    just to make anyone aware: i acquired a 5 watt FM transmitter yesterday, along with some big AIRCOM box (signal tester??) and other various EMF spectrum modulators
    ævan.0π.com
    @evanstapler
    Good morning. I'm a diagnosed schizophrenic with synesthesia symptoms. I'm very much interested in helping people use technology with newfound accessibility features I've worked on. I will be starting a nonprofit to raise awareness, reach me at C12@ævan.com or evan@ævan.com. I can also be reached via phone at 9373031420, or twitter @magikarp. For an example of my symptoms, please see my youtu.be/evanstapler . Thank you for your time.
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    sup
    æ̹̯̅͆̇͞͞vanstapler
    @Magikarp_twitter
    I'm currently broadcasting @ 88.9 MHz via FM radio if anyone can boost my signal from a distance. Here's my location: https://maps.app.goo.gl/IC65KuiRNxPm1Pnr2
    Axel
    @pelagisk

    Hello! I am a beginner in Haskell, coming more from mathematics, Overtone/Supercollider and composing with modular synthesizers. csound-expression so far seems very promising to me, and I would like to thank you for creating this wonderful library! I have a few questions which I was unable to answer with the tutorial: I would like to do function composition to create effect chains (and perhaps also branch effects). However some effects have signatures like ... -> Sig -> SE Sig2while others have ... -> Sig -> SE Sig. How do I deal with this specific case and a function to put the Sig into a Sig2or the other way around? As an example of such an attempt at function composition which does not work:

    snare = at (hp 1000 10 . chorus 0.1 0.2 0.1) $ mul (adsr 0.01 0.4 0 0) pink

    Also (I may simply have missed this), is there a way to have buses or use things like Jack with csound-expression?

    Ebmtranceboy
    @Ebmtranceboy
    @pelagisk you can get what you want by
    snare = at (hp 1000 10) . at (chorus 0.1 0.2 0.1) $ mul (adsr 0.01 0.4 0 0) pink
    Axel
    @pelagisk
    @Ebmtranceboy very clear, thanks!
    Ebmtranceboy
    @Ebmtranceboy
    Furthermore Sig2 type is just an alias of (Sig,Sig).
    Axel
    @pelagisk
    ah so I just fmap fst for mono?
    Anton Kholomiov
    @anton-k
    There is a function
    toMono :: Sig2 -> Sig
    fromMono :: Sig -> Sig2
    Axel
    @pelagisk
    better, thanks
    Axel
    @pelagisk

    what is the best way to combine scores and playback of samples? My current approach is:

    clap :: D -> SE Sig2
    clap _ = runSam bpm $ wav1 "clap.wav"
    
    mkpattern :: [Int] -> Sco D
    mkpattern lst = mel $ map (\i -> if i == 0 then rest 1 else temp (double 1.0)) lst
    
    clapp :: Sco (Mix Sig2)
    clapp = sco clap $ mkpattern [0,0,1,0,0,0,1,1]
    
    -- then run `dac $ mix clapp`

    but I would ideally like to work with samples like with Csound.Sam like I can do with scores? Maybe there is a good way scores and samples are separated in this way?

    Ebmtranceboy
    @Ebmtranceboy
    maybe you can try pat' ?
    dac $ loop $ mel [lim 8 $ pat' [1, 0.5, 0.25, 0.1] [1] (wav1 "../sample/kick1.wav"), rest 8]
    Axel
    @pelagisk

    the problem is that pat' has signature

    pat'  :: [Csound.Typed.Types.Prim.D]  -> [Csound.Typed.Types.Prim.D] -> Sam -> Sam

    and that I want it to work with type Scosomehow

    Ebmtranceboy
    @Ebmtranceboy
    He will confirm but Anton is not very pleased with Sco as it is atm. Maybe schedu le some events ?
    Anton Kholomiov
    @anton-k
    @pelagisk In theory you can render Scores to signal (mix . sco) and then pack it to sample (toSam | limSam)
    Though I guess that the function like scaling wouldn't work across the rendered scores..
    Anton Kholomiov
    @anton-k
    Actually in your example you can read the sample with plain function like:
    readSnd :: String -> (Sig, Sig)
    
    clap :: D -> SE Sig2
    clap _ = return $ readSnd "clap.wav"