| 292 | } |
| 293 | |
| 294 | void MultitrackRecorderTrack::Process(double time) |
| 295 | { |
| 296 | int numChannels = GetBuffer()->NumActiveChannels(); |
| 297 | for (size_t i = 0; i < mRecordChunks.size(); ++i) |
| 298 | { |
| 299 | if (mRecordChunks[i]->NumActiveChannels() > numChannels) |
| 300 | numChannels = mRecordChunks[i]->NumActiveChannels(); |
| 301 | } |
| 302 | |
| 303 | ComputeSliders(0); |
| 304 | SyncBuffers(numChannels); |
| 305 | |
| 306 | if (mDoRecording) |
| 307 | { |
| 308 | for (size_t i = 0; i < mRecordChunks.size(); ++i) |
| 309 | mRecordChunks[i]->SetNumActiveChannels(numChannels); |
| 310 | |
| 311 | for (int i = 0; i < GetBuffer()->BufferSize(); ++i) |
| 312 | { |
| 313 | int chunkIndex = mRecordingLength / kRecordingChunkSize; |
| 314 | int chunkPos = mRecordingLength % kRecordingChunkSize; |
| 315 | for (int ch = 0; ch < numChannels; ++ch) |
| 316 | mRecordChunks[chunkIndex]->GetChannel(ch)[chunkPos] = GetBuffer()->GetChannel(MIN(ch, GetBuffer()->NumActiveChannels() - 1))[i]; |
| 317 | ++mRecordingLength; |
| 318 | } |
| 319 | } |
| 320 | |
| 321 | if (GetTarget()) |
| 322 | { |
| 323 | for (int ch = 0; ch < GetTarget()->GetBuffer()->NumActiveChannels(); ++ch) |
| 324 | { |
| 325 | float* buffer = GetBuffer()->GetChannel(MIN(ch, GetBuffer()->NumActiveChannels() - 1)); |
| 326 | Add(GetTarget()->GetBuffer()->GetChannel(ch), buffer, GetBuffer()->BufferSize()); |
| 327 | GetVizBuffer()->WriteChunk(buffer, GetBuffer()->BufferSize(), MIN(ch, GetVizBuffer()->NumChannels() - 1)); |
| 328 | } |
| 329 | } |
| 330 | |
| 331 | GetBuffer()->Reset(); |
| 332 | } |
| 333 | |
| 334 | void MultitrackRecorderTrack::Poll() |
| 335 | { |
nothing calls this directly
no test coverage detected