comparison main/MainWindow.cpp @ 1902:dc275d7d9aa6 import-audio-data

Toward loading audio from CSV files
author Chris Cannam
date Thu, 28 Jun 2018 14:53:38 +0100
parents e5229958a10c
children 2160976df436
comparison
equal deleted inserted replaced
1900:a3cd06d89a45 1902:dc275d7d9aa6
585 action->setStatusTip(tr("Export selection as an audio file")); 585 action->setStatusTip(tr("Export selection as an audio file"));
586 connect(action, SIGNAL(triggered()), this, SLOT(exportAudio())); 586 connect(action, SIGNAL(triggered()), this, SLOT(exportAudio()));
587 connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool))); 587 connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool)));
588 menu->addAction(action); 588 menu->addAction(action);
589 589
590 menu->addSeparator();
591
592 action = new QAction(tr("Import Audio Data..."), this);
593 action->setStatusTip(tr("Import audio sample values from a CSV data file"));
594 connect(action, SIGNAL(triggered()), this, SLOT(importAudioData()));
595 menu->addAction(action);
596
590 action = new QAction(tr("Export Audio Data..."), this); 597 action = new QAction(tr("Export Audio Data..."), this);
591 action->setStatusTip(tr("Export audio from selection into a data file")); 598 action->setStatusTip(tr("Export audio from selection into a CSV data file"));
592 connect(action, SIGNAL(triggered()), this, SLOT(exportAudioData())); 599 connect(action, SIGNAL(triggered()), this, SLOT(exportAudioData()));
593 connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool))); 600 connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool)));
594 menu->addAction(action); 601 menu->addAction(action);
595 602
596 menu->addSeparator(); 603 menu->addSeparator();
2874 emit activity(tr("Export audio to \"%1\"").arg(path)); 2881 emit activity(tr("Export audio to \"%1\"").arg(path));
2875 m_recentFiles.addFile(path); 2882 m_recentFiles.addFile(path);
2876 } 2883 }
2877 } else { 2884 } else {
2878 QMessageBox::critical(this, tr("Failed to write file"), error); 2885 QMessageBox::critical(this, tr("Failed to write file"), error);
2886 }
2887 }
2888
2889 void
2890 MainWindow::importAudioData()
2891 {
2892 QString path = getOpenFileName(FileFinder::CSVFile);
2893 if (path == "") return;
2894
2895 sv_samplerate_t rate = 44100; //!!!
2896
2897 CSVFormat format(path);
2898 format.setModelType(CSVFormat::WaveFileModel);
2899 format.setSampleRate(rate);
2900 format.setTimingType(CSVFormat::ImplicitTiming);
2901 format.setTimeUnits(CSVFormat::TimeAudioFrames);
2902
2903 FileOpenStatus status = FileOpenSucceeded;
2904
2905 WaveFileModel *model = qobject_cast<WaveFileModel *>
2906 (DataFileReaderFactory::loadCSV
2907 (path, format,
2908 getMainModel() ? getMainModel()->getSampleRate() : rate));
2909
2910 if (!model || !model->isOK()) {
2911
2912 delete model;
2913 status = FileOpenFailed;
2914
2915 } else {
2916
2917 status = addOpenedAudioModel(path,
2918 model,
2919 CreateAdditionalModel,
2920 getDefaultSessionTemplate(),
2921 false);
2922 }
2923
2924 if (status == FileOpenFailed) {
2925 emit hideSplash();
2926 QMessageBox::critical(this, tr("Failed to open file"),
2927 tr("<b>File open failed</b><p>Audio data file %1 could not be opened.").arg(path));
2879 } 2928 }
2880 } 2929 }
2881 2930
2882 void 2931 void
2883 MainWindow::importLayer() 2932 MainWindow::importLayer()