diff options
| author | XANTRONIX Development | 2022-03-06 20:12:20 -0500 | 
|---|---|---|
| committer | XANTRONIX Development | 2022-03-06 20:12:20 -0500 | 
| commit | 99057a0f6f7e93db6f2dda2e6d8ffeec20e44307 (patch) | |
| tree | f9f9dca79efa42bb9048f462e4abfb081a6bd0d1 | |
| parent | d408944a8c0ce626ff35c80b6b6e5fb2f7dc1fb9 (diff) | |
| download | xas-99057a0f6f7e93db6f2dda2e6d8ffeec20e44307.tar.gz xas-99057a0f6f7e93db6f2dda2e6d8ffeec20e44307.tar.bz2 xas-99057a0f6f7e93db6f2dda2e6d8ffeec20e44307.zip | |
Implement xas_synth_set_type()
Implement xas_synth_set_type() to allow changing oscillator type
during synthesis
| -rw-r--r-- | include/xas/synth.h | 2 | ||||
| -rw-r--r-- | src/synth.c | 40 | 
2 files changed, 30 insertions, 12 deletions
| diff --git a/include/xas/synth.h b/include/xas/synth.h index 6902643..ca83c69 100644 --- a/include/xas/synth.h +++ b/include/xas/synth.h @@ -53,6 +53,8 @@ void xas_synth_set_gain(xas_synth *synth, float gain);  void xas_synth_set_frequency(xas_synth *synth, size_t frequency); +void xas_synth_set_type(xas_synth *synth, enum xas_synth_type type); +  void xas_synth_start(xas_synth *synth);  void xas_synth_stop(xas_synth *synth); diff --git a/src/synth.c b/src/synth.c index 6057ce3..b01ebc8 100644 --- a/src/synth.c +++ b/src/synth.c @@ -117,6 +117,27 @@ static int set_gain(xas_synth *synth, float gain) {      return 0;  } +static int set_type(xas_synth *synth, enum xas_synth_type type) { +    switch (type) { +        case XAS_SYNTH_SINE:     synth->sample = sample_sine;     break; +        case XAS_SYNTH_SQUARE:   synth->sample = sample_square;   break; +        case XAS_SYNTH_TRIANGLE: synth->sample = sample_triangle; break; +        case XAS_SYNTH_SAWTOOTH: synth->sample = sample_sawtooth; break; + +        default: +            errno = EINVAL; + +            goto error_invalid_type; +    } + +    synth->type = type; + +    return 0; + +error_invalid_type: +    return -1; +} +  xas_synth *xas_synth_new(xas_audio_format format,                               size_t buffer_size,                               enum xas_synth_type type) { @@ -132,7 +153,6 @@ xas_synth *xas_synth_new(xas_audio_format format,      synth->obj.stream_new = (xas_object_stream_new_callback)xas_synth_stream_new;      synth->obj.destroy    = (xas_object_destroy_callback)xas_synth_destroy; -    synth->type      = type;      synth->state     = XAS_SYNTH_IDLE;      synth->phase     = 0.0f;      synth->gain      = XAS_SYNTH_DEFAULT_GAIN; @@ -143,21 +163,13 @@ xas_synth *xas_synth_new(xas_audio_format format,      synth->format.sample_rate = format.sample_rate;      synth->buffer_size        = buffer_size; -    switch (type) { -        case XAS_SYNTH_SINE:     synth->sample = sample_sine;     break; -        case XAS_SYNTH_SQUARE:   synth->sample = sample_square;   break; -        case XAS_SYNTH_TRIANGLE: synth->sample = sample_triangle; break; -        case XAS_SYNTH_SAWTOOTH: synth->sample = sample_sawtooth; break; - -        default: -            errno = EINVAL; - -            goto error_invalid_type; +    if (set_type(synth, type) < 0) { +        goto error_set_type;      }      return synth; -error_invalid_type: +error_set_type:      free(synth);  error_malloc_synth: @@ -172,6 +184,10 @@ void xas_synth_set_gain(xas_synth *synth, float gain) {      synth->gain = gain;  } +void xas_synth_set_type(xas_synth *synth, enum xas_synth_type type) { +    set_type(synth, type); +} +  void xas_synth_set_frequency(xas_synth *synth, size_t frequency) {      synth->frequency = frequency;  } | 
 
    