Chris@235: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@235: Chris@235: /* Chris@235: Sonic Visualiser Chris@235: An audio file viewer and annotation editor. Chris@235: Centre for Digital Music, Queen Mary, University of London. Chris@235: This file copyright 2006 Chris Cannam and QMUL. Chris@235: Chris@235: This program is free software; you can redistribute it and/or Chris@235: modify it under the terms of the GNU General Public License as Chris@235: published by the Free Software Foundation; either version 2 of the Chris@235: License, or (at your option) any later version. See the file Chris@235: COPYING included with this distribution for more information. Chris@235: */ Chris@235: Chris@235: #include "AudioFileReaderFactory.h" Chris@235: Chris@235: #include "WavFileReader.h" Chris@235: #include "OggVorbisFileReader.h" Chris@235: #include "MP3FileReader.h" Chris@235: Chris@235: #include Chris@235: #include Chris@235: Chris@235: QString Chris@235: AudioFileReaderFactory::getKnownExtensions() Chris@235: { Chris@235: std::set extensions; Chris@235: Chris@235: WavFileReader::getSupportedExtensions(extensions); Chris@235: #ifdef HAVE_MAD Chris@235: MP3FileReader::getSupportedExtensions(extensions); Chris@235: #endif Chris@235: #ifdef HAVE_OGGZ Chris@235: #ifdef HAVE_FISHSOUND Chris@235: OggVorbisFileReader::getSupportedExtensions(extensions); Chris@235: #endif Chris@235: #endif Chris@235: Chris@235: QString rv; Chris@235: for (std::set::const_iterator i = extensions.begin(); Chris@235: i != extensions.end(); ++i) { Chris@235: if (i != extensions.begin()) rv += " "; Chris@235: rv += "*." + *i; Chris@235: } Chris@235: Chris@235: return rv; Chris@235: } Chris@235: Chris@235: AudioFileReader * Chris@235: AudioFileReaderFactory::createReader(QString path) Chris@235: { Chris@235: QString err; Chris@235: Chris@235: AudioFileReader *reader = 0; Chris@235: Chris@235: reader = new WavFileReader(path); Chris@235: if (reader->isOK()) return reader; Chris@235: if (reader->getError() != "") err = reader->getError(); Chris@235: delete reader; Chris@235: Chris@235: if (err != "") { Chris@235: std::cerr << "AudioFileReaderFactory: WAV file reader error: \"" Chris@235: << err.toStdString() << "\"" << std::endl; Chris@235: } Chris@235: Chris@235: Chris@235: #ifdef HAVE_OGGZ Chris@235: #ifdef HAVE_FISHSOUND Chris@235: reader = new OggVorbisFileReader(path, true, Chris@235: OggVorbisFileReader::CacheInTemporaryFile); Chris@235: if (reader->isOK()) return reader; Chris@235: if (reader->getError() != "") err = reader->getError(); Chris@235: delete reader; Chris@235: Chris@235: if (err != "") { Chris@235: std::cerr << "AudioFileReaderFactory: Ogg file reader error: \"" Chris@235: << err.toStdString() << "\"" << std::endl; Chris@235: } Chris@235: Chris@235: #endif Chris@235: #endif Chris@235: Chris@235: #ifdef HAVE_MAD Chris@235: reader = new MP3FileReader(path, true, Chris@235: MP3FileReader::CacheInTemporaryFile); Chris@235: if (reader->isOK()) return reader; Chris@235: if (reader->getError() != "") err = reader->getError(); Chris@235: delete reader; Chris@235: Chris@235: if (err != "") { Chris@235: std::cerr << "AudioFileReaderFactory: mp3 file reader error: \"" Chris@235: << err.toStdString() << "\"" << std::endl; Chris@235: } Chris@235: Chris@235: #endif Chris@235: Chris@235: return 0; Chris@235: } Chris@235: