mumsi/SoundSampleQueue.hpp
2015-09-29 02:26:45 +02:00

52 строки
1.1 KiB
C++
Исходник Ответственный История

Этот файл содержит невидимые символы Юникода

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MUMSI_SOUNDSAMPLEQUEUE_HPP
#define MUMSI_SOUNDSAMPLEQUEUE_HPP
#include <mutex>
#include <memory>
#include <cstring>
#include <algorithm>
template<typename SAMPLE_TYPE>
class SoundSampleQueue {
public:
SoundSampleQueue() {
start = 0;
stop = 0;
buffer = new SAMPLE_TYPE[10000000];
}
~SoundSampleQueue() {
delete[] buffer;
}
void push(SAMPLE_TYPE *data, int length) {
std::lock_guard<std::mutex> lock(accessMutex);
std::memcpy(&buffer[stop], data, length);
stop += length;
// printf("pos: %d\n", stop);
}
int pop(SAMPLE_TYPE *data, int maxLength) {
std::lock_guard<std::mutex> lock(accessMutex);
int samplesToTake = std::min(stop - start, maxLength);
std::memcpy(data, &buffer[stop - samplesToTake], samplesToTake);
stop -= samplesToTake;
//todo maksymalna pojemność bufora
return samplesToTake;
}
private:
int start;
int stop;
std::mutex accessMutex;
SAMPLE_TYPE *buffer;
};
#endif //MUMSI_SOUNDSAMPLEQUEUE_HPP