Skip to content

Commit ffd3d0c

Browse files
committed
update pitch_spec
1 parent 58b37a8 commit ffd3d0c

File tree

6 files changed

+33
-15
lines changed

6 files changed

+33
-15
lines changed

include/SPTK/analysis/spectrum_extraction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@ class SpectrumExtraction {
4545
* @param[in] fft_length FFT length.
4646
* @param[in] frame_shift Frame shift in point.
4747
* @param[in] sampling_rate Sampling rate in Hz.
48+
* @param[in] f0_refinement Whether to refine F0.
4849
* @param[in] algorithm Algorithm used for spectrum extraction.
4950
*/
5051
SpectrumExtraction(int fft_length, int frame_shift, double sampling_rate,
51-
Algorithms algorithm);
52+
bool f0_refinement, Algorithms algorithm);
5253

5354
virtual ~SpectrumExtraction() {
5455
delete spectrum_extraction_;

include/SPTK/analysis/spectrum_extraction_by_world.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ class SpectrumExtractionByWorld : public SpectrumExtractionInterface {
3333
* @param[in] fft_length FFT length.
3434
* @param[in] frame_shift Frame shift in point.
3535
* @param[in] sampling_rate Sampling rate in Hz.
36+
* @param[in] f0_refinement Whether to refine F0.
3637
*/
3738
SpectrumExtractionByWorld(int fft_length, int frame_shift,
38-
double sampling_rate);
39+
double sampling_rate, bool f0_refinement);
3940

4041
~SpectrumExtractionByWorld() override {
4142
}
@@ -81,6 +82,7 @@ class SpectrumExtractionByWorld : public SpectrumExtractionInterface {
8182
const int fft_length_;
8283
const int frame_shift_;
8384
const double sampling_rate_;
85+
const bool f0_refinement_;
8486

8587
bool is_valid_;
8688

src/analysis/spectrum_extraction.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
namespace sptk {
2626

2727
SpectrumExtraction::SpectrumExtraction(
28-
int fft_length, int frame_shift, double sampling_rate,
28+
int fft_length, int frame_shift, double sampling_rate, bool f0_refinement,
2929
SpectrumExtraction::Algorithms algorithm) {
3030
switch (algorithm) {
3131
case kWorld: {
32-
spectrum_extraction_ =
33-
new SpectrumExtractionByWorld(fft_length, frame_shift, sampling_rate);
32+
spectrum_extraction_ = new SpectrumExtractionByWorld(
33+
fft_length, frame_shift, sampling_rate, f0_refinement);
3434
break;
3535
}
3636
default: {

src/analysis/spectrum_extraction_by_world.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ namespace sptk {
2727

2828
SpectrumExtractionByWorld::SpectrumExtractionByWorld(int fft_length,
2929
int frame_shift,
30-
double sampling_rate)
30+
double sampling_rate,
31+
bool f0_refinement)
3132
: fft_length_(fft_length),
3233
frame_shift_(frame_shift),
3334
sampling_rate_(sampling_rate),
35+
f0_refinement_(f0_refinement),
3436
is_valid_(true) {
3537
if (!sptk::IsPowerOfTwo(fft_length_) || fft_length <= 3 ||
3638
frame_shift_ <= 0 || !sptk::IsInRange(sampling_rate_, 8000.0, 98000.0)) {
@@ -98,14 +100,17 @@ bool SpectrumExtractionByWorld::Run(
98100

99101
// Modify F0 for pitch-adaptive spectrum estimation.
100102
std::vector<double> modified_f0(f0_length);
101-
world::StoneMask(waveform.data(), static_cast<int>(waveform.size()),
102-
static_cast<int>(sampling_rate_), time_axis.data(),
103-
f0.data(), f0_length, modified_f0.data());
103+
if (f0_refinement_) {
104+
world::StoneMask(waveform.data(), static_cast<int>(waveform.size()),
105+
static_cast<int>(sampling_rate_), time_axis.data(),
106+
f0.data(), f0_length, modified_f0.data());
107+
}
104108

105109
// Estimate spectrum.
106110
world::CheapTrick(waveform.data(), static_cast<int>(waveform.size()),
107111
static_cast<int>(sampling_rate_), time_axis.data(),
108-
modified_f0.data(), f0_length, &option, pointers.data());
112+
f0_refinement_ ? modified_f0.data() : f0.data(), f0_length,
113+
&option, pointers.data());
109114

110115
return true;
111116
}

src/main/pitch_spec.cc

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const double kDefaultSamplingRate(16.0);
3939
const InputFormats kDefaultInputFormat(kPitch);
4040
const sptk::SpectrumToSpectrum::InputOutputFormats kDefaultOutputFormat(
4141
sptk::SpectrumToSpectrum::kLogAmplitudeSpectrumInDecibels);
42+
const bool kDefaultF0Refinement(true);
4243

4344
void PrintUsage(std::ostream* stream) {
4445
// clang-format off
@@ -63,6 +64,7 @@ void PrintUsage(std::ostream* stream) {
6364
*stream << " 1 (ln|H(z)|)" << std::endl;
6465
*stream << " 2 (|H(z)|)" << std::endl;
6566
*stream << " 3 (|H(z)|^2)" << std::endl;
67+
*stream << " -x : skip f0 refinement ( bool)[" << std::setw(5) << std::right << sptk::ConvertBooleanToString(!kDefaultF0Refinement) << "]" << std::endl; // NOLINT
6668
*stream << " -h : print this message" << std::endl;
6769
*stream << " infile:" << std::endl;
6870
*stream << " waveform (double)[stdin]" << std::endl;
@@ -104,6 +106,8 @@ void PrintUsage(std::ostream* stream) {
104106
* \arg @c 1 @f$\log |H(z)|@f$
105107
* \arg @c 2 @f$|H(z)|@f$
106108
* \arg @c 3 @f$|H(z)|^2@f$
109+
* - @b -x
110+
* - disable f0 refinement
107111
* - @b infile @e str
108112
* - double-type waveform
109113
* - @b f0file @e str
@@ -130,9 +134,11 @@ int main(int argc, char* argv[]) {
130134
InputFormats input_format(kDefaultInputFormat);
131135
sptk::SpectrumToSpectrum::InputOutputFormats output_format(
132136
kDefaultOutputFormat);
137+
bool f0_refinement(kDefaultF0Refinement);
133138

134139
for (;;) {
135-
const int option_char(getopt_long(argc, argv, "a:l:p:s:q:o:h", NULL, NULL));
140+
const int option_char(
141+
getopt_long(argc, argv, "a:l:p:s:q:o:xh", NULL, NULL));
136142
if (-1 == option_char) break;
137143

138144
switch (option_char) {
@@ -222,6 +228,10 @@ int main(int argc, char* argv[]) {
222228
static_cast<sptk::SpectrumToSpectrum::InputOutputFormats>(tmp);
223229
break;
224230
}
231+
case 'x': {
232+
f0_refinement = false;
233+
break;
234+
}
225235
case 'h': {
226236
PrintUsage(&std::cout);
227237
return 0;
@@ -320,8 +330,8 @@ int main(int argc, char* argv[]) {
320330
}
321331
if (waveform.empty()) return 0;
322332

323-
sptk::SpectrumExtraction spectrum_extraction(fft_length, frame_shift,
324-
sampling_rate_in_hz, algorithm);
333+
sptk::SpectrumExtraction spectrum_extraction(
334+
fft_length, frame_shift, sampling_rate_in_hz, f0_refinement, algorithm);
325335
if (!spectrum_extraction.IsValid()) {
326336
std::ostringstream error_message;
327337
error_message << "FFT length must be a power of 2";

tools/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
# limitations under the License. #
1515
# ------------------------------------------------------------------------ #
1616

17-
PYTHON_VERSION := 3.9
18-
BATS_VERSION := 1.11.0
17+
PYTHON_VERSION := 3.10
18+
BATS_VERSION := 1.11.1
1919
CPPCHECK_VERSION := 2.16.0
2020
DOXYGEN_VERSION := 1.9.1
2121
SHELLCHECK_VERSION := 0.10.0

0 commit comments

Comments
 (0)