synthesizer

package
v0.0.0-...-8bb1f52 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2022 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

wavetable implementation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ADSR

func ADSR(maxamp, duration, attacktime, decaytime, sus, releasetime, controlrate float64, currentframe int) float64

ADSR creates an attack -> decay -> sustain -> release envelope time durations are passes as seconds. returns the value + the current time

func Balance

func Balance(signal, comparator, delay []float64, frequency, samplerate float64) []float64

Balance a signal (rescale output signal)

func FourierTable

func FourierTable(nharms int, amps []float64, length int, phase float64) []float64

FourierTable constructs a lookup table based on fourier addition with 'nharmns' harmonics If amps is provided, scales the harmonics by the provided amp

func Highpass

func Highpass(fs []float64, freq, delay, sr float64) []float64

Highpass applies a high-pass filter to the frames. Does not modify the input signal

func Len

func Len(g *Gtable) int

Len returns the length of the data segment without the guard point

func Lowpass

func Lowpass(fs []float64, freq, delay, sr float64) []float64

Lowpass applies a low-pass filter to the frames Does not modify the input signal

func NoteToFrequency

func NoteToFrequency(note string, octave int) float64

NoteToFrequency turns a given note & octave into a frequency using Equal-Tempered tuning with reference pitch = A440

func ParseNoteToFrequency

func ParseNoteToFrequency(note string) (float64, error)

