paf basics
This commit is contained in:
parent
c5b21c4173
commit
8af281255c
3 changed files with 34 additions and 28 deletions
|
|
@ -276,37 +276,36 @@ protected:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioTestApp : public AudioAppBase
|
#include "src/memllib/synth/maxiPAF.hpp"
|
||||||
|
|
||||||
|
class PAFSynthApp : public AudioAppBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static constexpr size_t kN_Params = 10;
|
static constexpr size_t kN_Params = 10;
|
||||||
|
|
||||||
AudioTestApp() : AudioAppBase() {}
|
PAFSynthApp() : AudioAppBase() {}
|
||||||
|
|
||||||
stereosample_t Process(const stereosample_t x) override
|
stereosample_t Process(const stereosample_t x) override
|
||||||
{
|
{
|
||||||
if (frame++ == 48000) {
|
float x1[1];
|
||||||
frame = 0;
|
// paf0.vfr(2,0);
|
||||||
nSines++;
|
// paf0.vib(frame * 0.0001,0);
|
||||||
nSinesRcpr = 1.f/nSines;
|
paf0.play(x1, 1);
|
||||||
Serial.printf("N: %d\n", nSines);
|
float y = x1[0];
|
||||||
}
|
|
||||||
float y = 0.f;
|
|
||||||
float freq=200;
|
|
||||||
for(size_t i=0; i < nSines; i++) {
|
|
||||||
y += oscs[i].sinebuf(freq);
|
|
||||||
freq+=10;
|
|
||||||
}
|
|
||||||
y *= nSinesRcpr;
|
|
||||||
stereosample_t ret { y, y };
|
stereosample_t ret { y, y };
|
||||||
|
frame++;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Setup(float sample_rate, std::shared_ptr<InterfaceBase> interface) override
|
void Setup(float sample_rate, std::shared_ptr<InterfaceBase> interface) override
|
||||||
{
|
{
|
||||||
AudioAppBase::Setup(sample_rate, interface);
|
AudioAppBase::Setup(sample_rate, interface);
|
||||||
oscs.resize(500);
|
paf0.init();
|
||||||
// Additional setup code specific to FMSynthAudioApp
|
paf0.setsr(maxiSettings::getSampleRate(), 1);
|
||||||
|
paf0.freq(200, 0);
|
||||||
|
paf0.amp(1,0);
|
||||||
|
paf0.bw(2000,0);
|
||||||
|
// paf0.vib(2,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessParams(const std::vector<float>& params) override
|
void ProcessParams(const std::vector<float>& params) override
|
||||||
|
|
@ -318,12 +317,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
maxiOsc osc1;
|
|
||||||
std::vector<maxiOsc> oscs;
|
maxiPAFOperator paf0;
|
||||||
size_t frame=0;
|
|
||||||
size_t nSines=1;
|
float frame=0;
|
||||||
float nSinesRcpr=1;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -332,7 +329,7 @@ protected:
|
||||||
|
|
||||||
// Global objects
|
// Global objects
|
||||||
std::shared_ptr<IMLInterface> interface;
|
std::shared_ptr<IMLInterface> interface;
|
||||||
std::shared_ptr<AudioTestApp> audio_app;
|
std::shared_ptr<PAFSynthApp> audio_app;
|
||||||
|
|
||||||
// Inter-core communication
|
// Inter-core communication
|
||||||
volatile bool core_0_ready = false;
|
volatile bool core_0_ready = false;
|
||||||
|
|
@ -409,7 +406,7 @@ void setup()
|
||||||
// Setup interface with memory barrier protection
|
// Setup interface with memory barrier protection
|
||||||
{
|
{
|
||||||
auto temp_interface = std::make_shared<IMLInterface>();
|
auto temp_interface = std::make_shared<IMLInterface>();
|
||||||
temp_interface->setup(kN_InputParams, AudioTestApp::kN_Params);
|
temp_interface->setup(kN_InputParams, PAFSynthApp::kN_Params);
|
||||||
MEMORY_BARRIER();
|
MEMORY_BARRIER();
|
||||||
interface = temp_interface;
|
interface = temp_interface;
|
||||||
MEMORY_BARRIER();
|
MEMORY_BARRIER();
|
||||||
|
|
@ -459,7 +456,7 @@ void setup1()
|
||||||
|
|
||||||
// Create audio app with memory barrier protection
|
// Create audio app with memory barrier protection
|
||||||
{
|
{
|
||||||
auto temp_audio_app = std::make_shared<AudioTestApp>();
|
auto temp_audio_app = std::make_shared<PAFSynthApp>();
|
||||||
temp_audio_app->Setup(AudioDriver::GetSampleRate(), interface);
|
temp_audio_app->Setup(AudioDriver::GetSampleRate(), interface);
|
||||||
MEMORY_BARRIER();
|
MEMORY_BARRIER();
|
||||||
audio_app = temp_audio_app;
|
audio_app = temp_audio_app;
|
||||||
|
|
@ -483,3 +480,12 @@ void loop1()
|
||||||
// Audio app parameter processing loop
|
// Audio app parameter processing loop
|
||||||
audio_app->loop();
|
audio_app->loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" int getentropy (void * buffer, size_t how_many) {
|
||||||
|
uint8_t* pBuf = (uint8_t*) buffer;
|
||||||
|
while(how_many--) {
|
||||||
|
uint8_t rand_val = rp2040.hwrand32() % UINT8_MAX;
|
||||||
|
*pBuf++ = rand_val;
|
||||||
|
}
|
||||||
|
return 0; // return "no error". Can also do EFAULT, EIO, ENOSYS
|
||||||
|
}
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7ff955e9ce70ec465174d234863ac50c6bff6386
|
Subproject commit add49658f8514b5bb06352b1a1fe5402ea2501ce
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4aaf6f596ca789d5c95f84633f92bc806d76af30
|
Subproject commit 85e9c78cf8c5e22ba14fe3f5cddbf2cf14446f53
|
||||||
Loading…
Reference in a new issue