Git Product home page Git Product logo

sclorksynths's Introduction

SCLOrkSynths

Collection of SuperCollider SynthDefs (synth definitions) with accompanying Pattern demos.

Anyone is welcome to suggest new SynthDefs for the collection.

Installation

You can install SCLOrkSynths just like any other SuperCollider Quark:

Quarks.fetchDirectory;
Quarks.install("SCLOrkSynths");

You may also use the Quarks gui (run Quarks.gui;) instead of running the lines above. If you run into any trouble, you can try these steps to start fresh.

Sources

Enormous thanks to all the authors who have shared SynthDef code online over the years. This repository would not be possible without them. Also thanks to an early suggestion by @meznon who inspired me to pursue this further over the years. Aside from the original SynthDefs created for this project, some of the main sources we borrowed code from were:

SynthDefPool

Link: https://github.com/supercollider-quarks/SynthDefPool

This is a quark by @crucialfelix from where we borrowed SynthDefs. We have also reused the metadata model as seen there.

sccode

Link: http://sccode.org/

Lots of great stuff on here, many SynthDefs by various authors were originallhy posted here. At the top comment in many our SynthDef files you will find the URL pointing to the sccode where we found the original SynthDef.

synthDEFaults

Link: http://sccode.org/1-5aD

A collection of SynthDefs organized by Fellipe Martins aka Zé Craum. A lot of of SynthDefs included in our collection were adapted from this source. The original authors' names have been preserved when known.

Contributors

Bruno Ruviaro @brunoruviaro - project lead; responsible for final review of all code, GUI creation, Quark maintenance, creation of some original SynthDefs

Josh Mitchell @joshmit - research assistant; responsible for standardizing coding conventions, rewriting SynthDefs to clarify or improve them, adding new amazing original SynthDefs

Meha Gupta @mehagupta - volunteer; initial gathering and upload of SynthDefs from mailing lists and public forums; contribution of additional demos

Diya Menon - volunteer; contribution of additional pattern demos

Most SynthDefs have their original author credited in the corresponding scd file. However, we could not identify the author for a few SynthDefs. Please let us know if you know the source of a SynthDef that has no author name, we'll be happy to add it.

Some conventions

SynthDefs should have the following arguments (default values encouraged but flexible):

  • out = 0, to be used in Out.ar(out, ...)
  • pan = 0, to be used in Out.ar(out, Pan2.ar(snd, pan))
  • freq = 440, for pitched synths
  • amp = 0.2, for global amp of synth
  • att = 0.01, attack time of the main amplitude envelope
  • rel = 1, release time of amplitude envelope
  • sus = 1, sustain level (as in a typical ADSR)
  • dec = 0.1, decay time (as in typical ADSR)
  • gate = 1, if using envelopes like ADSR (not needed if using self terminating envs such as Env.perc)

Miscellaneous:

  • Use variables snd for main sound (whatever that is) and env for amplitude env. Variations as needed.
  • Use doneAction: 2 to make synth free itself after note is done.
  • Avoid specifying durations directly inside SynthDef (other than att and rel) -- patterns will take care of durations.
  • Keep any relevant comments about the SynthDef as the header of the file (use block comment)
  • Use metadata: inside the SynthDef in the following format, where "category" corresponds to the name of the SCLOrkSynths subfolder where the SynthDef is saved:
},
metadata: (
	credit: "name of author(s) of SynthDef",
	category: \drums,
	tags: [\percussion, \kick]
)
).add;

sclorksynths's People

Contributors

brunoruviaro avatar joshmit avatar mehagupta avatar suhelkeswani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sclorksynths's Issues

Attribuition and license

Hi! Congrats for this work, really good to see this!

I started the SynthDEFaults project few years ago using my AKA Zé Craum and I am wondering if it isn´t better to mention all the contributors with their respective AKA on the readme of this project, making a list of all of them. The main problem that I see is that SCcode does not have one explicit license, so basically people can claim some type of direct attribution. When I was gathering the SynthDefs from SCcode I decided to use GPL3, but this is also a problem because the nested code did not said explicit that they were under GPL3....

