89 lines
3.2 KiB
C
89 lines
3.2 KiB
C
#ifndef _WSOLA_PROCESS_H_
|
|
#define _WSOLA_PROCESS_H_
|
|
|
|
#include "typesdef.h"
|
|
#include "osal/string.h"
|
|
#include "lib/audio/ring_buffer/ring_buffer.h"
|
|
|
|
typedef void *(*WSOLA_MALLOC)(int size);
|
|
typedef void *(*WSOLA_ZALLOC)(int size);
|
|
typedef void *(*WSOLA_CALLOC)(int nmemb, int size);
|
|
typedef void *(*WSOLA_REALLOC)(void *ptr, int size);
|
|
typedef void (*WSOLA_FREE)(void *ptr);
|
|
|
|
extern WSOLA_MALLOC wsola_malloc;
|
|
extern WSOLA_ZALLOC wsola_zalloc;
|
|
extern WSOLA_CALLOC wsola_calloc;
|
|
extern WSOLA_REALLOC wsola_realloc;
|
|
extern WSOLA_FREE wsola_free;
|
|
|
|
typedef struct {
|
|
RINGBUF *input_ringbuf;
|
|
RINGBUF *output_ringbuf;
|
|
int16_t *input_buf;
|
|
int16_t *output_buf;
|
|
int16_t *downsample_buf;
|
|
int16_t *pitch_buf;
|
|
|
|
int32_t max_required;
|
|
int32_t max_period_nsamples;
|
|
int32_t min_period_nsamples;
|
|
int32_t prev_period_nsamples;
|
|
int32_t prev_min_diff;
|
|
|
|
float pitch;
|
|
float speed;
|
|
|
|
float persample_time;
|
|
float input_playtime;
|
|
float time_err;
|
|
|
|
int32_t input_nsamples;
|
|
int32_t output_nsamples;
|
|
int32_t pitch_nsamples;
|
|
int32_t reserve_nsamples;
|
|
|
|
int32_t old_rate_position;
|
|
int32_t new_rate_position;
|
|
|
|
uint32_t input_buf_size;
|
|
uint32_t output_buf_size;
|
|
uint32_t downsample_buf_size;
|
|
uint32_t pitch_buf_size;
|
|
|
|
uint32_t samplerate;
|
|
uint32_t channels;
|
|
}WsolaStream;
|
|
|
|
void reg_wsola_alloc(WSOLA_MALLOC m, WSOLA_ZALLOC z, WSOLA_CALLOC c, WSOLA_REALLOC r, WSOLA_FREE f);
|
|
WsolaStream *wsolaStream_init(uint32_t samplerate, uint32_t channels, float speed, float pitch,
|
|
uint32_t max_input_nsamples, uint32_t max_output_nsamples);
|
|
int32_t wsolaStream_input_data(WsolaStream* stream, int16_t *data, uint32_t nsamples);
|
|
int32_t wsolaStream_output_data(WsolaStream* stream, int16_t *data, uint32_t max_nsamples);
|
|
int32_t wsolaStream_input_available(WsolaStream* stream);
|
|
int32_t wsolaStream_output_available(WsolaStream* stream);
|
|
void wsolaStream_set_pitch(WsolaStream* stream, float pitch);
|
|
void wsolaStream_set_speed(WsolaStream* stream, float speed);
|
|
float wsolaStream_get_pitch(WsolaStream* stream);
|
|
float wsolaStream_get_speed(WsolaStream* stream);
|
|
uint32_t wsolaStream_get_sampleRate(WsolaStream *stream);
|
|
void wsolaStream_clean(WsolaStream* stream);
|
|
int32_t wsolaStream_flush(WsolaStream* stream);
|
|
void wsolaStream_deinit(WsolaStream *stream);
|
|
|
|
WsolaStream *wsola_stream_init(uint32_t samplerate, uint32_t channels,
|
|
uint32_t max_input_nsamples, uint32_t max_output_nsamples);
|
|
int32_t wsola_stream_write_data(WsolaStream* stream, int16_t *data, uint32_t nsamples);
|
|
int32_t wsola_stream_read_data(WsolaStream* stream, int16_t *data, uint32_t max_nsamples);
|
|
int32_t wsola_stream_write_available(WsolaStream* stream);
|
|
int32_t wsola_stream_read_available(WsolaStream* stream);
|
|
void wsola_stream_set_pitch(WsolaStream* stream, float pitch);
|
|
void wsola_stream_set_speed(WsolaStream* stream, float speed);
|
|
float wsola_stream_get_pitch(WsolaStream* stream);
|
|
float wsola_stream_get_speed(WsolaStream* stream);
|
|
uint32_t wsola_stream_get_samplerate(WsolaStream *stream);
|
|
void wsola_stream_clean(WsolaStream* stream);
|
|
int32_t wsola_stream_flush(WsolaStream *stream);
|
|
void wsola_stream_deinit(WsolaStream *stream);
|
|
|
|
#endif |