TuningFork.Fx (TuningFork v0.1.11)

Copy Markdown View Source

Effects applied to a whole buffer of rendered audio.

pcm
|> Fx.echo(44_100, delay: 0.25, feedback: 0.45, mix: 0.3)
|> Fx.reverb(44_100, room: 0.8, mix: 0.25)

Summary

Functions

Apply a list of effects in order.

Soft clipping through tanh, for weight rather than for distortion.

Repeats, each quieter than the last.

A room around the sound.

Functions

apply(pcm, rate, effects, channels \\ 2)

@spec apply(binary(), pos_integer(), keyword(), pos_integer()) :: binary()

Apply a list of effects in order.

effects is a keyword list of {name, opts}, where name is :echo, :reverb or :drive, or any name TuningFork.Fx.Live runs — :lowpass, :slicer, :compressor and the rest, with the options listed there; anything else raises ArgumentError. channels is put into each effect's options where it did not name its own.

Fx.apply(pcm, 44_100, [echo: [delay: 0.3], reverb: [room: 0.9]], 2)

drive(pcm, opts \\ [])

@spec drive(binary(), keyword()) :: binary()

Soft clipping through tanh, for weight rather than for distortion.

The result is the same length as pcm.

Options

  • :amount — clamped to 0.0 to 1.0, default 0.3. Past about 0.5 it is audible as an effect rather than as the sound being louder

echo(pcm, rate, opts \\ [])

@spec echo(binary(), pos_integer(), keyword()) :: binary()

Repeats, each quieter than the last.

The result is longer than pcm by however long the repeats take to fall below a hundredth of full scale, up to 40 of them.

Options

  • :delay — seconds between repeats, default 0.25
  • :feedback — how much of each repeat feeds the next, clamped to 0.0 to 0.95, default 0.4
  • :mix — how much of the result is echo, default 0.3
  • :channels — samples per frame, default 2

reverb(pcm, rate, opts \\ [])

@spec reverb(binary(), pos_integer(), keyword()) :: binary()

A room around the sound.

Four comb filters at unrelated delays summed, then two allpass filters over the result — the Schroeder arrangement. The result is longer than pcm by 0.5 + room * 2.0 seconds.

Options

  • :room — how long it rings, clamped to 0.0 to 1.0, default 0.6
  • :damp — how much the repeats lose their top, clamped to 0.0 to 1.0, default 0.4
  • :mix — how much of the result is reverb, default 0.25
  • :channels — samples per frame, default 2