A norns piano is so helpful - thank you! this is going to be a favourite of mine.

I’m finding it’s triggering notes when I press a key AND when I release. It’s on an M-Audio Keystation32.

Any idea if that’s just me?

1 Like

Beautiful thank you for this

1 Like

can you share some of the output from maiden? that seems weird…

i added this now! you should be able to do

skeys:on({name="ghost piano",hz=440,velocity=120})

(untested by me, but should work :crossed_fingers: )

i think maybe you don’t have the samples needed - which is my fault because i never specified which you need. you should download “cello”, “alto sax choir”, “steinway model b”, and “ghost piano” for it to work. i also added this into the study itself so it tells you more obviously.

great :slight_smile: thanks!

and thank you for the kind words @encephalitislethargi, and @ohm - much appreciated.

3 Likes

I’m not sure how to share output from maiden, but I’ll check again today and see if I can share a video clip or work out how to share from maiden.

1 Like

First of all - huge thanks for your work, amazing stuff!
Have some feedback:
I have no output with a Arturia Keystep, tried all the channels and different modes. Tried re-adding it in settings. It works with other scripts. The script works straight away with Op-z. And I have this going in Maiden:

When I play notes on op-z it says “sample_closest_loaded”, when after that I am trying to play note on Keystep it gives me loads of cannot acces errors. I only have steinway_model_b, alto_sax and ghost piano downloaded.

Log

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/65.1.1.1.0.wav on voice 3
mxsamples: turning off alto_sax_choir:65
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/63.1.1.1.0.wav on voice 4
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/69.1.1.1.0.wav on voice 5
mxsamples: turning off alto_sax_choir:62
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/71.1.1.1.0.wav on voice 6
mxsamples: turning off alto_sax_choir:69
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/69.1.1.1.0.wav on voice 7
mxsamples: turning off alto_sax_choir:72
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/65.1.1.1.0.wav on voice 8
mxsamples: turning off alto_sax_choir:69
mxsamples: turning off alto_sax_choir:65
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/63.1.1.1.0.wav on voice 9
mxsamples: turning off alto_sax_choir:64
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/59.1.1.1.0.wav on voice 10
mxsamples: turning off alto_sax_choir:59
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/65.1.1.1.0.wav on voice 11
mxsamples: turning off alto_sax_choir:65
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/77.1.1.1.0.wav on voice 1
mxsamples: turning off alto_sax_choir:76
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/alto_sax_choir/71.1.1.1.0.wav on voice 12
mxsamples: turning off alto_sax_choir:72
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/60.3.3.1.0.wav on voice 13
mxsamples: turning off steinway_model_b:60
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/62.3.3.1.0.wav on voice 2
mxsamples: turning off steinway_model_b:62
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/62.3.3.1.0.wav on voice 3
mxsamples: turning off steinway_model_b:62
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/62.3.3.1.0.wav on voice 14
mxsamples: turning off steinway_model_b:62
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls: cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/58.2.2.1.0.wav on voice 4
mxsamples: turning off ghost_piano:62
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/58.2.2.1.0.wav on voice 5
mxsamples: turning off ghost_piano:62
ls: cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/62.3.3.1.0.wav on voice 6
mxsamples: turning off steinway_model_b:62
sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/62.3.3.1.0.wav on voice 7
mxsamples: turning off steinway_model_b:62
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/cello/
.wav’
: No such file or directory
ls:
cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/.wav’
: No such file or directory
ls:
cannot access '/home/we/dust/code/mx.samples/samples/tatak_piano/
.wav’
: No such file or directory

Hope that helps, let me know if you need to repeat some steps to debug, thank you:)

1 Like

Here’s a question - Can I use this to, for example, use a piano sound on the Awake script?

2 Likes

Amazing work. Incredible community here :slight_smile:

I’ve just tested with all libraries, and I’ve notice the sustain pedal doesn’t work. There is some way to fix it? In other hand, I’ve notice some little bit latency between pushing a key and listening the sound. I guess is just for the samples on library, because for example sax and cello is more evident this latency than the pianos.

Have anyone noticed this little issues?

1 Like

You can. I just updated my script to play with mx.samples. It’s pretty straight forward following the guide in the top post.

1 Like

thanks for your log! it helps and its puzzling. if you can, could you update the script and try again? i updated it to add the midi information to the log on a note-on event so i can see exactly what Keystep is sending.

there is no sustain pedal, yet. sustain pedal would be cool to add but its a little tricky. there are only 14 voices available, which is not a lot when using sustain (at least for me). the note releases and the note sustains will likely collide and it causes an unpleasant click when supercollider abruptly changes the buffers to the new note when stealing voices. there are a couple of fixes - i could have voice stealing work by never taking a “used voice” (so some keys end up not emitting then) or i could try to raise the number of voices in supercollider. i think the latter is possible but i haven’t yet figured it out without supercollider getting really mad (it makes this really mad sounding buzz sound when i raise the voices past 20…). so still thinking on this one.

there are two main sources of latency.

