Beispiel #1
0
 size_t Read(void * dst, size_t len) override
 {
     size_t bytesRead = 0;
     size_t bytesToRead = len;
     while (bytesToRead > 0 && !_done)
     {
         size_t readLen = _source->Read(dst, _offset, bytesToRead);
         if (readLen > 0)
         {
             dst = (void *)((uintptr_t)dst + readLen);
             bytesToRead -= readLen;
             bytesRead += readLen;
             _offset += readLen;
         }
         if (_offset >= _source->GetLength())
         {
             if (_loop == 0)
             {
                 _done = true;
             }
             else if (_loop == MIXER_LOOP_INFINITE)
             {
                 _offset = 0;
             }
             else
             {
                 _loop--;
                 _offset = 0;
             }
         }
     }
     return bytesRead;
 }
Beispiel #2
0
 bool SetOffset(uint64 offset) override
 {
     if (_source != nullptr && offset < _source->GetLength())
     {
         AudioFormat format = _source->GetFormat();
         sint32 samplesize = format.channels * format.BytesPerSample();
         _offset = (offset / samplesize) * samplesize;
         return true;
     }
     return false;
 }