annotate data/fileio/WavFileReader.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 570794f6f6a7
children e08f486e8d8c
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 _WAV_FILE_READER_H_
Chris@148 17 #define _WAV_FILE_READER_H_
Chris@148 18
Chris@148 19 #include "AudioFileReader.h"
Chris@148 20
Chris@148 21 #include <sndfile.h>
Chris@148 22 #include <QMutex>
Chris@148 23
Chris@157 24 #include <set>
Chris@157 25
Chris@148 26 class WavFileReader : public AudioFileReader
Chris@148 27 {
Chris@148 28 public:
Chris@176 29 WavFileReader(QString path, bool fileUpdating = false);
Chris@148 30 virtual ~WavFileReader();
Chris@148 31
Chris@148 32 virtual QString getError() const { return m_error; }
Chris@148 33
Chris@148 34 /**
Chris@148 35 * Must be safe to call from multiple threads with different
Chris@148 36 * arguments on the same object at the same time.
Chris@148 37 */
Chris@148 38 virtual void getInterleavedFrames(size_t start, size_t count,
Chris@148 39 SampleBlock &frames) const;
Chris@148 40
Chris@157 41 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@157 42
Chris@176 43 bool isUpdating() const { return m_updating; }
Chris@176 44
Chris@175 45 void updateFrameCount();
Chris@176 46 void updateDone();
Chris@175 47
Chris@148 48 protected:
Chris@148 49 SF_INFO m_fileInfo;
Chris@148 50 SNDFILE *m_file;
Chris@148 51
Chris@148 52 QString m_path;
Chris@148 53 QString m_error;
Chris@148 54
Chris@148 55 mutable QMutex m_mutex;
Chris@148 56 mutable float *m_buffer;
Chris@148 57 mutable size_t m_bufsiz;
Chris@148 58 mutable size_t m_lastStart;
Chris@148 59 mutable size_t m_lastCount;
Chris@176 60
Chris@176 61 bool m_updating;
Chris@148 62 };
Chris@148 63
Chris@148 64 #endif