diff options
Diffstat (limited to 'src/filelist.cc')
-rw-r--r-- | src/filelist.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/filelist.cc b/src/filelist.cc index da7f399..9c6f591 100644 --- a/src/filelist.cc +++ b/src/filelist.cc @@ -47,6 +47,8 @@ #include <QPainter> #include <QHeaderView> +#include <sndfile.h> + class ChannelMapDeligate : public QStyledItemDelegate { @@ -423,6 +425,18 @@ FileList::FileList(Instrument& instrument) createMenus(); } +static double getSamplerate(const QString& file) +{ + SF_INFO sf_info; + SNDFILE *fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info); + if(!fh) + { + return -1.0; + } + + return sf_info.samplerate; +} + void FileList::addFiles() { auto root = instrument.getProject().getRawFileRoot(); @@ -441,6 +455,30 @@ void FileList::addFiles() QFileInfo fi(file); QString name = fi.baseName(); path = fi.absolutePath(); + + double samplerate = getSamplerate(file); + if(samplerate == -1.0) + { + // Error reading file. Skip it. + std::cout << "Error reading file. Skip it.\n"; + ++i; + continue; + } + + if(instrument.getProject().getProjectSamplerate() == -1.0) + { + // Samplerate not yet set + instrument.getProject().setProjectSamplerate(samplerate); + } + + if(instrument.getProject().getProjectSamplerate() != samplerate) + { + // Samplerate of file differs from the projeft samplerate + std::cout << "Samplerate of file differs from the project samplerate:\n"; + std::cout << " project: " << instrument.getProject().getProjectSamplerate() << std::endl; + std::cout << " file: " << samplerate << std::endl; + } + if(root == file.left(root.length())) { file = file.mid(root.length() + 1); |