forked from psemiletov/eko
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfloatbuffer.h
More file actions
79 lines (49 loc) · 1.98 KB
/
floatbuffer.h
File metadata and controls
79 lines (49 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#ifndef FLOATBUFFER_H
#define FLOATBUFFER_H
//VER 10
#include <cstring>
#define FLOAT_BUFFER_MAX_CHANNELS 8
class CFloatBuffer
{
public:
float *buffer[FLOAT_BUFFER_MAX_CHANNELS];
float **pbuffer;
float *buffer_interleaved; //for mapping from buffer
size_t samplerate;
size_t channels;
size_t length_frames;
size_t offset; //of pbuffer or for some puproses
//ringbuffer: tail index = head - 1
size_t head; //read from here
size_t tail; //write to here
size_t ringbuffer_length; //in the range of length_frames
int sndfile_format;
CFloatBuffer (size_t len, size_t channels_count);
CFloatBuffer (float *interleaved_buffer, size_t len, size_t channels_count = 1);
~CFloatBuffer();
void pbuffer_reset();
void pbuffer_inc (size_t val);
void settozero();
void ringbuffer_head_inc();
void ringbuffer_tail_inc();
void ringbuffer_set_length (size_t len);
void allocate_interleaved();
void fill_interleaved();
float *to_interleaved();
CFloatBuffer* clone();
CFloatBuffer* copy (size_t offset_from, size_t size); //frames
void copy_to_pos (CFloatBuffer *other, size_t offset_from, size_t size, size_t offset_to); //frames
void copy_channel_to_pos (CFloatBuffer *other, size_t ch_from, size_t ch_to,
size_t offset_from, size_t size, size_t offset_to); //frames
void copy_to_pos_with_rate (CFloatBuffer *other, size_t offset_from, size_t size, size_t offset_to, float rate); //frames
void overwrite_at (CFloatBuffer *other, size_t pos_frames);
CFloatBuffer* convert_to_stereo (bool full);
CFloatBuffer* convert_to_mono();
CFloatBuffer* resample (size_t new_rate, int resampler = 0);
CFloatBuffer* delete_range (size_t frames_start, size_t frames_end);
void copy_params (CFloatBuffer *fb);
void copy_from (CFloatBuffer *other);
void copy_from_w_resample (CFloatBuffer *other, int resampler = 0);
void paste_at (CFloatBuffer *other, size_t pos_frames);
};
#endif // FLOATBUFFER_H