annotate data/fileio/DecodingWavFileReader.h @ 823:f0558e69a074

Rename Resampling- to DecodingWavFileReader, and use it whenever we have an audio file that is not quickly seekable using libsndfile. Avoids very slow performance when analysing ogg files.
author Chris Cannam
date Wed, 17 Jul 2013 15:40:01 +0100
parents data/fileio/ResamplingWavFileReader.h@183ee2a55fc7
children f3cda3280398 59e7fe1b1003
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@297 38 ResampleMode resampleMode,
Chris@297 39 CacheMode cacheMode,
Chris@392 40 size_t targetRate = 0,
Chris@392 41 ProgressReporter *reporter = 0);
Chris@823 42 virtual ~DecodingWavFileReader();
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@823 76 DecodeThread(DecodingWavFileReader *reader) : m_reader(reader) { }
Chris@297 77 virtual void run();
Chris@297 78
Chris@297 79 protected:
Chris@823 80 DecodingWavFileReader *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