Update inferPreprocess.hpp
This commit is contained in:
parent
f88e201c34
commit
606843f28f
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue