Git Product home page Git Product logo

at-at's Introduction

                                                          888
                                                          888
         _ooooooooo._                                     888
      ,o888PP""""PP88   .d88b.  888  888  .d88b.  888d888 888888 .d88b.  88888b.   .d88b.
    d88P''          '  d88""88b 888  888 d8P  Y8b 888P"   888   d88""88b 888 "88b d8P  Y8b
  ,88P                 88    88 Y88  88P 88888888 888     888   88    88 888  888 88888888
 ,88                   Y88..88P  Y8bd8P  Y8b.     888     Y88b. Y88..88P 888  888 Y8b.
,88'                    "Y88P"    Y88P    "Y8888  888      "Y888 "Y88P"  888  888  "Y8888
d8P
d8b                        88[
`88                       J88
 Y8b                     ,88'
  Y8b.                  d88'
   `Y8b._            _o88P
     `Y888oo.____ooo888P'
        '"PP888888PP''

Collaborative Programmable Music.

Overtone is an Open Source toolkit for designing synthesizers and collaborating with music. It provides:

  • A Clojure API to the SuperCollider synthesis engine
  • A growing library of musical functions (scales, chords, rhythms, arpeggiators, etc.)
  • Metronome and timing system to support live-programming and sequencing
  • Plug and play MIDI device I/O
  • A full Open Sound Control (OSC) client and server implementation.
  • Pre-cache - a system for locally caching external assets such as .wav files
  • An API for querying and fetching sounds from http://freesound.org
  • A global concurrent event stream

Quick Start

Installation

  • Install Java, since this is a prerequisite for Clojure

    • Quite often Java will already be installed, if java -version works and shows you a version of 11 or higher you should be good
    • On Linux, you should be able to use your operating system package manager, for instance on Ubuntu the package will be called something like openjdk-17-jdk
    • On MacOS you can use Homebrew if you have it
    • https://adoptium.net/ has installers for most operating systems
  • Install the Clojure CLI tools, see Install Clojure

    • Also install rlwrap if you can, without it clojure will work, but clj will not, and you won't have history and line editing in your Clojure REPL
  • Install SuperCollider, preferrably through your operating system's package manager (apt, yum, pacman, homebrew, chocolatey, etc.)

    • The main package is called supercollider everywhere
    • If there's a package names sc3-plugins, then install that as well

At this point you should have clojure and scsynth available.

$ clojure --version
Clojure CLI version 1.11.1.1413

$ scsynth -v
scsynth 3.13.0 (Built from  '' [na])

Now you can add overtone/overtone as a dependency, and start a Clojure REPL.

mkdir happy-vibes && cd happy-vibes
echo '{:deps {overtone/overtone {:mvn/version "0.14.3199"}}}' > deps.edn
clj

Clojure 1.11.1
user=>

Making sounds

;; boot the server
user=> (use 'overtone.live)
--> Loading Overtone...
[overtone.live] [INFO] Found SuperCollider server: /usr/bin/scsynth (PATH)
--> Booting external SuperCollider server...
--> Connecting to external SuperCollider server: 127.0.0.1:26325
[scynth] SuperCollider 3 server ready.
--> Connection established

;; listen to the joys of a simple sine wave
user=> (demo (sin-osc))

;; or something more interesting...
user=> (demo 7 (lpf (mix (saw [50 (line 100 1600 5) 101 100.5]))
                    (lin-lin (lf-tri (line 2 20 5)) -1 1 400 4000)))

Linter (clj-kondo)

Run overtone.linter/emit! to emit clj-kondo configuration.

Do not commit the generated files, it's a bunch of data.

Detailed Instructions

For a more detailed set of setup instructions (including details specific to Windows and Linux) head over to the Overtone wiki installation page

We maintain documentation for all aspects of the system in the project wiki, you'll find tutorials and examples on topics such as synthesizing new sounds from scratch, live-coding and generating musical scores on the fly. If you see anything missing, please feel free to add it yourself, or hit us up on the mailing list and we'll sort something out.

Cheat Sheet

For a quick glance at all the exciting functionality Overtone puts at your musical fingertips check out the cheat sheet:

https://github.com/overtone/overtone/raw/master/docs/cheatsheet/overtone-cheat-sheet.pdf

Overtone Powered Bands

A list of bands using Overtone to generate sounds:

Community

Mailing List

We encourage you to join the mailing list to see what other people are getting up to with Overtone. Use it to ask questions, show off what you've made and even meet fellow Overtoners in your area so you can meet up for impromptu jam sessions. All we ask is that you be considerate, courteous and respectful and that you share as much of your code as possible so we can all learn how to make crazy cool sounds together.

Clojurians Slack

You can find us in the #overtone channel on Clojurians Slack.

Web

Our main website is hosted on GitHub: http://overtone.github.io

Videos

Introductions

Head over to Vimeo for a fast-paced 4 minute introduction to live-coding with Overtone to see what's possible

http://vimeo.com/22798433

For a nice overview of the basics of creating and playing with synthesized instruments in Overtone checkout Philip Potter's 20 minute workshop:

http://skillsmatter.com/podcast/scala/clojurex-unpanel-2894

Chris Ford also delivers a beautifully paced introduction to fundamental music concepts from basic sine waves to Bach's Goldberg Variations with live examples throughout:

http://skillsmatter.com/podcast/home/functional-composition

There are also the following tutorials:

Presentations

Interviews

Overtone has generated quite a bit of interest. Here's a list of available interviews which go into further depth on the background and philosophy of Overtone:

Performances

Source Repository

Downloads and the source repository can be found on GitHub:

http://github.com/overtone/overtone

Clone the repository on GitHub to get started developing, and if you are ready to submit a patch then fork your own copy and do a pull request.

clojure.tools.deps and Leiningen Support

Overtone and its dependencies are on http://clojars.org, and the dependency for your deps.edn is:

{overtone/overtone {:mvn/version "0.14.3199"}}

or for your project.clj (Leiningen)

[overtone/overtone "0.14.3199"]

Contributors

See: https://github.com/overtone/overtone/graphs/contributors

License

The MIT License, see [[LICENSE]].

Copyright © 2009-2024 Jeff Ross, Sam Aaron, and contributors.

at-at's People

Contributors

alekcz avatar bmabey avatar carlhoerberg avatar djui avatar dmac avatar edwardbetts avatar ifesdjeen avatar michaelneale avatar plexus avatar roeemz avatar samaaron 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

at-at's Issues

Reflection warnings

First of all, thank you for the library!

We can still see some reflection warnings using your library:

Reflection warning, overtone/at_at.clj:15:3 - reference to field printStackTrace can't be resolved.
Reflection warning, overtone/at_at.clj:211:16 - call to java.util.concurrent.ScheduledThreadPoolExecutor ctor can't be resolved.

I believe it would be a good idea to add a call to (set! *warn-on-reflection* true) in the test suite or something like that to avoid regressions.

Expose exceptions in scheduled functions

At the moment, if a scheduled function throws an exception it fails silently.

(def tp (at-at/mk-pool))

(defn -main [& args]
  (at-at/every 1000 #(throw (Exception. "You'll never see me"))
               tp :desc "My job")
  (Thread/sleep 3000)
  (System/exit 0))

This can be confusing and make it appear that the function isn't running.

Ideally I'd like to see output like this:

at-at task [1][RECUR] "My job" threw java.lang.Exception: You'll never see me
at-at task [1][RECUR] "My job" threw java.lang.Exception: You'll never see me
at-at task [1][RECUR] "My job" threw java.lang.Exception: You'll never see me

Another option would be to fail fast by re-raising the exception and crashing the program, which would at least indicate that the user needs to handle an error case.

`clojure.pprint/simple-dispatch` needs to be implemented for self-referrential types

Currently, only print-method is defined:

(defmethod print-method RecurringJob

This still causes StackOverflowError when pretty printing these types (the cycle I saw was in java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask, which may belong to :pool-info). The clojure.pprint/simple-dispatch impl may simply call print to dispatch to the print-method.

Repro:

(let [pool (overtone.at-at/mk-pool)]
  (try
    (let [job (overtone.at-at/every 1000 #(println "sched") pool)]
      ;(clojure.pprint/pprint pool) ;; StackOverflow
      (clojure.pprint/pprint job) ;; also
      )
    (finally 
      (overtone.at-at/stop-and-reset-pool! pool))))

I haven't tried other types.

add 'stop-pool!' function

I'd like a way to shutdown a thread pool without also resetting it. Currently, I have to just call stop-and-reset-pool!, which shuts down the the pool (good) but also creates a new thread pool, which I don't actually want to happen, since I'm calling this in the context of shutting down the entire application.

Cannot import from leiningen 2.0 dependency

I have the following in my project.clj

[overtone/at-at "1.1.1"]

And running lein deps gave no errors and I have confirmed that at-at is on my classpath (lein classpath | grep "at-at") however when I try to use:

(use 'at-at)
or (use 'overtone/at-at)

It results in:

Exception in thread "main" java.io.FileNotFoundException: Could not locate at_at__init.class or at_at.clj on classpath

Happens also when putting it in the namespace. Thoughts?

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.