Browse Source

main_perkons.cc restructure

main
heck 7 months ago
parent
commit
e3fa4dc6f2
  1. 110
      src/main_perkons.cc

110
src/main_perkons.cc

@ -14,6 +14,10 @@
#define TRACK_COUNT 4 #define TRACK_COUNT 4
namespace Heck {
// =============================================================================================
// INIT
// =============================================================================================
using namespace daisy; using namespace daisy;
using namespace daisysp; using namespace daisysp;
@ -21,46 +25,22 @@ static DaisySeed hw{};
static MidiUartHandler midi{}; static MidiUartHandler midi{};
static FIFO<MidiEvent, 128> event_log{}; static FIFO<MidiEvent, 128> event_log{};
Heck::Instrument::Noise instrument0{}; Instrument::Noise instrument0{};
Heck::Instrument::FM instrument1{}; Instrument::FM instrument1{};
Heck::Instrument::FM instrument2{}; Instrument::FM instrument2{};
Heck::Instrument::Kick instrument3{}; Instrument::Kick instrument3{};
std::array<std::shared_ptr<PerkonsInstrumentInterface>, TRACK_COUNT> tracks{}; std::array<std::shared_ptr<PerkonsInstrumentInterface>, TRACK_COUNT> tracks{};
// function prototypes
int create_tracks(float samplerate);
void AudioCallback( void AudioCallback(
AudioHandle::InterleavingInputBuffer in, AudioHandle::InterleavingInputBuffer in,
AudioHandle::InterleavingOutputBuffer out, AudioHandle::InterleavingOutputBuffer out,
size_t size) size_t size);
{
float sig_out{};
for (size_t i = 0; i < size; i += 2) {
for (int i = 0; i < TRACK_COUNT; i++) {
sig_out += tracks[i]->nextsample();
}
sig_out *= 0.1;
out[i] = sig_out;
out[i + 1] = sig_out;
}
}
int create_tracks(float samplerate) void init()
{
instrument0.init(samplerate);
tracks[0] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument0);
instrument1.init(samplerate);
tracks[1] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument1);
instrument2.init(samplerate);
tracks[2] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument2);
instrument3.init(samplerate);
tracks[3] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument3);
return 0;
}
int main(void)
{ {
int* npt = nullptr; int* npt = nullptr;
int i = *npt; int i = *npt;
@ -69,12 +49,6 @@ int main(void)
hw.Init(); hw.Init();
hw.StartLog(true); hw.StartLog(true);
uint32_t now = System::GetNow();
uint32_t log_time{};
bool heartbeat_led_state{ false };
uint32_t heartbeat_time{};
// Start Audio // Start Audio
hw.SetAudioBlockSize(4); hw.SetAudioBlockSize(4);
float samplerate = hw.AudioSampleRate(); float samplerate = hw.AudioSampleRate();
@ -90,10 +64,10 @@ int main(void)
hw.PrintLine("Setting up MIDI"); hw.PrintLine("Setting up MIDI");
MidiUartHandler::Config midi_config; MidiUartHandler::Config midi_config;
midi.Init(midi_config); midi.Init(midi_config);
uint32_t systick_last_rt_msg{}; u32 systick_last_rt_msg{};
midi.realtime_callback = [&systick_last_rt_msg](MidiEvent& msg) { midi.realtime_callback = [&systick_last_rt_msg](MidiEvent& msg) {
uint32_t systick_now = System::GetNow(); u32 systick_now = System::GetNow();
uint32_t systick_since_last = systick_now - systick_last_rt_msg; u32 systick_since_last = systick_now - systick_last_rt_msg;
systick_last_rt_msg = systick_now; systick_last_rt_msg = systick_now;
char outstr[128]; char outstr[128];
@ -114,6 +88,52 @@ int main(void)
midi.Listen(); midi.Listen();
hw.PrintLine("Entering MainLoop"); hw.PrintLine("Entering MainLoop");
}
int create_tracks(float samplerate)
{
instrument0.init(samplerate);
tracks[0] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument0);
instrument1.init(samplerate);
tracks[1] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument1);
instrument2.init(samplerate);
tracks[2] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument2);
instrument3.init(samplerate);
tracks[3] = std::shared_ptr<PerkonsInstrumentInterface>(&instrument3);
return 0;
}
// =============================================================================================
// RUN
// =============================================================================================
void AudioCallback(
AudioHandle::InterleavingInputBuffer in,
AudioHandle::InterleavingOutputBuffer out,
size_t size)
{
float sig_out{};
for (size_t i = 0; i < size; i += 2) {
for (int i = 0; i < TRACK_COUNT; i++) {
sig_out += tracks[i]->nextsample();
}
sig_out *= 0.1;
out[i] = sig_out;
out[i + 1] = sig_out;
}
}
void mainloop()
{
u32 now = System::GetNow();
u32 log_time{};
bool heartbeat_led_state{ false };
u32 heartbeat_time{};
while (1) { while (1) {
now = System::GetNow(); now = System::GetNow();
while (midi.HasEvents()) { while (midi.HasEvents()) {
@ -157,3 +177,11 @@ int main(void)
} }
} }
} }
} // namespace Heck
int main()
{
Heck::init();
Heck::mainloop();
}
Loading…
Cancel
Save