Skip to content

Instantly share code, notes, and snippets.

@fuxoft
Last active September 22, 2023 21:32
Show Gist options
  • Save fuxoft/bda3ad93006f42233de64342f5e7130f to your computer and use it in GitHub Desktop.
Save fuxoft/bda3ad93006f42233de64342f5e7130f to your computer and use it in GitHub Desktop.
gensym at line 30 generates non-unique values in Janet 1.31.0-c31314be
(defn generator
[]
(def factory @{})
(def generator-fun
(fn [output]
(ev/give output :stream-start)
(ev/give output 0)
(ev/give output :stream-end)))
(put factory :generate
(fn [self batch]
(def stream-out (ev/chan 1))
(def generator (ev/chan))
(ev/spawn (generator-fun generator))
(assert (= :stream-start (ev/take generator)))
(ev/give stream-out (ev/take generator))
(assert (= :stream-end (ev/take generator)))
stream-out))
(put factory :new
(fn [&]
(def object (thaw factory))
object))
factory)
(def sinetone
(generator))
(def track1
@{:generators @{}
:note-on (fn [self note-num]
(print (gensym))
(def generator (:new sinetone))
(put (self :generators) :just-one generator))
:renderer-coroutine (fn [self]
(coro
(forever
(map (fn [gen] (:generate gen 1)) (self :generators))
(yield 0))))})
(def wait
(do
(def render-fun
(do
(def cor (:renderer-coroutine track1))
(fn [] (resume cor))))
(fn []
(repeat 10000
(render-fun)))))
(forever
(:note-on track1 60)
(wait))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment