Etterna 0.75.1
Loading...
Searching...
No Matches
RageSoundReader_SpeedChange_Good.h
1/* RageSoundReader_SpeedChange_Good - change the speed of an audio stream without
2 * changing its pitch. */
3
4#ifndef RAGE_SOUND_READER_SPEED_CHANGE_GOOD_H
5#define RAGE_SOUND_READER_SPEED_CHANGE_GOOD_H
6
7#include <string>
8#include <vector>
9
10#include "RageSoundReader_Filter.h"
11
12struct SpeedChangeFFT;
13
15{
16 public:
18
19 virtual int SetPosition(int iFrame);
20 virtual int Read(float* pBuf, int iFrames);
21 virtual RageSoundReader_SpeedChange_Good* Copy() const
22 {
23 return new RageSoundReader_SpeedChange_Good(*this);
24 }
25 virtual bool SetProperty(const std::string& sProperty, float fValue);
26 virtual int GetNextSourceFrame() const;
27 virtual float GetStreamToSourceRatio() const;
28
29 void SetSpeedRatio(float fRatio);
30 float GetRatio() const { return m_fRate; }
31
32 protected:
33
34 float m_fRate = 1.0f;
35 double m_dPos = 0.0;
36 bool m_bDraining = false;
37
38 struct AudioBuffer {
39 int64_t iNumChannels = 1;
40 int64_t iReadPosition = 0;
41 int64_t iWritePosition = 0;
42 std::vector<float> Samples;
43
44 int64_t Frames() const
45 {
46 return iWritePosition - iReadPosition;
47 }
48
49 void Extend(int64_t iFrames) {
50 uint64_t iSamples = uint64_t((iWritePosition + iFrames) * iNumChannels);
51 Samples.resize(iSamples);
52 }
53
54 void Shift()
55 {
56 int64_t iSamples = iReadPosition * iNumChannels;
57 Samples.erase(Samples.begin(), Samples.begin() + iSamples);
58
59 iWritePosition -= iReadPosition;
60 iReadPosition -= iReadPosition;
61 }
62 };
63
64 AudioBuffer m_ReadAhead;
65 AudioBuffer m_Mixed;
66 std::vector<float> m_Scale;
67 std::vector<double> m_Source;
68 std::vector<float> m_Copy;
69
70 struct Window
71 {
72 std::vector<float> Buffer;
73 int64_t iSize = 0;
74 int64_t iSourceStep = 0;
75 double dDestStep = 0.0;
76 std::shared_ptr<SpeedChangeFFT> Junk;
77
78 static Window Make(int iSampleRate, double dRate);
79 };
80
81 Window m_Window;
82};
83
84#endif
Definition RageSoundReader_Filter.h:10
Definition RageSoundReader_SpeedChange_Good.h:15
Definition RageSoundReader.h:7
Definition RageSoundReader_SpeedChange_Good.h:38
Definition RageSoundReader_SpeedChange_Good.h:71
Definition RageSoundReader_SpeedChange_Good.cpp:89