Latest News: Bitwig updates Bitwig Studio to v5.1
Visual tempo feedback
-
- KVRer
- Topic Starter
- 15 posts since 24 Nov, 2018
I was inspired by this video
https://www.youtube.com/watch?v=CT6ABqYno6Y&start=307
where the author demos differents ways to get a visual tempo feedback.
It is usefull in live performances, you don't need to listen to the click.
how would you code that, how to subscribe to the clock ?
https://www.youtube.com/watch?v=CT6ABqYno6Y&start=307
where the author demos differents ways to get a visual tempo feedback.
It is usefull in live performances, you don't need to listen to the click.
how would you code that, how to subscribe to the clock ?
-
- KVRist
- 55 posts since 17 Jun, 2013
Interested in this too. I tried this a while back using an old Launchpad (or any MIDI controller with LED feedback) and have clips running with the correct note/cc messages in them so they'll trigger the lights on the controller (@4:55 in the video).
Now in a script (I guess) you'd just have to send these notes/CCs out in the correct time. OSC might be an option as well making your own visual metronome.
Now in a script (I guess) you'd just have to send these notes/CCs out in the correct time. OSC might be an option as well making your own visual metronome.
- KVRAF
- 8814 posts since 6 Jan, 2017 from Outer Space
I don't think it needs a script for that. Simply create a clip which would send the note or controller information to the external controller to switch on the blink, and include it into your default project. One HW instrument track for visualization - could be abused for extra independent audio input as well...; - )
-
- KVRist
- 55 posts since 17 Jun, 2013
The only "problems" with using clips that way is launching scenes or using the stop all clips function as you'd have to restart the metronome midi clip. Of course you can copy the clip to all scenes. Using other time signatures might be another issue, you'd need multiple metronome clips depending on the signature. A script always hooked to the transport might be a more desired solution, taking all that into account.Tj Shredder wrote: ↑Sat May 02, 2020 9:30 am I don't think it needs a script for that. Simply create a clip which would send the note or controller information to the external controller to switch on the blink, and include it into your default project. One HW instrument track for visualization - could be abused for extra independent audio input as well...; - )
Edit: Now thinking about it, it might be possible to do that straight in the grid with all the transport and scaler devices and then translating it into the correct note/CC messages. Of course this won't give RGB functionality, unless the controller is responding to velocity or other parameters via RGB out of the box.
Edit 2: For anyone still interested, I got something simple working in the Grid with Polaritys "Grid Note Out". Inside the Grid is a pitch and steps module triggering a single note each step, multinote triggers the 2x2 blocks on the Launchpad https://streamable.com/01p7lp
Last edited by misteraudio on Sun May 03, 2020 3:23 pm, edited 1 time in total.
-
- KVRer
- Topic Starter
- 15 posts since 24 Nov, 2018
here is a piece of code to do heartbeat or snake style
javascript
java
javascript
Code: Select all
var numberOfBeat = 4; // init to a default value, is going to be updated by the real signature.
function init() {
transport = host.createTransport();
transport.timeSignature().numerator().addValueObserver(function(numerator){
numberOfBeat = numerator;
});
transport.getPosition().addValueObserver(function(value)
{
var tick = (Math.round((value*100/10))%10);
var blink = false;
if(tick >=0 && tick <= 3){
blink = true;
}
println(blink); // use it to blink one pad, heartbeat style
var padNumberToLight = Math.round(value)%numberOfBeat;
println(padNumberToLight); // use it to blink pad number, snake style
});
}
java
Code: Select all
private int numberOfBeat = 4;
public void init()
{
final ControllerHost host = getHost();
final Transport transport = host.createTransport();
transport.timeSignature().numerator().addValueObserver (numerator -> {
this.numberOfBeat = numerator;
});
transport.getPosition().addValueObserver (value -> {
final long tick = (Math.round((value*100/10))%10);
boolean blink = false;
if(tick >=0 && tick <= 3){
blink = true;
}
host.println(String.valueOf(blink)); // use it to blink one pad, heartbeat style
final long padNumberToLight = Math.round(value)%numberOfBeat;
host.println(String.valueOf(padNumberToLight)); // use it to blink pad number, snake style
});
}
-
- KVRer
- Topic Starter
- 15 posts since 24 Nov, 2018
Managed to put a way to do it in DrivenByMoss !
https://github.com/git-moss/DrivenByMos ... -623191329
https://github.com/git-moss/DrivenByMos ... -623191329
-
- KVRer
- Topic Starter
- 15 posts since 24 Nov, 2018
hehe, sadly this is not so perfectly beating because of the way bitwig use the scripting engine :
it is not realtime but when bitwig 'has' the time to send those message.
Then i learned the best is to use the MIDI CLOCK, this is quality realtime message !
In this German youtube video
https://www.youtube.com/watch?v=Ld_-f2XcBfA
the guy explain how to create a arduino usb midi controler and listen to those midi clock events ! then you put a little light, and you got a perfectly tempo synced light !
My next project for next year quarantine ... Or build one and put it on sale on https://www.tindie.com/
The best would be to firmware hack your existing controller and add a midi clock listener inside. (impossible)
it is not realtime but when bitwig 'has' the time to send those message.
Then i learned the best is to use the MIDI CLOCK, this is quality realtime message !
In this German youtube video
https://www.youtube.com/watch?v=Ld_-f2XcBfA
the guy explain how to create a arduino usb midi controler and listen to those midi clock events ! then you put a little light, and you got a perfectly tempo synced light !
My next project for next year quarantine ... Or build one and put it on sale on https://www.tindie.com/
The best would be to firmware hack your existing controller and add a midi clock listener inside. (impossible)
-
- KVRer
- Topic Starter
- 15 posts since 24 Nov, 2018
A little follow up,
i had an arduino uno in the house,
so with the youtube tutorial above, i made my midi visual feedback controler !! i post here some pointers if someone is intersted in 2020:
you have to include the midi usb lib. https://github.com/FortySevenEffects/ar ... di_library
(but in arduino it is called MIDI)
Arduino UNO is not a usb device can't be setup like a usb midi device like the Teensy board.
Luckily with this tutorial
https://www.youtube.com/watch?v=18OKo9s ... =emb_title
i have discovered
https://moco-lufa-web-client.herokuapp.com/#/
whit which you can create your own usb midi arduino Uno image, with the name you can choose , and it will show in bitwig as a midi device ! (so cool)
watch the youtube tutorial, now your arduino uno has two mode, depending of a jumper.
Then don't forget to go in Bitwig settings, synchonisations, midi sync, and send midi clock data to your new midi device that should be listed !
i had an arduino uno in the house,
so with the youtube tutorial above, i made my midi visual feedback controler !! i post here some pointers if someone is intersted in 2020:
you have to include the midi usb lib. https://github.com/FortySevenEffects/ar ... di_library
(but in arduino it is called MIDI)
Code: Select all
#include <MIDI.h>
using namespace midi;
MIDI_CREATE_DEFAULT_INSTANCE(); // Create an instance of MIDI
byte zaehler = 0;
float bpm = 0;
float zeitAlt = 0;
int isPlaying = 0;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(115200);
MIDI.setHandleClock(beatClock);
MIDI.setHandleStart(beatClock);
MIDI.setHandleContinue(beatClock);
MIDI.setHandleStop(beatClock);
MIDI.begin(MIDI_CHANNEL_OMNI);
}
void loop() {
if (MIDI.read()) {
Serial.println(MIDI.getType(), HEX);
}
}
void beatClock() {
midi::MidiType realtimebyte = MIDI.getType();
if(realtimebyte == midi::Start) {
zaehler = 0;
isPlaying = 1;
zeitAlt = millis();
}
if(realtimebyte == Continue) {
zeitAlt = millis();
}
if(realtimebyte == Stop) {
isPlaying = 0;
digitalWrite(13, LOW);
}
if(realtimebyte == Clock) {
zaehler++;
if (zaehler == 97) {zaehler = 1;}
if(zaehler == 1 || zaehler == 24 || zaehler == 48 || zaehler == 72) {
if(isPlaying){
digitalWrite(13, HIGH);
}
}
if(zaehler == 5 || zaehler == 25 || zaehler == 49 || zaehler == 73) {
digitalWrite(13, LOW);
}
}
if (zaehler == 24 || zaehler == 48 || zaehler == 72 || zaehler == 96 ) {
bpm = round((60000 / (millis() - zeitAlt)));
Serial.print(bpm);
Serial.println(" BPM");
zeitAlt = millis();
}
}
Luckily with this tutorial
https://www.youtube.com/watch?v=18OKo9s ... =emb_title
i have discovered
https://moco-lufa-web-client.herokuapp.com/#/
whit which you can create your own usb midi arduino Uno image, with the name you can choose , and it will show in bitwig as a midi device ! (so cool)
watch the youtube tutorial, now your arduino uno has two mode, depending of a jumper.
Then don't forget to go in Bitwig settings, synchonisations, midi sync, and send midi clock data to your new midi device that should be listed !