Trouble with Sonic Pi code editor, help system and the NVDA screen reader for Windows 10

I love the idea of coding in Sonic Pi, but in practice, it’s kind of a pain for me. I am blind and use the NVDA screen reader under Windows (10 ver 22.h2 if that matters.) I encounter some problems as follows:

  1. When editing if I switch away from the program, to say read a tutorial entry, when I return to the code editor, I have to ctrl-tab and shift-ctrl-tab cycling to a different buffer and back in order to recover speech. This is not true if I’m bouncing between windows within SP, as the log and the editor.
  2. Whenever I choose from any of the lists that come up as I’m typing code (e.g. choosing a synth) I lose speech as above and have to cycle to another buffer and back.
  3. Using the help system is clunky for me; I can select what I want to read about, but then I get no speech in the actual help window. I have to fall back on the screen reader’s review mode, which works (sort of) but is far less useful than if I could use standard reading/navigation commands to move about in the document. For instance, when reading through synth parameter descriptions, I get a lot of repetition of previously read material.
    I’d love it if I could bounce back and forth between the list of topics and the text window like in .chm or similar structures.
    If there are other screen reader users who have found work-arounds for these problems, I’d love to know what you do, because I really want to dive in and learn this puppy, with the idea of teaching it in future as part of building an electronic music program for the university I work for.

Hi @TheMadViolinist,

so sorry to hear that you’re having some troubles with the NVDA screen reader under Windows.

With respect to the first two issues you have any idea how we might help improve matters here?

With respect to the third issue, I’m aware that things aren’t ideal for screen readers but it doesn’t appear to be trivial to fix without re-implementing much of the help system. There has been work by others to rebuild everything using web tech which I’m sure would help but unfortunately that work has stalled. For now, the best way of accessing the tutorial is probably via the web page: Sonic Pi - Tutorial Unfortunately that doesn’t include the synth parameter descriptions - so if anyone would like to help out with this in any way I’d love to hear from you.

I’m not sure what the issue is with getting stuck in the autocomplete lists. This happens whether autocomplete window on the view menu is shown. In practice, I keep it closed as it really slows down my input waiting for the speech to catch up with the autocomplete updates. Here’s a scenario:
I’m adding a play command, say play 60, (and as soon as I hit the space, the list of play parameters comes up, which is lovely. I either arrow down and choose one, or begin typing to reduce the selections. I hit enter on my selected parameter, say decay, and then type in a value, but then I can’t hear what’s going on in the buffer and have to exit and re-enter the buffer.
The help system issue is serious for me, since only part of the language is documented in the tutorial, and all the effects and synth parameters are only available through the help system. I remember that someone had compiled a series of html pages with the same information, though I don’t know how up to date it is, and anyway I can’t find it to go back to.

One thing you can do is to completely disable the autocomplete list if it is disrupting the screen reader. This is possible to toggle with the Code - Show Code Completion option in the menu.

Again, really sorry that the synth parameter documentation isn’t particularly accessible. It currently renders like this via HTML - is the following something your screen reader can work with. If not, could you suggest a more appropriate formatting? I’m sure we can work together to make something useful for you.

Detuned Pulse Wave

use_synth :dpulse

A pair of detuned pulse waves passed through a low pass filter. Two pulse waves with slightly different frequencies generates a nice thick sound which can be used as a basis for some nice bass sounds. Thicken the sound by increasing the detune value, or create an octave-playing synth by choosing a detune of 12 (12 MIDI notes is an octave). Each pulse wave can also have individual widths (although the default is for the detuned pulse to mirror the width of the main pulse).

Introduced in v2.8


Parameter Description
note: Note to play. Either a MIDI number or a symbol representing a note. For example: 30, 52, :C, :C2, :Eb4, or :Ds3. Default: 52 Must be zero or greater. May be changed whilst playing. Has slide options to shape changes
amp: The amplitude of the sound. Typically a value between 0 and 1. Higher amplitudes may be used, but won’t make the sound louder, they will just reduce the quality of all the sounds currently being played (due to compression.)

Yes, this is a very useful format for me. I’d hope to have something like this for synth, sample, fx and lang sections of the help system.

Interesting - this is currently how it is displayed (visually at least) in the existing help system. Perhaps the renderer just isn’t friendly with screen readers. If I switch it up from the existing lightweight renderer to a more heavyweight full-browser (which I’m planning to do for other reasons too) then this might just be a simple drop-in replacement.

I’ll work on a prototype and get something to you in a few weeks if that’s interesting?

Yes, I’m very interested in this, because the lighter-weight display really slows me way down and a more typical display would greatly enhance my ability to learn.

1 Like

Would it be possible to visit this (temporary) page and let me know if this works well with your screenreader:

@TheMadViolinist would it also be possible to check out this alternative which (hopefully) more clearly marks the table headers and captions for the screen reader to work with:

Also, if you have any suggestions on more accessible ways of structuring this information via HTML (or perhaps even examples of other things that do it well) then I’d love to hear them. It’s important to me that we get this as nice as possible!

The second one with the options descriptions in the labeled table is better, as I can navigate easily among the options to find the description. Something like this for synths, fx, samples, lang would be very helpful.

Ok, that’s great to hear - thanks for taking a look.

The next thing is to figure out a nice way of navigating between the different synths, and then I can look at the different doc types (synths, fx, samples, lang).

Then we need to test to see if the internal browser component works well with screen readers :slight_smile: