1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import Node from '../core/Node.js';
- import TimerNode from './TimerNode.js';
- import { abs, fract, round, sin, add, sub, mul } from '../shadernode/ShaderNodeBaseElements.js';
- class OscNode extends Node {
- static SINE = 'sine';
- static SQUARE = 'square';
- static TRIANGLE = 'triangle';
- static SAWTOOTH = 'sawtooth';
- constructor( method = OscNode.SINE, timeNode = new TimerNode() ) {
- super();
- this.method = method;
- this.timeNode = timeNode;
- }
- getNodeType( builder ) {
- return this.timeNode.getNodeType( builder );
- }
- generate( builder ) {
- const method = this.method;
- const timeNode = this.timeNode;
- let outputNode = null;
- if ( method === OscNode.SINE ) {
- outputNode = add( mul( sin( mul( add( timeNode, .75 ), Math.PI * 2 ) ), .5 ), .5 );
- } else if ( method === OscNode.SQUARE ) {
- outputNode = round( fract( timeNode ) );
- } else if ( method === OscNode.TRIANGLE ) {
- outputNode = abs( sub( 1, mul( fract( add( timeNode, .5 ) ), 2 ) ) );
- } else if ( method === OscNode.SAWTOOTH ) {
- outputNode = fract( timeNode );
- }
- return outputNode.build( builder );
- }
- serialize( data ) {
- super.serialize( data );
- data.method = this.method;
- }
- deserialize( data ) {
- super.deserialize( data );
- this.method = data.method;
- }
- }
- export default OscNode;
|