BASIC_OSCILLATOR
 
 Generate an oscillator signal (a shorthand combination of the SINE and LINSPACE blocks). It offers a more straightforward way to generate signals, with sample rate and the time in seconds as parameters, along with all the parameters in the SINE block.  Params:    sample_rate : float  The number of samples that are taken in a second.   time : float  The total amount of time of the signal.   waveform : select  The waveform type of the wave.   amplitude : float  The amplitude of the wave.   frequency : float  The wave frequency in radians/2pi.   offset : float  The y axis offset of the function.   phase : float  The x axis offset of the function.     Returns:    out : OrderedPair  x: time domain
y: generated signal    
   Python Code
import numpy as np
from flojoy import flojoy, OrderedPair
from scipy import signal
from typing import Literal
@flojoy
def BASIC_OSCILLATOR(
    sample_rate: int = 100,
    time: int = 10,
    waveform: Literal["sine", "square", "triangle", "sawtooth"] = "sine",
    amplitude: float = 1,
    frequency: float = 1,
    offset: float = 0,
    phase: float = 0,
) -> OrderedPair:
    """Generate an oscillator signal (a shorthand combination of the SINE and LINSPACE blocks).
    It offers a more straightforward way to generate signals, with sample rate and the time in seconds as parameters, along with all the parameters in the SINE block.
    Parameters
    ----------
    sample_rate : float
        The number of samples that are taken in a second.
    time : float
        The total amount of time of the signal.
    waveform : select
        The waveform type of the wave.
    amplitude : float
        The amplitude of the wave.
    frequency : float
        The wave frequency in radians/2pi.
    offset : float
        The y axis offset of the function.
    phase : float
        The x axis offset of the function.
    Returns
    -------
    OrderedPair
        x: time domain
        y: generated signal
    """
    samples = sample_rate * time
    x = np.linspace(0, time, samples)
    if waveform == "sine":
        y = offset + amplitude * np.sin(2 * np.pi * frequency * x + phase)
    elif waveform == "square":
        y = offset + amplitude * signal.square(2 * np.pi * frequency * x + phase)
    elif waveform == "triangle":
        y = offset + amplitude * signal.sawtooth(2 * np.pi * frequency * x + phase, 0.5)
    else:  # Sawtooth
        y = offset + amplitude * signal.sawtooth(2 * np.pi * frequency * x + phase)
    return OrderedPair(x=x, y=y)
Example
Having problems with this example app? Join our Discord community and we will help you out!
In this example, BASIC_OSCILLATOR node generates a sine wave with a frequency of 1Hz and an amplitude of 3 for
10 seconds with a sample rate of 400Hz.
The same output can be generated with LINSPACE and SINE nodes combined.
SINE would have the same parameters, but for LINSPACE, the start parameter will be 0, end is the time, which is 10 in this case,
and step is the total samples, which is sample_rate * time in this case