I ended up splitting out all the Vivid.Jbb stuff from the stuff
provided by the 'vivid' package, so I don't have confusion with the
"real" vivid. This did mean I had to re-import the >26 arg instances.
Overall I'm glad I did, since I feel like it'll get harder to
I agree, it's not arranged optimally yet. Rather than Vivid.Jbb.Dispatch I
intend to move Dipsatch to Vivid.Dispatch. Vivid.Jbb.Synths ought to be
somewhere also; maybe Dispatch.Synths.Examples? I thought once it's good
I'd post it to Hackage as a separate, Vivid-dependent package.
You mention that you silence synths before freeing them, to
prevent popping sounds. Does this definitely prevent that? If I'm
looking in the right place it looks like "amp" is just getting set to
zero, which can still cause pops, right? (I.e. sudden drops from 1.0
You're right, it's no sure thing. In fact the Boop synth (so far the only
one I'm really using, even though Zot is really dope -- it's based on
Reaktor Spark, a crazy feedback synth by Stephen Schmidt of Native
Instruments, the manual of which illustrates the network) pops when it's
silenced. I'll need to use envelopes ... which still baffle me ...
The better solution will be for the user to specify on a per-synth basis
how to turn it off poplessly. dispatchLoop would then send that
message|those messages, half a frameDuration before freeing the synth.
The Vivid.Jbb.ReadHsAsGhci stuff is a clever solution to the
reload problem, but if you haven't seen it before I might recommend
the foreign-store package (hackage.haskell.org/package/foreign-store
This should let you do a true ghci ":r", while keeping the bindings
for your current "disp", "tid", "hush", etc. I think this
well with your ":s" and ":." workflow
# Install things (note I'm using ghc+cabal, not stack):
I've added a note to the todo doc that I should include such Cabal guidance
when publishing it. I don't even have Cabal installed; your guidance might
be the entirety of it.
When I get around to splitting Vivid.Dispatch from Vivid I'll ask you
whether you're able to run it in Cabal.
Here, have a (very) rudimentary pattern!:
stop disp "meta" >> stop disp "a slow pattern"
replace disp "a faster one" $ cat [fast 4 $ p 330 220, fast 4 $ p
660 440, rev $ p 440 220, rev $ fast 4 $ p 330 440, fast 4 $ p 330
Woah -- rhythm! Added to demo.
I also needed to comment out the "Vivid.Jbb.Random.Signal"
Neat -- I didn't realize stack forgives exposing a nonexistent module until
you pointed out that Cabal doesn't.