Update inferPreprocess.hpp

This commit is contained in:
Ναρουσέ·μ·γιουμεμί·Χινακάννα 2023-04-07 23:52:17 +08:00 committed by GitHub
parent f88e201c34
commit 606843f28f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 56 additions and 0 deletions

View File

@ -190,3 +190,59 @@ inline std::vector<long long> getAligments(size_t specLen, size_t hubertLen)
return mel2ph; return mel2ph;
} }
std::vector<float> F0PreProcess::GetF0AndOtherInputF0(const double* audio, int64_t audioLen, int64_t tran)
{
compute_f0(audio, audioLen);
for (int64_t i = 0; i < f0Len; ++i)
{
rf0[i] = log2(rf0[i] * pow(2.0, static_cast<double>(tran) / 12.0));
if (rf0[i] < 0.001)
rf0[i] = NAN;
}
const int64_t specLen = audioLen / hop;
InterPf0(specLen);
std::vector<float> Of0(specLen, 0.0);
double last_value = 0.0;
for (int64_t i = 0; i < specLen; ++i)
{
if (rf0[i] <= 0.0)
{
int64_t j = i + 1;
for (; j < specLen; ++j)
{
if (rf0[j] > 0.0)
break;
}
if (j < specLen - 1)
{
if (last_value > 0.0)
{
const auto step = (rf0[j] - rf0[i - 1]) / double(j - i);
for (int64_t k = i; k < j; ++k)
Of0[k] = float(rf0[i - 1] + step * double(k - i + 1));
}
else
for (int64_t k = i; k < j; ++k)
Of0[k] = float(rf0[j]);
i = j;
}
else
{
for (int64_t k = i; k < specLen; ++k)
Of0[k] = float(last_value);
i = specLen;
}
}
else
{
Of0[i] = float(rf0[i - 1]);
last_value = rf0[i];
}
}
delete[] rf0;
rf0 = nullptr;
return Of0;
}