annotate data/fileio/ResamplingWavFileReader.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@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@297 16 #ifndef _RESAMPLING_WAV_FILE_READER_H_
Chris@297 17 #define _RESAMPLING_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@297 26 class QProgressDialog;
Chris@297 27
Chris@297 28 class ResamplingWavFileReader : public CodedAudioFileReader
Chris@297 29 {
Chris@297 30 public:
Chris@297 31 enum ResampleMode {
Chris@297 32 ResampleAtOnce, // resample the file on construction, with progress dialog
Chris@297 33 ResampleThreaded // resample in a background thread after construction
Chris@297 34 };
Chris@297 35
Chris@316 36 ResamplingWavFileReader(RemoteFile source,
Chris@297 37 ResampleMode resampleMode,
Chris@297 38 CacheMode cacheMode,
Chris@297 39 size_t targetRate = 0);
Chris@297 40 virtual ~ResamplingWavFileReader();
Chris@297 41
Chris@297 42 virtual QString getError() const { return m_error; }
Chris@297 43 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 44 static bool supportsExtension(QString ext);
Chris@316 45 static bool supportsContentType(QString type);
Chris@316 46 static bool supports(RemoteFile &source);
Chris@297 47
Chris@297 48 virtual int getDecodeCompletion() const { return m_completion; }
Chris@297 49
Chris@297 50 virtual bool isUpdating() const {
Chris@297 51 return m_decodeThread && m_decodeThread->isRunning();
Chris@297 52 }
Chris@297 53
Chris@297 54 protected:
Chris@316 55 RemoteFile m_source;
Chris@297 56 QString m_path;
Chris@297 57 QString m_error;
Chris@297 58 bool m_cancelled;
Chris@297 59 size_t m_processed;
Chris@297 60 int m_completion;
Chris@297 61
Chris@297 62 WavFileReader *m_original;
Chris@297 63 QProgressDialog *m_progress;
Chris@297 64
Chris@297 65 void addBlock(const SampleBlock &frames);
Chris@297 66
Chris@297 67 class DecodeThread : public Thread
Chris@297 68 {
Chris@297 69 public:
Chris@297 70 DecodeThread(ResamplingWavFileReader *reader) : m_reader(reader) { }
Chris@297 71 virtual void run();
Chris@297 72
Chris@297 73 protected:
Chris@297 74 ResamplingWavFileReader *m_reader;
Chris@297 75 };
Chris@297 76
Chris@297 77 DecodeThread *m_decodeThread;
Chris@297 78 };
Chris@297 79
Chris@297 80 #endif
Chris@297 81