| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- #pragma once
 
- #include <stddef.h>    // for size_t
 
- #include <stdint.h>    // for uint32_t, uint8_t
 
- #include <functional>  // for function
 
- #include <memory>      // for shared_ptr, unique_ptr
 
- #include <mutex>       // for mutex
 
- #include <vector>      // for vector
 
- #include "StreamInfo.h"  // for BitWidth
 
- namespace bell {
 
- class AudioPipeline;
 
- class CentralAudioBuffer;
 
- #define MAX_INT16 32767
 
- class BellDSP {
 
-  public:
 
-   BellDSP(std::shared_ptr<CentralAudioBuffer> centralAudioBuffer);
 
-   ~BellDSP(){};
 
-   class AudioEffect {
 
-    public:
 
-     AudioEffect() = default;
 
-     ~AudioEffect() = default;
 
-     size_t duration;
 
-     virtual void apply(float* sampleData, size_t samples,
 
-                        size_t relativePosition) = 0;
 
-   };
 
-   class FadeEffect : public AudioEffect {
 
-    private:
 
-     std::function<void()> onFinish;
 
-     bool isFadeIn;
 
-    public:
 
-     FadeEffect(size_t duration, bool isFadeIn,
 
-                std::function<void()> onFinish = nullptr);
 
-     ~FadeEffect(){};
 
-     void apply(float* sampleData, size_t samples, size_t relativePosition);
 
-   };
 
-   void applyPipeline(std::shared_ptr<AudioPipeline> pipeline);
 
-   void queryInstantEffect(std::unique_ptr<AudioEffect> instantEffect);
 
-   std::shared_ptr<AudioPipeline> getActivePipeline();
 
-   size_t process(uint8_t* data, size_t bytes, int channels, uint32_t sampleRate,
 
-                  BitWidth bitWidth);
 
-  private:
 
-   std::shared_ptr<AudioPipeline> activePipeline;
 
-   std::shared_ptr<CentralAudioBuffer> buffer;
 
-   std::mutex accessMutex;
 
-   std::vector<float> dataLeft = std::vector<float>(1024);
 
-   std::vector<float> dataRight = std::vector<float>(1024);
 
-   std::unique_ptr<AudioEffect> underflowEffect = nullptr;
 
-   std::unique_ptr<AudioEffect> startEffect = nullptr;
 
-   std::unique_ptr<AudioEffect> instantEffect = nullptr;
 
-   size_t samplesSinceInstantQueued;
 
- };
 
- };  // namespace bell
 
 
  |