OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
hydra.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <cstdint>
5#include <memory>
6
7struct tsf_hydra_phdr;
8struct tsf_hydra_pbag;
9struct tsf_hydra_pmod;
10struct tsf_hydra_pgen;
11struct tsf_hydra_inst;
12struct tsf_hydra_ibag;
13struct tsf_hydra_imod;
14struct tsf_hydra_igen;
15struct tsf_hydra_shdr;
16struct tsf_hydra;
17struct tsf;
18
19namespace Dx8 {
20
21class DlsCollection;
22class Wave;
23
24class Hydra {
25 public:
40 enum ArticulatorDestination : uint16_t {
41 /* Generic Destinations */
42 None = 0x0000,
43 Attenuation = 0x0001,
44 Pitch = 0x0003,
45 Pan = 0x0004,
46 /* LFO Destinations */
47 LFOFrequency = 0x0104,
48 LFOStartDelay = 0x0105,
49 /* EG1 Destinations */
50 EG1AttachTime = 0x0206,
51 EG1DecayTime = 0x0207,
54 /* EG2 Destinations */
55 EG2AttachTime = 0x030a,
56 EG2DecayTime = 0x030b,
58 EG2SustainLevel = 0x030e
59 };
60
61 Hydra(const DlsCollection& dls, const std::vector<Wave>& wave);
62 ~Hydra();
63
64 static void finalize(tsf* tsf);
65 static bool hasNotes(tsf* tsf);
66
67 static void noteOn(tsf* f, int presetId, int key, float vel);
68 static void noteOff(tsf* f, int presetId, int key);
69 static int presetIndex(const tsf* f, int bank, int presetNum);
70 static void renderFloat(tsf* f, float* buffer, int samples, int flag);
71 static int channelSetPan(tsf* f, int channel, float pan);
72 static void setOutput(tsf* f, int samplerate, float gain);
73
74 tsf* toTsf ();
75 void toTsf (tsf_hydra& out);
76 bool validate(const tsf_hydra& tsf) const;
77
78 std::vector<tsf_hydra_phdr> phdr;
79 std::vector<tsf_hydra_pbag> pbag;
80 std::vector<tsf_hydra_pmod> pmod;
81 std::vector<tsf_hydra_pgen> pgen;
82 std::vector<tsf_hydra_inst> inst;
83 std::vector<tsf_hydra_ibag> ibag;
84 std::vector<tsf_hydra_imod> imod;
85 std::vector<tsf_hydra_igen> igen;
86 std::vector<tsf_hydra_shdr> shdr;
87
88 std::unique_ptr<float[]> wdata;
89 size_t wdataSize=0;
90
91 private:
92 static uint16_t mkGeneratorOp(uint16_t usDestination);
93 std::unique_ptr<float[]> allocSamples(const std::vector<Dx8::Wave>& wave, std::vector<tsf_hydra_shdr> &samples, size_t &count);
94 };
95
96}
97
std::vector< tsf_hydra_igen > igen
Definition hydra.h:85
static void renderFloat(tsf *f, float *buffer, int samples, int flag)
Definition hydra.cpp:312
bool validate(const tsf_hydra &tsf) const
Definition hydra.cpp:410
tsf * toTsf()
Definition hydra.cpp:324
size_t wdataSize
Definition hydra.h:89
static void setOutput(tsf *f, int samplerate, float gain)
Definition hydra.cpp:320
std::vector< tsf_hydra_pbag > pbag
Definition hydra.h:79
std::vector< tsf_hydra_ibag > ibag
Definition hydra.h:83
std::vector< tsf_hydra_pgen > pgen
Definition hydra.h:81
std::vector< tsf_hydra_phdr > phdr
Definition hydra.h:78
static int presetIndex(const tsf *f, int bank, int presetNum)
Definition hydra.cpp:308
@ kAttackModEnv
Definition hydra.h:27
@ kVelRange
Definition hydra.h:36
@ kDecayVolEnv
Definition hydra.h:32
@ kSustainVolEnv
Definition hydra.h:33
@ kDecayModEnv
Definition hydra.h:28
@ kKeyRange
Definition hydra.h:35
@ kSustainModEnv
Definition hydra.h:29
@ kAttackVolEnv
Definition hydra.h:31
@ kReleaseVolEnv
Definition hydra.h:34
@ kSampleID
Definition hydra.h:37
@ kReleaseModEnv
Definition hydra.h:30
@ kSampleModes
Definition hydra.h:38
static bool hasNotes(tsf *tsf)
Definition hydra.cpp:292
static void noteOn(tsf *f, int presetId, int key, float vel)
Definition hydra.cpp:300
static int channelSetPan(tsf *f, int channel, float pan)
Definition hydra.cpp:316
std::vector< tsf_hydra_pmod > pmod
Definition hydra.h:80
static void finalize(tsf *tsf)
Definition hydra.cpp:287
std::vector< tsf_hydra_inst > inst
Definition hydra.h:82
std::unique_ptr< float[]> wdata
Definition hydra.h:88
static void noteOff(tsf *f, int presetId, int key)
Definition hydra.cpp:304
std::vector< tsf_hydra_shdr > shdr
Definition hydra.h:86
std::vector< tsf_hydra_imod > imod
Definition hydra.h:84
ArticulatorDestination
Definition hydra.h:40
@ EG1SustainLevel
Definition hydra.h:53
@ EG2DecayTime
Definition hydra.h:56
@ EG1AttachTime
Definition hydra.h:50
@ Attenuation
Definition hydra.h:43
@ EG1ReleaseTime
Definition hydra.h:52
@ EG2SustainLevel
Definition hydra.h:58
@ Pitch
Definition hydra.h:44
@ EG2ReleaseTime
Definition hydra.h:57
@ LFOFrequency
Definition hydra.h:47
@ LFOStartDelay
Definition hydra.h:48
@ EG2AttachTime
Definition hydra.h:55
@ EG1DecayTime
Definition hydra.h:51
Definition band.h:10