OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
pattern.cpp
Go to the documentation of this file.
1#include "pattern.h"
2
3#include <stdexcept>
4
5using namespace Dx8;
6
8 if(!input.is("LIST") || !input.isListId("pref"))
9 throw std::runtime_error("not a partref");
10 input.read([this](Riff& input){
11 if(input.is("prfc"))
12 input.read(&io,sizeof(io));
13 else if(input.is("LIST") && input.isListId("UNFO"))
14 unfo = Unfo(input);
15 });
16 }
17
19 input.read([this](Riff& c){
20 implRead(c);
21 });
22 }
23
24uint32_t Pattern::timeLength(double tempo) const {
25 const uint32_t PulsesPerQuarterNote = uint32_t(600*(100.0/tempo));
26 uint32_t mul = (header.timeSig.bBeatsPerMeasure*PulsesPerQuarterNote*4)/header.timeSig.bBeat;
27 return header.wNbrMeasures * mul;
28 }
29
30void Pattern::implRead(Riff &input) {
31 if(input.is("ptnh"))
32 input.read(&header,sizeof(header));
33 else if(input.is("LIST")){
34 if(input.isListId("pref"))
35 partref.emplace_back(input);
36 else if(input.isListId("UNFO"))
37 info = Unfo(input);
38 }
39 }
40
std::vector< PartRef > partref
Definition pattern.h:21
DMUS_IO_PATTERN header
Definition pattern.h:19
uint32_t timeLength(double tempo) const
Definition pattern.cpp:24
Unfo info
Definition pattern.h:20
Pattern(Riff &riff)
Definition pattern.cpp:18
bool is(const char *idx) const
Definition riff.h:19
void read(std::u16string &str)
Definition riff.cpp:29
bool isListId(const char *id)
Definition riff.cpp:24
Definition band.h:10
DMUS_IO_TIMESIG timeSig
Definition structs.h:105
uint16_t wNbrMeasures
Definition structs.h:109
uint8_t bBeatsPerMeasure
Definition structs.h:83
PartRef(Riff &input)
Definition pattern.cpp:7
DMUS_IO_PARTREF io
Definition pattern.h:15