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
80
|
#pragma once
#include "ofMain.h"
//#include <baudvine/ringbuf.h>
#define SAMPLERATE 48000
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
class Buffer{
public:
Buffer(size_t sz=0){
if (sz){
data =new float[sz];
memset(data,0,sz*sizeof(float));
size=sz;
}
else data=NULL;
}
~Buffer(){
if (data){
//delete[] data; //why is this throwing an error
}
}
void add(float * input, int num){
memcpy(&data[writePoint],input,min(num,size-writePoint)*sizeof(float));
if (size-writePoint<num){ //we have to wrap
//copy the remaining chunk to the start
memcpy(data,&input[size-writePoint],(num-(size-writePoint))*sizeof(float));
writePoint=num-(size-writePoint);
}
else writePoint+=num;
}
float operator [] (int i) const {
return data[(writePoint>i?writePoint-i:size-(i-writePoint))-1];
}
float& operator [] (int i) {
return data[(writePoint>i?writePoint-i:size-(i-writePoint))-1];
}
private:
size_t size;
float *data;
int writePoint;
};
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
void audioIn(float * input, int bufferSize, int nChannels);
ofSoundStream soundStream;
int blockSize;
int sampleRate;
int frameHead; //last sample drawn
//baudvine::RingBuf<float, SAMPLERATE> buffer;
Buffer buffer;
float hScale;
float vScale;
float lineWidth;
};
|