28 m_converter_in(), m_converter_out()
31 m_converter = src_new(SRC_SINC_MEDIUM_QUALITY, 1, &error);
33 if (!
m_converter) qWarning(
"creating converter failed: '%s",
59 const unsigned int in_len = data.
size();
69 unsigned int remaining = in_len;
70 const unsigned int block_size = 16;
71 while (remaining >= block_size) {
72 for (
unsigned int i = 0; i < block_size; i++)
76 remaining -= block_size;
78 for (; remaining; remaining--)
87 ceil(static_cast<double>(in_len) *
m_ratio)
89 const unsigned int extra = qBound<unsigned int>(4096, out_len, 16384);
96 src.input_frames = in_len;
97 src.output_frames = out_len + extra;
98 src.input_frames_used = 0;
99 src.output_frames_gen = 0;
100 src.end_of_input = (in_len == 0) ? 1 : 0;
105 if (error) qWarning(
"SRC error: '%s'", src_strerror(error));
111 const float *f_out = src.data_out;
116 while (remaining >= block_size) {
117 for (
unsigned int i = 0; i < block_size; ++i)
121 remaining -= block_size;
123 for (; remaining; remaining--, ++s_out, ++f_out)
132 m_ratio = QVariant(ratio).toDouble();
void setRatio(const QVariant r)
QVarLengthArray< float, 65536 > m_converter_out
QVarLengthArray< float, 65536 > m_converter_in
void output(Kwave::SampleArray data)
static float sample2float(const sample_t s)
void input(Kwave::SampleArray data)
const sample_t * constData() const
unsigned int size() const
virtual void goOn() Q_DECL_OVERRIDE
static sample_t float2sample(const float f)
virtual ~RateConverter() Q_DECL_OVERRIDE