Warning: session_start(): open(/var/lib/php/sessions/sess_73sqh086ufsv6g8lq327f475la, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass SlidingWindow implements IAudioSample {
// general params
double sampleRate;
int channels;
// length of window
int length; // in samples per channel
// start of window
double start;
// at which index in data array is our first value?
int boundaryIndex; // in data
// Here they are: the partial sums of the 16 bit audio samples
// in an array of 6-byte integers. Channels are stored interleaved.
HalfLongs data;
public double sampleRate() { ret sampleRate; }
public int channels() { ret channels; }
public double length() { ret length; }
// result is in the range -32768*(end-start) to 32767*(end-start)
public double sampleSum(int channel, double start, double end) {
// We could do linear interpolation here if we weren't so basic.
int a = ifloor(start-this.start), b = ifloor(end);
ret getEntry(channel, b-1)-getEntry(channel, a-1);
}
// Get an entry of the sum table - allow for out-of-bounds
// requests (those just default to silence).
long getEntry(int channel, int i) {
if (i < 0) ret 0;
i = min(i, length-1);
// do the shift
i = (i+boundaryIndex) % length;
ret data.get(i*channels+channel);
}
// constructor - perform integration of the raw audio data
*(L samples, int *channels, double *sampleRate) {
length = lengthLevel2_shortArrays(samples);
data = new HalfLongs(length*channels);
long[] sums = new[channels];
int iSample = 0, iChunk = 0, iInArray = 0;
short[] chunk = null;
for i to length:
for c to channels: {
if (chunk == null || iInArray >= chunk.length) {
chunk = samples.get(iChunk++);
iInArray = 0;
}
data.set(iSample++, sums[c] += chunk[iInArray++]);
}
}
}