AudioFileReader.cpp
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 
3 /*
4  Sonic Visualiser
5  An audio file viewer and annotation editor.
6  Centre for Digital Music, Queen Mary, University of London.
7  This file copyright 2006 Chris Cannam.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #include "AudioFileReader.h"
17 
18 using std::vector;
19 
20 vector<floatvec_t>
22 {
23  floatvec_t interleaved = getInterleavedFrames(start, count);
24 
25  int channels = getChannelCount();
26  if (channels == 1) return { interleaved };
27 
28  sv_frame_t rc = interleaved.size() / channels;
29 
30  vector<floatvec_t> frames(channels, floatvec_t(rc, 0.f));
31 
32  for (int c = 0; c < channels; ++c) {
33  for (sv_frame_t i = 0; i < rc; ++i) {
34  frames[c][i] = interleaved[i * channels + c];
35  }
36  }
37 
38  return frames;
39 }
40 
int64_t sv_frame_t
Frame index, the unit of our time axis.
Definition: BaseTypes.h:31
virtual floatvec_t getInterleavedFrames(sv_frame_t start, sv_frame_t count) const =0
Return interleaved samples for count frames from index start.
std::vector< float, breakfastquay::StlAllocator< float > > floatvec_t
Definition: BaseTypes.h:53
virtual std::vector< floatvec_t > getDeInterleavedFrames(sv_frame_t start, sv_frame_t count) const
Return de-interleaved samples for count frames from index start.
int getChannelCount() const
Return the number of channels in the file.