-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathStftPitchShift.h
executable file
·146 lines (131 loc) · 4.83 KB
/
StftPitchShift.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#pragma once
#include <memory>
#include <span>
#include <tuple>
#include <vector>
#include <StftPitchShift/FFT.h>
namespace stftpitchshift
{
/**
* Short-time Fourier transform (STFT) based pitch shifting.
*/
class StftPitchShift
{
public:
/**
* @param framesize The STFT frame size in samples (analysis = synthesis).
* @param hopsize The STFT hop size in samples.
* @param samplerate The sample rate of the signal in hertz.
* @param normalization Optionally enable spectral rms normalization.
* @param chronometry Optionally enable runtime measurements.
*/
StftPitchShift(
const size_t framesize,
const size_t hopsize,
const double samplerate,
const bool normalization = false,
const bool chronometry = false);
/**
* @param framesize The STFT frame size in samples (analysis >= synthesis).
* @param hopsize The STFT hop size in samples.
* @param samplerate The sample rate of the signal in hertz.
* @param normalization Optionally enable spectral rms normalization.
* @param chronometry Optionally enable runtime measurements.
*/
StftPitchShift(
const std::tuple<size_t, size_t> framesize,
const size_t hopsize,
const double samplerate,
const bool normalization = false,
const bool chronometry = false);
/**
* @param fft The custom FFT calculation instance.
* @param framesize The STFT frame size in samples (analysis = synthesis).
* @param hopsize The STFT hop size in samples.
* @param samplerate The sample rate of the signal in hertz.
* @param normalization Optionally enable spectral rms normalization.
* @param chronometry Optionally enable runtime measurements.
*/
StftPitchShift(
const std::shared_ptr<FFT> fft,
const size_t framesize,
const size_t hopsize,
const double samplerate,
const bool normalization = false,
const bool chronometry = false);
/**
* @param fft The custom FFT calculation instance.
* @param framesize The STFT frame size in samples (analysis >= synthesis).
* @param hopsize The STFT hop size in samples.
* @param samplerate The sample rate of the signal in hertz.
* @param normalization Optionally enable spectral rms normalization.
* @param chronometry Optionally enable runtime measurements.
*/
StftPitchShift(
const std::shared_ptr<FFT> fft,
const std::tuple<size_t, size_t> framesize,
const size_t hopsize,
const double samplerate,
const bool normalization = false,
const bool chronometry = false);
/**
* @param input The input signal.
* @param output The output signal of the equal size.
* @param factor The fractional pitch shifting factor.
* @param quefrency The optional formant lifter quefrency in seconds.
* @param distortion The fractional timbre shifting factor.
*/
void shiftpitch(
const std::span<const float> input,
const std::span<float> output,
const double factor = 1,
const double quefrency = 0,
const double distortion = 1);
/**
* @param input The input signal.
* @param output The output signal of the equal size.
* @param factor The fractional pitch shifting factor.
* @param quefrency The optional formant lifter quefrency in seconds.
* @param distortion The fractional timbre shifting factor.
*/
void shiftpitch(
const std::span<const double> input,
const std::span<double> output,
const double factor = 1,
const double quefrency = 0,
const double distortion = 1);
/**
* @param input The input signal.
* @param output The output signal of the equal size.
* @param factors The fractional pitch shifting factors.
* @param quefrency The optional formant lifter quefrency in seconds.
* @param distortion The fractional timbre shifting factor.
*/
void shiftpitch(
const std::span<const float> input,
const std::span<float> output,
const std::vector<double>& factors,
const double quefrency = 0,
const double distortion = 1);
/**
* @param input The input signal.
* @param output The output signal of the equal size.
* @param factors The fractional pitch shifting factors.
* @param quefrency The optional formant lifter quefrency in seconds.
* @param distortion The fractional timbre shifting factor.
*/
void shiftpitch(
const std::span<const double> input,
const std::span<double> output,
const std::vector<double>& factors,
const double quefrency = 0,
const double distortion = 1);
private:
const std::shared_ptr<FFT> fft;
const std::tuple<size_t, size_t> framesize;
const size_t hopsize;
const double samplerate;
const bool normalization;
const bool chronometry;
};
}