ParseNoteToFrequency tries to parse a string representation of a note+octave (e.g C#4) and will return a float64 frequency value using 'NoteToFrequency'

func SawTable

func SawTable(nharms, length int) []float64

SawTable creates a sawtooth wavetable using Fourier addition

func SquareTable

func SquareTable(nharms, length int) []float64

SquareTable uses fourier addition to create a square waveform

func TriangleTable

func TriangleTable(nharms, length int) []float64

TriangleTable uses fourier addition to create a triangle waveform

Types

type EqualTemperedNote

type EqualTemperedNote float64

EqualTemperedNote

const (
	C0  EqualTemperedNote = 16.35
	C0S EqualTemperedNote = 17.32
	D0  EqualTemperedNote = 18.35
	D0S EqualTemperedNote = 19.45
	E0  EqualTemperedNote = 20.60
	F0  EqualTemperedNote = 21.83
	F0S EqualTemperedNote = 23.12
	G0  EqualTemperedNote = 24.50
	G0S EqualTemperedNote = 25.96
	A0  EqualTemperedNote = 27.50
	A0S EqualTemperedNote = 29.14
	B0  EqualTemperedNote = 30.87
	C1  EqualTemperedNote = 32.70
	C1S EqualTemperedNote = 34.65
	D1  EqualTemperedNote = 36.71
	D1S EqualTemperedNote = 38.89
	E1  EqualTemperedNote = 41.20
	F1  EqualTemperedNote = 43.65
	F1S EqualTemperedNote = 46.25
	G1  EqualTemperedNote = 49.00
	G1S EqualTemperedNote = 51.91
	A1  EqualTemperedNote = 55.00
	A1S EqualTemperedNote = 58.27
	B1  EqualTemperedNote = 61.74
	C2  EqualTemperedNote = 65.41
	C2S EqualTemperedNote = 69.30
	D2  EqualTemperedNote = 73.42
	D2S EqualTemperedNote = 77.78
	E2  EqualTemperedNote = 82.41
	F2  EqualTemperedNote = 87.31
	F2S EqualTemperedNote = 92.50
	G2  EqualTemperedNote = 98.00
	G2S EqualTemperedNote = 103.83
	A2  EqualTemperedNote = 110.00
	A2S EqualTemperedNote = 116.54
	B2  EqualTemperedNote = 123.47
	C3  EqualTemperedNote = 130.81
	C3S EqualTemperedNote = 138.59
	D3  EqualTemperedNote = 146.83
	D3S EqualTemperedNote = 155.56
	E3  EqualTemperedNote = 164.81
	F3  EqualTemperedNote = 174.61
	F3S EqualTemperedNote = 185.00
	G3  EqualTemperedNote = 196.00
	G3S EqualTemperedNote = 207.65
	A3  EqualTemperedNote = 220.00
	A3S EqualTemperedNote = 233.08
	B3  EqualTemperedNote = 246.94
	C4  EqualTemperedNote = 261.63
	C4S EqualTemperedNote = 277.18
	D4  EqualTemperedNote = 293.66
	D4S EqualTemperedNote = 311.13
	E4  EqualTemperedNote = 329.63
	F4  EqualTemperedNote = 349.23
	F4S EqualTemperedNote = 369.99
	G4  EqualTemperedNote = 392.00
	G4S EqualTemperedNote = 415.30
	A4  EqualTemperedNote = 440.00
	A4S EqualTemperedNote = 466.16
	B4  EqualTemperedNote = 493.88
	C5  EqualTemperedNote = 523.25
	C5S EqualTemperedNote = 554.37
	D5  EqualTemperedNote = 587.33
	D5S EqualTemperedNote = 622.25
	E5  EqualTemperedNote = 659.25
	F5  EqualTemperedNote = 698.46
	F5S EqualTemperedNote = 739.99
	G5  EqualTemperedNote = 783.99
	G5S EqualTemperedNote = 830.61
	A5  EqualTemperedNote = 880.00
	A5S EqualTemperedNote = 932.33
	B5  EqualTemperedNote = 987.77
	C6  EqualTemperedNote = 1046.50
	C6S EqualTemperedNote = 1108.73
	D6  EqualTemperedNote = 1174.66
	D6S EqualTemperedNote = 1244.51
	E6  EqualTemperedNote = 1318.51
	F6  EqualTemperedNote = 1396.91
	F6S EqualTemperedNote = 1479.98
	G6  EqualTemperedNote = 1567.98
	G6S EqualTemperedNote = 1661.22
	A6  EqualTemperedNote = 1760.00
	A6S EqualTemperedNote = 1864.66
	B6  EqualTemperedNote = 1975.53
	C7  EqualTemperedNote = 2093.00
	C7S EqualTemperedNote = 2217.46
	D7  EqualTemperedNote = 2349.32
	D7S EqualTemperedNote = 2489.02
	E7  EqualTemperedNote = 2636.02
	F7  EqualTemperedNote = 2793.83
	F7S EqualTemperedNote = 2959.96
	G7  EqualTemperedNote = 3135.96
	G7S EqualTemperedNote = 3322.44
	A7  EqualTemperedNote = 3520.00
	A7S EqualTemperedNote = 3729.31
	B7  EqualTemperedNote = 3951.07
	C8  EqualTemperedNote = 4186.01
	C8S EqualTemperedNote = 4434.92
	D8  EqualTemperedNote = 4698.63
	D8S EqualTemperedNote = 4978.03
	E8  EqualTemperedNote = 5274.04
	F8  EqualTemperedNote = 5587.65
	F8S EqualTemperedNote = 5919.91
	G8  EqualTemperedNote = 6271.93
	G8S EqualTemperedNote = 6644.88
	A8  EqualTemperedNote = 7040.00
	A8S EqualTemperedNote = 7458.62
	B8  EqualTemperedNote = 7902.13
)

These constants represent the frequncies for the equal-tempered scale tuned to A4 = 440Hz

type Gtable

type Gtable struct {
	// contains filtered or unexported fields
}

Gtable is a Guard-table for oscillator lookup

func NewGtable

func NewGtable(data []float64) *Gtable

func NewSineTable

func NewSineTable(length int) *Gtable

NewSineTable returns a lookup table populated for sine-wave generation.

func NewTriangleTable

func NewTriangleTable(length int, nharmonics int) (*Gtable, error)

NewTriangleTable generates a lookup table for a triangle wave of the specified length and with the requested number of harmonics.

type LookupOscillator

type LookupOscillator struct {
	Oscillator
	Table      *Gtable
	SizeOverSr float64 // convenience variable for calculations
}

LookupOscillator is an oscillator that's more gentle on your CPU By performing a table lookup to generate the required waveform..

func NewLookupOscillator

func NewLookupOscillator(sr int, t *Gtable, phase float64) (*LookupOscillator, error)

NewLookupOscillator creates a new oscillator which performs a table-lookup to generate the required waveform

func (*LookupOscillator) BatchInterpolateTick

func (l *LookupOscillator) BatchInterpolateTick(freq float64, nframes int) []float64

BatchInterpolateTick performs a lookup for N frames, and interpolates the value if the requested index does not appear in the table.

func (*LookupOscillator) BatchTruncateTick

func (l *LookupOscillator) BatchTruncateTick(freq float64, nframes int) []float64

BatchTruncateTick returns a slice of samples from the oscillator of the requested length

func (*LookupOscillator) InterpolateTick

func (l *LookupOscillator) InterpolateTick(freq float64) float64

InterpolateTick performs a lookup but interpolates the value if the requested index does not appear in the table.

func (*LookupOscillator) TruncateTick

func (l *LookupOscillator) TruncateTick(freq float64) float64

TruncateTick performs a lookup and truncates the value index down (if the index for lookup = 10.5, return index 10)

type Oscillator

type Oscillator struct {
	// contains filtered or unexported fields
}

Oscillator represents a wave-oscillator where each tick is calculated in the moment.

func NewOscillator

func NewOscillator(sr int, shape Shape) (*Oscillator, error)

NewOscillator set to a given sample rate

func NewPhaseOscillator

func NewPhaseOscillator(sr int, phase float64, shape Shape) (*Oscillator, error)

NewPhaseOscillator creates a new oscillator where the initial phase is offset by a given phase

func (*Oscillator) Tick

func (o *Oscillator) Tick(freq float64) float64

Tick generates the next value of the oscillator waveform at a given frequency in Hz

type Shape

type Shape int

Shape for defining the different possible waveform shapes for use with the Oscillator

const (
	SINE Shape = iota
	SQUARE
	DOWNWARD_SAWTOOTH
	UPWARD_SAWTOOTH
	TRIANGLE
)

Shapes for which we can generate waveforms

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL