Browse Source

Don't drop frames when buffer crosses loop boundaries.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
801c1c484c
1 changed files with 14 additions and 9 deletions
  1. +14
    -9
      Timeline/Engine/Audio_Region.C

+ 14
- 9
Timeline/Engine/Audio_Region.C View File

@@ -118,19 +118,24 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe

if ( _loop )
{
nframes_t lofs = sofs % _loop;
nframes_t lstart = r.offset + lofs;

/* /\* keep things simple *\/ */
/* assert( _loop > len ); */

nframes_t lstart = r.offset + ( sofs % _loop );
if ( lofs + len > _loop )
{
/* this buffer covers a loop bounary */

cnt = _clip->read( buf + ofs, channel, lstart, len );
/* read the first part */
cnt = _clip->read( buf + ofs, channel, lstart, len - ( ( lofs + len ) - _loop ) );
/* read the second part */
cnt += _clip->read( buf + ofs + cnt, channel, lstart + cnt, len - cnt );

/* /\* read the part before the loop point *\/ */
/* cnt = _clip->read( buf + ofs, channel, start, min( len, _loop - start ) ); */
/* /\* read the part after the loop point *\/ */
/* cnt += _clip->read( buf + ofs + cnt, channel, _loop, len - cnt ); */
/* TODO: declick/crossfade transition? */

assert( cnt == len );
}
else
cnt = _clip->read( buf + ofs, channel, lstart, len );
}
else
cnt = _clip->read( buf + ofs, channel, start, len );


Loading…
Cancel
Save