samplerate.c: Allow transcoding to lower sample rate other than 8000 Hz
This commit is contained in:
parent
3fc4fc54be
commit
8e0d7d2513
|
@ -134,7 +134,7 @@ int dsp_init_sender(cnetz_t *cnetz, int measure_speed, double clock_speed[2])
|
|||
}
|
||||
|
||||
/* reinit the sample rate to shrink/expand audio */
|
||||
init_samplerate(&cnetz->sender.srstate, (double)cnetz->sender.samplerate / 1.1); /* 66 <-> 60 */
|
||||
init_samplerate(&cnetz->sender.srstate, 0x8000, (double)cnetz->sender.samplerate / 1.1); /* 66 <-> 60 */
|
||||
|
||||
rc = fsk_fm_init(&cnetz->fsk_demod, cnetz, cnetz->sender.samplerate, (double)BITRATE / (1.0 + clock_speed[0] / 1000000.0));
|
||||
if (rc < 0)
|
||||
|
|
|
@ -497,7 +497,7 @@ int call_init(const char *station_id, const char *audiodev, int samplerate, int
|
|||
if (!audiodev[0])
|
||||
return 0;
|
||||
|
||||
rc = init_samplerate(&call.srstate, samplerate);
|
||||
rc = init_samplerate(&call.srstate, 8000.0, (double)samplerate);
|
||||
if (rc < 0) {
|
||||
PDEBUG(DSENDER, DEBUG_ERROR, "Failed to init sample rate conversion!\n");
|
||||
goto error;
|
||||
|
|
|
@ -25,24 +25,22 @@
|
|||
#include "sample.h"
|
||||
#include "samplerate.h"
|
||||
|
||||
int init_samplerate(samplerate_t *state, double samplerate)
|
||||
int init_samplerate(samplerate_t *state, double low_samplerate, double high_samplerate)
|
||||
{
|
||||
#if 0
|
||||
if ((samplerate % 8000)) {
|
||||
fprintf(stderr, "Sample rate must be a muliple of 8000 to support MNCC socket interface, aborting!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
memset(state, 0, sizeof(*state));
|
||||
state->factor = samplerate / 8000.0;
|
||||
state->factor = high_samplerate / low_samplerate;
|
||||
if (state->factor < 1.0) {
|
||||
fprintf(stderr, "Software error: Low sample rate must be lower than high sample rate, aborting!\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
filter_lowpass_init(&state->up.lp, 3300.0, samplerate, 2);
|
||||
filter_lowpass_init(&state->down.lp, 3300.0, samplerate, 2);
|
||||
filter_lowpass_init(&state->up.lp, 3300.0, high_samplerate, 2);
|
||||
filter_lowpass_init(&state->down.lp, 3300.0, high_samplerate, 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* convert input sample rate to 8000 Hz */
|
||||
/* convert high sample rate to low sample rate */
|
||||
int samplerate_downsample(samplerate_t *state, sample_t *samples, int input_num)
|
||||
{
|
||||
int output_num = 0, i, idx;
|
||||
|
@ -96,7 +94,7 @@ int samplerate_downsample(samplerate_t *state, sample_t *samples, int input_num)
|
|||
return output_num;
|
||||
}
|
||||
|
||||
/* convert 8000 Hz sample rate to output sample rate */
|
||||
/* convert low sample rate to high sample rate */
|
||||
int samplerate_upsample(samplerate_t *state, sample_t *input, int input_num, sample_t *output)
|
||||
{
|
||||
int output_num = 0, i, idx;
|
||||
|
|
|
@ -14,6 +14,6 @@ typedef struct samplerate {
|
|||
} up;
|
||||
} samplerate_t;
|
||||
|
||||
int init_samplerate(samplerate_t *state, double samplerate);
|
||||
int init_samplerate(samplerate_t *state, double low_samplerate, double high_samplerate);
|
||||
int samplerate_downsample(samplerate_t *state, sample_t *samples, int input_num);
|
||||
int samplerate_upsample(samplerate_t *state, sample_t *input, int input_num, sample_t *output);
|
||||
|
|
|
@ -114,7 +114,7 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf
|
|||
}
|
||||
}
|
||||
|
||||
rc = init_samplerate(&sender->srstate, samplerate);
|
||||
rc = init_samplerate(&sender->srstate, 8000.0, (double)samplerate);
|
||||
if (rc < 0) {
|
||||
PDEBUG(DSENDER, DEBUG_ERROR, "Failed to init sample rate conversion!\n");
|
||||
goto error;
|
||||
|
|
Loading…
Reference in New Issue