From b45286c6e5261454832fe52c4f238450f48c7792 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 11 Feb 2013 17:16:12 -0800 Subject: [PATCH] add copied AudioRingBuffer for mixer, comment crashing mouse calls --- interface/src/main.cpp | 11 ++++---- mixer/src/AudioRingBuffer.cpp | 51 +++++++++++++++++++++++++++++++++++ mixer/src/AudioRingBuffer.h | 31 +++++++++++++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 mixer/src/AudioRingBuffer.cpp create mode 100644 mixer/src/AudioRingBuffer.h diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 8a64b7e169..86b3b215bc 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -594,14 +594,13 @@ void display(void) glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); - //lattice.render(WIDTH, HEIGHT); + // lattice.render(WIDTH, HEIGHT); + // myFinger.render(); Audio::render(WIDTH, HEIGHT); //drawvec3(100, 100, 0.15, 0, 1.0, 0, myHead.getPos(), 0, 1, 0); glPointParameterfvARB( GL_POINT_DISTANCE_ATTENUATION_ARB, pointer_attenuation_quadratic ); -// myFinger.render(); - if (mouse_pressed == 1) { glPointSize( 10.0f ); @@ -853,7 +852,7 @@ void mouseFunc( int button, int state, int x, int y ) mouse_x = x; mouse_y = y; mouse_pressed = 1; -// lattice.mouseClick((float)x/(float)WIDTH,(float)y/(float)HEIGHT); + lattice.mouseClick((float)x/(float)WIDTH,(float)y/(float)HEIGHT); } if( button == GLUT_LEFT_BUTTON && state == GLUT_UP ) { @@ -886,8 +885,8 @@ void mouseoverFunc( int x, int y) mouse_y = y; if (mouse_pressed == 0) { - lattice.mouseOver((float)x/(float)WIDTH,(float)y/(float)HEIGHT); - myFinger.setTarget(mouse_x, mouse_y); +// lattice.mouseOver((float)x/(float)WIDTH,(float)y/(float)HEIGHT); +// myFinger.setTarget(mouse_x, mouse_y); } } diff --git a/mixer/src/AudioRingBuffer.cpp b/mixer/src/AudioRingBuffer.cpp new file mode 100644 index 0000000000..79d805969f --- /dev/null +++ b/mixer/src/AudioRingBuffer.cpp @@ -0,0 +1,51 @@ +// +// AudioRingBuffer.cpp +// interface +// +// Created by Stephen Birarda on 2/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#include "AudioRingBuffer.h" + +AudioRingBuffer::AudioRingBuffer(short ringBufferSamples) { + ringBufferLengthSamples = ringBufferSamples; + + started = false; + transmitted = false; + + endOfLastWrite = NULL; + + buffer = new int16_t[ringBufferLengthSamples]; + nextOutput = buffer; +}; + +AudioRingBuffer::~AudioRingBuffer() { + delete[] buffer; +}; + +short AudioRingBuffer::diffLastWriteNextOutput() +{ + if (endOfLastWrite == NULL) { + return 0; + } else { + short sampleDifference = endOfLastWrite - nextOutput; + + if (sampleDifference < 0) { + sampleDifference += ringBufferLengthSamples; + } + + return sampleDifference; + } +} + +short AudioRingBuffer::bufferOverlap(int16_t *pointer, short addedDistance) +{ + short samplesLeft = (buffer + ringBufferLengthSamples) - pointer; + + if (samplesLeft < addedDistance) { + return addedDistance - samplesLeft; + } else { + return 0; + } +} diff --git a/mixer/src/AudioRingBuffer.h b/mixer/src/AudioRingBuffer.h new file mode 100644 index 0000000000..2454dbe916 --- /dev/null +++ b/mixer/src/AudioRingBuffer.h @@ -0,0 +1,31 @@ +// +// AudioRingBuffer.h +// interface +// +// Created by Stephen Birarda on 2/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#ifndef __interface__AudioRingBuffer__ +#define __interface__AudioRingBuffer__ + +#include +#include + +class AudioRingBuffer { + public: + int16_t *nextOutput; + int16_t *endOfLastWrite; + int16_t *buffer; + short ringBufferLengthSamples; + bool started; + bool transmitted; + + short diffLastWriteNextOutput(); + short bufferOverlap(int16_t *pointer, short addedDistance); + + AudioRingBuffer(short ringBufferSamples); + ~AudioRingBuffer(); +}; + +#endif /* defined(__interface__AudioRingBuffer__) */