#ifndef SIGNALSMITH_STRETCH_WRAPPER_H
#define SIGNALSMITH_STRETCH_WRAPPER_H
#include <stddef.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
struct signalsmith_stretch;
typedef struct signalsmith_stretch signalsmith_stretch_t;
signalsmith_stretch_t *signalsmith_stretch_create(int channel_count, size_t block_length, size_t interval);
signalsmith_stretch_t *signalsmith_stretch_create_preset_default(int channel_count, float sample_rate);
signalsmith_stretch_t *signalsmith_stretch_create_preset_cheaper(int channel_count, float sample_rate);
void signalsmith_stretch_destroy(signalsmith_stretch_t *handle);
void signalsmith_stretch_reset(signalsmith_stretch_t *handle);
size_t signalsmith_stretch_input_latency(signalsmith_stretch_t *handle);
size_t signalsmith_stretch_output_latency(signalsmith_stretch_t *handle);
void signalsmith_stretch_seek(signalsmith_stretch_t *handle, float *input, size_t input_length, double playback_rate);
void signalsmith_stretch_set_transpose_factor(signalsmith_stretch_t *handle, float multiplier, float tonality_limit);
void signalsmith_stretch_set_transpose_factor_semitones(signalsmith_stretch_t *handle, float multiplier, float tonality_limit);
void signalsmith_stretch_set_formant_factor(signalsmith_stretch_t *handle, float multiplier, int compensate_pitch);
void signalsmith_stretch_set_formant_factor_semitones(signalsmith_stretch_t *handle, float semitones, int compensate_pitch);
void signalsmith_stretch_set_formant_base(signalsmith_stretch_t *handle, float frequency);
void signalsmith_stretch_process(signalsmith_stretch_t *handle,
float *input, size_t input_length,
float *output, size_t output_length);
bool signalsmith_stretch_exact(signalsmith_stretch_t *handle,
float *input, size_t input_length,
float *output, size_t output_length);
void signalsmith_stretch_flush(signalsmith_stretch_t *handle,
float *output, size_t output_length);
#ifdef __cplusplus
}
#endif
#endif