#include #include #include #include #include namespace psemek::audio { stream_ptr sawtooth_wave(float frequency) { auto func = [o = oscillator{frequency}]() mutable { auto z = o.next(); return (2.f / math::pi) * (- std::atan2(z.real() + 1.f, z.imag())); }; return make_generator(func); } }