|
@@ -55,18 +55,37 @@ struct alignas(32) Port { |
|
|
return isConnected() ? getPolyVoltage(channel) : normalVoltage; |
|
|
return isConnected() ? getPolyVoltage(channel) : normalVoltage; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** Reads all voltage values from an array of size `channels` */ |
|
|
|
|
|
void setVoltages(const float *voltages) { |
|
|
|
|
|
|
|
|
/** Returns a pointer to the array of voltages beginning with firstChannel. |
|
|
|
|
|
The pointer can be used for reading and writing. |
|
|
|
|
|
Useful for SIMD. |
|
|
|
|
|
*/ |
|
|
|
|
|
float *getVoltages(int firstChannel = 0) { |
|
|
|
|
|
return &voltages[firstChannel]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** Copies the port's voltages to an array of size at least `channels`. */ |
|
|
|
|
|
void readVoltages(float *v) { |
|
|
|
|
|
for (int c = 0; c < channels; c++) { |
|
|
|
|
|
v[c] = voltages[c]; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** Copies an array of size at least `channels` to the port's voltages. |
|
|
|
|
|
Remember to set the number of channels *before* calling this method. |
|
|
|
|
|
*/ |
|
|
|
|
|
void writeVoltages(const float *v) { |
|
|
for (int c = 0; c < channels; c++) { |
|
|
for (int c = 0; c < channels; c++) { |
|
|
this->voltages[c] = voltages[c]; |
|
|
|
|
|
|
|
|
voltages[c] = v[c]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** Writes all voltage values to an array of size `channels` */ |
|
|
|
|
|
void getVoltages(float *voltages) { |
|
|
|
|
|
|
|
|
/** Returns the sum of all voltages. */ |
|
|
|
|
|
float getVoltageSum() { |
|
|
|
|
|
float sum = 0.f; |
|
|
for (int c = 0; c < channels; c++) { |
|
|
for (int c = 0; c < channels; c++) { |
|
|
voltages[c] = this->voltages[c]; |
|
|
|
|
|
|
|
|
sum += voltages[c]; |
|
|
} |
|
|
} |
|
|
|
|
|
return sum; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** Sets the number of polyphony channels. */ |
|
|
/** Sets the number of polyphony channels. */ |
|
|