yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dsp.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EMU_AUDIO_S_DSP_H
2#define YAZE_APP_EMU_AUDIO_S_DSP_H
3
4#include <cstdint>
5#include <vector>
6
7namespace yaze {
8namespace emu {
9
11 Linear,
12 Hermite, // Used by bsnes/Snes9x - better quality than linear
13 Cosine,
14 Cubic,
15};
16
17typedef struct DspChannel {
18 // pitch
19 uint16_t pitch;
20 uint16_t pitchCounter;
22 // brr decoding
23 int16_t decodeBuffer[12];
24 uint8_t bufferOffset;
25 uint8_t srcn;
26 uint16_t decodeOffset;
27 uint8_t blockOffset; // offset within brr block
28 uint8_t brrHeader;
30 uint8_t startDelay;
31 // adsr, envelope, gain
32 uint8_t adsrRates[4]; // attack, decay, sustain, gain
33 uint8_t adsrState; // 0: attack, 1: decay, 2: sustain, 3: release
34 uint8_t sustainLevel;
36 bool useGain;
37 uint8_t gainMode;
39 uint16_t gainValue; // for direct gain
40 uint16_t preclampGain; // for bent increase
41 uint16_t gain;
42 // keyon/off
43 bool keyOn;
44 bool keyOff;
45 // output
46 int16_t sampleOut; // final sample, to be multiplied by channel volume
47 int8_t volumeL;
48 int8_t volumeR;
50} DspChannel;
51
87class Dsp {
88 public:
89 Dsp(std::vector<uint8_t>& aram) : aram_(aram) {}
90
91 void NewFrame();
92
93 void Reset();
94
95 void Cycle();
96
97 void HandleEcho();
98 void CycleChannel(int ch);
99
100 void HandleNoise();
101 void HandleGain(int ch);
102
103 bool CheckCounter(int rate);
104
105 void DecodeBrr(int ch);
106
107 uint8_t Read(uint8_t adr);
108 void Write(uint8_t adr, uint8_t val);
109
110 int16_t GetSample(int ch);
111
112 void GetSamples(int16_t* sample_data, int samples_per_frame, bool pal_timing);
113
115
116 private:
117 // sample ring buffer (1024 samples, *2 for stereo)
118 int16_t sampleBuffer[0x400 * 2];
119 uint16_t sampleOffset; // current offset in samplebuffer
120
121 std::vector<uint8_t>& aram_;
122
123 // mirror ram
124 uint8_t ram[0x80];
125 // 8 channels
127 // overarching
128 uint16_t counter;
129 uint16_t dirPage;
131 bool mute;
132 bool reset;
135 // accumulation
136 int16_t sampleOutL;
137 int16_t sampleOutR;
138 int16_t echoOutL;
139 int16_t echoOutR;
140 // noise
141 int16_t noiseSample;
142 uint8_t noiseRate;
143 // echo
149 uint16_t echoDelay;
150 uint16_t echoLength;
153 int8_t firValues[8];
154 int16_t firBufferL[8];
155 int16_t firBufferR[8];
157};
158
159} // namespace emu
160} // namespace yaze
161
162#endif // YAZE_APP_EMU_AUDIO_S_DSP_H
uint16_t echoBufferIndex
Definition dsp.h:151
uint32_t lastFrameBoundary
Definition dsp.h:156
void CycleChannel(int ch)
Definition dsp.cc:216
void HandleGain(int ch)
Definition dsp.cc:305
void GetSamples(int16_t *sample_data, int samples_per_frame, bool pal_timing)
Definition dsp.cc:667
int16_t sampleOutR
Definition dsp.h:137
void DecodeBrr(int ch)
Definition dsp.cc:382
int16_t echoOutR
Definition dsp.h:139
int8_t feedbackVolume
Definition dsp.h:147
int16_t sampleBuffer[0x400 *2]
Definition dsp.h:118
uint8_t Read(uint8_t adr)
Definition dsp.cc:431
std::vector< uint8_t > & aram_
Definition dsp.h:121
uint8_t noiseRate
Definition dsp.h:142
bool CheckCounter(int rate)
Definition dsp.cc:163
uint16_t counter
Definition dsp.h:128
uint16_t sampleOffset
Definition dsp.h:119
uint16_t echoBufferAdr
Definition dsp.h:148
void Cycle()
Definition dsp.cc:134
int8_t masterVolumeL
Definition dsp.h:133
uint16_t echoDelay
Definition dsp.h:149
void HandleEcho()
Definition dsp.cc:168
int8_t firValues[8]
Definition dsp.h:153
int16_t sampleOutL
Definition dsp.h:136
void Reset()
Definition dsp.cc:68
void Write(uint8_t adr, uint8_t val)
Definition dsp.cc:433
int8_t masterVolumeR
Definition dsp.h:134
bool evenCycle
Definition dsp.h:130
InterpolationType interpolation_type
Definition dsp.h:114
uint8_t firBufferIndex
Definition dsp.h:152
void NewFrame()
Definition dsp.cc:130
int16_t firBufferR[8]
Definition dsp.h:155
int16_t noiseSample
Definition dsp.h:141
uint16_t dirPage
Definition dsp.h:129
int16_t echoOutL
Definition dsp.h:138
int16_t firBufferL[8]
Definition dsp.h:154
uint16_t echoLength
Definition dsp.h:150
int8_t echoVolumeR
Definition dsp.h:146
bool echoWrites
Definition dsp.h:144
int8_t echoVolumeL
Definition dsp.h:145
Dsp(std::vector< uint8_t > &aram)
Definition dsp.h:89
bool mute
Definition dsp.h:131
uint8_t ram[0x80]
Definition dsp.h:124
void HandleNoise()
Definition dsp.cc:424
int16_t GetSample(int ch)
Definition dsp.cc:368
DspChannel channel[8]
Definition dsp.h:126
bool reset
Definition dsp.h:132
InterpolationType
Definition dsp.h:10
Main namespace for the application.
uint16_t pitch
Definition dsp.h:19
uint8_t startDelay
Definition dsp.h:30
uint8_t adsrState
Definition dsp.h:33
uint16_t pitchCounter
Definition dsp.h:20
uint16_t gain
Definition dsp.h:41
int16_t sampleOut
Definition dsp.h:46
uint16_t decodeOffset
Definition dsp.h:26
uint8_t bufferOffset
Definition dsp.h:24
uint8_t sustainLevel
Definition dsp.h:34
int16_t decodeBuffer[12]
Definition dsp.h:23
uint8_t blockOffset
Definition dsp.h:27
uint8_t brrHeader
Definition dsp.h:28
bool pitchModulation
Definition dsp.h:21
uint16_t gainValue
Definition dsp.h:39
uint8_t adsrRates[4]
Definition dsp.h:32
uint8_t gainMode
Definition dsp.h:37
uint16_t preclampGain
Definition dsp.h:40
uint8_t gainSustainLevel
Definition dsp.h:35