Ptitleon posted Mar 21 '16, 16:40:
Hello,
A small modification to change global volume if you have a volume knob on your midi controler and wont to use it:
Francois
....
def MidiCallback(message, time_stamp):
global playingnotes, sustain, sustainplayingnotes
global preset
#### Knob volume mod ####
global globalvolume
#### End knob volume mod ####
messagetype = message[0] >> 4
messagechannel = (message[0] & 15) + 1
note = message[1] if len(message) > 1 else None
midinote = note
velocity = message[2] if len(message) > 2 else None
if messagetype == 9 and velocity == 0: messagetype = 8
#### knob volume mod #####
if (messagetype == 11) and (note == 7): #Midi controler volume knob action (0-127)
globalvolume = (10 ** (-12.0/20)) * velocity / 127
elif messagetype == 9: # Note on
#### End knob volume mod ####
try:
playingnotes.setdefault(midinote,[]).append(samples[midinote, velocity].play(note))
except:
pass
....
SPFY posted Mar 21 '16, 17:18:
AlexT posted Sep 25 '16, 13:01:
First to say thanks to Joseph for this awesome build.
But now to this Volume control:
I tried to implement the code via winscp, but after a reboot i couldnt hear anything when launching a sample.
Could someone explain the code to me:
What means the note==7 part?
Also the formula to calculate the globalvolume is unclear to me, especially because i dont want any velocity sensitivity in this...
Here some Infos of my Setup:
Samplepad AKAI LPD8, DAC Behringer UCA202
My Knobs can be assigned to a CC-Number and defined to a range between 0-127.
I would be happy if someone can help me on getting one Knob to be a Volumecontrol.
Thank you.
Jesse posted Sep 28 '16, 10:21:
Alex,
MIDI messages have a common structure that is broken up into 3 8 bit numbers; A message type and 2 parameters. For the sake of simplicity, the parameters are usually called 'note' or 'key' and 'velocity'
A messagetype of 11 indicates that the message is coming from a continuous control (CC) like a knob or a slider.So 'note' and 'velocity' don't actually indicate a note or velocity here, they indicate which knob is being used and what it's position has been changed to. A note (or CC number) of 7 is the default for the volume knob.
So the volume calculation is converting the 8bit number representing the volume knob orientation to a percentage that gets multiplied by a base volume.
I suspect your issue is with how you have patched samplerbox.py. You should not really be able to modify the data on the sdcard of a running samplerbox if you are using the custom image. It would probably be easier to just mount the sdcard in a linux VM, or whatever environment you used to write the image to the sdcard in the first place.
AlexT posted Sep 30 '16, 21:28:
Thanks Jesse for your answer. I tried to mount the sd card on raspbian but I dont get write permissions on it... Further i can't even read the /ROOT/root folder... I tried to remount it as rw but it does not seem to work, too. My Linux knowledge is very basic I have to admit.
AlexT posted Sep 30 '16, 21:56:
Oh boy... Alright i logged in as root in raspbian and it worked! Could edit the samplerbox.py with the built in editor (very helpful for the syntax) saved and tried it in my Setup: Everything works as it should! Again thx Jesse, for your help.
Seb posted Oct 4 '16, 20:06:
Could someone kindly post the sampler.py code with the volume patch added. I had a go editing the original py but unfortunately my controller volume slider is not responding. Ta
Nate posted Feb 23 '17, 20:07:
Is there a way to make it smoother, especially on the quiet end? I'm using this as an expression data mod, and it's slick, but my quick data changes are causing some clicks/pops.
sm7x7 posted May 4 '18, 17:03:
Little cleanup for the code (after my own trials/errors :) )
...
def MidiCallback(message, time_stamp):
global playingnotes, sustain, sustainplayingnotes
global preset
Knob volume mod
global globalvolume
End knob volume mod
messagetype = message[0] >> 4
messagechannel = (message[0] & 15) + 1
note = message[1] if len(message) > 1 else None
midinote = note
velocity = message[2] if len(message) > 2 else None
if messagetype == 9 and velocity == 0: messagetype = 8
knob volume mod
if (messagetype == 11) and (note == 7): #Midi controler volume knob action (0-127)
globalvolume = (10 * (-12.0/20)) velocity / 127
End knob volume mod
if messagetype == 9: # Note on
try:
playingnotes.setdefault(midinote,[]).append(samples[midinote, velocity].play(note))
except:
pass
....
To explain this cleanup, one line there was unneeded (the line starting with "elif"). So, now everything works as intended - THANKS Ptitleon!!!
Basssignal posted May 12 '21, 22:18:
If anyone is reading this in 2021, could someone advise where best to place the above code in samplerbox.py
I appended the code to the bottom of the file and corrected the indentation errors. Unfortunately, the volume slider on my Alesis q88 doesn't react to it, but I have connected it via USB cable to the rp3. Thanks