| ... | ... |
@@ -63,7 +63,10 @@ Channel::Channel() : chnId(-1), tempReg(), state(CS_NONE), trackId(-1), prio(0), |
| 63 | 63 |
{
|
| 64 | 64 |
double dx = static_cast<double>(SINC_WIDTH) / SINC_SAMPLES, x = 0.0; |
| 65 | 65 |
for (unsigned i = 0; i <= SINC_SAMPLES; ++i, x += dx) |
| 66 |
- this->sinc_lut[i] = std::abs(x) < SINC_WIDTH ? sinc(x) * sinc(x / SINC_WIDTH) : 0.0; |
|
| 66 |
+ {
|
|
| 67 |
+ float y = x / SINC_WIDTH; |
|
| 68 |
+ this->sinc_lut[i] = std::abs(x) < SINC_WIDTH ? sinc(x) * (0.40897 + 0.5 * std::cos(M_PI * y) + 0.09103 * std::cos(2 * M_PI * y)) : 0.0; |
|
| 69 |
+ } |
|
| 67 | 70 |
this->initializedLUTs = true; |
| 68 | 71 |
} |
| 69 | 72 |
} |
| ... | ... |
@@ -81,7 +81,7 @@ INT_PTR CALLBACK XSFConfig_NCSF::ConfigDialogProc(HWND hwndDlg, UINT uMsg, WPARA |
| 81 | 81 |
SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(L"Linear")); |
| 82 | 82 |
SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(L"4-point, 3rd-order Legrange")); |
| 83 | 83 |
SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(L"6-point, 5th-order Legrange")); |
| 84 |
- SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(L"16-point Sinc (Lanczos Window)")); |
|
| 84 |
+ SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(L"16-point Sinc (Nuttall 3-term Window)")); |
|
| 85 | 85 |
SendMessageW(GetDlgItem(hwndDlg, idInterpolation), CB_SETCURSEL, this->interpolation, 0); |
| 86 | 86 |
// Mutes |
| 87 | 87 |
for (int x = 0, numMutes = this->mutes.size(); x < numMutes; ++x) |