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 int CopyNativeFrame(int16_t* sample_data, bool pal_timing);
114
116
117 private:
118 // sample ring buffer (1024 samples, *2 for stereo)
119 int16_t sampleBuffer[0x400 * 2];
120 uint16_t sampleOffset; // current offset in samplebuffer
121
122 std::vector<uint8_t>& aram_;
123
124 // mirror ram
125 uint8_t ram[0x80];
126 // 8 channels
128 // overarching
129 uint16_t counter;
130 uint16_t dirPage;
132 bool mute;
133 bool reset;
136 // accumulation
137 int16_t sampleOutL;
138 int16_t sampleOutR;
139 int16_t echoOutL;
140 int16_t echoOutR;
141 // noise
142 int16_t noiseSample;
143 uint8_t noiseRate;
144 // echo
150 uint16_t echoDelay;
151 uint16_t echoLength;
154 int8_t firValues[8];
155 int16_t firBufferL[8];
156 int16_t firBufferR[8];
158};
159
160} // namespace emu
161} // namespace yaze
162
163#endif // YAZE_APP_EMU_AUDIO_S_DSP_H
uint16_t echoBufferIndex
Definition dsp.h:152
uint32_t lastFrameBoundary
Definition dsp.h:157
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:138
void DecodeBrr(int ch)
Definition dsp.cc:382
int16_t echoOutR
Definition dsp.h:140
int8_t feedbackVolume
Definition dsp.h:148
int16_t sampleBuffer[0x400 *2]
Definition dsp.h:119
uint8_t Read(uint8_t adr)
Definition dsp.cc:431
std::vector< uint8_t > & aram_
Definition dsp.h:122
uint8_t noiseRate
Definition dsp.h:143
bool CheckCounter(int rate)
Definition dsp.cc:163
uint16_t counter
Definition dsp.h:129
uint16_t sampleOffset
Definition dsp.h:120
int CopyNativeFrame(int16_t *sample_data, bool pal_timing)
Definition dsp.cc:756
uint16_t echoBufferAdr
Definition dsp.h:149
void Cycle()
Definition dsp.cc:134
int8_t masterVolumeL
Definition dsp.h:134
uint16_t echoDelay
Definition dsp.h:150
void HandleEcho()
Definition dsp.cc:168
int8_t firValues[8]
Definition dsp.h:154
int16_t sampleOutL
Definition dsp.h:137
void Reset()
Definition dsp.cc:68
void Write(uint8_t adr, uint8_t val)
Definition dsp.cc:433
int8_t masterVolumeR
Definition dsp.h:135
bool evenCycle
Definition dsp.h:131
InterpolationType interpolation_type
Definition dsp.h:115
uint8_t firBufferIndex
Definition dsp.h:153
void NewFrame()
Definition dsp.cc:130
int16_t firBufferR[8]
Definition dsp.h:156
int16_t noiseSample
Definition dsp.h:142
uint16_t dirPage
Definition dsp.h:130
int16_t echoOutL
Definition dsp.h:139
int16_t firBufferL[8]
Definition dsp.h:155
uint16_t echoLength
Definition dsp.h:151
int8_t echoVolumeR
Definition dsp.h:147
bool echoWrites
Definition dsp.h:145
int8_t echoVolumeL
Definition dsp.h:146
Dsp(std::vector< uint8_t > &aram)
Definition dsp.h:89
bool mute
Definition dsp.h:132
uint8_t ram[0x80]
Definition dsp.h:125
void HandleNoise()
Definition dsp.cc:424
int16_t GetSample(int ch)
Definition dsp.cc:368
DspChannel channel[8]
Definition dsp.h:127
bool reset
Definition dsp.h:133
InterpolationType
Definition dsp.h:10
Main namespace for the application.
Definition controller.cc:20
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