yaze 0.2.2
Link to the Past ROM Editor
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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