diff options
| -rw-r--r-- | include/xas/synth.h | 6 | ||||
| -rw-r--r-- | src/synth.c | 9 | 
2 files changed, 13 insertions, 2 deletions
| diff --git a/include/xas/synth.h b/include/xas/synth.h index ca83c69..cb0b3bd 100644 --- a/include/xas/synth.h +++ b/include/xas/synth.h @@ -8,6 +8,7 @@  #include <xas/audio.h>  #define XAS_SYNTH_DEFAULT_GAIN      1.0f +#define XAS_SYNTH_DEFAULT_DUTY      1.0f  #define XAS_SYNTH_DEFAULT_FREQUENCY 2600 /* Hz */  enum xas_synth_type { @@ -38,7 +39,8 @@ struct _xas_synth {      xas_synth_sample_callback sample;      float phase, -          gain; +          gain, +          duty;      size_t frequency;  }; @@ -51,6 +53,8 @@ void xas_synth_destroy(xas_synth *synth);  void xas_synth_set_gain(xas_synth *synth, float gain); +void xas_synth_set_duty(xas_synth *synth, float duty); +  void xas_synth_set_frequency(xas_synth *synth, size_t frequency);  void xas_synth_set_type(xas_synth *synth, enum xas_synth_type type); diff --git a/src/synth.c b/src/synth.c index b01ebc8..0be572d 100644 --- a/src/synth.c +++ b/src/synth.c @@ -27,8 +27,10 @@ static int16_t sample_square(xas_synth *synth) {      int16_t ret;      static float tau = 2.0f * M_PI; +    float duty = synth->duty; +      if (synth->state == XAS_SYNTH_ACTIVE) { -        ret = (synth->phase - M_PI) > 0.0? +        ret = ((duty * synth->phase) - M_PI) > 0.0?              (int16_t)roundf(synth->gain * (INT16_MAX / 4)):              (int16_t)roundf(synth->gain * (INT16_MIN / 4)); @@ -156,6 +158,7 @@ xas_synth *xas_synth_new(xas_audio_format format,      synth->state     = XAS_SYNTH_IDLE;      synth->phase     = 0.0f;      synth->gain      = XAS_SYNTH_DEFAULT_GAIN; +    synth->duty      = XAS_SYNTH_DEFAULT_DUTY;      synth->frequency = XAS_SYNTH_DEFAULT_FREQUENCY;      synth->format.channels    = XAS_AUDIO_MONO; @@ -184,6 +187,10 @@ void xas_synth_set_gain(xas_synth *synth, float gain) {      synth->gain = gain;  } +void xas_synth_set_duty(xas_synth *synth, float duty) { +    synth->duty = duty; +} +  void xas_synth_set_type(xas_synth *synth, enum xas_synth_type type) {      set_type(synth, type);  } | 
 
    