annotate data/fileio/AudioFileReader.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 c022976d18e8
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 _AUDIO_FILE_READER_H_
Chris@148 17 #define _AUDIO_FILE_READER_H_
Chris@148 18
Chris@290 19 #include <QString>
Chris@290 20 #include "model/Model.h" // for SampleBlock
Chris@148 21
Chris@316 22 #include "RemoteFile.h"
Chris@316 23
Chris@175 24 class AudioFileReader : public QObject
Chris@148 25 {
Chris@175 26 Q_OBJECT
Chris@175 27
Chris@148 28 public:
Chris@148 29 virtual ~AudioFileReader() { }
Chris@148 30
Chris@148 31 bool isOK() const { return (m_channelCount > 0); }
Chris@148 32
Chris@290 33 virtual QString getError() const { return ""; }
Chris@148 34
Chris@148 35 size_t getFrameCount() const { return m_frameCount; }
Chris@148 36 size_t getChannelCount() const { return m_channelCount; }
Chris@148 37 size_t getSampleRate() const { return m_sampleRate; }
Chris@297 38 size_t getNativeRate() const { return m_sampleRate; } // if resampled
Chris@148 39
Chris@271 40 /**
Chris@271 41 * Return the title of the work in the audio file, if known. This
Chris@271 42 * may be implemented by subclasses that support file tagging.
Chris@271 43 * This is not the same thing as the file name.
Chris@271 44 */
Chris@290 45 virtual QString getTitle() const { return ""; }
Chris@271 46
Chris@148 47 /**
Chris@148 48 * The subclass implementations of this function must be
Chris@148 49 * thread-safe -- that is, safe to call from multiple threads with
Chris@148 50 * different arguments on the same object at the same time.
Chris@148 51 */
Chris@148 52 virtual void getInterleavedFrames(size_t start, size_t count,
Chris@148 53 SampleBlock &frames) const = 0;
Chris@175 54
Chris@265 55 // only subclasses that do not know exactly how long the audio
Chris@265 56 // file is until it's been completely decoded should implement this
Chris@265 57 virtual int getDecodeCompletion() const { return 100; } // %
Chris@265 58
Chris@176 59 virtual bool isUpdating() const { return false; }
Chris@176 60
Chris@175 61 signals:
Chris@175 62 void frameCountChanged();
Chris@148 63
Chris@148 64 protected:
Chris@148 65 size_t m_frameCount;
Chris@148 66 size_t m_channelCount;
Chris@148 67 size_t m_sampleRate;
Chris@148 68 };
Chris@148 69
Chris@148 70 #endif