GithubHelp home page GithubHelp logo

warbl's People

Contributors

amowry avatar essej avatar jglev avatar k0872 avatar louis-barman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

warbl's Issues

Ability to set the midi channel for an instrument

I've just received a warbl and I love it! So fun controlling soft synths and even my modular from it. Amazing work!

Feature request: I'd love if it could be possible to set different midi channels per instrument. This would make it easier to set up dedicated synths per instrument and then easily move between them using the buttons.

It looks like the channel is currently hardcoded:

sendUSBMIDI(NOTE_ON, 1, newNote + shift, velocity); //send the new note
.

Would this be a big job to change?

I'd be happy to have a shot but I have no time till November.

Thanks!
Bridger

No hysteresis when overblowing to get the top octave

From the forum https://warbl.xyz/phpbb/viewtopic.php?f=6&t=222

I am having trouble getting the overblowing working properly for the top register as it keeps dropping to the lower register when I don't want it to. I have tried fiddling with the settings for this with no luck. However I realise that there is an easy software fix and that is to implement hysteresis when overblowing, this is something that a real whistle does naturally -- you initially have to blow quite hard to get the top register but once there it tends to stay in that register even if you back of the pressure. in fact on my whistle i have to back off the pressure quite a bit before it drops back down to the lower octave. I am a programmer and an electronic engineer by training and also the author of PianoBooster so I might have a go at trying to fix this issue myself.

Compatibility with Expert Sleepers FH-2

Hello! I'm using the Warbl with the Expert Sleepers FH-2. It's a very popular eurorack module that functions as a host or device to convert midi to control voltage (https://www.expert-sleepers.co.uk/fh2.html).

Unfortunately the FH-2 does not detect the Warbl as a device. I chatted with the main developer of the FH-2 (who mentioned that they might reach out to you and who is also a wind player!). I gave them a dump of a usb probe.

They mentioned:

 I don't know for sure if they're what's tripping up the FH-2.

Endpoint 0x04 - Bulk Output   
                Address:   0x04  (OUT)
Endpoint 0x85 - Bulk Input   
                Address:   0x85  (IN)

Usually the MIDI endpoints have addresses 0x01 and 0x81.

I appreciate that this might have nothing to do with Warbl, but I was just wondering if you had any advice on debugging this or if there was anything I might try to test the compatibility e.g. changing those values in firmware? Sorry, I don't have any Arduino experience, so this might be a ridiculous suggestion.

Again, thanks so much! Loving the product!

When moving from low B to high D a bottom D note on is always sent.

When using overblowing and moving from low B to high D (B4 to D5) it should be possible to go directly to the high D without a bottom D (D5) sounding provided the pressure is above the D overblow threshold. Thanks to the use of the multiplier the pressure to play the low B can be above the D overblow threshold in which case the low D should not sound.

Fortunately I have found where the problem lies in the code. When a new note has been detected and newNote is set. see the the following line :

        newNote = tempNewNote; //update the next note if the fingering pattern is valid

The problem happens if get_state() is then not called or it finishes early. This can happen if sensorDataReady is false and also if 'sensorValue == sensorValue2' then get_state() finishes early which means that the newState is not calculated before the midi note on is sent.

Proposal for new Jump Drop behaviour.

Below is the content of the document that I emailed to Andrew about the jump drop behaviour: his reply is given at the bottom of this issue:

Warbl Jump drop discussion

For this discussion we will consider just the jump behaviour as exactly the same behaviour also applies when discussing a drop (although few people tongue a drop apart from when playing staccato).

Current v2.0 behaviour

Bug in V2.0 UI

  1. In the advanced Register Control Settings the Jump value ranges from 0 to 175. However it is not possible to set this to a number greater than 127 and for this value be retained by the Warbl.
  2. It is not possible to completely turn off the jump behaviour even setting a value of 127 Tonguing the start of a low note causes an initial very rapid pressure rise which can be greater than 127. It should be possible to turn off the Jump algorithm completely.

Jump drop behaviour in v2.0.

The jump feature works by trying to predict the future as described below:

If the pressure has increased rapidly (since the last reading) and there's at least enough pressure to turn a note on, jump immediately to the second register.

However if the user always tongues all the notes when starting from silence then I don’t believe it is possible to detect accurately in advance whether the user is heading for the low octave or the high octave.

Another disadvantage of this method is that the user will not be able to adjust the settings if the user does not understand what side effect a bad value will have. I did not know to listen out for an unwanted octave high note when playing a low note. I kept trying to hear an effect when jumping straight to the high note. Also having four controls that the user can adjust is perhaps too many.

Behaviour with Jump Drop disabled.

With the Jump drop feature completely disabled (by commenting out that code) then the users will never produce an unwanted high octave note without first crossing the high threshold . The only issue is when moving from silence straight to a high note there will always be a transient low note. I don’t find this a great problem for the following reasons:
I always tongue every note when starting from silence and so this note is very brief
I always use the breath controller or volume controller and so the volume of this unwanted transient note when jumping (or dropping) will always be reduced and so it is not so audible. But it would still be annoying when using the Warbl to enter the musical notes in a notation program or when not using the breath/volume controller.

Suggested new Jump Drop behaviour.

An alternative way of dealing with the unwanted jump/drop transients would be to delay making the decision until we definitely know whether it is going to be the low or high octave. So only when we know definitely one way or the other would we send out the note-on. The disadvantage of this method is there would be a slight delay when starting from silence or dropping from the top octave. We would make a decision and send out the note-on as soon as one of the following conditions were met:
For a jump to the top octave as soon as we pass the high threshold -- then output the high midi note-on.
If the rapid pressure rise starts to level out -- then we decide that this is a low note and output the low midi note-on.

An advantage of this method is that it could have a single easily understood setting -- the maximum number of mSec to wait before sending out a note-on. It should be stressed to the user that this is a maximum value that the note on might be delayed and often it would be much shorter.

When playing a high E with tonguing I get a value of 6 mSec when tonguing. This figure is found by measuring the time difference between the (unwanted) midi note-on for the low E and the high E midi note-on. I don’t believe the users would notice a delay this short. When not tonguing the high ‘E’ I get a much longer time of 108 mSec.

Andrews reply:

I just read the document—I increased the range of the jump slider to 175 a few weeks ago when I was playing with jump/drop, and I forgot that it’s limited to 127. Thanks for noticing that!

I think your suggestion for jump/drop sounds fine, and it’s pretty much what I had in mind based on your earlier comments. If you’d like to work on it, that’s fine, or I can work on it after you hand everything over to me.

Too little overblowing pressure will play the very top D (D5).

EDIT: RETESTED and this is not in the current version 2.0 (it only applies to the new hysteresis code)

With the overblowing option set and blowing lightly and play a high D (D5) with all holes covered apart from the L1 hole. Then if we increase the pressure to overblow we move to the very top D (D6) . When using the multiplier this should be the hardest note reach requiring the maximum pressure to reach but instead it is the easiest note to play when overblowing which is a bug in my opinion.

So if all fingers are covered and we play the bottom low D (D4) then increasing the pressure should move the the high D (D5) which should be an easy note to reach. Then lifting the finger off the L1 hole should have no effect. However increasing the pressure further ( when using the multiplier) should only then play the very top D (D6) which should be the note requiring the most pressure to reach.

Jump & Drop Settings problems.

I am raising this issue mainly to let you know that I am reworking these settings.
The Jump & Drop settings have never worked for me. It is not clear how to completely disable these settings. The docs state:

The Jump setting controls how difficult it is to move directly to the second register, and the Drop controls how difficult it is to drop directly from the second register to silence. You can increase these variables if you find you are "jumping" or "dropping" inadvertently, or decrease them if you are unable to move up or down between silence and the second register.

However looking at the code it seems you have to set them to the max to disable them.

It would best if they ran from 0 for completely off to 100 to be maximum (100%) effect.

It looks quickest for me to re-write that part of the code which you can then review.

An idea on how to add custom fingering.

I have been thinking about how to add custom fingering to the warbl and came up with an idea of defining the custom fingering in a simple text file see below for an example:

% D Whistle
D4 : x ooo ooox x
E4 : x ooo oo-x x
F4 : x ooo o-ox x
F#4: x ooo o-xx x
G4 : x ooo -xxx x
A4 : x oo- xxxx x
Bb4: x o-o xxxx x
B4 : x o-- xxxx x
C#5: x -oo -xxx x
C#5: x -o- -xxx x
C5 : x --- ---x x
D5 : x -oo ooox x

key:

<note-name>:<fingering>

'o' Covered hole
'-' Open hole 
'c' half covered hole
'x' Don't care (open or closed)
'~' allow vibrato on a don't care hole
'^' allow pitch bend on an open hole

I have had a quick go at implementing this see my repo in the wip/fingering branch see https://github.com/louis-barman/warbl/tree/wip/fingering

I was surprised how cleanly it fits in with minimal change to the existing code base see this change.

I used this program to upload the custom fingering text file to the warbl https://github.com/louis-barman/warbl-send

I realise that integrating this fully into the Warbl code base would cause a lot of disruption so don't worry if you don't want to use it. And also now is probably not a good time to do it.

It took me a couple of days to get it working. It was much faster writing tests on a PC and then it worked first time when I tried it on the Warbl. (But more work is needed if you want to use or modify this idea. I want to implement half hole for the C natural and so this is the cleanest way for me to implement it.

Let me know what you think.

What hardware would you recommend for hacking on this code?

In the README you mention the Adafruit ItsyBitsy 32u4-3.3V was used in prototyping, but unless there is a good reason not to, I'd prefer to use whatever you ended up going with in production.

(I'm thinking it'd be fun to hack on wireless connectivity before I get together enough money to buy an actual WARBL, but even after I get it it'd probably be nice to not have to use the actual instrument for experiments.) In any case, this is a really awesome-looking product, and thank you SO MUCH for making the software side of it Free Software (from former FSF staff :-)

Related: https://warbl.xyz/phpbb/viewtopic.php?f=3&t=55&p=652&hilit=arduino#p652

Update warbl.xyz configuration tool to github

Hi,

As mentioned here #15 (comment), seems like the website and the github code have inconsistencies.

At the warbl website, it detects properly new instruments.

For example, this is from configure.html

47,49d46
<     <!-- Global site tag (gtag.js) - Google Analytics -->
<     <script async src="https://www.googletagmanager.com/gtag/js?id=UA-129157937-1">
<     </script>
50a48,49
>     
>     
52,56c51,59
<       window.dataLayer = window.dataLayer || [];
<       function gtag(){dataLayer.push(arguments);}
<       gtag('js', new Date());
<       gtag('config', 'UA-129157937-1');
<     </script>
---
>     if (window.isSecureContext) {
>   // Page is a secure context so service workers are now available
> 
>   
>   console.log("secure");
> }
>   </script>   
>     
> 
513c516
<                 <option value="21">Baroque flute</option>                
---
>                 <option value="21">Baroque flute</option>            
541c544
<                 <option value="21">Baroque flute</option>                  
---
>                 <option value="21">Baroque flute</option>                 
569c572
<                 <option value="21">Baroque flute</option>                
---
>                 <option value="21">Baroque flute</option>              
939c942
<               <input type="range" min="0" max="60" value="20" class="ranger" id="jumpFactor3" onChange="sendJumpFactor(3, value)">
---
>               <input type="range" min="0" max="100" value="20" class="ranger" id="jumpFactor3" onChange="sendJumpFactor(3, value)">
975c978
<               <input type="range" min="0" max="60" value="20" class="ranger" id="jumpFactor9" onChange="sendJumpFactor(9, value)">
---
>               <input type="range" min="0" max="100" value="20" class="ranger" id="jumpFactor9" onChange="sendJumpFactor(9, value)">
2607c2610
<             These settings control the way that the register is changed by overblowing. Each variable below has a setting for a <b>bag</b> and one for the <b>breath</b> (mouthpiece). which settings are used depends on whether you currently have Bag or Breath selected in the main Note Trigger and Register Control panel.
---
>             These settings control the way that the register is changed by overblowing. Each variable below has a setting for a <b>bag</b> and one for the <b>breath</b> (mouthpiece). which settings are used depends on whether you currently have Bag or Breath selected in the main Note Trigger and Register Control panel (the currently selected group of settings are surrounded by a white box).
2989c2992
<     <script src="js/midi.min.js"></script>
---
>     <script src="js/midi.js"></script>

midi.js is also radically different, causing to not properly add the new instruments or detect the latest version properly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.