total_samples += samples;
}
+ if (ov_pcm_total(&vf, -1) != total_samples)
+ die("ov_pcm_total mismatch");
if (start_pos < 0)
{
if (inmode == IN_OGG)
{
if (ov_pcm_tell(&vf) != pos)
- printf("!!! CONFUSED POSITION\n");
+ {
+ printf("!!! CONFUSED POSITION\n");
+ ov_pcm_seek(&vf, pos);
+ if (ov_pcm_tell(&vf) != pos)
+ printf(">>> unable to correct :(\n");
+ }
for (;;)
{
int bp;
printf("!!! BAD LINK\n");
else if (e % 4)
die("ov_read returned %d bytes, which means non-integer number of samples. Huh.", e);
+ else if (e < 0)
+ die("ov_read returned %d. Huh!", e);
else if (e/4 <= nsamp)
return e/4;
else
M_POST,
} mode = M_START;
int silence = 0;
- int step = rate;
- double fst = 1;
+ int step = rate*4;
+ double fst = 4;
double fsil = 1;
int lback = 3*rate;
for(;;)
break;
case 0x3027e: // Delete
mode = M_END;
+ go = end_pos - lback;
break;
case '[':
mode = M_PRE;
else
{
nsamp = sizeof(buf)/4;
- if (pos + nsamp > end_pos)
- nsamp = end_pos - pos;
+ if (pos + nsamp > pos)
+ nsamp = end - pos;
nsamp = cooked_read(buf, pos, nsamp, (mode == M_PRE), (mode == M_POST));
nread = nsamp;
}