aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2024-01-14 13:57:46 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2024-02-18 16:23:30 +0100
commit7e5663a709eee8fdafa422d03aed802561957131 (patch)
tree7c99224b7b761846e0a99375253b52db1940479c /src
parent26c348411c72dd7901dc77e895f904c26dad45ac (diff)
Jollycom: Fix initial voice sample resampling
Diffstat (limited to 'src')
-rw-r--r--src/jolly/voice.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/src/jolly/voice.c b/src/jolly/voice.c
index e24e0b5..a3139bb 100644
--- a/src/jolly/voice.c
+++ b/src/jolly/voice.c
@@ -11065,15 +11065,11 @@ static int16_t released[] = {
jolly_voice_t jolly_voice;
-#define CHUNK 8
#define GAIN 2.5
int init_voice(int samplerate)
{
- samplerate_t srstate;
- sample_t spl_in[CHUNK], *spl_out;
- int i, s, j, chunk, count, output_num;
- int rc;
+ int i;
jolly_voice.spl[0] = (sample_t *)digit_0;
jolly_voice.size[0] = sizeof(digit_0) / sizeof(int16_t);
@@ -11102,27 +11098,25 @@ int init_voice(int samplerate)
jolly_voice.spl[12] = (sample_t *)released;
jolly_voice.size[12] = sizeof(released) / sizeof(int16_t);
- rc = init_samplerate(&srstate, 8000.0, (double)samplerate, 3300.0);
- if (rc < 0) {
- fprintf(stderr, "Failed to init sample rate conversion!\n");
- return -1;
- }
-
for (i = 0; i < 13; i++) {
+ samplerate_t srstate;
+ sample_t spl_in[jolly_voice.size[i]], *spl_out;
+ int s, output_num;
+ int rc;
+
+ rc = init_samplerate(&srstate, 8000.0, (double)samplerate, 3300.0);
+ if (rc < 0) {
+ fprintf(stderr, "Failed to init sample rate conversion!\n");
+ return -1;
+ }
+
output_num = samplerate_upsample_output_num(&srstate, jolly_voice.size[i]);
spl_out = calloc(output_num, sizeof(*spl_out));
- count = 0;
- for (s = 0; s < jolly_voice.size[i]; s += CHUNK) {
- chunk = jolly_voice.size[i] - s;
- if (chunk > CHUNK)
- chunk = CHUNK;
- for (j = 0; j < chunk; j++)
- spl_in[j] = (double)(((int16_t *)(jolly_voice.spl[i]))[s + j]) / 32767.0 * GAIN;
- samplerate_upsample(&srstate, spl_in, chunk, spl_out + count, output_num);
- count += output_num;
- }
+ for (s = 0; s < jolly_voice.size[i]; s ++)
+ spl_in[s] = (double)(((int16_t *)(jolly_voice.spl[i]))[s]) / 32767.0 * GAIN;
+ samplerate_upsample(&srstate, spl_in, jolly_voice.size[i], spl_out, output_num);
jolly_voice.spl[i] = spl_out;
- jolly_voice.size[i] = count;
+ jolly_voice.size[i] = output_num;
}
return 0;