first there is latency in the actual sample. i’ve tried to remove these as much as i can (the convert.py script using ffmpeg's silencedetection and trims samples to the front). but you may notice for instance the saxophone has a breathy note at the beginning (which i love) but there is latency because of the start of the breath sound. i added in a new parameter sample start which you can change to trim the sample even more in this case.

the second source of latency is the lua → supercollider playing. i can’t do much about this. but for something like the steinway model b i’m getting pretty low latency at least not very noticeable for me. i haven’t measured it but i’d guess < 50 ms. if you are getting much more than this then it might be a :bug:

1 Like

EDIT: IGNORE - turns out I’d accidentally set my keyboard to a different prog on midi channel 3 for some reason

The double trigger thing is still happening. On Maiden when I press keys I see this log updating - is this what you need?

1

matron

supercollider

1 144

2 62

3 38

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/64.1.2.1.0.wav on voice 10

1 144

2 62

3 0

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/62.1.2.1.0.wav on voice 1

1 144

2 62

3 17

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/62.1.2.1.0.wav on voice 11

1 144

2 62

3 0

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/62.1.2.1.0.wav on voice 12

1 144

2 62

3 24

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/62.1.2.1.0.wav on voice 13

1 144

2 62

3 0

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/tatak_piano/62.1.2.1.0.wav on voice 2

yeah! so it looks like your device is sending note off’s as a note on (val=144) but with velocity 0. strange, but fine - i just added a fix that will account for that. can you update mx.samples and try again?

1 Like

^^ Update solved the double trigger on my Launchpad fyi :+1:

1 Like

Works fine after update:) Not sure if this is update (actually it said update failed in maiden but maybe I just double tapped) or just rebooting? (but I have tried rebooting before). So works fine straight away now.
Also not seeing the midi information in log so maybe update is failing? (it says up-to-date).

This is a log with keystep now but not sure you need it now

ample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/50.1.3.1.0.wav on voice 9

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.1.3.1.0.wav on voice 10

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 11

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 12

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 1

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 13

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 14

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 2

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/51.2.3.1.0.wav on voice 3

mxsamples: turning off steinway_model_b:51

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.3.3.1.0.wav on voice 4

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/47.3.3.1.0.wav on voice 5

mxsamples: turning off steinway_model_b:47

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/41.3.3.1.0.wav on voice 6

mxsamples: turning off steinway_model_b:41

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/48.2.3.1.0.wav on voice 7

mxsamples: turning off steinway_model_b:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/45.2.3.1.0.wav on voice 8

mxsamples: turning off steinway_model_b:43

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/steinway_model_b/47.3.3.1.0.wav on voice 9

mxsamples: turning off steinway_model_b:47

ls:

cannot access ‘/home/we/dust/code/mx.samples/samples/box_violin/*.wav’

: No such file or directory

ls:

cannot access ‘/home/we/dust/code/mx.samples/samples/cello/*.wav’

: No such file or directory

ls:

cannot access ‘/home/we/dust/code/mx.samples/samples/cello_pad/*.wav’

: No such file or directory

ls:

cannot access ‘/home/we/dust/code/mx.samples/samples/tatak_piano/*.wav’

: No such file or directory

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.1.2.1.0.wav on voice 10

mxsamples: turning off ghost_piano:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 1

mxsamples: turning off ghost_piano:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 11

mxsamples: turning off ghost_piano:50

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 12

mxsamples: turning off ghost_piano:52

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 13

mxsamples: turning off ghost_piano:50

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 2

mxsamples: turning off ghost_piano:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 14

mxsamples: turning off ghost_piano:41

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/54.2.2.1.0.wav on voice 3

mxsamples: turning off ghost_piano:53

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.1.2.1.0.wav on voice 4

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 5

mxsamples: turning off ghost_piano:52

mxsamples: turning off ghost_piano:50

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/54.2.2.1.0.wav on voice 6

mxsamples: turning off ghost_piano:52

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 7

mxsamples: turning off ghost_piano:50

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 8

mxsamples: turning off ghost_piano:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 9

mxsamples: turning off ghost_piano:50

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 10

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 1

mxsamples: turning off ghost_piano:47

mxsamples: turning off ghost_piano:48

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 11

mxsamples: turning off ghost_piano:47

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 12

mxsamples: turning off ghost_piano:45

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 2

mxsamples: turning off ghost_piano:47

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.2.2.1.0.wav on voice 13

mxsamples: turning off ghost_piano:45

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/47.1.2.1.0.wav on voice 14

mxsamples: turning off ghost_piano:43

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/54.1.2.1.0.wav on voice 3

mxsamples: turning off ghost_piano:72

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/76.1.2.1.0.wav on voice 4

mxsamples: turning off ghost_piano:71

sample_closest_loaded: /home/we/dust/code/mx.samples/samples/ghost_piano/54.2.2.1.0.wav on voice 5

Excellent, thanks so much for making and sharing this!!

I just wondered, is the stereo effect key-tracked? If so; may I request that we have a way of controlling the amount of stereo width?

Thank you - this is working great now.

This is amazing :slight_smile: Big thanks. I see this pianobook has many more sounds :open_mouth:

1 Like

O wow so it does!

1 Like

Haha exactly I just discovered what is Otamatone

this is so nice, @infinitedigits! wowee :partying_face: