protected override bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var chPtr = 0; offset /= _channels; for (int c = 0; c < partitionSize;) { var entry = codebook.DecodeScalar(packet); if (entry == -1) { return(true); } for (var d = 0; d < codebook.Dimensions; d++, c++) { residue[chPtr][offset] += codebook[entry, d]; if (++chPtr == _channels) { chPtr = 0; offset++; } } } return(false); }
protected override bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var res = residue[channel]; for (int i = 0; i < partitionSize;) { var entry = codebook.DecodeScalar(packet); if (entry == -1) { return(true); } for (int j = 0; j < codebook.Dimensions; i++, j++) { res[offset + i] += codebook[entry, j]; } } return(false); }
virtual protected bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var res = residue[channel]; var step = partitionSize / codebook.Dimensions; for (int i = 0; i < step; i++) { if ((_entryCache[i] = codebook.DecodeScalar(packet)) == -1) { return(true); } } for (int i = 0; i < codebook.Dimensions; i++) { for (int j = 0; j < step; j++, offset++) { res[offset] += codebook[_entryCache[j], i]; } } return(false); }
internal override float[][] Decode(DataPacket packet, bool[] doNotDecode, int channels, int blockSize) { var residue = GetResidueBuffer(doNotDecode.Length); // this is pretty well stolen directly from libvorbis... BSD license var end = _end < blockSize / 2 ? _end : blockSize / 2; var n = end - _begin; if (n > 0 && doNotDecode.Contains(false)) { var partVals = n / _partitionSize; var partWords = (partVals + _classBook.Dimensions - 1) / _classBook.Dimensions; for (int j = 0; j < channels; j++) { Array.Clear(_partWordCache[j], 0, partWords); } for (int s = 0; s < _maxStages; s++) { for (int i = 0, l = 0; i < partVals; l++) { if (s == 0) { for (int j = 0; j < channels; j++) { var idx = _classBook.DecodeScalar(packet); if (idx >= 0 && idx < _decodeMap.Length) { _partWordCache[j][l] = _decodeMap[idx]; } else { i = partVals; s = _maxStages; break; } } } for (int k = 0; i < partVals && k < _classBook.Dimensions; k++, i++) { var offset = _begin + i * _partitionSize; for (int j = 0; j < channels; j++) { var idx = _partWordCache[j][l][k]; if ((_cascade[idx] & (1 << s)) != 0) { var book = _books[idx][s]; if (book != null) { if (WriteVectors(book, packet, residue, j, offset, _partitionSize)) { // bad packet... exit now and try to use what we already have i = partVals; s = _maxStages; break; } } } } } } } } return(residue); }
protected override bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var chPtr = 0; offset /= _channels; for (int c = 0; c < partitionSize; ) { var entry = codebook.DecodeScalar(packet); if (entry == -1) { return true; } for (var d = 0; d < codebook.Dimensions; d++, c++) { residue[chPtr][offset] += codebook[entry, d]; if (++chPtr == _channels) { chPtr = 0; offset++; } } } return false; }
protected override bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var res = residue[channel]; for (int i = 0; i < partitionSize; ) { var entry = codebook.DecodeScalar(packet); if (entry == -1) { return true; } for (int j = 0; j < codebook.Dimensions; i++, j++) { res[offset + i] += codebook[entry, j]; } } return false; }
protected virtual bool WriteVectors(VorbisCodebook codebook, DataPacket packet, float[][] residue, int channel, int offset, int partitionSize) { var res = residue[channel]; var step = partitionSize / codebook.Dimensions; for (int i = 0; i < step; i++) { if ((_entryCache[i] = codebook.DecodeScalar(packet)) == -1) { return true; } } for (int i = 0; i < codebook.Dimensions; i++) { for (int j = 0; j < step; j++, offset++) { res[offset] += codebook[_entryCache[j], i]; } } return false; }