comparison runner/MultiplexedReader.cpp @ 288:fd4a6183482f kapoor_1202

Merge from branch piper-nopiper. The next release will be based on this.
author Chris Cannam
date Fri, 02 Dec 2016 10:04:44 +0000
parents 68dc2d99a5b1
children 6122159556bd
comparison
equal deleted inserted replaced
259:9e7d180be225 288:fd4a6183482f
18 MultiplexedReader::MultiplexedReader(QList<AudioFileReader *> readers) : 18 MultiplexedReader::MultiplexedReader(QList<AudioFileReader *> readers) :
19 m_readers(readers) 19 m_readers(readers)
20 { 20 {
21 m_channelCount = readers.size(); 21 m_channelCount = readers.size();
22 m_sampleRate = readers[0]->getSampleRate(); 22 m_sampleRate = readers[0]->getSampleRate();
23
24 SVDEBUG << "MultiplexedReader: channel count: " << m_channelCount
25 << " (i.e. " << m_channelCount << " reader(s) to multiplex)" << endl;
26 SVDEBUG << "MultiplexedReader: sample rate from first reader: "
27 << m_sampleRate << endl;
23 28
24 m_frameCount = 0; 29 m_frameCount = 0;
25 m_quicklySeekable = true; 30 m_quicklySeekable = true;
26 31
27 foreach (AudioFileReader *r, m_readers) { 32 foreach (AudioFileReader *r, m_readers) {
47 foreach (AudioFileReader *r, m_readers) { 52 foreach (AudioFileReader *r, m_readers) {
48 delete r; 53 delete r;
49 } 54 }
50 } 55 }
51 56
52 SampleBlock 57 std::vector<float>
53 MultiplexedReader::getInterleavedFrames(sv_frame_t start, sv_frame_t frameCount) const 58 MultiplexedReader::getInterleavedFrames(sv_frame_t start, sv_frame_t frameCount) const
54 { 59 {
55 int out_chans = m_readers.size(); 60 int out_chans = m_readers.size();
56 61
57 // Allocate and zero 62 // Allocate and zero
58 SampleBlock block(frameCount * out_chans, 0.f); 63 std::vector<float> block(frameCount * out_chans, 0.f);
59 64
60 for (int out_chan = 0; out_chan < out_chans; ++out_chan) { 65 for (int out_chan = 0; out_chan < out_chans; ++out_chan) {
61 66
62 AudioFileReader *reader = m_readers[out_chan]; 67 AudioFileReader *reader = m_readers[out_chan];
63 SampleBlock readerBlock = reader->getInterleavedFrames(start, frameCount); 68 auto readerBlock = reader->getInterleavedFrames(start, frameCount);
64 69
65 int in_chans = reader->getChannelCount(); 70 int in_chans = reader->getChannelCount();
66 71
67 for (int frame = 0; frame < frameCount; ++frame) { 72 for (int frame = 0; frame < frameCount; ++frame) {
68 73