summaryrefslogtreecommitdiff
path: root/src/filelist.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/filelist.cc')
-rw-r--r--src/filelist.cc38
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);