Hello all,
I'm trying to extract some data from a .wav file using FileInputStream. Here is a code snippet of how I think this should be done with JUCE.
void FilterGraph::importFIRFilter(File filterFile) { FileInputStream* fileInputStream = filterFile.createInputStream(); ScopedPointer<AudioFormatReader> wavReader; WavAudioFormat wavAF; if(fileInputStream != nullptr){ wavReader = wavAF.createReaderFor(fileInputStream, false); ScopedPointer<AudioSampleBuffer> buffer = new AudioSampleBuffer(2, FFT_SIZE); CFFT fft; if(wavReader){ wavReader->read(buffer,0,fftSize,0, true, true); float *data = buffer->getArrayOfChannels()[0]; float outReal[FFT_SIZE], outIm[FFT_SIZE], outMag[FFT_SIZE/2]; fft.fft_float(fftSize,false,data,NULL,outReal,outIm); } } if(fileInputStream) delete fileInputStream; }
VS throws an exception here:
AudioFormatReader::~AudioFormatReader() { delete input; }
By changing the fileInputStream to a ScopedPointer an exception is thrown here. I cannot determine what object is trying to be deleted, but something tells me it's the AudioFormatReader..
struct ContainerDeletePolicy { static void destroy (ObjectType* object) { delete object; } };
I have tried a few variations of the code but am unable to determine why this is happening! I'm still a student, so my experience is limited. Thanks for your help and C++ know-how.
UPDATE:
If I let the fileInputStream memory leak the program quits complaining and everything runs smoothly. This leads me to believe something is happening in the destructor that shouldn't. I think this answers my question, but I would like someone to confirm that I indeed do not need to call delete here as the memory has been managed elsewhere. I passed my pointer to AudioSampleBuffer which may have deleted it.