summaryrefslogtreecommitdiff
path: root/audioin/src/ofApp.h
blob: 2386ef8734449236a7110abe945598a5d266d287 (plain)
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
81
82
83
84
85
86
87
88
89
90
#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)

/*
TEXT+SOUND
oscilloscopes on letters
what is the message
text from twitter

can we get a sillouette from kinect to laser 
*/
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){
        //this assumes that num < size
        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 and set the new writePoint
            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);
        void printOscParams();
    
        ofSoundStream soundStream;
        int blockSize;
        int sampleRate;

        int frameHead; //last sample drawn

        //baudvine::RingBuf<float, SAMPLERATE> buffer;

        Buffer buffer;

        float hScale;
        float vScale;

        float lineWidth;
};