LMMS
Loading...
Searching...
No Matches
Effects_Buffer.h
Go to the documentation of this file.
1// Multi-channel effects buffer with panning, echo and reverb
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef EFFECTS_BUFFER_H
5#define EFFECTS_BUFFER_H
6
7#include "Multi_Buffer.h"
8
9#include <vector>
10
11// Effects_Buffer uses several buffers and outputs stereo sample pairs.
13public:
14 // nVoices indicates the number of voices for which buffers will be allocated
15 // to make Effects_Buffer work as "mix everything to one", nVoices will be 1
16 // If center_only is true, only center buffers are created and
17 // less memory is used.
18 Effects_Buffer( int nVoices = 1, bool center_only = false );
19
20 // Channel Effect Center Pan
21 // ---------------------------------
22 // 0,5 reverb pan_1
23 // 1,6 reverb pan_2
24 // 2,7 echo -
25 // 3 echo -
26 // 4 echo -
27
28 // Channel configuration
29 struct config_t {
30 double pan_1; // -1.0 = left, 0.0 = center, 1.0 = right
31 double pan_2;
32 double echo_delay; // msec
33 double echo_level; // 0.0 to 1.0
34 double reverb_delay; // msec
35 double delay_variance; // difference between left/right delays (msec)
36 double reverb_level; // 0.0 to 1.0
37 bool effects_enabled; // if false, use optimized simple mixer
38 config_t();
39 };
40
41 // Set configuration of buffer
42 virtual void config( const config_t& );
43 void set_depth( double );
44
45public:
47 blargg_err_t set_sample_rate( long samples_per_sec, int msec = blip_default_length );
48 void clock_rate( long );
49 void bass_freq( int );
50 void clear();
51 channel_t channel( int, int );
52 void end_frame( blip_time_t );
53 long read_samples( blip_sample_t*, long );
54 long samples_avail() const;
55private:
56 typedef long fixed_t;
58 enum { max_buf_count = 7 };
59 std::vector<Blip_Buffer> bufs;
60 enum { chan_types_count = 3 };
61 std::vector<channel_t> chan_types;
67
68 std::vector<std::vector<blip_sample_t> > reverb_buf;
69 std::vector<std::vector<blip_sample_t> > echo_buf;
70 std::vector<int> reverb_pos;
71 std::vector<int> echo_pos;
72
73 struct {
83
84 void mix_mono( blip_sample_t*, blargg_long );
85 void mix_stereo( blip_sample_t*, blargg_long );
86 void mix_enhanced( blip_sample_t*, blargg_long );
87 void mix_mono_enhanced( blip_sample_t*, blargg_long );
88};
89
90#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
int const blip_default_length
Definition Blip_Buffer.h:488
short blip_sample_t
Definition Blip_Buffer.h:20
const long clock_rate
Definition Gym_Emu.cpp:26
long samples_avail() const
Definition Effects_Buffer.cpp:287
config_t config_
Definition Effects_Buffer.h:62
void mix_enhanced(blip_sample_t *, blargg_long)
Definition Effects_Buffer.cpp:514
void clear()
Definition Effects_Buffer.cpp:130
channel_t channel(int, int)
Definition Effects_Buffer.cpp:247
long stereo_remain
Definition Effects_Buffer.h:63
struct Effects_Buffer::@131147106016057160075047322375345170321042071241 chans
void mix_mono_enhanced(blip_sample_t *, blargg_long)
Definition Effects_Buffer.cpp:447
int echo_delay_r
Definition Effects_Buffer.h:77
std::vector< int > reverb_pos
Definition Effects_Buffer.h:70
bool effects_enabled
Definition Effects_Buffer.h:66
long fixed_t
Definition Effects_Buffer.h:56
std::vector< std::vector< blip_sample_t > > echo_buf
Definition Effects_Buffer.h:69
Effects_Buffer(int nVoices=1, bool center_only=false)
Definition Effects_Buffer.cpp:66
fixed_t echo_level
Definition Effects_Buffer.h:78
std::vector< int > echo_pos
Definition Effects_Buffer.h:71
fixed_t pan_1_levels[2]
Definition Effects_Buffer.h:74
void mix_mono(blip_sample_t *, blargg_long)
Definition Effects_Buffer.cpp:363
int reverb_delay_r
Definition Effects_Buffer.h:80
int buf_count
Definition Effects_Buffer.h:65
void mix_stereo(blip_sample_t *, blargg_long)
Definition Effects_Buffer.cpp:408
int max_voices
Definition Effects_Buffer.h:57
@ chan_types_count
Definition Effects_Buffer.h:60
std::vector< std::vector< blip_sample_t > > reverb_buf
Definition Effects_Buffer.h:68
int reverb_delay_l
Definition Effects_Buffer.h:79
std::vector< channel_t > chan_types
Definition Effects_Buffer.h:61
fixed_t reverb_level
Definition Effects_Buffer.h:81
std::vector< Blip_Buffer > bufs
Definition Effects_Buffer.h:59
void end_frame(blip_time_t)
Definition Effects_Buffer.cpp:263
blargg_err_t set_sample_rate(long samples_per_sec, int msec=blip_default_length)
Definition Effects_Buffer.cpp:87
int echo_delay_l
Definition Effects_Buffer.h:76
long effect_remain
Definition Effects_Buffer.h:64
void set_depth(double)
Definition Effects_Buffer.cpp:49
~Effects_Buffer()
Definition Effects_Buffer.cpp:84
void bass_freq(int)
Definition Effects_Buffer.cpp:124
long read_samples(blip_sample_t *, long)
Definition Effects_Buffer.cpp:292
@ max_buf_count
Definition Effects_Buffer.h:58
fixed_t pan_2_levels[2]
Definition Effects_Buffer.h:75
Multi_Buffer(int samples_per_frame)
Definition Multi_Buffer.cpp:22
struct config_s config
Definition Effects_Buffer.h:29
double pan_2
Definition Effects_Buffer.h:31
double reverb_delay
Definition Effects_Buffer.h:34
bool effects_enabled
Definition Effects_Buffer.h:37
double delay_variance
Definition Effects_Buffer.h:35
double echo_level
Definition Effects_Buffer.h:33
double pan_1
Definition Effects_Buffer.h:30
double reverb_level
Definition Effects_Buffer.h:36
double echo_delay
Definition Effects_Buffer.h:32
config_t()
Definition Effects_Buffer.cpp:37
Definition Multi_Buffer.h:21