yaze 0.2.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
10typedef struct DspChannel {
11 // pitch
12 uint16_t pitch;
13 uint16_t pitchCounter;
15 // brr decoding
16 int16_t decodeBuffer[12];
17 uint8_t bufferOffset;
18 uint8_t srcn;
19 uint16_t decodeOffset;
20 uint8_t blockOffset; // offset within brr block
21 uint8_t brrHeader;
23 uint8_t startDelay;
24 // adsr, envelope, gain
25 uint8_t adsrRates[4]; // attack, decay, sustain, gain
26 uint8_t adsrState; // 0: attack, 1: decay, 2: sustain, 3: release
27 uint8_t sustainLevel;
29 bool useGain;
30 uint8_t gainMode;
32 uint16_t gainValue; // for direct gain
33 uint16_t preclampGain; // for bent increase
34 uint16_t gain;
35 // keyon/off
36 bool keyOn;
37 bool keyOff;
38 // output
39 int16_t sampleOut; // final sample, to be multiplied by channel volume
40 int8_t volumeL;
41 int8_t volumeR;
44
79
80class Dsp {
81 public:
82 Dsp(std::vector<uint8_t>& aram) : aram_(aram) {}
83
84 void NewFrame();
85
86 void Reset();
87
88 void Cycle();
89
90 void HandleEcho();
91 void CycleChannel(int ch);
92
93 void HandleNoise();
94 void HandleGain(int ch);
95
96 bool CheckCounter(int rate);
97
98 void DecodeBrr(int ch);
99
100 uint8_t Read(uint8_t adr);
101 void Write(uint8_t adr, uint8_t val);
102
103 int16_t GetSample(int ch);
104
105 void GetSamples(int16_t* sample_data, int samples_per_frame, bool pal_timing);
106
107 private:
108 int16_t sample_buffer_[0x400 * 2]; // (1024 samples, *2 for stereo)
109 int16_t sample_offset_; // current offset in samplebuffer
110
111 std::vector<uint8_t>& aram_;
112
113 // mirror ram
114 uint8_t ram[0x80];
115 // 8 channels
117 // overarching
118 uint16_t counter;
119 uint16_t dirPage;
121 bool mute;
122 bool reset;
125 // accumulation
126 int16_t sampleOutL;
127 int16_t sampleOutR;
128 int16_t echoOutL;
129 int16_t echoOutR;
130 // noise
131 int16_t noiseSample;
132 uint8_t noiseRate;
133 // echo
139 uint16_t echoDelay;
140 uint16_t echoLength;
143 int8_t firValues[8];
144 int16_t firBufferL[8];
145 int16_t firBufferR[8];
146 // sample ring buffer (1024 samples, *2 for stereo)
147 int16_t sampleBuffer[0x400 * 2];
148 uint16_t sampleOffset; // current offset in samplebuffer
150};
151
152} // namespace emu
153} // namespace yaze
154
155#endif // YAZE_APP_EMU_AUDIO_S_DSP_H
uint16_t echoBufferIndex
Definition dsp.h:141
uint32_t lastFrameBoundary
Definition dsp.h:149
void CycleChannel(int ch)
Definition dsp.cc:213
void HandleGain(int ch)
Definition dsp.cc:302
void GetSamples(int16_t *sample_data, int samples_per_frame, bool pal_timing)
Definition dsp.cc:617
int16_t sample_buffer_[0x400 *2]
Definition dsp.h:108
int16_t sampleOutR
Definition dsp.h:127
void DecodeBrr(int ch)
Definition dsp.cc:379
int16_t echoOutR
Definition dsp.h:129
int8_t feedbackVolume
Definition dsp.h:137
int16_t sampleBuffer[0x400 *2]
Definition dsp.h:147
uint8_t Read(uint8_t adr)
Definition dsp.cc:428
std::vector< uint8_t > & aram_
Definition dsp.h:111
uint8_t noiseRate
Definition dsp.h:132
bool CheckCounter(int rate)
Definition dsp.cc:160
uint16_t counter
Definition dsp.h:118
uint16_t sampleOffset
Definition dsp.h:148
uint16_t echoBufferAdr
Definition dsp.h:138
void Cycle()
Definition dsp.cc:132
int8_t masterVolumeL
Definition dsp.h:123
uint16_t echoDelay
Definition dsp.h:139
void HandleEcho()
Definition dsp.cc:165
int8_t firValues[8]
Definition dsp.h:143
int16_t sample_offset_
Definition dsp.h:109
int16_t sampleOutL
Definition dsp.h:126
void Reset()
Definition dsp.cc:67
void Write(uint8_t adr, uint8_t val)
Definition dsp.cc:430
int8_t masterVolumeR
Definition dsp.h:124
bool evenCycle
Definition dsp.h:120
uint8_t firBufferIndex
Definition dsp.h:142
void NewFrame()
Definition dsp.cc:128
int16_t firBufferR[8]
Definition dsp.h:145
int16_t noiseSample
Definition dsp.h:131
uint16_t dirPage
Definition dsp.h:119
int16_t echoOutL
Definition dsp.h:128
int16_t firBufferL[8]
Definition dsp.h:144
uint16_t echoLength
Definition dsp.h:140
int8_t echoVolumeR
Definition dsp.h:136
bool echoWrites
Definition dsp.h:134
int8_t echoVolumeL
Definition dsp.h:135
Dsp(std::vector< uint8_t > &aram)
Definition dsp.h:82
bool mute
Definition dsp.h:121
uint8_t ram[0x80]
Definition dsp.h:114
void HandleNoise()
Definition dsp.cc:421
int16_t GetSample(int ch)
Definition dsp.cc:365
DspChannel channel[8]
Definition dsp.h:116
bool reset
Definition dsp.h:122
SNES Emulation and debugging tools.
Definition apu.cc:13
struct yaze::emu::DspChannel DspChannel
Main namespace for the application.
Definition controller.cc:18
uint16_t pitch
Definition dsp.h:12
uint8_t startDelay
Definition dsp.h:23
uint8_t adsrState
Definition dsp.h:26
uint16_t pitchCounter
Definition dsp.h:13
uint16_t gain
Definition dsp.h:34
int16_t sampleOut
Definition dsp.h:39
uint16_t decodeOffset
Definition dsp.h:19
uint8_t bufferOffset
Definition dsp.h:17
uint8_t sustainLevel
Definition dsp.h:27
int16_t decodeBuffer[12]
Definition dsp.h:16
uint8_t blockOffset
Definition dsp.h:20
uint8_t brrHeader
Definition dsp.h:21
bool pitchModulation
Definition dsp.h:14
uint16_t gainValue
Definition dsp.h:32
uint8_t adsrRates[4]
Definition dsp.h:25
uint8_t gainMode
Definition dsp.h:30
uint16_t preclampGain
Definition dsp.h:33
uint8_t gainSustainLevel
Definition dsp.h:28