Creative Machines
Creative Machines
Joseph Wilk
Romance
Creativity
Creativity
Psychological Historical
Combination
Combination
Exploration
Exploration
Transformation
Transformation
Transformation
Creative Machines
Death
Entropy!
=
Chaos
Music
Complexity
Delta Theta
Test!subject:!X
HUMAN BRAIN
Allusion
Creativity!relies!in!part!on!the!juxtaposition!of! allusions!to!the!work!of!others
David Cope
https://github.com/josephwilk/musical-creativity/blob/master/src/musical_creativity/allusion/sorcerer.clj
Recombinance
Creativity!does!not!originate!from!a!vacuum
David!Cope
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
beat
Leading!voice
Beat!store beat
72
{:start-notes '(53 57 62 65) :destination-notes '(45 57 64 72) :events '((22000 53 500 4 96) (22000 57 1000 3 96) (22000 62 1500 2 96) (22000 65 1000 1 96) (22500 55 500 4 96) (23000 57 1000 4 96) (23000 57 1000 3 96) (23000 64 1000 1 96) (23500 61 500 2 96)) :voice-leading '((4 -8 0 b43800b-14) (9 -8 2 b43800b-14) (12 -8 7 b43800b-14) (5 0 2 b43800b-14) (8 0 7 b43800b-14) (3 2 7 b43800b-14))}
beat
72
72
72
Leading!voice
Beat!store beat
72
{:start-notes '(53 57 62 65) :destination-notes '(45 57 64 72) :events '((22000 53 500 4 96) (22000 57 1000 3 96) (22000 62 1500 2 96) (22000 65 1000 1 96) (22500 55 500 4 96) (23000 57 1000 4 96) (23000 57 1000 3 96) (23000 64 1000 1 96) (23500 61 500 2 96)) :voice-leading '((4 -8 0 b43800b-14) (9 -8 2 b43800b-14) (12 -8 7 b43800b-14) (5 0 2 b43800b-14) (8 0 7 b43800b-14) (3 2 7 b43800b-14))}
beat
72
72
72
53 - 45
beat
Leading!voice
Beat!store beat
72
{:start-notes '(53 57 62 65) :destination-notes '(45 57 64 72) :events '((22000 53 500 4 96) (22000 57 1000 3 96) (22000 62 1500 2 96) (22000 65 1000 1 96) (22500 55 500 4 96) (23000 57 1000 4 96) (23000 57 1000 3 96) (23000 64 1000 1 96) (23500 61 500 2 96)) :voice-leading '((4 -8 0 b43800b-14) (9 -8 2 b43800b-14) (12 -8 7 b43800b-14) (5 0 2 b43800b-14) (8 0 7 b43800b-14) (3 2 7 b43800b-14))}
beat
72
72
72
Lexicon
{"bach-45-57-64-72" {:beats ("b43800b-15" "b43600b-62" "b43300b-10" "b43100b-2")}}
Recombinance DEMO
CHEAT!
Influence
Creativity!develops!within!enfolding!and! influencing!context,!and!not!in!isolation
David!Cope
Learning Inference
Creativity!requires!learning!and!knowledge!in!order!to! produce!useful!rather!than!arbitrary!results
David Cope
Inference!&!Analogy
David Cope
Emily Howell
Creative Machines
Joseph Wilk
it!can!do!whatever!we!know!how!to!order!it! to!perform!
!
it!has!no!pretensions!whatever!to!originate! anything
Not Conscious
(ns ^{:doc "The semi-sweet representation of provided forms."} midje.parsing.3-from-lexical-maps.from-fake-maps (:use midje.clojure.core midje.checking.core [midje.checkers :only [exactly]] [midje.checking.checkers.defining :only [checker?]] [midje.parsing.arrow-symbols]) (:require [midje.util.exceptions :as exceptions])) (defn- mkfn:arg-matcher "Based on an expected value, generates a function that returns true if the actual value matches it." [expected] (if (and (extended-fn? expected) (not (checker? expected))) (fn [actual] (extended-= actual (exactly expected))) (fn [actual] (extended-= actual expected))))
(defn mkfn:arg-matchers-with-arity "Generates a function that returns true if all the matchers return true for the actual args its passed." [matchers] (fn [actual-args] (let [arg-matchers (map mkfn:arg-matcher matchers)] (and (= (count actual-args) (count arg-matchers)) (extended-list-= actual-args arg-matchers))))) (defn mkfn:arg-matchers-without-arity "Generates a function that returns true if all the matchers return true but it ignores arity matching." [matchers] (fn [actual-args] (let [arg-matchers (map mkfn:arg-matcher matchers)] (extended-list-= actual-args arg-matchers)))) (defmulti mkfn:result-supplier (fn [arrow & _] arrow))
Empty Program
(defmethod mkfn:result-supplier => [_arrow_ result] (constantly result)) (defmethod mkfn:result-supplier =streams=> [_arrow_ result-stream] (let [the-stream (atom result-stream)] (fn [] (when (empty? @the-stream) (throw (exceptions/user-error "Your =stream=> ran out of values."))) (let [current-result (first @the-stream)] (swap! the-stream rest) current-result)))) (defmethod mkfn:result-supplier =throws=> [_arrow_ throwable] (fn [] (when-not (instance? Throwable throwable)
Non human
Creativity
Subconscious
Joseph Wilk
Subconscious
Joseph Wilk