Oscillation Patterns~
Quick reference for oscillation patterns used with value providers in the Berry Animation Framework.
Available Oscillation Patterns~
These waveform constants can be used with oscillator_value:
| Constant | Value | Alias Functions | Behavior | Use Case |
|---|---|---|---|---|
SAWTOOTH | 1 | linear, ramp | Linear ramp up | Uniform motion |
TRIANGLE | 2 | triangle | Linear up then down | Sharp direction changes |
SQUARE | 3 | square | Alternating min/max | On/off effects |
COSINE | 4 | smooth | Smooth cosine wave | Natural oscillation |
SINE | 5 | sine | Pure sine wave | Classic wave motion |
EASE_IN | 6 | ease_in | Slow start, fast end | Smooth acceleration |
EASE_OUT | 7 | ease_out | Fast start, slow end | Smooth deceleration |
ELASTIC | 8 | elastic | Spring overshoot | Bouncy effects |
BOUNCE | 9 | bounce | Ball bouncing | Physics simulation |
DSL Usage~
With Oscillator Value Provider~
# Basic oscillator with different waveform types
set breathing = oscillator_value(min_value=50, max_value=255, duration=3000, form=COSINE)
set pulsing = ease_in(min_value=0, max_value=255, duration=2000)
set bouncing = oscillator_value(min_value=10, max_value=240, duration=4000, form=TRIANGLE)
Using Alias Functions~
# These are equivalent to oscillator_value with specific forms
set smooth_fade = smooth(min_value=50, max_value=255, duration=3000) # form=COSINE
set sine_wave = sine_osc(min_value=50, max_value=255, duration=3000) # form=SINE
set cosine_wave = cosine_osc(min_value=50, max_value=255, duration=3000) # form=COSINE (alias for smooth)
set linear_sweep = linear(min_value=0, max_value=255, duration=2000) # form=SAWTOOTH
set triangle_wave = triangle(min_value=10, max_value=240, duration=4000) # form=TRIANGLE
In Animations~
color blue = 0x0000FF
set breathing = smooth(min_value=100, max_value=255, duration=4000)
animation breathing_blue = solid(color=blue)
breathing_blue.opacity = breathing
run breathing_blue
Pattern Characteristics~
SAWTOOTH (Linear)~
- Constant speed throughout the cycle
- Sharp reset from max back to min
- Best for: Uniform sweeps, mechanical movements
Value
^
| /| /|
| / | / |
| / | / |
| / | / |
| / | / |
|/ |/ |
+------+------+----> Time
set linear_brightness = linear(min_value=0, max_value=255, duration=2000)
COSINE (Smooth)~
- Gradual acceleration and deceleration
- Natural feeling transitions
- Best for: Breathing effects, gentle fades
set breathing_effect = smooth(min_value=50, max_value=255, duration=3000)
SINE (Pure Wave)~
- Classic sine wave starting from minimum
- Smooth acceleration and deceleration like cosine but phase-shifted
- Best for: Wave effects, classic oscillations, audio-visual sync
Value
^
| ___
| / \
| / \
| / \
| / \
| / \
| / \
| / \
|/ \___
+--------------------+----> Time
set wave_motion = sine_osc(min_value=0, max_value=255, duration=2000)
TRIANGLE~
- Linear acceleration to midpoint, then linear deceleration
- Sharp direction changes at extremes
- Best for: Bouncing effects, sharp transitions
Value
^
| /\
| / \
| / \
| / \
| / \
| / \
|/ \
+-------------+----> Time
set bounce_position = triangle(min_value=5, max_value=55, duration=2000)
SQUARE~
- Alternating between min and max values
- Instant transitions with configurable duty cycle
- Best for: On/off effects, strobing, digital patterns
Value
^
| +---+ +---+
| | | | |
| | | | |
| | +-----+ |
| | |
| | |
+-+-------------+----> Time
set strobe_effect = square(min_value=0, max_value=255, duration=500, duty_cycle=25)
EASE_IN~
- Slow start, fast finish
- Smooth acceleration curve
- Best for: Starting animations, building intensity
set accelerating = ease_in(min_value=0, max_value=255, duration=3000)
EASE_OUT~
- Fast start, slow finish
- Smooth deceleration curve
- Best for: Ending animations, gentle stops
set decelerating = ease_out(min_value=255, max_value=0, duration=3000)
Value Progression Examples~
For a cycle from 0 to 100 over 2000ms:
| Time | SAWTOOTH | COSINE | SINE | TRIANGLE | EASE_IN | EASE_OUT |
|---|---|---|---|---|---|---|
| 0ms | 0 | 0 | 0 | 0 | 0 | 0 |
| 500ms | 25 | 15 | 50 | 50 | 6 | 44 |
| 1000ms | 50 | 50 | 100 | 100 | 25 | 75 |
| 1500ms | 75 | 85 | 50 | 50 | 56 | 94 |
| 2000ms | 100 | 100 | 0 | 0 | 100 | 100 |
Common Patterns~
Breathing Effect~
color soft_white = 0xC0C0C0
set breathing = smooth(min_value=80, max_value=255, duration=4000)
animation breathing_light = solid(color=soft_white)
breathing_light.opacity = breathing
run breathing_light
Position Sweep~
strip length 60
color red = 0xFF0000
set sweeping_position = linear(min_value=0, max_value=59, duration=3000)
animation position_sweep = beacon_animation(
color=red,
position=sweeping_position,
beacon_size=3,
fade_size=1
)
run position_sweep
Wave Motion~
color purple = 0x8000FF
set wave_brightness = sine(min_value=50, max_value=255, duration=2500)
animation wave_effect = solid(color=purple)
wave_effect.opacity = wave_brightness
run wave_effect
Bouncing Effect~
color green = 0x00FF00
set bounce_size = triangle(min_value=1, max_value=8, duration=1000)
animation bouncing_pulse = beacon_animation(
color=green,
position=30,
beacon_size=bounce_size,
fade_size=1
)
run bouncing_pulse
Accelerating Fade~
color blue = 0x0000FF
set fade_in = ease_in(min_value=0, max_value=255, duration=5000)
animation accelerating_fade = solid(color=blue)
accelerating_fade.opacity = fade_in
run accelerating_fade
Strobe Effect~
color white = 0xFFFFFF
set strobe_pattern = square(min_value=0, max_value=255, duration=200, duty_cycle=10)
animation strobe_light = solid(color=white)
strobe_light.opacity = strobe_pattern
run strobe_light
Tips~
- COSINE (smooth): Most natural for breathing and gentle effects
- SINE: Classic wave motion, perfect for audio-visual sync and pure oscillations
- SAWTOOTH (linear): Best for consistent sweeps and mechanical movements
- TRIANGLE: Creates sharp, bouncing transitions
- EASE_IN: Perfect for building up intensity
- EASE_OUT: Ideal for gentle fade-outs
- ELASTIC: Spring-like effects with overshoot
- BOUNCE: Physics-based bouncing effects
- SQUARE: Good for on/off blinking effects
Choose the oscillation pattern that matches the feeling you want to create in your animation.