Etterna 0.74.4
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<float> m_Copy;
68
69 struct Window
70 {
71 std::vector<float> Buffer;
72 int64_t iSize = 0;
73 int64_t iSourceStep = 0;
74 double dDestStep = 0.0;
75 std::shared_ptr<SpeedChangeFFT> Junk;
76
77 static Window Make(int iSampleRate, double dRate);
78 };
79
80 Window m_Window;
81};
82
83#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:70
Definition RageSoundReader_SpeedChange_Good.cpp:89