#include #include "rnnoise.h" #ifdef _WIN32 #define VC_EXPORT __declspec(dllexport) #else #define VC_EXPORT __attribute__((visibility("default"))) #endif VC_EXPORT const char *vcm_opus_version(void) { return opus_get_version_string(); } VC_EXPORT const char *vcm_opus_error(int error) { return opus_strerror(error); } VC_EXPORT OpusEncoder *vcm_encoder_create(int rate, int channels, int application, int *error) { return opus_encoder_create(rate, channels, application, error); } VC_EXPORT void vcm_encoder_destroy(OpusEncoder *encoder) { opus_encoder_destroy(encoder); } /* C varargs are called here, not through P/Invoke: Apple arm64 uses a distinct varargs ABI. */ VC_EXPORT int vcm_encoder_set(OpusEncoder *encoder, int request, int value) { switch (request) { case OPUS_SET_BITRATE_REQUEST: case OPUS_SET_MAX_BANDWIDTH_REQUEST: case OPUS_SET_COMPLEXITY_REQUEST: case OPUS_SET_INBAND_FEC_REQUEST: case OPUS_SET_DTX_REQUEST: case OPUS_SET_PACKET_LOSS_PERC_REQUEST: case OPUS_SET_DRED_DURATION_REQUEST: return opus_encoder_ctl(encoder, request, value); default: return OPUS_BAD_ARG; } } VC_EXPORT int vcm_encoder_get_dred(OpusEncoder *encoder, int *duration) { return opus_encoder_ctl(encoder, OPUS_GET_DRED_DURATION(duration)); } VC_EXPORT int vcm_encode(OpusEncoder *encoder, const short *pcm, int samples, unsigned char *packet, int capacity) { return opus_encode(encoder, pcm, samples, packet, capacity); } VC_EXPORT OpusDecoder *vcm_decoder_create(int rate, int channels, int *error) { return opus_decoder_create(rate, channels, error); } VC_EXPORT void vcm_decoder_destroy(OpusDecoder *decoder) { opus_decoder_destroy(decoder); } VC_EXPORT int vcm_decode(OpusDecoder *decoder, const unsigned char *packet, int length, short *pcm, int samples, int fec) { return opus_decode(decoder, packet, length, pcm, samples, fec); } VC_EXPORT OpusDREDDecoder *vcm_dred_decoder_create(int *error) { return opus_dred_decoder_create(error); } VC_EXPORT void vcm_dred_decoder_destroy(OpusDREDDecoder *decoder) { opus_dred_decoder_destroy(decoder); } VC_EXPORT OpusDRED *vcm_dred_create(int *error) { return opus_dred_alloc(error); } VC_EXPORT void vcm_dred_destroy(OpusDRED *dred) { opus_dred_free(dred); } VC_EXPORT int vcm_dred_parse(OpusDREDDecoder *decoder, OpusDRED *dred, const unsigned char *packet, int length, int samples, int rate, int *end) { return opus_dred_parse(decoder, dred, packet, length, samples, rate, end, 0); } VC_EXPORT int vcm_dred_decode(OpusDecoder *decoder, OpusDRED *dred, int offset, short *pcm, int samples) { return opus_decoder_dred_decode(decoder, dred, offset, pcm, samples); } VC_EXPORT DenoiseState *vcm_rnnoise_create(void) { return rnnoise_create(NULL); } VC_EXPORT void vcm_rnnoise_destroy(DenoiseState *state) { rnnoise_destroy(state); } VC_EXPORT float vcm_rnnoise_process(DenoiseState *state, float *output, const float *input) { return rnnoise_process_frame(state, output, input); }