summaryrefslogtreecommitdiff
path: root/src/audioextractor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/audioextractor.cc')
-rw-r--r--src/audioextractor.cc119
1 files changed, 36 insertions, 83 deletions
diff --git a/src/audioextractor.cc b/src/audioextractor.cc
index 2132cba..50f2947 100644
--- a/src/audioextractor.cc
+++ b/src/audioextractor.cc
@@ -43,17 +43,18 @@ typedef struct
float *data;
} audiodata_t;
-AudioExtractor::AudioExtractor(Instrument& instrument, Selections &selections,
- QObject *parent)
+AudioExtractor::AudioExtractor(Instrument& instrument, QObject *parent)
: QObject(parent)
, instrument(instrument)
- , selections(selections)
{
- audiofiles = instrument.getFileList();
}
void AudioExtractor::exportSelections()
{
+ auto selections = instrument.getSelections();
+ auto exportpath = instrument.getProject().getExportPath();
+ auto prefix = instrument.getPrefix();
+
int samplerate = -1;
emit setMaximumProgress(selections.ids().size() + 1/* for xml writing*/);
int progress = 0;
@@ -61,19 +62,20 @@ void AudioExtractor::exportSelections()
qApp->processEvents();
// Open all input audio files:
- audiodata_t audiodata[audiofiles.size()];
+ auto audiofile_ids = instrument.getAudioFileList();
+ audiodata_t audiodata[audiofile_ids.size()];
int idx = 0;
- AudioFileList::iterator j = audiofiles.begin();
- while(j != audiofiles.end())
+ for(auto audiofile_id : audiofile_ids)
{
- QString file = j->first;
+ const auto& audiofile = instrument.getAudioFile(audiofile_id);
+ QString file = audiofile.getFile();
SF_INFO sf_info;
audiodata[idx].fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info);
if(!audiodata[idx].fh)
{
- printf("Load error '%s'\n", file.toStdString().c_str());
+ printf("AudioExtractor load error '%s'\n", file.toStdString().c_str());
return;
}
@@ -85,7 +87,6 @@ void AudioExtractor::exportSelections()
audiodata[idx].data = NULL;
- j++;
idx++;
}
@@ -127,7 +128,7 @@ void AudioExtractor::exportSelections()
// Read all input audio file chunks:
- for(int i = 0; i < audiofiles.size(); i++)
+ for(int i = 0; i < audiofile_ids.size(); i++)
{
// Clear out old buffer (if one exists)
if(audiodata[i].data)
@@ -175,23 +176,23 @@ void AudioExtractor::exportSelections()
SF_INFO sf_info;
sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
sf_info.samplerate = samplerate;
- sf_info.channels = audiofiles.size();
+ sf_info.channels = audiofile_ids.size();
SNDFILE *ofh = sf_open(file.toStdString().c_str(), SFM_WRITE, &sf_info);
if(!ofh)
{
- printf("Open for write error...\n");
+ printf("Open for write error. %s\n", file.toStdString().c_str());
return;
}
for(size_t ob = 0; ob < size; ob++)
{
- float obuf[audiofiles.size()];
- for(int ai = 0; ai < audiofiles.size(); ai++)
+ float obuf[audiofile_ids.size()];
+ for(int ai = 0; ai < audiofile_ids.size(); ai++)
{
obuf[ai] = audiodata[ai].data[ob];
}
- sf_write_float(ofh, obuf, audiofiles.size());
+ sf_write_float(ofh, obuf, audiofile_ids.size());
}
sf_close(ofh);
@@ -203,7 +204,7 @@ void AudioExtractor::exportSelections()
}
// Close all input audio files:
- for(int i = 0; i < audiofiles.size(); i++)
+ for(int i = 0; i < audiofile_ids.size(); i++)
{
if(audiodata[i].data)
{
@@ -219,13 +220,13 @@ void AudioExtractor::exportSelections()
doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
doc.appendChild(header);
- QDomElement instrument = doc.createElement("instrument");
- instrument.setAttribute("version", INSTRUMENT_VERSION);
- instrument.setAttribute("name", prefix);
- doc.appendChild(instrument);
+ QDomElement instrument_node = doc.createElement("instrument");
+ instrument_node.setAttribute("version", INSTRUMENT_VERSION);
+ instrument_node.setAttribute("name", prefix);
+ doc.appendChild(instrument_node);
QDomElement samples = doc.createElement("samples");
- instrument.appendChild(samples);
+ instrument_node.appendChild(samples);
{
// Do the adding to the xml file one sample at the time.
@@ -246,20 +247,21 @@ void AudioExtractor::exportSelections()
selections.update(*si, i);
int channelnum = 1; // Filechannel numbers are 1-based.
- AudioFileList::iterator j = audiofiles.begin();
- while(j != audiofiles.end())
+
+ for(auto audiofile_id : audiofile_ids)
{
- QString file = j->first;
- QString name = j->second;
-
- QDomElement audiofile = doc.createElement("audiofile");
- audiofile.setAttribute("file", "samples/" +
- QString::number(index) + "-" + prefix + ".wav");
- audiofile.setAttribute("channel", name);
- audiofile.setAttribute("filechannel", QString::number(channelnum));
- sample.appendChild(audiofile);
+ const auto& audiofile = instrument.getAudioFile(audiofile_id);
+
+ QString file = audiofile.getFile();
+ QString name = audiofile.getName();
+
+ QDomElement audiofile_node = doc.createElement("audiofile");
+ audiofile_node.setAttribute("file", "samples/" +
+ QString::number(index) + "-" + prefix + ".wav");
+ audiofile_node.setAttribute("channel", name);
+ audiofile_node.setAttribute("filechannel", QString::number(channelnum));
+ sample.appendChild(audiofile_node);
channelnum++;
- j++;
}
si++;
@@ -274,52 +276,3 @@ void AudioExtractor::exportSelections()
emit progressUpdate(progress++);
qApp->processEvents();
}
-
-void AudioExtractor::addFile(QString file, QString name)
-{
- QPair<QString, QString> pair;
- pair.first = file;
- pair.second = name;
- audiofiles.push_back(pair);
- instrument.setFileList(audiofiles);
-}
-
-void AudioExtractor::removeFile(QString file, QString name)
-{
- AudioFileList::iterator j = audiofiles.begin();
- while(j != audiofiles.end())
- {
- if(file == j->first/* && name == j->second*/)
- {
- audiofiles.erase(j);
- break;
- }
- j++;
- }
- instrument.setFileList(audiofiles);
-}
-
-void AudioExtractor::setOutputPrefix(const QString &p)
-{
- prefix = p;
-}
-
-void AudioExtractor::setExportPath(const QString &path)
-{
- exportpath = path;
-}
-
-void AudioExtractor::changeName(QString file, QString name)
-{
- AudioFileList::iterator j = audiofiles.begin();
- while(j != audiofiles.end())
- {
- if(file == j->first)
- {
- j->second = name;
- break;
- }
- j++;
- }
- instrument.setFileList(audiofiles);
-}