I am not a specialist on copyright and law, but I think it would be polite to quote everyone as a whole in a list. What do you think ?

stealthissound.scd

stealthissound.scd comes with SuperCollider. Reuse / adapt SynthDefs from there.

"Loadable" SynthDefs

From my point of view it would be nice if the SynthDefs in the repository were directly loadable, i.e. the files could be included with SuperCollider's "load" and "loadRelative". This way one could simply clone the repository and then directly import and play around with the SynthDefs by calling, e.g.

loadRelative("SynthDefs-for-Patterns/blips.scd");

Right now not all files can be loaded like this and some play the included demo patterns upon loading.

For directly loadable SynthDefs I would suggest

  • one SynthDef per file, where the filename is identical to the SynthDef name
  • demo patterns can populate a global dictionary, e.g. ~synthDemos["blips"].play would play the blips SynthDef demo pattern

These are just some ideas. To get a better feeling of how this would work out in practice I've partially implemented and tested them in a new branch. I've also experimented with organizing the files into modules and submodules which can be "loaded" via a initmodule.scdfile (this certainly needs refinement). Lastly, I've thrown together a quick GUI for playing all the demo patterns (~synthDemoGui). If you consider some of these ideas worth pursuing, I could create a pull request.

By the way, I've had a lot of fun playing around with the SynthDefs, so thanks a lot for putting them up on GitHub. Such a SynthDef collection repository is definitely super useful.

GUI does not launch

Trying to open the GUI on Windows PC gives the following error:

ERROR: Message '+/+' not understood. RECEIVER: nil ARGS: Instance of String { (000002398F6F6700, gc=01, fmt=07, flg=11, set=02) indexed slots [9] 0 : S 1 : y 2 : n 3 : t 4 : h 5 : D 6 : e 7 : f 8 : s } PATH: C:/Users/Mack/Downloads/SCLOrkSynths-master/SCLOrkSynths-master/SCLOrkSynths.sc CALL STACK: DoesNotUnderstandError:reportError arg this = <instance of DoesNotUnderstandError> Nil:handleError arg this = nil arg error = <instance of DoesNotUnderstandError> Thread:handleError arg this = <instance of Thread> arg error = <instance of DoesNotUnderstandError> Object:throw arg this = <instance of DoesNotUnderstandError> Object:doesNotUnderstand arg this = nil arg selector = '+/+' arg args = [*1] Meta_SCLOrkSynths:gui arg this = <instance of Meta_SCLOrkSynths> var header = nil var gap = 5 var margin = 10 var banksMenu = nil var currentBank = 'drums' var numberOfColumns = 5 var numberOfRows = 10 var windowWidth = 800 var windowHeight = 480 var buttonWidth = 152.0 var buttonHeight = 25 var buttonArray = nil var activeButton = nil var footer1 = nil var footer2 = nil var currentSynth = nil var currentSynthText = nil var banks = nil Interpreter:interpretPrintCmdLine arg this = <instance of Interpreter> var res = nil var func = <instance of Function> var code = "SCLOrkSynths.gui" var doc = nil var ideClass = <instance of Meta_ScIDE> Process:interpretPrintCmdLine arg this = <instance of Main> ^^ The preceding error dump is for ERROR: Message '+/+' not understood. RECEIVER: nil

Make stop button to trigger a 0.5 second fade out to the currently demo

Currently if user hits stop button while a Pbind demo is playing, it's not a predictable stop -- for example if demo sounds have long release times, those notes will be lingering until their release time ends (which can be several seconds after 'stop' was pushed).
Fix that by making a mandatory 0.5 second fade-out and free synths to any demo currently playing.

show me the code not working (scnvim Linux)

(it works in SCIDE though)

In nvim:

