Mercurial > hg > svcore
diff data/fileio/WavFileWriter.cpp @ 1126:39019ce29178 tony-2.0-integration
Merge through to branch for Tony 2.0
author | Chris Cannam |
---|---|
date | Thu, 20 Aug 2015 14:54:21 +0100 |
parents | 4d9816ba0ebe |
children | 3aea4f7617bb |
line wrap: on
line diff
--- a/data/fileio/WavFileWriter.cpp Fri Aug 14 18:16:14 2015 +0100 +++ b/data/fileio/WavFileWriter.cpp Thu Aug 20 14:54:21 2015 +0100 @@ -25,6 +25,8 @@ #include <iostream> #include <cmath> +using namespace std; + WavFileWriter::WavFileWriter(QString path, sv_samplerate_t sampleRate, int channels, @@ -129,8 +131,6 @@ } sv_frame_t bs = 2048; - float *ub = new float[bs]; // uninterleaved buffer (one channel) - float *ib = new float[bs * m_channels]; // interleaved buffer for (MultiSelection::SelectionList::iterator i = selection->getSelections().begin(); @@ -140,16 +140,17 @@ for (sv_frame_t f = f0; f < f1; f += bs) { - sv_frame_t n = std::min(bs, f1 - f); + sv_frame_t n = min(bs, f1 - f); + vector<float> interleaved(n * m_channels, 0.f); for (int c = 0; c < int(m_channels); ++c) { - source->getData(c, f, n, ub); - for (int i = 0; i < n; ++i) { - ib[i * m_channels + c] = ub[i]; + vector<float> chanbuf = source->getData(c, f, n); + for (int i = 0; in_range_for(chanbuf, i); ++i) { + interleaved[i * m_channels + c] = chanbuf[i]; } } - sf_count_t written = sf_writef_float(m_file, ib, n); + sf_count_t written = sf_writef_float(m_file, interleaved.data(), n); if (written < n) { m_error = QString("Only wrote %1 of %2 frames at file frame %3") @@ -159,8 +160,6 @@ } } - delete[] ub; - delete[] ib; if (ownSelection) delete selection; return isOK();