#pragma once #include #include #include #include namespace ts { namespace sound { struct SampleSegment { float* samples; size_t channelCount; size_t sampleSize; bool full = false; SampleSegment(){} ~SampleSegment(){ if(samples) free(samples); } }; class SampleConverter { public: SampleConverter(size_t channelCount, size_t segmentSize); ~SampleConverter(); void pushSamples(float* pcm, size_t size); std::shared_ptr nextSegment(); inline bool hasNext(){ threads::MutexLock l(this->segmentLock); return !this->segments.empty(); } size_t getSegmentSize() { return this->segmentSize; } private: size_t channelCount = 1; size_t segmentSize = 0; threads::Mutex segmentLock; std::deque> segments; }; } }