annotate data/fileio/WavFileReader.h @ 316:3a6725f285d6

* Make RemoteFile far more pervasive, and use it for local files as well so that we can handle both transparently. Make it shallow copy with reference counting, so it can be used by value without having to worry about the cache file lifetime. Use RemoteFile for MainWindow file-open functions, etc
author Chris Cannam
date Thu, 18 Oct 2007 15:31:20 +0000
parents 92e8dbde73cd
children c324d410b096
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@316 29 WavFileReader(RemoteFile source, 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@316 42 static bool supportsExtension(QString ext);
Chris@316 43 static bool supportsContentType(QString type);
Chris@316 44 static bool supports(RemoteFile &source);
Chris@157 45
Chris@265 46 virtual int getDecodeCompletion() const { return 100; }
Chris@265 47
Chris@176 48 bool isUpdating() const { return m_updating; }
Chris@176 49
Chris@175 50 void updateFrameCount();
Chris@176 51 void updateDone();
Chris@175 52
Chris@148 53 protected:
Chris@148 54 SF_INFO m_fileInfo;
Chris@148 55 SNDFILE *m_file;
Chris@148 56
Chris@316 57 RemoteFile m_source;
Chris@290 58 QString m_path;
Chris@290 59 QString m_error;
Chris@148 60
Chris@148 61 mutable QMutex m_mutex;
Chris@148 62 mutable float *m_buffer;
Chris@148 63 mutable size_t m_bufsiz;
Chris@148 64 mutable size_t m_lastStart;
Chris@148 65 mutable size_t m_lastCount;
Chris@176 66
Chris@176 67 bool m_updating;
Chris@148 68 };
Chris@148 69
Chris@148 70 #endif