Jeevan Farias

GSOC 2017 -- The Processing Foundation

The proposal for my GSOC project can be found here.

Below, find a general description of the work and links to all the Pull Requests pertaining to my work, which developed the Sound Library of p5.js, part of the Processing Foundation.

Thanks to Jason Sigal for being my mentor for GSOC 2017

Feel free to visit my Github repository, and the public processing/p5.js-sound respository.


Processing and p5.js are accessible tools that can be easy to understand for the novice programmer and powerful enough for the experienced. With the intention of helping to diversify the potential users and uses of Processing / p5, this proposal outlines a series of enhancements to p5.js.sound, including new effects, presets, and modules for algorithmic composition. These developments will be useful and interesting to electronic musicians interested in visual art, visual artists interested in electronic music, sound artists, and any other potential user of Processing. These developments are inline with the vision of the tool, as they will add features without distracting from its definition as a "flexible software sketchbook".

Summer Work Product

During the summer I authored 19 pull requests, and was involved with 27. All of these PRs are visible here. All work has been merged into the master p5.js-sound branch. Below I have included 8 PRs and 4 examples that I feel are the most important and demonstrative of my work.

Featured Contributions

Processing Sound

  • p5.Effect
  • This PR helped with the organization of the library. Many effects included much of the same code and so using a base class removes inconsistencies and makes it easier to make new effects.
  • Effects refactored
  • Once p5.Effect was built, the other effects in the library needed to be refactored to use inheritance
  • p5.Compressor
  • I added an audio compressor class to the library because it is a crucial process for audio production, and can help users get better sounds out of p5.js-sound
  • p5.EQ
  • Similarly to the p5.Compressor, p5.EQ is a quick and easy way to improve or drastically alter a sound source.
  • p5.Panner3D and p5.Listener3D
  • These classes added functionality to the former 3D sound component of the library. p5.Listener3D is currently undocumented, because its location in the library may move in the near future
  • Playing Sound

  • p5.SoundLoop
  • The p5.SoundLoop a simpler way to play notes than the Phrase/Part/Score interface. It is a loop with a very accurate clock (via ToneJS) which allows a user to play a loop, schedule sounds, and change all parameters on the fly.
  • Preset Library
  • I worked on developing a library of presets for p5.js and was able to do so for effects and synths. This work is still in progress, as the best way to store and access presets in the library can only be determined through time and use. Development should take place on this branch.
  • p5.MonoSynth and p5.PolySynth
  • This PR built on the work of b2renger from the synths branch of the p5.js-sound repo. I added an AudioVoice base class, p5.MonoSynth as an example extension, and p5.PolySynth as an audiovoice handler for polyphonic synthesizers.
  • Examples

    The following are some p5.js examples that I made as part of my developments to illustrate and demonstate the new additions to the library.

  • p5.Compressor GUI Example
  • Live Source
  • p5.EQ GUI Example
  • Live Source
  • p5.Panner3D and p5.Listener3D Example
  • Live Source
  • p5.SoundLoop Example
  • Live Source