# 1.02 Finite State (Design) Machines

So far we have seen how:

1. Information (in the sense of Shannon's ["Information Theory"]) can be recorded, or represented, as patterns of bits (binary numbers, or a series of yes-no decisions)
2. Using ["Boolean Logic"], a few basic logical building blocks (and, or, not), can be chained together to build simple machines that do simple things like decoding a pattern or adding binary numbers.

Until now though though we've been dealing with simple "black boxes" -- machines that (seen from the outside) simply have inputs and outputs. Time has not yet played a significant role -- ideally when the input to the machine is given, the outputs immediately change to reflect the inputs. (In practice of course, even electricity takes some time to flow though a logic gate, but ideally it works as fast as possible.)

However, by explicitly making use time and a notion of our machine being in different states, it becomes possible to extend these simple black-box machines into ones that do more interesting kinds of things.

You can download the [:Audio Cutup PD Patch: audio sample fsm patch here].

### Resources

• SoX sound editing command line tool
• LibriVox Public domain spoken books project

### Exercises

simple fsm's in pd

• Create a simple tone sequencer FSM in PD
• Revise the above to include some non-deterministic (random) branches
• Revise the above to use one or more inputs (pd toggles, or other switches)

audio cutup fsm's in pd

• Using your selection from LibriVox, and the ["Audio Cutup PD Patch"] build an audio cutup FSM in PD, using Random transitions
• Revise the above to use one or more inputs in it's transitions
• Revise your design to use "category" nodes -- that is, nodes that correspond to a general category, of which you can connect a number of specific examples.