Add midi note to frequency converter
This commit is contained in:
parent
292ccadc7e
commit
e51fc4029d
2 changed files with 15 additions and 1 deletions
|
|
@ -16,6 +16,7 @@
|
||||||
#include <psemek/audio/combine/duplicate.hpp>
|
#include <psemek/audio/combine/duplicate.hpp>
|
||||||
#include <psemek/audio/combine/stereo.hpp>
|
#include <psemek/audio/combine/stereo.hpp>
|
||||||
#include <psemek/audio/combine/mixer.hpp>
|
#include <psemek/audio/combine/mixer.hpp>
|
||||||
|
#include <psemek/audio/midi.hpp>
|
||||||
#include <psemek/app/app.hpp>
|
#include <psemek/app/app.hpp>
|
||||||
#include <psemek/app/main.hpp>
|
#include <psemek/app/main.hpp>
|
||||||
#include <psemek/gfx/painter.hpp>
|
#include <psemek/gfx/painter.hpp>
|
||||||
|
|
@ -101,7 +102,7 @@ struct audio_app
|
||||||
int midi = key_to_midi.at(key);
|
int midi = key_to_midi.at(key);
|
||||||
if (!channels_.contains(midi))
|
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);
|
tone = audio::distortion(std::move(tone), 4.f);
|
||||||
channels_[midi] = mixer_->add(audio::fade_in(tone, 0.005f));
|
channels_[midi] = mixer_->add(audio::fade_in(tone, 0.005f));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
13
libs/audio/include/psemek/audio/midi.hpp
Normal file
13
libs/audio/include/psemek/audio/midi.hpp
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
namespace psemek::audio
|
||||||
|
{
|
||||||
|
|
||||||
|
inline float midi_frequency(float note)
|
||||||
|
{
|
||||||
|
return 440.f * std::pow(2.f, (note - 69.f) / 12.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue