Looper's Delight Archive Top (Search)
Date Index
Thread Index
Author Index
Looper's Delight Home
Mailing List Info

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Date Index][Thread Index][Author Index]

Jeff's scratching - a pseudo VHDL code



As an extension to my last message, here is some pseudo VHDL code (that's
because I'm not at all familiar what scripting language can do right now -
what's the status of the documentation?) to describe what I think needs to
be done:

-- I won't deal with variable declaration here
-- things we get externally: "controller", which is an integer describing
the finger position, "finger", a boolean stating whether the finger is on
-- the controller or not, finally "clk", a clock for the process. There's a
constant "clk_delta", which is the clock half-period in ms.
-- 

process scratching is
begin
        wait until finger'event and finger      -- wait until you put a
finger on the controller
        pause                                           -- pauses playback
        direction_s <= direction                -- used to store playback
direction (Forward or Backward)
        rate_s <= rate                          -- and rate
        ctrl_last <= controller                 -- store current finger
position
        ctrl_last2 <= controller
        loop: scratching                                -- inner loop;
active while finger is on the controller
                wait until clock'event
                if controller = ctrl_last AND controller = ctrl_last2   
then
                        pause                           -- pause playback 
if
finger hasn't moved for last two clocks
                elsif controller != ctrl_last then
                        play
                        ctrl_delta = controller - ctrl_last
                        if ctrl_delta > 0 then  -- check for playing
direction
                                if direction_s = forward then
                                        forward
                                else
                                        backward
                                end if
                        elsif
                                if direction_s = forward then
                                        backward
                                else
                                        forward
                                end if
                        end if
                        pbspeed = ctrl_delta/clk_delta  -- playback speed
scale factor is the controller delta since last clk'event divided by
clk_delta
                        rate = ln(pbspeed)*17,3123404906676 -- ugly scale
factor to convert from pbspeed to rate
                end if
                if not finger then
                        exit scratching                         -- exit 
from
loop
                end if
        end scratching loop
        -- if in the loop the finger is lifted, we resume here
        direction <= direction_s
        rate <= rate_s
        play
end process scratching

Hope that helps to explain what I'm after. Aaron, I'd also like to hear 
your
comments if you'd like.