annotate data/fileio/CodedAudioFileReader.h @ 263:71dfc6ab3b54

* Threaded mp3/ogg file reading. Not activated yet, as it doesn't work in context (SV needs to know the duration of its main model at the outset)
author Chris Cannam
date Thu, 24 May 2007 16:20:22 +0000
parents 1a42221a1522
children 20028c634494
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@263 22 #include <QMutex>
Chris@148 23
Chris@148 24 class WavFileReader;
Chris@148 25
Chris@148 26 class CodedAudioFileReader : public AudioFileReader
Chris@148 27 {
Chris@148 28 public:
Chris@148 29 virtual ~CodedAudioFileReader();
Chris@148 30
Chris@148 31 enum CacheMode {
Chris@148 32 CacheInTemporaryFile,
Chris@148 33 CacheInMemory
Chris@148 34 };
Chris@148 35
Chris@148 36 virtual void getInterleavedFrames(size_t start, size_t count,
Chris@148 37 SampleBlock &frames) const;
Chris@148 38
Chris@148 39 protected:
Chris@148 40 CodedAudioFileReader(CacheMode cacheMode);
Chris@148 41
Chris@148 42 void initialiseDecodeCache(); // samplerate, channels must have been set
Chris@148 43 void addSampleToDecodeCache(float sample);
Chris@148 44 void finishDecodeCache();
Chris@148 45 bool isDecodeCacheInitialised() const { return m_initialised; }
Chris@148 46
Chris@263 47 QMutex m_cacheMutex;
Chris@148 48 CacheMode m_cacheMode;
Chris@148 49 SampleBlock m_data;
Chris@148 50 bool m_initialised;
Chris@148 51
Chris@148 52 QString m_cacheFileName;
Chris@148 53 SNDFILE *m_cacheFileWritePtr;
Chris@148 54 WavFileReader *m_cacheFileReader;
Chris@148 55 float *m_cacheWriteBuffer;
Chris@148 56 size_t m_cacheWriteBufferIndex;
Chris@148 57 size_t m_cacheWriteBufferSize; // frames
Chris@148 58 };
Chris@148 59
Chris@148 60 #endif