17 #include <bqaudiostream/AudioReadStreamFactory.h> 18 #include <bqaudiostream/AudioReadStream.h> 19 #include <bqaudiostream/Exceptions.h> 36 m_path(source.getLocalFilename()),
43 <<
"\", decode mode: " << decodeMode <<
" (" 44 << (decodeMode ==
DecodeAtOnce ?
"DecodeAtOnce" :
"DecodeThreaded")
50 Profiler profiler(
"BQAFileReader::BQAFileReader");
53 m_stream = breakfastquay::AudioReadStreamFactory::createReadStream
55 }
catch (
const std::exception &e) {
57 SVDEBUG <<
"BQAFileReader: createReadStream failed: " <<
m_error << endl;
62 m_channelCount = int(
m_stream->getChannelCount());
74 (tr(
"Decoding %1...").arg(QFileInfo(
m_path).fileName()));
78 floatvec_t block(blockSize * m_channelCount, 0.f);
83 m_stream->getInterleavedFrames(blockSize, block.data());
87 if (retrieved < blockSize) {
90 }
catch (
const breakfastquay::InvalidFileFormat &f) {
118 Profiler profiler(
"BQAFileReader::~BQAFileReader");
139 m_reader->startSerialised(
"BQAFileReader::Decode",
140 &m_reader->m_cancelled);
141 if (m_reader->m_cancelled) {
147 floatvec_t block(blockSize * m_reader->getChannelCount(), 0.f);
152 m_reader->m_stream->getInterleavedFrames
153 (blockSize, block.data());
155 m_reader->addSamplesToDecodeCache(block.data(), retrieved);
157 if (retrieved < blockSize) {
160 }
catch (
const breakfastquay::InvalidFileFormat &f) {
161 m_reader->m_error = f.what();
162 SVDEBUG <<
"BQAFileReader: decode failed: " << m_reader->m_error << endl;
166 if (m_reader->m_cancelled)
break;
169 if (m_reader->isDecodeCacheInitialised()) m_reader->finishDecodeCache();
170 m_reader->m_completion = 100;
172 m_reader->endSerialised();
174 delete m_reader->m_stream;
175 m_reader->m_stream = 0;
181 vector<string> exts =
182 breakfastquay::AudioReadStreamFactory::getSupportedFileExtensions();
184 extensions.insert(QString::fromUtf8(e.c_str()));
191 set<QString> extensions;
193 return (extensions.find(extension.toLower()) != extensions.end());
201 return (type.startsWith(
"audio/"));
double sv_samplerate_t
Sample rate.
std::atomic< bool > m_cancelled
static bool supports(FileSource &source)
int64_t sv_frame_t
Frame index, the unit of our time axis.
static void getSupportedExtensions(std::set< QString > &extensions)
static bool supportsExtension(QString ext)
std::vector< float, breakfastquay::StlAllocator< float > > floatvec_t
ProgressReporter * m_reporter
BQAFileReader(FileSource source, DecodeMode decodeMode, CacheMode cacheMode, sv_samplerate_t targetRate=0, bool normalised=false, ProgressReporter *reporter=0)
FileSource is a class used to refer to the contents of a file that may be either local or at a remote...
void addSamplesToDecodeCache(float **samples, sv_frame_t nframes)
QString getContentType() const
Return the MIME content type of this file, if known.
sv_samplerate_t m_fileRate
virtual void setProgress(int percentage)=0
breakfastquay::AudioReadStream * m_stream
DecodeThread * m_decodeThread
void initialiseDecodeCache()
virtual void setMessage(QString text)=0
QString getExtension() const
Return the file extension for this file, if any.
static bool supportsContentType(QString type)
bool isDecodeCacheInitialised() const
Profile point instance class.