Re: NVDA Audio player library need to be improved?

Beqa Gozalishvili
 

hi.

yes, wasapi on windows 10 is only sound subsystem with low latency, so
i also think nvda audio output should be rewritten using wasapi behind
scene.

On 1/13/20, Brian's Mail list account via Groups.Io
<bglists=blueyonder.co.uk@groups.io> wrote:
I was merely saying that the disgruntled users are not all blind, indeed
many just say its almost unusable. How can Microsoft allow such rubbish.
Anyway, this is getting off topic. I'm sure Microsoft are aware of the
problem but its messy and frustrating when normally windows drivers exist
without this kind of problem, indeed my internal card on this 2015 pc with

the same hardware does not exhibit the issues at all, the only reason I use

external is that internal hardware picks up analogue crud from the digital
lines and psu in the pc, so I use a cheap sound box via an isolated self
powered usb.
Brian

bglists@...
Sent via blueyonder.
Please address personal E-mail to:-
briang1@..., putting 'Brian Gaff'
in the display name field.
Newsgroup monitored: alt.comp.blind-users
----- Original Message -----
From: "DaVid" <dhf360@...>
To: <nvda-devel@groups.io>
Sent: Monday, January 13, 2020 12:52 PM
Subject: Re: [nvda-devel] NVDA Audio player library need to be improved?


I have three external soundcards. A roland, and two from yamaha. No
issues on them.
I didn't try with JAWS to test if those issues are present, I don't
want to install junk software on my computers. hehe.

This is the situation: on windows 10, the drivers set the buffer for
the audio. The bigger is the buffer, higher the latency. I think that
realtec driver has a very large buffer.
Windows can change the buffer size if an application requests for it.
rEal, the software that I think you are talking about, do it. Works
well, but that implies that the user will need to install more
software on the system.
But the main issue I think, its the delay when reset the WavePlayer.
tone.beep calls player.stop before play a tone. The stop method is
very slow in realtec drivers.

In theory, wasapi protocol can get a more direct access to the device,
so it should reduce the latency. But I don't have a easy method to
test it.

I'm reading articles about how to use Wasapi from python. PortAudio
can do it, but I don't want to use a third party library. Since NVDA
doesn't need to run in other platforms, a multiplatform library like
portAudio isn't needed.

Cheers,
David.

2020-01-13 3:43 GMT-06:00, Brian's Mail list account via Groups.Io
<bglists=blueyonder.co.uk@groups.io>:
Lots of people have complained about this driver from its sudden decision

to

turn off sound so you miss the tart to latency and all sorts of other
weirdness. I'd have thought by now Microsoft would have put their foot
down

with a firm hand and made them make one that was less buggy and messy.
Its not just blind people who moan about these. particularly on laptops.
There is also a little program about that holds a sound channel open by
constantly sending silence to it I believe but I've still got an older
machine sand use an external sound box.
Brian

bglists@...
Sent via blueyonder.
Please address personal E-mail to:-
briang1@..., putting 'Brian Gaff'
in the display name field.
Newsgroup monitored: alt.comp.blind-users
----- Original Message -----
From: "DaVid" <dhf360@...>
To: "nvda-devel" <nvda-devel@groups.io>
Sent: Monday, January 13, 2020 7:19 AM
Subject: [nvda-devel] NVDA Audio player library need to be improved?


Hi there!

Sumary: the current wavePlayer has high latency on some sound cards.
Also the delay to reset the player (when player.stopis called) is
extremely high when using stereo mode (2 channels).

1. latency: This usually happens on most modern realtec drivers, that
are present in majority of computers. The latency affects the general
usability. I usually replace the original realtec drivers, but not all
users know how to do this. I also lose functionality by doing this.

2. stop method: The delay of stop method is very anoying when use the
tones library. E.G. when using the track mouse movement sound. Even
this thing interrupts the current speaking voice.

3. Soundcard output and general NVDA's volume: currently users can
adjust the volume for synthesizers only. Sometimes when I decrease the
synth volume, my ears are hurt cause of the other NVDA's sounds.

Possible solution for latency: Use a more direct audio mode, the user
could choose between modes according their needs. Windows have MME,
DirectSound, wasapi modes. At least in wasapi, the buffer can be
changed. So, the user can modify that.

For stop player issue, we could avoid to call this method or implement
an internal method to stop the audio without reset the device. I
implemented an aproach for the tones library that works properly.
Download my tones library here. Use it on your own risk, is just a
experimental add-on.
https://fromsmash.com/-G4UEonUeX-c0

For general volume, an user has developed a plug-in to solve it, but
it shouldn't be solved by plug-ins.

How did I discover this?

The past week an user reported to me an issue with my add-on called
beepKeyboard. I was unable to reproduce his issue because I tested it
on all my computers and worked correctly. Worked because I don't have
the original realtec drivers.

some days ago I received a very small laptop with a fresh copy of
windows 10 and the issues appeared.
Its worse when using this laptop in battery mode.

the sound feature of the mouse movement worked incorrectlytoo, so the
issue is not in my add-on. The synthesizer is interrupted when NVDA
plays a tone.
Then I did a simple two tests.
1. Play a tone beep from console. The delay between I send the command
and the tone was played, is very high.
2. Opened the console, and set a timer to play a tone in 1 second.
Then I read a text with the current synth, and the tone interrupted
the synth when speaking.

I thought that the issue was in the tones library,so I wrote my own
tones library. It worked correctly on mono, but when I set it to
stereo, the issues were the same.

Then I solved it sending small chunks of audio to the player in a
background thread. By this way,I can control the stop functionality of
a beep without using player.stop method.
I send this libraryin an add-on to some users, worked correctly for
them in all cases. No latency, no synth interruptions.

P.S: sorry for sending this to both lists. Is a priority issue I
think.And the devel list is not very read in my opinion.

Cheers,
DaVid.










--
with best regards beqa

Join nvda-devel@groups.io to automatically receive all group messages.