annotate data/fileio/AudioFileReader.cpp @ 1078:ce82bcdc95d0

Fail upfront if the file is going to be too large. We expect the caller to split up large data sets into several MatrixFiles
author Chris Cannam
date Wed, 10 Jun 2015 13:10:26 +0100
parents 843f67be0ed9
children 4d9816ba0ebe
rev   line source
Chris@175 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@175 2
Chris@175 3 /*
Chris@175 4 Sonic Visualiser
Chris@175 5 An audio file viewer and annotation editor.
Chris@175 6 Centre for Digital Music, Queen Mary, University of London.
Chris@175 7 This file copyright 2006 Chris Cannam.
Chris@175 8
Chris@175 9 This program is free software; you can redistribute it and/or
Chris@175 10 modify it under the terms of the GNU General Public License as
Chris@175 11 published by the Free Software Foundation; either version 2 of the
Chris@175 12 License, or (at your option) any later version. See the file
Chris@175 13 COPYING included with this distribution for more information.
Chris@175 14 */
Chris@175 15
Chris@175 16 #include "AudioFileReader.h"
Chris@175 17
Chris@1041 18 using std::vector;
Chris@1041 19
Chris@1041 20 vector<SampleBlock>
Chris@1041 21 AudioFileReader::getDeInterleavedFrames(sv_frame_t start, sv_frame_t count) const
Chris@327 22 {
Chris@1041 23 SampleBlock interleaved = getInterleavedFrames(start, count);
Chris@327 24
Chris@929 25 int channels = getChannelCount();
Chris@1038 26 sv_frame_t rc = interleaved.size() / channels;
Chris@327 27
Chris@1041 28 vector<SampleBlock> frames(channels, SampleBlock(rc, 0.f));
Chris@1041 29
Chris@929 30 for (int c = 0; c < channels; ++c) {
Chris@1041 31 for (sv_frame_t i = 0; i < rc; ++i) {
Chris@1041 32 frames[c][i] = interleaved[i * channels + c];
Chris@1041 33 }
Chris@327 34 }
Chris@327 35
Chris@1041 36 return frames;
Chris@327 37 }
Chris@327 38