Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #103

Merged
merged 35 commits into from
Oct 22, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
6178cd8
Hopefully fix on newer OSX versions
topisani Aug 21, 2018
45189de
Added euclidian sequencer and general sequencer backend
topisani Aug 21, 2018
467bc37
Merge remote-tracking branch 'origin/develop-topisani' into custom
jfrey-xx Aug 22, 2018
669c6a8
fix for glfw compile
jfrey-xx Aug 22, 2018
9df9278
fixing note filtering
jfrey-xx Aug 23, 2018
56e13d1
remove some compilation warnings
jfrey-xx Aug 23, 2018
1cd0bed
Merge pull request #89 from jfrey-xx/fix-euclidian
Aug 23, 2018
dc407c9
Euclid UI: WIP
topisani Aug 25, 2018
7e57413
Mostly finished Euclid UI. Sequencer can now be toggled with the play…
topisani Aug 25, 2018
62f055d
Attempt to fix on libc++
topisani Aug 25, 2018
d146abc
Fix serialization of sequencer and voice settings. Sequencer UI also …
topisani Aug 26, 2018
ba41b52
Fix midi latency on EGL ui
topisani Aug 26, 2018
e38fb64
Enable RPI_FBCP by default (since it nolonger crashes when no fb1 is …
topisani Aug 26, 2018
d2051a0
Updated rpi-proto-1 keymap
topisani Aug 26, 2018
6811c42
Euclid fixes
topisani Sep 7, 2018
c13a190
[WIP] No-ui version of wormhole, and backend for fx!
topisani Sep 11, 2018
e385045
Wormhole ui fixes
topisani Sep 18, 2018
101f733
Master volume (with a limiter) and external input.
topisani Sep 22, 2018
ca19942
Added Master Volume UI. Also added Canvas fix for macOS.
Sep 23, 2018
6870c26
Fixed the warnings.
Sep 23, 2018
77a1f21
Merge pull request #95 from topisani/develop-albert
Sep 23, 2018
c6ce9b3
Autoconnect to new jack midi
topisani Sep 23, 2018
3773075
Changed the font to roboto
topisani Sep 23, 2018
60f0d28
Added a new UI version for the Wormhole reverb. Fixed the white line …
Sep 24, 2018
21d5ff6
Deleted QT's CMakeLists.txt.user.
Sep 24, 2018
77b6314
Merge pull request #96 from topisani/develop-albert
Sep 24, 2018
53d93f2
Added new work in progress version of the Nuke UI. Needs a tiny bit o…
Sep 26, 2018
8ff8aef
Updated Nuke synth. Added presets. Fixed ADSR envelope.
jmidt Sep 26, 2018
dd4babe
Delete CMakeLists.txt.user
topisani Sep 27, 2018
e4c6638
Delete help.json
topisani Sep 27, 2018
1b5258e
Fixed minor issues in Nuke UI (as mentioned in review comments).
Sep 27, 2018
81b3b54
Merge pull request #98 from topisani/develop-jonatan
jmidt Sep 27, 2018
f22d7a5
Merge branch 'develop' into develop-albert
Sep 27, 2018
773732c
Merge pull request #97 from topisani/develop-albert
Sep 28, 2018
6d35fbc
Merge branch 'master' into develop
topisani Oct 22, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
build
build*
bin
CMakeCache.txt
CMakeFiles
Expand Down
116 changes: 72 additions & 44 deletions boards/desktop/src/keys.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,68 +29,96 @@ namespace otto::board::ui {
service::ui::impl::keyrelease(k);
};

auto send_rotary = [action](core::ui::Rotary rot, int n) {
if (action == Action::press || (action == Action::repeat))
service::ui::impl::rotary({rot, n});
};


if (mods & Modifier::alt) {
switch (key) {
case Key::q: send_midi(17); return;
case Key::q: send_midi(17); return;
case Key::n2: send_midi(18); return;
case Key::w: send_midi(19); return;
case Key::w: send_midi(19); return;
case Key::n3: send_midi(20); return;
case Key::e: send_midi(21); return;
case Key::r: send_midi(22); return;
case Key::e: send_midi(21); return;
case Key::r: send_midi(22); return;
case Key::n5: send_midi(23); return;
case Key::t: send_midi(24); return;
case Key::t: send_midi(24); return;
case Key::n6: send_midi(25); return;
case Key::y: send_midi(26); return;
case Key::y: send_midi(26); return;
case Key::n7: send_midi(27); return;
case Key::u: send_midi(28); return;
case Key::i: send_midi(29); return;
case Key::u: send_midi(28); return;
case Key::i: send_midi(29); return;
case Key::n9: send_midi(30); return;
case Key::o: send_midi(31); return;
case Key::o: send_midi(31); return;
case Key::n0: send_midi(32); return;
case Key::p: send_midi(33); return;
case Key::p: send_midi(33); return;
default: break;
}
}

bool ctrl = mods & Modifier::ctrl;
switch (key) {
// Rotaries
case Key::q: send_key(ctrl ? OKey::blue_click : OKey::blue_up, !ctrl); break;
case Key::a: send_key(ctrl ? OKey::blue_click : OKey::blue_down, !ctrl); break;
case Key::w: send_key(ctrl ? OKey::green_click : OKey::green_up, !ctrl); break;
case Key::s: send_key(ctrl ? OKey::green_click : OKey::green_down, !ctrl); break;
case Key::e: send_key(ctrl ? OKey::white_click : OKey::white_up, !ctrl); break;
case Key::d: send_key(ctrl ? OKey::white_click : OKey::white_down, !ctrl); break;
case Key::r: send_key(ctrl ? OKey::red_click : OKey::red_up, !ctrl); break;
case Key::f: send_key(ctrl ? OKey::red_click : OKey::red_down, !ctrl); break;

case Key::left: send_key(OKey::left); break;
case Key::right: send_key(OKey::right); break;

// Tapedeck
case Key::space: send_key(OKey::play); break;
case Key::z: send_key(OKey::rec); break;
case Key::f1: send_key(OKey::track_1); break;
case Key::f2: send_key(OKey::track_2); break;
case Key::f3: send_key(OKey::track_3); break;
case Key::f4: send_key(OKey::track_4); break;

// Numbers
case Key::t: if (ctrl) send_key(OKey::tape); break;
case Key::y: if (ctrl) send_key(OKey::mixer); break;
case Key::u: if (ctrl) send_key(OKey::synth); break;
case Key::g: if (ctrl) send_key(OKey::metronome); break;
case Key::h: if (ctrl) send_key(OKey::sampler); break;
case Key::j: if (ctrl) send_key(OKey::drums); break;
case Key::k: if (ctrl) send_key(OKey::envelope); break;
case Key::q:
if (ctrl)
send_key(OKey::blue_click);
else
send_rotary(core::ui::Rotary::Blue, 1);
break;
case Key::a:
if (ctrl)
send_key(OKey::blue_click);
else
send_rotary(core::ui::Rotary::Blue, -1);
break;
case Key::w:
if (ctrl)
send_key(OKey::green_click);
else
send_rotary(core::ui::Rotary::Green, 1);
break;
case Key::s:
if (ctrl)
send_key(OKey::green_click);
else
send_rotary(core::ui::Rotary::Green, -1);
break;
case Key::e:
if (ctrl)
send_key(OKey::white_click);
else
send_rotary(core::ui::Rotary::White, 1);
break;
case Key::d:
if (ctrl)
send_key(OKey::white_click);
else
send_rotary(core::ui::Rotary::White, -1);
break;
case Key::r:
if (ctrl)
send_key(OKey::red_click);
else
send_rotary(core::ui::Rotary::Red, 1);
break;
case Key::f:
if (ctrl)
send_key(OKey::red_click);
else
send_rotary(core::ui::Rotary::Red, -1);
break;

case Key::l: send_key(OKey::loop); break;
case Key::i: send_key(OKey::loop_in); break;
case Key::o: send_key(OKey::loop_out); break;
// Engines
case Key::n1: send_key(OKey::sequencer); break;
case Key::n2: send_key(OKey::synth); break;
case Key::n3: send_key(OKey::envelope); break;
case Key::n4: send_key(OKey::voices); break;
case Key::n5: send_key(OKey::fx1); break;

case Key::x: send_key(OKey::cut); break;
case Key::c: if (ctrl) send_key(OKey::lift);
case Key::v: if (ctrl) send_key(OKey::drop); break;
case Key::p: send_key(OKey::play); break;
case Key::m: send_key(OKey::master); break;

case Key::left_shift: [[fallthrough]];
case Key::right_shift: send_key(OKey::shift); break;
Expand Down
5 changes: 5 additions & 0 deletions boards/parts/audio/jack/include/board/audio_driver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <jack/jack.h>
#include <jack/midiport.h>
#include "core/audio/midi.hpp"
#include "util/locked.hpp"

#include "util/locked.hpp"

Expand Down Expand Up @@ -56,8 +57,12 @@ namespace otto::service::audio {
bool connectPorts(const std::string& src, const std::string& dest);
void samplerateCallback(unsigned srate);
void buffersizeCallback(unsigned buffsize);
void new_port_callback(jack_port_id_t id);
void gatherMidiInput(int nFrames);
void process(int nframes);

/// Jack cannot connect to a port from the notification thread, so we just add them here, and process them from the main one instead.
std::vector<jack_port_id_t> new_ports;
};

using AudioDriver = JackAudioDriver;
Expand Down
Loading