annotate data/fileio/DecodingWavFileReader.h @ 1078:ce82bcdc95d0

Fail upfront if the file is going to be too large. We expect the caller to split up large data sets into several MatrixFiles
author Chris Cannam
date Wed, 10 Jun 2015 13:10:26 +0100
parents a1cd5abcb38b
children 4d9816ba0ebe
rev   line source
Chris@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@823 16 #ifndef _DECODING_WAV_FILE_READER_H_
Chris@823 17 #define _DECODING_WAV_FILE_READER_H_
Chris@297 18
Chris@297 19 #include "CodedAudioFileReader.h"
Chris@297 20
Chris@297 21 #include "base/Thread.h"
Chris@297 22
Chris@297 23 #include <set>
Chris@297 24
Chris@297 25 class WavFileReader;
Chris@392 26 class ProgressReporter;
Chris@297 27
Chris@823 28 class DecodingWavFileReader : public CodedAudioFileReader
Chris@297 29 {
Chris@392 30 Q_OBJECT
Chris@297 31 public:
Chris@297 32 enum ResampleMode {
Chris@297 33 ResampleAtOnce, // resample the file on construction, with progress dialog
Chris@297 34 ResampleThreaded // resample in a background thread after construction
Chris@297 35 };
Chris@297 36
Chris@823 37 DecodingWavFileReader(FileSource source,
Chris@920 38 ResampleMode resampleMode,
Chris@920 39 CacheMode cacheMode,
Chris@1040 40 sv_samplerate_t targetRate = 0,
Chris@920 41 bool normalised = false,
Chris@920 42 ProgressReporter *reporter = 0);
Chris@823 43 virtual ~DecodingWavFileReader();
Chris@297 44
Chris@297 45 virtual QString getError() const { return m_error; }
Chris@345 46 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@297 47 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 48 static bool supportsExtension(QString ext);
Chris@316 49 static bool supportsContentType(QString type);
Chris@317 50 static bool supports(FileSource &source);
Chris@297 51
Chris@297 52 virtual int getDecodeCompletion() const { return m_completion; }
Chris@297 53
Chris@297 54 virtual bool isUpdating() const {
Chris@297 55 return m_decodeThread && m_decodeThread->isRunning();
Chris@297 56 }
Chris@297 57
Chris@392 58 public slots:
Chris@392 59 void cancelled();
Chris@392 60
Chris@297 61 protected:
Chris@317 62 FileSource m_source;
Chris@297 63 QString m_path;
Chris@297 64 QString m_error;
Chris@297 65 bool m_cancelled;
Chris@1038 66 sv_frame_t m_processed;
Chris@297 67 int m_completion;
Chris@297 68
Chris@297 69 WavFileReader *m_original;
Chris@392 70 ProgressReporter *m_reporter;
Chris@297 71
Chris@297 72 void addBlock(const SampleBlock &frames);
Chris@297 73
Chris@297 74 class DecodeThread : public Thread
Chris@297 75 {
Chris@297 76 public:
Chris@823 77 DecodeThread(DecodingWavFileReader *reader) : m_reader(reader) { }
Chris@297 78 virtual void run();
Chris@297 79
Chris@297 80 protected:
Chris@823 81 DecodingWavFileReader *m_reader;
Chris@297 82 };
Chris@297 83
Chris@297 84 DecodeThread *m_decodeThread;
Chris@297 85 };
Chris@297 86
Chris@297 87 #endif
Chris@297 88