ARGS:
CALL STACK:
DoesNotUnderstandError:reportError
arg this =
Nil:handleError
arg this = nil
arg error =
Thread:handleError
arg this =
arg error =
Object:throw
arg this =
Object:doesNotUnderstand
arg this =
arg selector = 'front'
arg args = [0]
Meta_SCLOrkSynths:showMeTheCode
arg this =
arg synth = "acidOto3091"
var sPath = "/home/debian/.local/share/Su..."
var pPath = "/home/debian/.local/share/Su..."
var sString = "/

Retrieved from acid_oto30..."
var pString = "Pdef(\acidOto3091,
PmonoArt..."
var pStringLastAscii = 41
Button:doAction
arg this =
arg modifiers = 0
Button:prDoAction
arg this =
arg mods = 0
^^ ERROR: Message 'front' not understood.
Perhaps you misspelled 'post', or meant to call 'front' on another receiver?
RECEIVER: a Document
WARNING: keyword arg 'title' not found in call to Meta_Document:new
WARNING: keyword arg 'string' not found in call to Meta_Document:new
ERROR: Message 'front' not understood.
Perhaps you misspelled 'post', or meant to call 'front' on another receiver?
RECEIVER:
Instance of Document { (0x55ddf0800388, gc=D8, fmt=00, flg=00, set=02)
instance variables [2]
path : nil
dataptr : nil
}
ARGS:
CALL STACK:
DoesNotUnderstandError:reportError
arg this =
Nil:handleError
arg this = nil
arg error =
Thread:handleError
arg this =
arg error =
Object:throw
arg this =
Object:doesNotUnderstand
arg this =
arg selector = 'front'
arg args = [0]
Meta_SCLOrkSynths:showMeTheCode
arg this =
arg synth = "acidOto3091"
var sPath = "/home/debian/.local/share/Su..."
var pPath = "/home/debian/.local/share/Su..."
var sString = "/

Retrieved from acid_oto30..."
var pString = "Pdef(\acidOto3091,
PmonoArt..."
var pStringLastAscii = 41
Button:doAction
arg this =
arg modifiers = 0
Button:prDoAction
arg this =
arg mods = 0
^^ ERROR: Message 'front' not understood.
Perhaps you misspelled 'post', or meant to call 'front' on another receiver?
RECEIVER: a Document

Add sample-based synths

Create new banks for sample-based synths that depend on a separate folder with samples (likely a separate Quark like e.g. Dirt-Samples).
Make it optional? If optional , lighter download at first, user can start running non-sample synths sooner; better case for slow connections, quick demos in workshops, etc; OR make the dependency required? So that while it may take longer to download everything, users will have full access to all synths including sample based ones right away.

increase memSize

initialize memSize to a larger value when SCLOrkSynths is first run

organToneWheel series

Move doneAction: 2 out of envelope and into a DetectSilence (otherwise reverb is not properly heard)

ksbass: Change envelope definition

exciter = Env.linen(
attackTime: rise/total,
sustainTime: up/total,
releaseTime: fall/total).ar;

Use Env.new instead, to clarify the importance of impulseHold. Something like:
Env.new( levels: [0, 1, 1, 0, 0], times: [impulseAtt, impulseSus, impulseDec, impulseHold] )

Also update arg names as you did in Google Doc (impulseAtt, impulseSus, impulseDec, impulseHold).

Steal the synth defs from Sonic-Pi

Sonic-Pi includes a decent-sized collection of synths, mostly written Overtone. I've had some success loading the compiled synths into SuperCollider but unfortunately, they don't seem to handle chords (i.e. arrays of notes). They also seem to have a different mapping of input frequency to output frequency; a degree of 0 on most SC synths is equivalent to around 30 on the sonic-pi synths.

It should be fairly straightforward for someone with a better grasp of SC synthesis than me to translate the definitions to SuperCollider and make whatever adjustments are necessary to make them fit in.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.