void ChannelMappingNode::updateSettings() { if (getNumInputs() > 0) channelBuffer.setSize(getNumInputs(), 10000); if (editorIsConfigured) { OwnedArray<Channel> oldChannels; oldChannels.swapWith(channels); channels.clear(); Array<bool> recordStates; settings.numOutputs = 0; for (int i = 0; i < getNumInputs(); i++) { if ((enabledChannelArray[channelArray[i]]) && (channelArray[i] < oldChannels.size())) { oldChannels[channelArray[i]]->mappedIndex = settings.numOutputs; channels.add(oldChannels[channelArray[i]]); recordStates.add(oldChannels[i]->getRecordState()); settings.numOutputs++; } } oldChannels.clearQuick(false); for (int i = 0; i < settings.numOutputs; i++) { channels[i]->setRecordState(recordStates[i]); } } }
bool BufferingAudioReader::readNextBufferChunk() { const int64 pos = nextReadPosition; const int64 startPos = ((pos - 1024) / samplesPerBlock) * samplesPerBlock; const int64 endPos = startPos + numBlocks * samplesPerBlock; OwnedArray<BufferedBlock> newBlocks; for (int i = blocks.size(); --i >= 0;) if (blocks.getUnchecked(i)->range.intersects (Range<int64> (startPos, endPos))) newBlocks.add (blocks.getUnchecked(i)); if (newBlocks.size() == numBlocks) { newBlocks.clear (false); return false; } for (int64 p = startPos; p < endPos; p += samplesPerBlock) { if (getBlockContaining (p) == nullptr) { newBlocks.add (new BufferedBlock (*source, p, samplesPerBlock)); break; // just do one block } } { const ScopedLock sl (lock); newBlocks.swapWith (blocks); } for (int i = blocks.size(); --i >= 0;) newBlocks.removeObject (blocks.getUnchecked(i), false); return true; }