32 std::set<QString> extensions;
44 QuickTimeFileReader::getSupportedExtensions(extensions);
47 CoreAudioFileReader::getSupportedExtensions(extensions);
51 for (std::set<QString>::const_iterator i = extensions.begin();
52 i != extensions.end(); ++i) {
53 if (i != extensions.begin()) rv +=
" ";
66 return create(source, targetRate, normalised,
false, reporter);
75 return create(source, targetRate, normalised,
true, reporter);
87 SVDEBUG <<
"AudioFileReaderFactory::createReader(\"" << source.
getLocation() <<
"\"): Requested rate: " << targetRate << endl;
90 cerr <<
"AudioFileReaderFactory::createReader(\"" << source.
getLocation() <<
"\": Failed to retrieve source (transmission error?): " << source.
getErrorString() << endl;
95 SVDEBUG <<
"AudioFileReaderFactory::createReader(\"" << source.
getLocation() <<
"\": Source not found" << endl;
110 if (reader->
isOK() &&
113 (targetRate != 0 && fileRate != targetRate))) {
115 SVDEBUG <<
"AudioFileReaderFactory::createReader: WAV file rate: " << reader->
getSampleRate() <<
", normalised " << normalised <<
", seekable " << reader->
isQuicklySeekable() <<
", creating decoding reader" << endl;
124 targetRate ? targetRate : fileRate,
127 if (!reader->
isOK()) {
135 #ifdef HAVE_FISHSOUND 147 if (!reader->
isOK()) {
168 if (!reader->
isOK()) {
176 #ifdef HAVE_QUICKTIME 178 if (QuickTimeFileReader::supports(source)) {
179 reader =
new QuickTimeFileReader
182 QuickTimeFileReader::DecodeThreaded :
183 QuickTimeFileReader::DecodeAtOnce,
184 QuickTimeFileReader::CacheInTemporaryFile,
188 if (!reader->
isOK()) {
196 #ifdef HAVE_COREAUDIO 198 if (CoreAudioFileReader::supports(source)) {
199 reader =
new CoreAudioFileReader
202 CoreAudioFileReader::DecodeThreaded :
203 CoreAudioFileReader::DecodeAtOnce,
204 CoreAudioFileReader::CacheInTemporaryFile,
208 if (!reader->
isOK()) {
229 if (reader->
isOK() &&
232 (targetRate != 0 && fileRate != targetRate))) {
234 SVDEBUG <<
"AudioFileReaderFactory::createReader: WAV file rate: " << reader->
getSampleRate() <<
", normalised " << normalised <<
", seekable " << reader->
isQuicklySeekable() <<
", creating decoding reader" << endl;
243 targetRate ? targetRate : fileRate,
248 if (!reader->
isOK()) {
255 #ifdef HAVE_FISHSOUND 266 if (!reader->
isOK()) {
285 if (!reader->
isOK()) {
292 #ifdef HAVE_QUICKTIME 294 reader =
new QuickTimeFileReader
297 QuickTimeFileReader::DecodeThreaded :
298 QuickTimeFileReader::DecodeAtOnce,
299 QuickTimeFileReader::CacheInTemporaryFile,
303 if (!reader->
isOK()) {
310 #ifdef HAVE_COREAUDIO 312 reader =
new CoreAudioFileReader
315 CoreAudioFileReader::DecodeThreaded :
316 CoreAudioFileReader::DecodeAtOnce,
317 CoreAudioFileReader::CacheInTemporaryFile,
321 if (!reader->
isOK()) {
329 if (reader->
isOK()) {
330 SVDEBUG <<
"AudioFileReaderFactory: Reader is OK" << endl;
333 cerr <<
"AudioFileReaderFactory: Preferred reader for " 335 <<
"\" (content type \"" 339 cerr <<
": \"" << reader->
getError() <<
"\"";
346 cerr <<
"AudioFileReaderFactory: No reader" << endl;
virtual QString getError() const
static AudioFileReader * createThreadingReader(FileSource source, int targetRate=0, bool normalised=false, ProgressReporter *reporter=0)
Return an audio file reader initialised to the file at the given path, or NULL if no suitable reader ...
static void getSupportedExtensions(std::set< QString > &extensions)
QString getLocation() const
Return the location filename or URL as passed to the constructor.
Reader for audio files using libsndfile.
static AudioFileReader * createReader(FileSource source, int targetRate=0, bool normalised=false, ProgressReporter *reporter=0)
Return an audio file reader initialised to the file at the given path, or NULL if no suitable reader ...
static void getSupportedExtensions(std::set< QString > &extensions)
static QString getKnownExtensions()
Return the file extensions that we have audio file readers for, in a format suitable for use with QFi...
bool isOK() const
Return true if the FileSource object is valid and neither error nor cancellation occurred while retri...
static bool supports(FileSource &source)
FileSource is a class used to refer to the contents of a file that may be either local or at a remote...
static void getSupportedExtensions(std::set< QString > &extensions)
QString getErrorString() const
Return an error message, if isOK() is false.
static bool supports(FileSource &source)
QString getContentType() const
Return the MIME content type of this file, if known.
virtual bool isQuicklySeekable() const =0
Return true if this file supports fast seek and random access.
int getSampleRate() const
static AudioFileReader * create(FileSource source, int targetRate, bool normalised, bool threading, ProgressReporter *reporter)
static bool supports(FileSource &source)
bool isAvailable()
Return true if the file or remote URL exists.