PInstrument is a set of modules for audio synthesis built in Pure Data designed to run on a small touch screen. Specifically, the interface is designed to work on a 320x240 2.8 inch TFT Capacitive Touchscreen but it will work on any larger screen. The PInstrument is also designed to run on a low-power CPU like those in a Raspberry Pi 3 or 4. It was also designed with a 4in/8out DC-coupled interface to be used with a Eurorack synthesizer. As of 2021, Expert Sleepers produces both the ES-8 and ES-9 that will solve these purposes.
Others are welcome to contribute to this project or to fork it off for their own and reuse components. For those assisting in this project, keep in mind the small form factor of the interface, the limitations of a Raspberry Pi, and the public license provided with this software.
Other considerations involve how signals are used in Eurorack. In general an audio signal in these patches should range from -1 to +1 rms which is -10 to +10V in Eurorack. Control signals should range from 0 to 1 rms which is 0 to 10V Eurorack. These signals can often be interchanged, but when designing a module consider whether a control signal should be put through an envelope follower, whether it is appropriate to take its absolute value, or whether you should scale and recenter it.
You can run this on any computer that can run Pure Data. If you'd like to use this in a Eurorack setup on a Raspberry Pi, I recommend the following:
- Raspberry Pi 3 or 4
- Expert Sleepers ES-8 or ES-9 audio interface.
- Adafruit PiTFT 320x240 TFT Capacitive Touchscreen or something larger. Mouse and keyboard work as well.
With a little effort, you can script the Pi to boot Pure Data and your patch and choose your audio interface as it starts up.
There're are Youtube videos demonstrating what it looks like and how it works.
The initial modules available are listed below. The touchscreen interface displays to the user a scrollable selection menu and the interface for one module. Selecting another module from the menu will display its controls. All modules run at the same time and can be patched together, no Eurorack needed! Input and output selectors can select audio interfaces inputs and outputs. These are displayed as numbers. Input and output selectors can also select internal routing, displayed as letters. The project includes a Pure Data abstraction that you can use to add these input and output selectors to your own project. Make sure to get the routing subpatch or they won't work!
Color Coding helps the user understand the controls. Green objects are tunable or toggleable parameters. Blue objects are input selectors. Grey objects are output selectors.
Four chained sine wave oscillators generate complex frequency modulated waveforms for control. Each oscillator has an identical set of controls.
- Course and fine tuning depend on finger placement.
- An external or internal signal can be used to reset the phase of the wave.
- The first output is the waveform's full amplitude.
- The second is an amplitude modulated output affected 20% by the previous oscillator in the series.
- The third is a gate that is high when the oscillator's amplitude is greater than the amplitude of the oscillator before it in the series.
Musically useful patterns automatically arise and modify themselves. These values are created by a sequence of bits. A trigger cycles through this sequence generating a repeating set of values.
Controls:
- Min sets the lowest MIDI note number to output in the series.
- Max sets the highest MIDI note number to output in the series.
- N steps divides the range of the min to max into an number of intervals of equal size.
- Length controls how many values are generated by the sequence.
- Rand determines the chance that a bit will flip from 0 to 1 or 1 to 0.
- QNT turns on equal tempered quantization.
Inputs and Outputs:
- Trigger generates a new value when the input crosses a threshold.
- Maximum receives a signal to set the Max MIDI note number of the series.
- Steps receives a signal to control the number quantization steps for the range of values generated.
- Random receives a signal to control how high a chance there is of a bit to flip.
- Output sends the signal (in Pd as an audio rate rms 0 to 1 and through the Expert Sleepers as 0 to 10V).
Phase Sequence is a phase sequencer with up to 18 steps with specific octave placement.
Controls:
- N steps sets how many steps to read through in the sequence, up to 18.
- 18 Pitch selectors allow the assignment of a specific pitch from C0 to E8.
Inputs and Outputs:
- CV Select receives a signal to choose on of the steps in the sequence. The input signal's range in Pd is 0 to 1 rms and in Eurorack 0 to 10V. This range is limited to the number of steps selected.
- Trigger changes the output value to the current step selected by the signal in CV select.
- Output sends a continuous signal of the last selected step that was triggered. This signal is 0 to 1 rms in Pd with 0.1 rms per octave and 0 to 10V in Eurorack with 1V per octave.
Diplays:
- A series of white exes flash to show the current status of each bit in the cycle.
- A percentage shows the value of the current configuration of bits from 0 to 100%.
- A note display shows the current MIDI note that results from the current set of bits as affected by the minimum and maximum pitch values and the interval step size.
Wave folder makes a signal harmonically richer by reflecting it when it exceeds a threshold.
Controls:
- Folds controls the number of extra harmonics that result from folding.
- Fold Atten controls the attenuation of the Fold CV that modulates the Fold parameter.
- Slew controls how quickly changes to Folds and Amps occur.
- Amp amplifies the audio input which can affect how much of the waveform gets folded.
- Amp Atten controls the attenuation of the Amp CV that modulates the Amp parameter.
Inputs and Outputs:
- Audio Input receives a signal. In Pd this signal is -1 to +1 rms and in Eurorack -10 to +10V. Exceeding these values is possible and will result in more of the waveform undergoing folding.
- Fold CV takes in a signal (0 to 1 rms / 0 to 10V Euro) and uses it to modify the Fold parameter.
- Amp CV takes in a signal (0 to 1 rms / 0 to 10V Euro) and uses it to modify the Amp parameter.
- Left Out and Right Out are copies of each other and output signals (-1 to +1 rms / -10 to 10V Euro).
This is a four channel VCA that can also be used for panning and mixing.
Controls:
- Attenuate affects how much the CV signal modulates the amplitude of the input signal.
Inputs and Outputs: Each channel has two inputs and two outputs and are identical in function.
- Input receives a signal (-1 to +1 rms / -10 to 10V Euro).
- CV receives a signal and tracks its envelope. This is used to modulate the amplitude of the Input based on the Attenuate parameter.
- Left Out sends the modulated version of the Input. (-1 to +1 rms / -10 to 10V Euro)
- Right Out is the opposite of Left Out. When amplitude on the left is high, right will be low, allowing the Input to be panned. (-1 to +1 rms / -10 to 10V Euro) All channels are mixed into the Left Mix and Right Mix outputs. (-1 to +1 rms / -10 to 10V Euro)
This is a four channel VCO that produces only cosine waveforms.
Controls: All four generators have identical function and controls.
- Range in octaves.
- 8v Offset controls which octave is at the very bottom of the range.
- Step Offset controls which pitch is at the very bottom of the range.
- Quantize constrains the Freq CV input to an equal tempered scale.
Inputs and Outputs:
- Freq CV receives a signal (0 to 1 rms / 0 to 10V Euro) which sweeps through the assigned range of notes.
- OSC Out sends a signal (-1 to +1 rms / -10 to 10V Euro).
Runs four channels off one clock. The tempo can be modulated by an external signal. The bottom two clock dividers can also be used to generate clock-synced waveforms.
Controls: All four clock dividers have the following:
- Multiplier extends the clock beat by an integeral multiplier.
- Divisor repeats the clock a number of times equal to the given integer.
The bottom two clocks additionally have a wave selector and an extra output. The selected waveform is clock synced to the given multiplier/divisor ratio. Choices include sign, triangle, descending sawtooth, and square.
Additional controls:
- Attenuate adjusts how much the Tempo CV signal affects the tempo.
- Switch turns the master clock on and off.
- N BPM controls the rate of the master clock in beats per minute.
Inputs and Outputs:
- Tempo CV receives a control signal (0 to 1 rms / 0 to 10V Euro) that modifies the rate of the clock.
- Each clock divider has a clock out that sends a short signal pulse (1 rms in Pd / 10V in Euro).
- The bottom clock dividers have a waveform output that sends a clock-synced waveform (0 to 1 rms / 0 to 10V Euro).
Drums is a quick mockup of a drum synth which includes a hihat, clap, snare, and kick drum as well as a side chain that will be compressed on each kickdrum pulse.
Controls:
- Each drum has a row of eight toggles which can be used to create patterns.
- The Sync button causes all four patterns to return to their first step. They can quickly become out of sync if they each have a different trigger source.
Inputs and Outputs:
- Each drum has a trigger input. A high rms or Eurorack voltage will trigger that drum's channel. Each drum can be assigned to receive their trigger from a different input source.
- Two side chain inputs each receive an audio signal (-1 to +1 rms / -10 to 10V Euro) which go to the side chain outputs.
- Each drum has an signal output. They output an audio signal when triggered (-1 to +1 rms / -10 to 10V Euro).
- Two side chain outputs send audio signals (-1 to +1 rms / -10 to 10V Euro) and are compressed whenever the kickdrum is triggered.
Pitch Tracker follows the pitch of three signals and outputs appropriate control voltages to control other modules' volt per octave inputs.
Controls:
- Each channel has a Quantized toggle that will restrain the output pitch to an equal tempered scale. When off, there are no tuning constraints.
- Each channel has a Portamento slider that sets the time it takes to ramp from the previous pitch to the new pitch. This range is logarithmic from 0.9ms (displayed as 0) to 999ms.
Inputs and Outputs: Each channel has identical functionality and controls.
- Audio Input takes in an audio signal (-1 to +1 rms / -10 to 10V Euro) and tracks its pitch and amplitude.
- Discr Pitch outputs discrete pitches that are detected from the input to the selected destination. These pitches are 0.1 rms per octave in Pd and 1V per octave in Eurorack.
- Conti Pitch outputs pitch continuously to the selected destination. The values for pitch are the same as above.
- Envelope outputs the amplitude of the incoming signal continuously (-1 to +1 rms / -10 to 10V Euro).
Displays: Three displays show the current pitch an octave for each channel.