1161 |
VCFType = vcf_type_lowpassturbo; |
VCFType = vcf_type_lowpassturbo; |
1162 |
} |
} |
1163 |
|
|
1164 |
// get the corresponding velocity->volume table from the table map or create & calculate that table if it doesn't exist yet |
pVelocityAttenuationTable = GetVelocityTable(VelocityResponseCurve, |
1165 |
uint32_t tableKey = (VelocityResponseCurve<<16) | (VelocityResponseDepth<<8) | VelocityResponseCurveScaling; |
VelocityResponseDepth, |
1166 |
|
VelocityResponseCurveScaling); |
1167 |
|
|
1168 |
|
curve_type_t curveType = ReleaseVelocityResponseCurve; |
1169 |
|
uint8_t depth = ReleaseVelocityResponseDepth; |
1170 |
|
|
1171 |
|
// this models a strange behaviour or bug in GSt: two of the |
1172 |
|
// velocity response curves for release time are not used even |
1173 |
|
// if specified, instead another curve is chosen. |
1174 |
|
|
1175 |
|
if ((curveType == curve_type_nonlinear && depth == 0) || |
1176 |
|
(curveType == curve_type_special && depth == 4)) { |
1177 |
|
curveType = curve_type_nonlinear; |
1178 |
|
depth = 3; |
1179 |
|
} |
1180 |
|
pVelocityReleaseTable = GetVelocityTable(curveType, depth, 0); |
1181 |
|
|
1182 |
|
SampleAttenuation = pow(10.0, -Gain / (20.0 * 655360)); |
1183 |
|
} |
1184 |
|
|
1185 |
|
// get the corresponding velocity table from the table map or create & calculate that table if it doesn't exist yet |
1186 |
|
double* DimensionRegion::GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling) |
1187 |
|
{ |
1188 |
|
double* table; |
1189 |
|
uint32_t tableKey = (curveType<<16) | (depth<<8) | scaling; |
1190 |
if (pVelocityTables->count(tableKey)) { // if key exists |
if (pVelocityTables->count(tableKey)) { // if key exists |
1191 |
pVelocityAttenuationTable = (*pVelocityTables)[tableKey]; |
table = (*pVelocityTables)[tableKey]; |
1192 |
} |
} |
1193 |
else { |
else { |
1194 |
pVelocityAttenuationTable = |
table = CreateVelocityTable(curveType, depth, scaling); |
1195 |
CreateVelocityTable(VelocityResponseCurve, |
(*pVelocityTables)[tableKey] = table; // put the new table into the tables map |
|
VelocityResponseDepth, |
|
|
VelocityResponseCurveScaling); |
|
|
(*pVelocityTables)[tableKey] = pVelocityAttenuationTable; // put the new table into the tables map |
|
1196 |
} |
} |
1197 |
|
return table; |
|
SampleAttenuation = pow(10.0, -Gain / (20.0 * 655360)); |
|
1198 |
} |
} |
1199 |
|
|
1200 |
leverage_ctrl_t DimensionRegion::DecodeLeverageController(_lev_ctrl_t EncodedController) { |
leverage_ctrl_t DimensionRegion::DecodeLeverageController(_lev_ctrl_t EncodedController) { |
1345 |
return pVelocityAttenuationTable[MIDIKeyVelocity]; |
return pVelocityAttenuationTable[MIDIKeyVelocity]; |
1346 |
} |
} |
1347 |
|
|
1348 |
|
double DimensionRegion::GetVelocityRelease(uint8_t MIDIKeyVelocity) { |
1349 |
|
return pVelocityReleaseTable[MIDIKeyVelocity]; |
1350 |
|
} |
1351 |
|
|
1352 |
double* DimensionRegion::CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling) { |
double* DimensionRegion::CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling) { |
1353 |
|
|
1354 |
// line-segment approximations of the 15 velocity curves |
// line-segment approximations of the 15 velocity curves |
1889 |
std::cout << "gig::Exception: " << Message << std::endl; |
std::cout << "gig::Exception: " << Message << std::endl; |
1890 |
} |
} |
1891 |
|
|
1892 |
|
|
1893 |
|
// *************** functions *************** |
1894 |
|
// * |
1895 |
|
|
1896 |
|
/** |
1897 |
|
* Returns the name of this C++ library. This is usually "libgig" of |
1898 |
|
* course. This call is equivalent to RIFF::libraryName() and |
1899 |
|
* DLS::libraryName(). |
1900 |
|
*/ |
1901 |
|
String libraryName() { |
1902 |
|
return PACKAGE; |
1903 |
|
} |
1904 |
|
|
1905 |
|
/** |
1906 |
|
* Returns version of this C++ library. This call is equivalent to |
1907 |
|
* RIFF::libraryVersion() and DLS::libraryVersion(). |
1908 |
|
*/ |
1909 |
|
String libraryVersion() { |
1910 |
|
return VERSION; |
1911 |
|
} |
1912 |
|
|
1913 |
} // namespace gig |
} // namespace gig |