Audaspace  1.9.0
A high level audio library.
TimeStretchPitchScaleReader.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright 2009-2025 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 #pragma once
18 
25 #include "TimeStretchPitchScale.h"
26 
27 #include "fx/EffectReader.h"
28 #include "rubberband/RubberBandStretcher.h"
29 #include "util/Buffer.h"
30 
31 using namespace RubberBand;
32 
34 
39 {
40 private:
44  Buffer m_buffer;
45 
49  std::vector<Buffer> m_deinterleaved;
50 
54  std::vector<sample_t*> m_channelData;
55 
59  int m_samplesToDrop;
60 
61  // delete copy constructor and operator=
63  TimeStretchPitchScaleReader& operator=(const TimeStretchPitchScaleReader&) = delete;
64 
65 protected:
69  void reset();
70 
74  std::unique_ptr<RubberBandStretcher> m_stretcher;
75 
80 
85 
86 public:
95  TimeStretchPitchScaleReader(std::shared_ptr<IReader> reader, double timeRatio, double pitchScale, StretcherQuality quality, bool preserveFormant);
96 
97  virtual void read(int& length, bool& eos, sample_t* buffer);
98 
99  virtual void seek(int position);
100  virtual int getLength() const;
101  virtual int getPosition() const;
102 
107  double getTimeRatio() const;
108 
112  void setTimeRatio(double timeRatio);
113 
118  double getPitchScale() const;
119 
123  void setPitchScale(double pitchScale);
124 };
125 
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition: Audaspace.h:116
#define AUD_API
Used for exporting symbols in the shared library.
Definition: Audaspace.h:93
This reader is a base class for all effect readers that take one other reader as input.
Definition: EffectReader.h:35
The EffectReader class.
This class reads from another reader and applies time-stretching and pitch scaling.
Definition: TimeStretchPitchScaleReader.h:38
This class is a simple buffer in RAM which is 32 Byte aligned and provides resize functionality...
Definition: Buffer.h:33
int m_position
The current position.
Definition: TimeStretchPitchScaleReader.h:79
The TimeStretchPitchScale class.
float sample_t
Sample type.(float samples)
Definition: Audaspace.h:126
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition: Audaspace.h:119
bool m_finishedReader
Whether the reader has reached the end of stream.
Definition: TimeStretchPitchScaleReader.h:84
std::unique_ptr< RubberBandStretcher > m_stretcher
Rubberband stretcher.
Definition: TimeStretchPitchScaleReader.h:74
The Buffer class.