annotate data/fileio/DecodingWavFileReader.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents d03b3d956358
children cc27f35aa75c
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@933 40 int 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@929 66 int 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