sciss / scalacolliderswing

Contributors Wanted GNU Affero General Public License v3.0 GitHub

A Swing based front end or "mini-IDE" for ScalaCollider. Mirror of https://codeberg.org/sciss/ScalaColliderSwing

icon

ScalaCollider-Swing

Gitter Build Status Maven Central Donate using Liberapay

statement

ScalaCollider-Swing is a Swing GUI front-end for ScalaCollider. ScalaCollider is a client for the SuperCollider sound synthesis server.

(C)opyright 2008–2021 by Hanns Holger Rutz. All rights reserved. It is released under the GNU Affero General Public License v3+ and comes with absolutely no warranties. To contact the author, send an e-mail to contact at sciss.de.

Please see the licenses folder for details. It contains the license headers for all dependencies and transitive dependencies. For the binary release of ScalaCollider-Swing, source code is not included but available via the respective OSS project pages, as indicated in the license files, or—in compliance with GPL/LGPL—on request via E-Mail. All source code with group-ID de.sciss is available from github.com/Sciss.

Please consider supporting this project through Liberapay (see badge above) – thank you!

screenshot

downloading

building from source

ScalaCollider-Swing builds with sbt against Scala 2.13, 2.12. The last version supporting Scala 2.11 was 1.41.4.

  • sbt assembly creates a fully self-contained jar (platform neutral)

To link to ScalaCollider-Swing:

"de.sciss" %% "scalacolliderswing" % v

Or just to some submodules:

"de.sciss" %% "scalacolliderswing-core"        % v  // only the core library extensions
"de.sciss" %% "scalacolliderswing-interpreter" % v  // plus the Scala REPL
"de.sciss" %% "scalacolliderswing-plotting"    % v  // plus plotting functions
"de.sciss" %% "scalacolliderswing-app"         % v  // plus the desktop IDE

The current version v is "2.9.2".

contributing

Please see the file CONTRIBUTING.md

running

The standalone jar, created via sbt assembly produces ScalaCollider.jar which is double-clickable and can be run via:

$ java -jar ScalaCollider.jar

Runnable packages can be created via sbt universal:packageBin (all platforms) or sbt debian:packageBin (Debian).

You can also run the "old" multi-window demo using

documentation

GUI commands

The GUI extensions are available by calling the special .gui method on supported objects. The extensions are imported with import de.sciss.synth.swing.Implicits._.

    // server
    s.gui.meter()               // show peak meters for main I/O
    s.gui.tree()                // show node tree for server's root group
    s.gui.scope()               // show oscilloscope for the output buses of the server

    // group
    someGroup.gui.tree()        // show node tree with a given group as root

    // audio-bus
    someBus.gui.meter()         // show peak meters for the given bus
    someBus.gui.waveform(dur)   // record and plot bus output for duration in seconds
    someBus.gui.scope()         // show oscilloscope for the given bus

    // graph functions
    val fun = graph {           // use `graph { ... }` instead of `play { ... }` to capture function
      PinkNoise.ar
    }
    fun.gui.waveform(dur)       // record and plot graph function for duration in seconds

Experimental support for JFreeChart is added (app sub-project only). Extensions are imported with import de.sciss.synth.swing.Plotting.Implicits._.

    Vector.fill(200)(random).plot()                 // 1D plot, lines
    Vector.fill(100)(random).plot(discrete = true)  // 1D plot, sample-and-hold

    Vector.tabulate(316) { i => (i * 0.003 * 0.2).cos -> (i * 0.025).sin } .plot()  // 2D plot, scatter

    Vector.fill(3)(Vector.fill(100)(random-random).integrate).plot() // multiple 1D plots

Chart properties and export to PNG and PDF are available through a context menu.