moved OscPulse implementation to header