OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
music.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <vector>
5
6#include "patternlist.h"
7
8namespace Dx8 {
9
10class PatternList;
11
12class Music final {
13 public:
14 Music()=default;
15
16 void addPattern(const PatternList& list);
17 void addPattern(const PatternList& list,size_t id);
18
19 void clear() { impl->pptn.clear(); }
20 size_t size() const { return impl->pptn.size(); }
21
22 void setVolume(float v);
23
24 private:
25 using Pattern = std::shared_ptr<PatternList::PatternInternal>;
26 using Groove = PatternList::Groove;
27
28 struct Internal {
29 Internal()=default;
30 Internal(const Internal& other);
31
32 std::vector<Pattern> pptn;
33 std::vector<Groove> groove;
34
35 std::atomic<float> volume{1.f};
36 uint64_t timeTotal=0;
37 };
38 std::shared_ptr<Internal> impl = std::make_shared<Internal>();
39
40 friend class Mixer;
41 };
42}
void addPattern(const PatternList &list)
Definition music.cpp:10
void clear()
Definition music.h:19
Music()=default
void setVolume(float v)
Definition music.cpp:26
size_t size() const
Definition music.h:20
Definition band.h:10