Improve error messages.

Oversampling default is 4.
This commit is contained in:
Holger Vogt 2024-08-23 19:47:12 +02:00
parent 46865b290e
commit 5a9568dd36
2 changed files with 18 additions and 11 deletions

View File

@ -506,7 +506,7 @@ com_sndprint(wordlist* wl)
j++;
}
snd_close();
printf("wrote %i audio-samples from %i data-points\n", i / ngood, j);
printf("Info: wrote %i audio-samples from %i data-points\n", i / ngood, j);
/* Get rid of the vectors. */
return;
}
@ -522,7 +522,7 @@ com_sndparam(wordlist* wl)
int fmt = -1;
double mult = 1.0;
double off = 0.0;
int oversampling = 1;
int oversampling = 4;
while (wl) {
copypath = cp_unquote(wl->wl_word);

View File

@ -120,7 +120,7 @@ typedef struct SP_BUF {
static void (*p_close)(void*);
static void* (*p_open)(char*, int);
static size_t (*p_write)(void*, float);
static size_t (*p_write)(void*, float);
static void* outfile;
static uint32_t sample;
static int sp_nchannel;
@ -135,7 +135,7 @@ static char* filename = NULL;
#else
#include <samplerate.h>
#define OBUFSIZE 256
static int oversampling = 64;
static int oversampling = 4;
#define OVERSAMPLING ((double) oversampling)
static SRC_STATE* rabbit;
static int rabbit_err;
@ -166,11 +166,11 @@ static int resample_wrapper(void* d, float val) {
}
if (src_data.output_frames_gen * sp_nchannel != obufsize) {
fprintf(stderr, "resample warning: out %li != %i\n", src_data.output_frames_gen * sp_nchannel, (int)obufsize);
fprintf(stderr, "Warning: resample: out %li != %i\n", src_data.output_frames_gen * sp_nchannel, (int)obufsize);
}
if (src_data.input_frames_used * sp_nchannel != iptr) {
printf("resample warning: in: %li != %i\n", src_data.input_frames_used * sp_nchannel, iptr);
fprintf(stderr, "Warning: resample: in: %li != %i\n", src_data.input_frames_used * sp_nchannel, iptr);
}
int i;
@ -224,7 +224,7 @@ void snd_init(int nchannel) {
if (!filename) snd_configure("spice.wav", 48000, o_sndfmt, o_mult, o_off, oversampling);
outfile = p_open(filename, nchannel);
sp_nchannel = nchannel;
sp_buf = calloc(nchannel, sizeof(SP_BUF));
sp_buf = calloc(SP_MAX, sizeof(SP_BUF));
for (i = 0; i < SP_MAX; i++) {
sp_buf[i].tme = 0.0;
sp_buf[i].val = calloc(nchannel, sizeof(double));
@ -242,6 +242,7 @@ void snd_init(int nchannel) {
int snd_send(double tme, int c, double out) {
int i;
int rv = 0;
static bool shown = FALSE;
if (c == 0) for (i = SP_MAX - 1; i > 0; i--) {
memcpy(&(sp_buf[i]), &(sp_buf[i - 1]), sizeof(SP_BUF));
}
@ -258,10 +259,16 @@ int snd_send(double tme, int c, double out) {
}
if ((sample) < ceil(tme * OVERSAMPLING)) {
if (!(sp_buf[0].tme > sample)) printf("error 1 %f !> %i\n", sp_buf[0].tme, sample);
if ((sp_buf[1].tme > sample)) printf("error 2 %f !< %i\n", sp_buf[1].tme, sample);
#if 1 // DEBUG
if ((sp_buf[0].tme - sample) > 1.0) printf("error 3 large timestep: dv/dt=%e dt:%f dv:%e\n",
if (!(sp_buf[0].tme > sample))
fprintf(stderr, "Error: Oversampling error 1 %f !> %i\n", sp_buf[0].tme, sample);
if (!shown && (sp_buf[1].tme > sample)) {
fprintf(stderr, "Error: Oversampling error 2 %f !< %i\n", sp_buf[1].tme, sample);
fprintf(stderr, " Time step too large\n");
shown = TRUE;
}
#if 0 // DEBUG
if ((sp_buf[0].tme - sample) > 1.0)
fprintf(stderr, "Error: Oversampling error 3 large timestep: dv/dt=%e dt:%f dv:%e\n",
(sp_buf[0].val[c] - sp_buf[1].val[c]) / (sp_buf[0].tme - sample),
(sp_buf[0].tme - sample), (sp_buf[0].val[c] - sp_buf[1].val[c]));
#endif