add MemoryPCMStream
This commit is contained in:
parent
4b19c29a29
commit
31137f83b6
63
src/audio/MemoryPCMStream.cpp
Normal file
63
src/audio/MemoryPCMStream.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include "MemoryPCMStream.hpp"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace audio;
|
||||||
|
|
||||||
|
MemoryPCMStream::MemoryPCMStream(
|
||||||
|
uint sampleRate, uint channels, uint bitsPerSample
|
||||||
|
)
|
||||||
|
: sampleRate(sampleRate), channels(channels), bitsPerSample(bitsPerSample) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPCMStream::feed(util::span<ubyte> bytes) {
|
||||||
|
buffer.insert(buffer.end(), bytes.begin(), bytes.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MemoryPCMStream::isOpen() const {
|
||||||
|
return open;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPCMStream::close() {
|
||||||
|
open = false;
|
||||||
|
buffer = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t MemoryPCMStream::read(char* dst, size_t bufferSize) {
|
||||||
|
if (!open) {
|
||||||
|
return PCMStream::ERROR;
|
||||||
|
}
|
||||||
|
if (buffer.empty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
size_t count = std::min<size_t>(bufferSize, buffer.size());
|
||||||
|
std::memcpy(dst, buffer.data(), count);
|
||||||
|
buffer.erase(buffer.begin(), buffer.begin() + count);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t MemoryPCMStream::getTotalSamples() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
duration_t MemoryPCMStream::getTotalDuration() const {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint MemoryPCMStream::getChannels() const {
|
||||||
|
return channels;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint MemoryPCMStream::getSampleRate() const {
|
||||||
|
return sampleRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint MemoryPCMStream::getBitsPerSample() const {
|
||||||
|
return bitsPerSample;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MemoryPCMStream::isSeekable() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPCMStream::seek(size_t position) {}
|
||||||
42
src/audio/MemoryPCMStream.hpp
Normal file
42
src/audio/MemoryPCMStream.hpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "audio.hpp"
|
||||||
|
#include "util/span.hpp"
|
||||||
|
|
||||||
|
namespace audio {
|
||||||
|
class MemoryPCMStream : public PCMStream {
|
||||||
|
public:
|
||||||
|
MemoryPCMStream(uint sampleRate, uint channels, uint bitsPerSample);
|
||||||
|
|
||||||
|
void feed(util::span<ubyte> bytes);
|
||||||
|
|
||||||
|
bool isOpen() const override;
|
||||||
|
|
||||||
|
void close() override;
|
||||||
|
|
||||||
|
size_t read(char* buffer, size_t bufferSize) override;
|
||||||
|
|
||||||
|
size_t getTotalSamples() const override;
|
||||||
|
|
||||||
|
duration_t getTotalDuration() const override;
|
||||||
|
|
||||||
|
uint getChannels() const override;
|
||||||
|
|
||||||
|
uint getSampleRate() const override;
|
||||||
|
|
||||||
|
uint getBitsPerSample() const override;
|
||||||
|
|
||||||
|
bool isSeekable() const override;
|
||||||
|
|
||||||
|
void seek(size_t position) override;
|
||||||
|
private:
|
||||||
|
uint sampleRate;
|
||||||
|
uint channels;
|
||||||
|
uint bitsPerSample;
|
||||||
|
bool open = true;
|
||||||
|
|
||||||
|
std::vector<ubyte> buffer;
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user