Updated the constants to please Clang

This commit is contained in:
paulfd 2019-08-24 15:50:55 +02:00
parent a798ac7393
commit 99c3e8878f
2 changed files with 34 additions and 35 deletions

View file

@ -112,6 +112,9 @@ inline float midiNoteFrequency(const int noteNumber)
return 440.0f * std::pow(2.0f, (noteNumber - 69) / 12.0f); return 440.0f * std::pow(2.0f, (noteNumber - 69) / 12.0f);
} }
constexpr double pi() { return std::acos(-1); } template<class Type>
constexpr double twoPi() { return 2*pi(); } constexpr Type pi { 3.141592653589793238462643383279502884 };
constexpr double piTwo() { return pi()/2; } template<class Type>
constexpr Type twoPi { 2*pi<Type> };
template<class Type>
constexpr Type piTwo { pi<Type>/2 };

View file

@ -1,30 +1,29 @@
#pragma once #pragma once
#include "ADSREnvelope.h" #include "ADSREnvelope.h"
#include "StereoBuffer.h"
#include "StereoSpan.h"
#include "Globals.h" #include "Globals.h"
#include "Region.h" #include "Region.h"
#include "absl/types/span.h"
#include "SIMDHelpers.h" #include "SIMDHelpers.h"
#include "SfzHelpers.h" #include "SfzHelpers.h"
#include "StereoBuffer.h"
#include "StereoSpan.h"
#include "absl/types/span.h"
#include <atomic> #include <atomic>
#include <memory> #include <memory>
namespace sfz namespace sfz {
{ class Voice {
class Voice
{
public: public:
Voice() = delete; Voice() = delete;
Voice(const CCValueArray &ccState) Voice(const CCValueArray& ccState)
: ccState(ccState) {} : ccState(ccState)
enum class TriggerType
{ {
}
enum class TriggerType {
NoteOn, NoteOn,
NoteOff, NoteOff,
CC CC
}; };
void startVoice(Region *region, int delay, int channel, int number, uint8_t value, TriggerType triggerType) void startVoice(Region* region, int delay, int channel, int number, uint8_t value, TriggerType triggerType)
{ {
this->triggerType = triggerType; this->triggerType = triggerType;
triggerNumber = number; triggerNumber = number;
@ -75,13 +74,13 @@ public:
return (region == nullptr); return (region == nullptr);
} }
void registerNoteOff(int delay, int channel, int noteNumber, uint8_t velocity[[maybe_unused]]) void registerNoteOff(int delay, int channel, int noteNumber, uint8_t velocity [[maybe_unused]])
{ {
if (state == State::playing && triggerChannel == channel && triggerNumber == noteNumber) if (state == State::playing && triggerChannel == channel && triggerNumber == noteNumber)
egEnvelope.startRelease(delay); egEnvelope.startRelease(delay);
} }
void registerCC(int delay[[maybe_unused]], int channel[[maybe_unused]], int ccNumber[[maybe_unused]], uint8_t ccValue[[maybe_unused]]) void registerCC(int delay [[maybe_unused]], int channel [[maybe_unused]], int ccNumber [[maybe_unused]], uint8_t ccValue [[maybe_unused]])
{ {
} }
@ -126,7 +125,7 @@ public:
void fillWithData(StereoSpan<float> buffer) void fillWithData(StereoSpan<float> buffer)
{ {
StereoSpan<const float> source([&]() -> StereoBuffer<float> & { const StereoSpan<const float> source([&]() -> StereoBuffer<float>& {
if (dataReady) if (dataReady)
return *fileData; return *fileData;
else else
@ -145,17 +144,16 @@ public:
if (region->sample != "*sine") if (region->sample != "*sine")
return; return;
float step = baseFrequency * twoPi() / sampleRate; float step = baseFrequency * twoPi<float> / sampleRate;
::linearRamp<float>(tempSpan1.first(buffer.size()), sourcePosition * step, step); ::linearRamp<float>(tempSpan1.first(buffer.size()), sourcePosition * step, step);
::sin<float>(tempSpan1, buffer.left()); ::sin<float>(tempSpan1, buffer.left());
absl::c_copy(buffer.left(), buffer.right().begin()); absl::c_copy(buffer.left(), buffer.right().begin());
sourcePosition += buffer.size(); sourcePosition += buffer.size();
} }
bool checkOffGroup(int delay[[maybe_unused]], uint32_t group) noexcept bool checkOffGroup(int delay [[maybe_unused]], uint32_t group) noexcept
{ {
if (region != nullptr && triggerType == TriggerType::NoteOn && region->offBy && *region->offBy == group) if (region != nullptr && triggerType == TriggerType::NoteOn && region->offBy && *region->offBy == group) {
{
// TODO: release // TODO: release
return true; return true;
} }
@ -185,8 +183,7 @@ public:
void reset() void reset()
{ {
if (region != nullptr) if (region != nullptr) {
{
DBG("Reset voice with sample " << region->sample); DBG("Reset voice with sample " << region->sample);
} }
region = nullptr; region = nullptr;
@ -195,10 +192,9 @@ public:
} }
private: private:
Region *region; Region* region;
enum class State enum class State {
{
idle, idle,
playing, playing,
release release
@ -210,10 +206,10 @@ private:
int triggerChannel; int triggerChannel;
uint8_t triggerValue; uint8_t triggerValue;
float speedRatio{1.0}; float speedRatio { 1.0 };
float pitchRatio{1.0}; float pitchRatio { 1.0 };
float baseGain{1.0}; float baseGain { 1.0 };
float baseFrequency{440.0}; float baseFrequency { 440.0 };
uint32_t sourcePosition; uint32_t sourcePosition;
uint32_t initialDelay; uint32_t initialDelay;
@ -223,13 +219,13 @@ private:
Buffer<float> tempBuffer1; Buffer<float> tempBuffer1;
Buffer<float> tempBuffer2; Buffer<float> tempBuffer2;
absl::Span<float> tempSpan1{absl::MakeSpan(tempBuffer1)}; absl::Span<float> tempSpan1 { absl::MakeSpan(tempBuffer1) };
absl::Span<float> tempSpan2{absl::MakeSpan(tempBuffer2)}; absl::Span<float> tempSpan2 { absl::MakeSpan(tempBuffer2) };
int samplesPerBlock{config::defaultSamplesPerBlock}; int samplesPerBlock { config::defaultSamplesPerBlock };
double sampleRate{config::defaultSampleRate}; double sampleRate { config::defaultSampleRate };
const CCValueArray &ccState; const CCValueArray& ccState;
ADSREnvelope<float> egEnvelope; ADSREnvelope<float> egEnvelope;
}; };