+ assert(start_sample >= 0);
+ assert(start_sample < (int64_t)_sample_count);
+ assert(end_sample >= 0);
+ assert(end_sample < (int64_t)_sample_count);
+ assert(start_sample <= end_sample);
+
+ lock_guard<recursive_mutex> lock(_mutex);
+
+ float *const data = new float[end_sample - start_sample];
+ memcpy(data, (float*)_data + start_sample, sizeof(float) *
+ (end_sample - start_sample));
+ return data;