SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
XWV.cpp
Go to the documentation of this file.
1#include <sndpp/XWV.h>
2
3#include <BufferStream.h>
4#include <sourcepp/FS.h>
5
6using namespace sndpp;
7using namespace sourcepp;
8
9XWV::XWV(std::span<const std::byte> xwvData) {
10 BufferStreamReadOnly stream{xwvData.data(), xwvData.size()};
11 if (stream.read<uint32_t>() != XWV_SIGNATURE) {
12 return;
13 }
14
15 stream.set_big_endian(true);
16 if (stream.read<uint32_t>() != 4) {
17 return;
18 }
19 stream.skip<uint32_t>(2);
20
21 const auto dataOffset = stream.read<uint32_t>();
22 const auto dataLength = stream.read<uint32_t>();
23 this->data = stream.at_bytes(dataLength, dataOffset);
24
25 stream >> this->decodedSampleCount >> this->loopStart >> this->loopBlock >> this->leadingSampleCount >> this->trailingSampleCount;
26 stream.skip<uint16_t>();
27
28 stream >> this->format >> this->bitsPerSample >> this->frequency >> this->channelCount >> this->quality;
29
30 this->opened = true;
31}
32
33XWV::XWV(const std::string& xwvPath)
34 : XWV(fs::readFileBuffer(xwvPath)) {}
35
36XWV::operator bool() const {
37 return this->opened;
38}
39
40const std::vector<std::byte>& XWV::getData() const {
41 return this->data;
42}
43
45 return this->decodedSampleCount;
46}
47
48int32_t XWV::getLoopStart() const {
49 return this->loopStart;
50}
51
52uint16_t XWV::getLoopBlock() const {
53 return this->loopBlock;
54}
55
57 return this->leadingSampleCount;
58}
59
61 return this->trailingSampleCount;
62}
63
65 return this->format;
66}
67
68uint8_t XWV::getBitsPerSample() const {
69 return this->bitsPerSample;
70}
71
73 return this->frequency;
74}
75
76uint8_t XWV::getChannelCount() const {
77 return this->channelCount;
78}
79
80uint8_t XWV::getQuality() const {
81 return this->quality;
82}
Definition: XWV.h:16
bool opened
Definition: XWV.h:72
Format
Definition: XWV.h:24
uint8_t getQuality() const
Definition: XWV.cpp:80
Format getFormat() const
Definition: XWV.cpp:64
std::vector< std::byte > data
Definition: XWV.h:60
Format format
Definition: XWV.h:66
uint8_t bitsPerSample
Definition: XWV.h:67
Frequency
Definition: XWV.h:18
const std::vector< std::byte > & getData() const
Definition: XWV.cpp:40
uint16_t loopBlock
Definition: XWV.h:63
int32_t getLoopStart() const
Definition: XWV.cpp:48
uint8_t getChannelCount() const
Definition: XWV.cpp:76
uint16_t getLoopBlock() const
Definition: XWV.cpp:52
Frequency getFrequency() const
Definition: XWV.cpp:72
uint16_t trailingSampleCount
Definition: XWV.h:65
uint8_t quality
Definition: XWV.h:70
uint32_t decodedSampleCount
Definition: XWV.h:61
uint8_t channelCount
Definition: XWV.h:69
uint16_t leadingSampleCount
Definition: XWV.h:64
XWV(std::span< const std::byte > xwvData)
Definition: XWV.cpp:9
uint8_t getBitsPerSample() const
Definition: XWV.cpp:68
uint16_t getLeadingSampleCount() const
Definition: XWV.cpp:56
uint16_t getTrailingSampleCount() const
Definition: XWV.cpp:60
Frequency frequency
Definition: XWV.h:68
int32_t loopStart
Definition: XWV.h:62
uint32_t getDecodedSampleCount() const
Definition: XWV.cpp:44
Definition: WAV.h:12
constexpr auto XWV_SIGNATURE
Definition: XWV.h:14
Definition: LZMA.h:11