Skip to content
Snippets Groups Projects
Commit 3ea7283d authored by jsiegle's avatar jsiegle
Browse files

Reduced CPU consumption on FileReaderThread

parent 3b698e39
No related branches found
No related tags found
No related merge requests found
......@@ -24,18 +24,22 @@
#include "FileReaderThread.h"
FileReaderThread::FileReaderThread(SourceNode* sn) : DataThread(sn),
sampleRate(40000.0),
numChannels(16),
samplesPerBlock(1024)
FileReaderThread::FileReaderThread(SourceNode* sn) : DataThread(sn)
{
File file = File("./data_stream_16ch");
input = file.createInputStream();
//File file = File("./data_stream_16ch");
//input = file.createInputStream();
bufferSize = 1600;
// lengthOfInputFile = file
input = fopen("./data_stream_16ch", "r");
dataBuffer = new DataBuffer(16, 4096);
fseek(input, 0, SEEK_END);
lengthOfInputFile = ftell(input);
rewind(input);
dataBuffer = new DataBuffer(16, bufferSize*3);
std::cout << "File Reader Thread initialized." << std::endl;
......@@ -45,44 +49,78 @@ FileReaderThread::~FileReaderThread() {
deleteAndZero(input);
//deleteAndZero(dataBuffer);
}
bool FileReaderThread::foundInputSource()
{
return true;
}
int FileReaderThread::getNumChannels()
{
return 16;
}
float FileReaderThread::getSampleRate()
{
return 40000.0f;
}
bool FileReaderThread::startAcquisition()
{
startThread();
return true;
}
bool FileReaderThread::stopAcquisition()
{
stopThread(500);
std::cout << "File reader received disable signal." << std::endl;
std::cout << "File reader received disable signal." << std::endl;
if (isThreadRunning()) {
signalThreadShouldExit();
}
return true;
}
bool FileReaderThread::updateBuffer()
{
while (dataBuffer->getNumSamples() < 4096)
{
if (dataBuffer->getNumSamples() < bufferSize)
{
// // std::cout << dataBuffer->getNumSamples() << std::endl;
// if (input->getTotalLength())
if (ftell(input) >= lengthOfInputFile - bufferSize)
{
rewind(input);
}
//input->read(thisSample, 4*)
fread(readBuffer, 2, bufferSize, input);
for (int ch = 0; ch < numChannels; ch++) {
if (input->isExhausted())
input->setPosition(0);
thisSample[ch%numChannels] = float(input->readShort())/80000.0f;
int chan = 0;
}
for (int n = 0; n < bufferSize; n++)
{
thisSample[chan] = float(readBuffer[n])/80000.0f;
dataBuffer->addToBuffer(thisSample,1);
if (chan == 15)
{
dataBuffer->addToBuffer(thisSample,1);
chan = 0;
} else {
chan++;
}
}
}
} else {
wait(5); // pause for 5 ms
}
return true;
}
......@@ -26,8 +26,9 @@
#include "../../../JuceLibraryCode/JuceHeader.h"
#include <ftdi.h>
#include <stdio.h>
#include <time.h>
#include "DataThread.h"
/**
......@@ -50,26 +51,28 @@ public:
FileReaderThread(SourceNode* sn);
~FileReaderThread();
bool foundInputSource() {return true;}
bool foundInputSource();// {return true;}
bool startAcquisition();
bool stopAcquisition();
int getNumChannels() {return 16;}
float getSampleRate() {return 40000.0;}
int getNumChannels();// {return 16;}
float getSampleRate();// {return 40000.0;}
private:
float sampleRate;
int numChannels;
int samplesPerBlock;
int lengthOfInputFile;
int playHead;
FileInputStream* input;
FILE* input;
//FileInputStream* input;
float thisSample[16];
float readBuffer[1600];
int16 readBuffer[1600];
int bufferSize;
bool updateBuffer();
......
......@@ -163,8 +163,8 @@ void RecordNode::setParameter (int parameterIndex, float newValue)
isRecording = false;
std::cout << "STOP RECORDING." << std::endl;
// close necessary files
for (int i = 0; i < continuousChannels.size(); i++)
// DANGER
for (int i = 0; i < jmin(int(continuousChannels.size()), 32); i++)
{
if (continuousChannels[i].isRecording)
{
......
......@@ -202,6 +202,8 @@ void SourceNode::process(AudioSampleBuffer &buffer,
int& nSamples)
{
//std::cout << "SOURCE NODE" << std::endl;
buffer.clear();
nSamples = inputBuffer->readAllFromBuffer(buffer,buffer.getNumSamples());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment