Skip to content

Commit

Permalink
Merge pull request #94 from mebitek/feature_22
Browse files Browse the repository at this point in the history
Feature 22
  • Loading branch information
mebitek committed Mar 20, 2024
2 parents 5a8cf87 + 0adcf88 commit 957af36
Show file tree
Hide file tree
Showing 74 changed files with 6,161 additions and 253 deletions.
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
@@ -1,6 +1,6 @@
# These are supported funding model platforms

github: mebitek
github: #
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,21 @@
# Changelog

# v0.2.2 (20 March 2024)
- Logic Track
- per step gate logic operators
- per step note logic operators
- fix shift steps feature [@glibersat](https://github.com/glibersat)
- step recorder "move step forward" shortcuts
- step recorder "current step" cv routable, respond to gate (5ms)
- curve track cv contrallable min and max
- Overview page improvements
- add trigger curve shape
- add filter note parameter

> **testers** :
>
> mebitek, Jil, Guillaume Libersat, Andreas Hieninger, P.M. Lenneskog
# v0.2.1 (4 March 2024)
- issue #80 - Repeat Function Issue - Metropolix Mode
- issue #82 - Fatal error when pressing STEP button and turning encoder
Expand All @@ -8,6 +24,10 @@
- issue #90 - the first note is never recorded
- fix user settings

> **testers** :
>
> mebitek, Jil, Andreas Hieninger
# v0.2.0 (29 Febrary 2024)
- Stochastic Track
- global octave modifier
Expand Down
5 changes: 5 additions & 0 deletions src/apps/sequencer/CMakeLists.txt
Expand Up @@ -15,6 +15,7 @@ set(sources
engine/MidiOutputEngine.cpp
engine/NoteTrackEngine.cpp
engine/StochasticEngine.cpp
engine/LogicTrackEngine.cpp
engine/RoutingEngine.cpp
engine/SequenceState.cpp
# engine/generators
Expand All @@ -41,6 +42,8 @@ set(sources
model/NoteTrack.cpp
model/StochasticSequence.cpp
model/StochasticTrack.cpp
model/LogicSequence.cpp
model/LogicTrack.cpp
model/PlayState.cpp
model/Project.cpp
model/Routing.cpp
Expand Down Expand Up @@ -89,6 +92,8 @@ set(sources
ui/pages/NoteSequencePage.cpp
ui/pages/StochasticSequencePage.cpp
ui/pages/StochasticSequenceEditPage.cpp
ui/pages/LogicSequenceEditPage.cpp
ui/pages/LogicSequencePage.cpp
ui/pages/OverviewPage.cpp
ui/pages/PatternPage.cpp
ui/pages/PerformerPage.cpp
Expand Down
2 changes: 1 addition & 1 deletion src/apps/sequencer/Config.h
Expand Up @@ -7,7 +7,7 @@
#define CONFIG_VERSION_NAME "PER|FORMER SEQUENCER"
#define CONFIG_VERSION_MAJOR 0
#define CONFIG_VERSION_MINOR 2
#define CONFIG_VERSION_REVISION 1
#define CONFIG_VERSION_REVISION 2

// Task priorities
#define CONFIG_DRIVER_TASK_PRIORITY 5
Expand Down
2 changes: 1 addition & 1 deletion src/apps/sequencer/Sequencer.cpp
Expand Up @@ -150,7 +150,7 @@ static void assert_handler(const char *filename, int line, const char *msg) {

int main(void) {
System::init();
System::startWatchdog(1000);
System::startWatchdog(500);
Console::init();
HighResolutionTimer::init();

Expand Down
7 changes: 6 additions & 1 deletion src/apps/sequencer/engine/CurveTrackEngine.cpp
Expand Up @@ -228,7 +228,12 @@ void CurveTrackEngine::updateOutput(uint32_t relativeTick, uint32_t divisor) {

float value = evalStepShape(step, _shapeVariation || fillVariation, fillInvert, _currentStepFraction, _sequenceState.direction());
value = range.denormalize(value);
_cvOutputTarget = value;

float min = float(_curveTrack.min()) / CurveSequence::Min::Max;
float max = float(_curveTrack.max()) / CurveSequence::Max::Max;


_cvOutputTarget = min + value * (max - min);
}

_engine.midiOutputEngine().sendCv(_track.trackIndex(), _cvOutputTarget);
Expand Down
2 changes: 1 addition & 1 deletion src/apps/sequencer/engine/CurveTrackEngine.h
Expand Up @@ -9,7 +9,7 @@

class CurveTrackEngine : public TrackEngine {
public:
CurveTrackEngine(Engine &engine, const Model &model, Track &track, const TrackEngine *linkedTrackEngine) :
CurveTrackEngine(Engine &engine, Model &model, Track &track, const TrackEngine *linkedTrackEngine) :
TrackEngine(engine, model, track, linkedTrackEngine),
_curveTrack(track.curveTrack())
{
Expand Down
19 changes: 6 additions & 13 deletions src/apps/sequencer/engine/Engine.cpp
@@ -1,13 +1,16 @@
#include "Engine.h"

#include "Config.h"
#include "LogicTrackEngine.h"
#include "MidiUtils.h"

#include "NoteTrackEngine.h"
#include "core/Debug.h"
#include "core/midi/MidiMessage.h"
#include "ui/ControllerManager.h"

#include "os/os.h"
#include <iostream>

Engine::Engine(Model &model, ClockTimer &clockTimer, Adc &adc, Dac &dac, Dio &dio, GateOutput &gateOutput, Midi &midi, UsbMidi &usbMidi) :
_model(model),
Expand Down Expand Up @@ -409,7 +412,6 @@ void Engine::updateTrackSetups() {
auto &track = _project.track(trackIndex);
int linkTrack = track.linkTrack();
const TrackEngine *linkedTrackEngine = linkTrack >= 0 ? &trackEngine(linkTrack) : nullptr;
FixedStringBuilder<16> str("TRACK %d", trackIndex+1);

if (!_trackEngines[trackIndex] || _trackEngines[trackIndex]->trackMode() != track.trackMode()) {
auto &trackEngine = _trackEngines[trackIndex];
Expand All @@ -418,27 +420,18 @@ void Engine::updateTrackSetups() {
switch (track.trackMode()) {
case Track::TrackMode::Note:
trackEngine = trackContainer.create<NoteTrackEngine>(*this, _model, track, linkedTrackEngine);
if (sizeof(track.noteTrack().name()==0)) {
track.noteTrack().setName(str);
}
break;
case Track::TrackMode::Curve:
trackEngine = trackContainer.create<CurveTrackEngine>(*this, _model, track, linkedTrackEngine);
if (sizeof(track.noteTrack().name()==0)) {
track.curveTrack().setName(str);
}
break;
case Track::TrackMode::MidiCv:
trackEngine = trackContainer.create<MidiCvTrackEngine>(*this, _model, track, linkedTrackEngine);
if (sizeof(track.noteTrack().name()==0)) {
track.midiCvTrack().setName(str);
}
break;
case Track::TrackMode::Stochastic:
trackEngine = trackContainer.create<StochasticEngine>(*this, _model, track, linkedTrackEngine);
if (sizeof(track.stochasticTrack().name()==0)) {
track.stochasticTrack().setName(str);
}
break;
case Track::TrackMode::Logic:
trackEngine = trackContainer.create<LogicTrackEngine>(*this, _model, track, linkedTrackEngine);
break;
case Track::TrackMode::Last:
break;
Expand Down
3 changes: 2 additions & 1 deletion src/apps/sequencer/engine/Engine.h
Expand Up @@ -13,6 +13,7 @@
#include "RoutingEngine.h"
#include "MidiOutputEngine.h"
#include "StochasticEngine.h"
#include "LogicTrackEngine.h"
#include "MidiPort.h"
#include "MidiLearn.h"
#include "CvGateToMidiConverter.h"
Expand All @@ -34,7 +35,7 @@

class Engine : private Clock::Listener {
public:
typedef Container<NoteTrackEngine, CurveTrackEngine, MidiCvTrackEngine, StochasticEngine> TrackEngineContainer;
typedef Container<NoteTrackEngine, CurveTrackEngine, MidiCvTrackEngine, StochasticEngine, LogicTrackEngine> TrackEngineContainer;
typedef std::array<TrackEngineContainer, CONFIG_TRACK_COUNT> TrackEngineContainerArray;
typedef std::array<TrackEngine *, CONFIG_TRACK_COUNT> TrackEngineArray;
typedef std::array<UpdateReducer<os::time::ms(25)>, CONFIG_TRACK_COUNT> TrackUpdateReducerArray;
Expand Down

0 comments on commit 957af36

Please sign in to comment.