Our old friend Tidal has a function I quite like - degrade
Tidal is a pattern based language and degrade simply drops an event from a pattern 50% of the time.
input: [1,1,1,1,1,1,1,1]
-> degrade(input)
use_debug false | |
use_bpm 130 | |
# Our mixer! | |
master = (ramp *range(0, 1, 0.01)) | |
kick_volume = 1 | |
bass_volume = 1 | |
revbass_volume = 1 | |
snare_volume = 0.5 | |
hats_volume = 0.5 |
# Based on conversations with Dan Friedman and Jason Hemann | |
# To evaluate use Sonic Pi... | |
define :valof do |exp, env={}| | |
return exp if exp.is_a? Numeric | |
return env[exp] if exp.is_a? Symbol | |
if exp.is_a?(Array) && exp[0] == :lambda | |
lambda do |a| | |
x = exp[1][0] |
theNotes = [:a2, :a3, :e3, :a4, :g4, :e4] | |
define :foo do |samp, n| | |
sample samp, | |
rate: pitch_ratio(note(n) - note(:a3)), | |
sustain: 0.05, | |
release: 0.1, | |
amp:3 | |
end |
require 'rubygems' | |
$LOAD_PATH.unshift '/Users/josephwilk/Workspace/ruby/ashton/lib/' | |
require "ashton" | |
class TestWindow < Gosu::Window | |
NOISE_FRAGMENT =<<-END | |
#version 110 | |
// Use 3D Simplex noise, even though the shader operates on a 2D | |
// texture, since then we can make the Z-coordinate act as time. |
# Live coding example for Retune conference 2014 | |
# 1) Press Run (Cmd+R) to start | |
# 2) Make changes (e.g. comment in/out various lines in :beats & :amen) | |
# 3) Press Run again (changes will only be audible from next queue point) | |
# compute loop length (4 bars), bar & quarter note durations | |
dur = sample_duration :loop_compus | |
bar = dur / 4 | |
quart = dur / 16 |
I'm stealing/playing around with ideas from the tidal language here.
Tidal is more focussed on creating loop based music and manipulating samples. It has a good (although initially scary looking) DSL for this purpose.
every 6 (density 2) $ jux (iter 8) $ every 8 rev $
every 5 (0.25 <~) $ sound "[808a/4*16, 808a/2 [808a/3 ~ ~ 808b] [~ 808b/3 808b/3 ~] [~], [~ ~ ~ [~ 808b/2]]/2]"
|+| speed "[1 1 1 [1.5 0.8] 1 1 1 [1 0.5]]/8"
(ns mr-jr | |
(:refer-clojure :exclude [shuffle]) | |
(:require [clojure.string :as string] | |
[clojure.core.async :as async])) | |
(defn async-group-by | |
"Kinda like clojure.core/group-by, but takes a channel and returns a channel" | |
[f g ch] | |
(->> ch | |
(async/reduce |
(ns explore-overtone.beethoven | |
(:use [overtone.live])) | |
;; Beginning with some of the ideas in Sam Aaron's example[1], | |
;; let's see about trying to get rid of the limitation on sequence | |
;; length. | |
;; | |
;; I'd like to create a composition outside the server in "beat space" | |
;; (play note N at beat B). This should allow for composing notes via | |
;; an abstraction that a library like Leipzig [2] provides. But, |