bzub / bleep

Synthesizer/sequencer written in Golang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

bleep

Go Report Card Documentation

Hobby 8bit/16bit synthesizer/sequencer that can also be used as a virtual MIDI device.

Sine wave

I don't really have any goals for this project, but it's #instructive.

Demo songs / Progress

Old examples first:

  1. basic wave forms and delay
  2. the shabbiest percussion channel
  3. stereo, 16bit, tremelo
  4. granular synthesis, sequencer, automations, euclidian rhythms

Features

Things that generate waveforms (generators/):

  • Sine wave oscillator
  • Square wave oscillator
  • Sawtooth wave oscillator
  • Triangle wave oscillator
  • Pulse wave oscillator
  • White noise generator
  • .wav playback
  • Grain generator
    • Configurable grain size
    • Configurable birth rate
    • Configurable density/nr of generators
    • Configurable speed (=position in sample)
    • Position randomization
    • Windowing functions
    • TODO: pitch control (= grain playback speed)

Things that wrap things that generate waveforms (generators/derived/):

  • ADSHR envelopes (attack, decay, sustain, hold, release)
  • Transposing generator
  • Combining multiple generators into one
  • Harmonics generator
  • Vocoder
  • A filtered generator (see below)

Things that filter (filters/):

  • Overdrive filter
  • Distortion filter
  • Delay filter
  • Flanger filter
  • Tremelo filter
  • First order low pass filter
  • Convolution filter
  • Low Pass Convolution filter
  • High Pass Convolution filter
  • Band Pass Convolution filter

Things that mix:

  • Channels (channels/)
  • Mixer (synth/)

Things that control things that mix:

  • Sequencer (sequencer/)
    • Automations

Things that MIDI (midi/):

  • MIDI note on, note off, program select, pitch bend
  • Basic percussion channel
  • Registers as virtual midi device

Things that output:

  • .wav output (--record)
  • "Realtime" PortAudio output
  • Mono or stereo

Usage

Bleep uses Go modules and requires Go 1.11+

git clone github.com/bspaans/bleep
cd bleep
go run main.go

Use --help to see the various options and modes.

Run sequencer patterns

go run main.go --sequencer examples/sequencer_1.yaml

Change instruments banks on sequencer patterns

go run main.go --instruments examples/bank.yaml --percussion examples/percussion_bank.yaml --sequencer examples/sequencer_1.yaml

Record sequencer patterns

go run main.go --sequencer examples/sequencer_1.yaml --record output.wav

Register virtual midi device

go run main.go --midi

Change instruments banks for virtual midi device

go run main.go --instruments examples/bank.yaml --percussion examples/percussion_bank.yaml --midi

Known Issues

alsa/asoundlib.h: No such file or directory

You're missing the alsa headers needed to compile the codebase. On Ubuntu install the libasound2-dev library:

sudo apt-get install libasound2-dev

No package 'portaudio-2.0' found

You're missing the portaudio headers. On Ubuntu install portaudio19-dev:

sudo apt-get install portaudio19-dev

About

Synthesizer/sequencer written in Golang


Languages

Language:Go 99.5%Language:Dockerfile 0.5%Language:Makefile 0.1%