annotate data/fileio/WavFileReader.h @ 299:576be0d0d218

* Merge transform directory from sv-match-alignment branch (the previous comment included notes for this stuff, but I missed it in the actual merge) * Fix crash when a transform fails to create an output model and the thread that created the transform then deletes its input model thinking it's no longer needed, even though the transform run thread is still using it -- fix is to wait() on the transform before returning the null output model
author Chris Cannam
date Fri, 28 Sep 2007 16:15:06 +0000
parents 92e8dbde73cd
children 3a6725f285d6
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@290 29 WavFileReader(QString path, bool fileUpdating = false);
Chris@148 30 virtual ~WavFileReader();
Chris@148 31
Chris@290 32 virtual QString getError() const { return m_error; }
Chris@290 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@290 41 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@157 42
Chris@265 43 virtual int getDecodeCompletion() const { return 100; }
Chris@265 44
Chris@176 45 bool isUpdating() const { return m_updating; }
Chris@176 46
Chris@175 47 void updateFrameCount();
Chris@176 48 void updateDone();
Chris@175 49
Chris@148 50 protected:
Chris@148 51 SF_INFO m_fileInfo;
Chris@148 52 SNDFILE *m_file;
Chris@148 53
Chris@290 54 QString m_path;
Chris@290 55 QString m_error;
Chris@148 56
Chris@148 57 mutable QMutex m_mutex;
Chris@148 58 mutable float *m_buffer;
Chris@148 59 mutable size_t m_bufsiz;
Chris@148 60 mutable size_t m_lastStart;
Chris@148 61 mutable size_t m_lastCount;
Chris@176 62
Chris@176 63 bool m_updating;
Chris@148 64 };
Chris@148 65
Chris@148 66 #endif