42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <cstdlib>
|
|
#include <deque>
|
|
#include <memory>
|
|
#include <ThreadPool/Mutex.h>
|
|
|
|
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<SampleSegment> 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<std::shared_ptr<SampleSegment>> segments;
|
|
};
|
|
}
|
|
} |