annotate data/fileio/CodedAudioFileReader.h @ 184:5a916fee6d2d

* Handle generator transforms (plugins whose channel count isn't dependent on number of audio inputs, as they have none) * Be less keen to suspend writing FFT data in spectrogram repaint -- only do it if we find we actually need to query the FFT data (i.e. we aren't repainting an area that hasn't been generated at all yet)
author Chris Cannam
date Tue, 10 Oct 2006 19:04:57 +0000
parents 1a42221a1522
children 71dfc6ab3b54
rev   line source
Chris@148 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@148 2
Chris@148 3 /*
Chris@148 4 Sonic Visualiser
Chris@148 5 An audio file viewer and annotation editor.
Chris@148 6 Centre for Digital Music, Queen Mary, University of London.
Chris@148 7 This file copyright 2006 Chris Cannam.
Chris@148 8
Chris@148 9 This program is free software; you can redistribute it and/or
Chris@148 10 modify it under the terms of the GNU General Public License as
Chris@148 11 published by the Free Software Foundation; either version 2 of the
Chris@148 12 License, or (at your option) any later version. See the file
Chris@148 13 COPYING included with this distribution for more information.
Chris@148 14 */
Chris@148 15
Chris@148 16 #ifndef _CODED_AUDIO_FILE_READER_H_
Chris@148 17 #define _CODED_AUDIO_FILE_READER_H_
Chris@148 18
Chris@148 19 #include "AudioFileReader.h"
Chris@148 20
Chris@148 21 #include <sndfile.h>
Chris@148 22
Chris@148 23 class WavFileReader;
Chris@148 24
Chris@148 25 class CodedAudioFileReader : public AudioFileReader
Chris@148 26 {
Chris@148 27 public:
Chris@148 28 virtual ~CodedAudioFileReader();
Chris@148 29
Chris@148 30 enum CacheMode {
Chris@148 31 CacheInTemporaryFile,
Chris@148 32 CacheInMemory
Chris@148 33 };
Chris@148 34
Chris@148 35 virtual void getInterleavedFrames(size_t start, size_t count,
Chris@148 36 SampleBlock &frames) const;
Chris@148 37
Chris@148 38 protected:
Chris@148 39 CodedAudioFileReader(CacheMode cacheMode);
Chris@148 40
Chris@148 41 void initialiseDecodeCache(); // samplerate, channels must have been set
Chris@148 42 void addSampleToDecodeCache(float sample);
Chris@148 43 void finishDecodeCache();
Chris@148 44 bool isDecodeCacheInitialised() const { return m_initialised; }
Chris@148 45
Chris@148 46 CacheMode m_cacheMode;
Chris@148 47 SampleBlock m_data;
Chris@148 48 bool m_initialised;
Chris@148 49
Chris@148 50 QString m_cacheFileName;
Chris@148 51 SNDFILE *m_cacheFileWritePtr;
Chris@148 52 WavFileReader *m_cacheFileReader;
Chris@148 53 float *m_cacheWriteBuffer;
Chris@148 54 size_t m_cacheWriteBufferIndex;
Chris@148 55 size_t m_cacheWriteBufferSize; // frames
Chris@148 56 };
Chris@148 57
Chris@148 58 #endif