annotate data/fileio/AudioFileReader.h @ 308:14e0f60435b8

* Make it possible to drop audio files, layer files, session files and images onto SV panes. Need to do a bit more work on where we expect the dropped file to go, particularly in the case of audio files -- at the moment they're always opened in new panes, but it may be better to by default replace whatever is in the target pane.
author Chris Cannam
date Wed, 10 Oct 2007 15:18:02 +0000
parents c022976d18e8
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 _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@175 22 class AudioFileReader : public QObject
Chris@148 23 {
Chris@175 24 Q_OBJECT
Chris@175 25
Chris@148 26 public:
Chris@148 27 virtual ~AudioFileReader() { }
Chris@148 28
Chris@148 29 bool isOK() const { return (m_channelCount > 0); }
Chris@148 30
Chris@290 31 virtual QString getError() const { return ""; }
Chris@148 32
Chris@148 33 size_t getFrameCount() const { return m_frameCount; }
Chris@148 34 size_t getChannelCount() const { return m_channelCount; }
Chris@148 35 size_t getSampleRate() const { return m_sampleRate; }
Chris@297 36 size_t getNativeRate() const { return m_sampleRate; } // if resampled
Chris@148 37
Chris@271 38 /**
Chris@271 39 * Return the title of the work in the audio file, if known. This
Chris@271 40 * may be implemented by subclasses that support file tagging.
Chris@271 41 * This is not the same thing as the file name.
Chris@271 42 */
Chris@290 43 virtual QString getTitle() const { return ""; }
Chris@271 44
Chris@148 45 /**
Chris@148 46 * The subclass implementations of this function must be
Chris@148 47 * thread-safe -- that is, safe to call from multiple threads with
Chris@148 48 * different arguments on the same object at the same time.
Chris@148 49 */
Chris@148 50 virtual void getInterleavedFrames(size_t start, size_t count,
Chris@148 51 SampleBlock &frames) const = 0;
Chris@175 52
Chris@265 53 // only subclasses that do not know exactly how long the audio
Chris@265 54 // file is until it's been completely decoded should implement this
Chris@265 55 virtual int getDecodeCompletion() const { return 100; } // %
Chris@265 56
Chris@176 57 virtual bool isUpdating() const { return false; }
Chris@176 58
Chris@175 59 signals:
Chris@175 60 void frameCountChanged();
Chris@148 61
Chris@148 62 protected:
Chris@148 63 size_t m_frameCount;
Chris@148 64 size_t m_channelCount;
Chris@148 65 size_t m_sampleRate;
Chris@148 66 };
Chris@148 67
Chris@148 68 #endif