annotate data/fileio/ResamplingWavFileReader.h @ 489:82ab61fa9223

* Reorganise our sparql queries on the basis that Redland must be available, not only optional. So for anything querying the pool of data about plugins, we use a single datastore and model which is initialised at the outset by PluginRDFIndexer and then queried directly; for anything that "reads from a file" (e.g. loading annotations) we query directly using Rasqal, going to the datastore when we need additional plugin-related information. This may improve performance, but mostly it simplifies the code and fixes a serious issue with RDF import in the previous versions (namely that multiple sequential RDF imports would end up sharing the same RDF data pool!)
author Chris Cannam
date Fri, 21 Nov 2008 16:12:29 +0000
parents 183ee2a55fc7
children
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@392 26 class ProgressReporter;
Chris@297 27
Chris@297 28 class ResamplingWavFileReader : 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@317 37 ResamplingWavFileReader(FileSource source,
Chris@297 38 ResampleMode resampleMode,
Chris@297 39 CacheMode cacheMode,
Chris@392 40 size_t targetRate = 0,
Chris@392 41 ProgressReporter *reporter = 0);
Chris@297 42 virtual ~ResamplingWavFileReader();
Chris@297 43
Chris@297 44 virtual QString getError() const { return m_error; }
Chris@345 45 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@297 46 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 47 static bool supportsExtension(QString ext);
Chris@316 48 static bool supportsContentType(QString type);
Chris@317 49 static bool supports(FileSource &source);
Chris@297 50
Chris@297 51 virtual int getDecodeCompletion() const { return m_completion; }
Chris@297 52
Chris@297 53 virtual bool isUpdating() const {
Chris@297 54 return m_decodeThread && m_decodeThread->isRunning();
Chris@297 55 }
Chris@297 56
Chris@392 57 public slots:
Chris@392 58 void cancelled();
Chris@392 59
Chris@297 60 protected:
Chris@317 61 FileSource m_source;
Chris@297 62 QString m_path;
Chris@297 63 QString m_error;
Chris@297 64 bool m_cancelled;
Chris@297 65 size_t m_processed;
Chris@297 66 int m_completion;
Chris@297 67
Chris@297 68 WavFileReader *m_original;
Chris@392 69 ProgressReporter *m_reporter;
Chris@297 70
Chris@297 71 void addBlock(const SampleBlock &frames);
Chris@297 72
Chris@297 73 class DecodeThread : public Thread
Chris@297 74 {
Chris@297 75 public:
Chris@297 76 DecodeThread(ResamplingWavFileReader *reader) : m_reader(reader) { }
Chris@297 77 virtual void run();
Chris@297 78
Chris@297 79 protected:
Chris@297 80 ResamplingWavFileReader *m_reader;
Chris@297 81 };
Chris@297 82
Chris@297 83 DecodeThread *m_decodeThread;
Chris@297 84 };
Chris@297 85
Chris@297 86 #endif
Chris@297 87