diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-10-06 11:13:03 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-10-06 11:13:03 +0200 |
commit | 0e2db9214ff3d6cbe4388224f405bc5d67d6a8d3 (patch) | |
tree | 8c10a15879a346b2697e95f5ea3d841f797e1f05 /src/filelist.cc | |
parent | 5584b748a7e75a1f8b582ba9227dc08b2b2c5649 (diff) |
Add (automatic) samplerate detection to the project.
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); |