MCPcopy Create free account
hub / github.com/davy7125/polyphone / fillSincTable

Method fillSincTable

sources/core/sample/sampleutils.cpp:1135–1167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1133}
1134
1135void SampleUtils::fillSincTable(float * table, int order, int subdivisions, double kaiserBesserBeta)
1136{
1137 double v, posI, posIshifted;
1138 double multiplier = 1.0 / besselI0(kaiserBesserBeta);
1139 double twoInvOrder = 2.0 / (double)order;
1140 double dTmp;
1141 double invSubDivisions = 1.0 / (double)subdivisions;
1142
1143 // i2: Offset in terms of fractional samples ('subsamples')
1144 for (int i2 = 0; i2 < subdivisions; ++i2)
1145 {
1146 // i: Offset in terms of whole samples
1147 for (int i = 0; i < order; ++i)
1148 {
1149 posI = (double)i + (double)(subdivisions - i2 - 1) * invSubDivisions;
1150 posIshifted = posI - (double)order / 2.0;
1151
1152 // sinc(0) cannot be calculated straightforward (limit needed for 0/0)
1153 if (fabs(posIshifted) > 0.000001)
1154 {
1155 v = sin(posIshifted * M_PI) / (posIshifted * M_PI);
1156
1157 // Kaiser-bessel window
1158 dTmp = twoInvOrder * posI - 1.;
1159 v *= besselI0(kaiserBesserBeta * sqrt(1. - dTmp * dTmp)) * multiplier;
1160 }
1161 else
1162 v = 1.0;
1163
1164 table[i2 * order + i] = (float)v;
1165 }
1166 }
1167}
1168
1169double SampleUtils::besselI0(double x)
1170{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected