From e51fc4029d9142d036d7c815665555315233d35a Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 12 Jan 2023 15:18:16 +0300 Subject: [PATCH] Add midi note to frequency converter --- examples/audio.cpp | 3 ++- libs/audio/include/psemek/audio/midi.hpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 libs/audio/include/psemek/audio/midi.hpp diff --git a/examples/audio.cpp b/examples/audio.cpp index 90a48c1a..4da79e78 100644 --- a/examples/audio.cpp +++ b/examples/audio.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -101,7 +102,7 @@ struct audio_app int midi = key_to_midi.at(key); if (!channels_.contains(midi)) { - auto tone = audio::karplus_strong(440.f * std::pow(2.f, (midi - 69) / 12.f)); + auto tone = audio::karplus_strong(audio::midi_frequency(midi)); tone = audio::distortion(std::move(tone), 4.f); channels_[midi] = mixer_->add(audio::fade_in(tone, 0.005f)); } diff --git a/libs/audio/include/psemek/audio/midi.hpp b/libs/audio/include/psemek/audio/midi.hpp new file mode 100644 index 00000000..f953bf26 --- /dev/null +++ b/libs/audio/include/psemek/audio/midi.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace psemek::audio +{ + + inline float midi_frequency(float note) + { + return 440.f * std::pow(2.f, (note - 69.f) / 12.f); + } + +}