1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#include "stdafx.h"
#include "Loop.h"
#include <limits>
namespace sound {
SoundLoop::SoundLoop(Sound *src) : src(src), noSeek(false) {}
void SoundLoop::close() {
src->close();
}
Word SoundLoop::tell() {
return src->length() * repeat + src->tell();
}
Bool SoundLoop::seek(Word to) {
Word l = src->length();
repeat = to / l;
return src->seek(to % l);
}
Word SoundLoop::length() {
return std::numeric_limits<Word>::max();
}
Nat SoundLoop::sampleFreq() const {
return src->sampleFreq();
}
Nat SoundLoop::channels() const {
return src->channels();
}
Buffer SoundLoop::read(Buffer to) {
if (!src->more()) {
if (src->seek(0))
repeat++;
else
noSeek = true;
}
return src->read(to);
}
Bool SoundLoop::more() {
if (noSeek)
return src->more();
else
return true;
}
SoundLoop *loop(Sound *src) {
return new (src) SoundLoop(src);
}
}
|