Topics

Volume Adjustment add-on #review_request


Oleksandr Gryshchenko
 

Friends, brief information about the add-on.
All functions related to volume control for different audio sources are transferred moved here from Unmute add-on.
ReadMe is not ready yet. Development is not yet complete, but the following functions have already been implemented.

Volume Adjustment features are as follows:
* volume control of all audio devices available in the system;
* individual keyboard shortcuts to set the maximum and minimum volume levels for the selected audio source - NVDA+Win+Home or End;
* the ability to select in settings panel the devices and processes that need to be hidden from the general list;
* custom volume change step as a percentage from 1 to 20.

In the near future I will publish a release, but for now, you can test the current dev version:
https://info.alwaysdata.net/volumeAdjustment-dev.nvda-addon

Good luck!
Oleksandr


Brian's Mail list account
 

Would this be windows 10 only?
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: "Oleksandr Gryshchenko" <@grisov>
To: <nvda-addons@nvda-addons.groups.io>
Sent: Wednesday, November 04, 2020 12:09 AM
Subject: [nvda-addons] Volume Adjustment add-on #review_request


Friends, brief information about the add-on.
All functions related to volume control for different audio sources are transferred moved here from Unmute add-on.
ReadMe is not ready yet. Development is not yet complete, but the following functions have already been implemented.

Volume Adjustment features are as follows:
* volume control of all audio devices available in the system;
* individual keyboard shortcuts to set the maximum and minimum volume levels for the selected audio source - NVDA+Win+Home or End;
* the ability to select in settings panel the devices and processes that need to be hidden from the general list;
* custom volume change step as a percentage from 1 to 20.

In the near future I will publish a release, but for now, you can test the current dev version:
https://info.alwaysdata.net/volumeAdjustment-dev.nvda-addon

Good luck!
Oleksandr


Oleksandr Gryshchenko
 

Hi Brian,

I only tested in Windows 10, but in this group someone previously wrote that the add-on also works in Win 7.
The pycaw module documentation does not specify a specific version of the system.
So it needs to be checked.

Stefan, I implemented the function to switch to the program that is currently active.
You can enable this mode in the add-on settings panel.

I will describe work with the add-on in detail in ReadMe.

Good luck to all!
Oleksandr


Stefan Banita
 

Hi Brian.
I tested on Windows 7 and it works.
Best regards.

Stefan Banita

W dniu 2020-11-04 o 10:33, Oleksandr Gryshchenko pisze:

Hi Brian,
I only tested in Windows 10, but in this group someone previously wrote that the add-on also works in Win 7.
The pycaw module documentation does not specify a specific version of the system.
So it needs to be checked.
Stefan, I implemented the function to switch to the program that is currently active.
You can enable this mode in the add-on settings panel.
I will describe work with the add-on in detail in ReadMe.
Good luck to all!
Oleksandr


Oleksandr Gryshchenko
 

Hi colleagues,

Just published the first release of the add-on.
https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Description from the ReadMe file.

Adjust the volume level of all audio devices installed in the system and each running program separately using simple keyboard shortcuts.
You can always change the default keyboard shortcuts to your preferred ones through the NVDA input gestures dialog.

## Features
* adjust the volume level of all audio devices in the system;
* volume control for each running program separately;
* quickly switch to the maximum or minimum volume level of any audio source;
* flexible settings for announcing the list of detected audio devices and running programs;
* automatically switching to the program in focus;
* the ability to set a custom volume change step.

## Switch between audio sources
To go to the previous or next audio source you can use the NVDA+Windows+ left or right arrow key combinations. The list consists of two parts - system audio devices and running audio sessions. Switching occurs cyclically in a circle like NVDA settings circle.
Through the add-on settings panel you can hide any items in this list.
Switching between audio sessions can occur automatically when switching to the window of the corresponding program - this mode can be enabled in the add-on settings panel.

Note: The list of audio sessions changes dinamicly and depends on the running programs.

## Adjust the volume level
When the sound source is selected you can change its volume level using the following commands:
* increase volume - NVDA+Windows+Arrow Up;
* decrease volume - NVDA+Windows+Arrow Down;
* set maximum volume level - NVDA+Windows+Home;
* set minimum volume level - NVDA+Windows+End;
* mute audio source - NVDA+Windows+Arrow Down (when the minimum volume level is already set).

Note: The volume changes by one percent per one keypress by default. This value can be changed in the settings panel in the range from 1 to 20.

## Add-on settings panel
The following options allows to flexibly adjust the behavior of the add-on and the list of audio resources to switch between them.

### Step to change the volume level
The minimum value to which the volume level will be changed with a one keypress. You can set value from 1 to 20 points.

### Automatic audio session switching
If this check box is checked, the add-on will be automatically switching to the audio session that corresponds to the program in focus.
For example, if you are currently browsing a website in Firefox, the add-on will detect this and automatically switch to the Firefox audio session. And you can immediately adjust the volume level for the current process without finding it in the list.

### Hide audio devices
If you do not use one or more audio devices and do not want them to be present when switching between audio sources, you can easily remove them from the main list by simply checking them in the settings panel.
The "Update" button is used to scan all audio devices on the system and display updated information. And all checked elements are remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

### Hide processes
In this list of check boxes you can mark the processes that you want to hide from the main list. These can be, for example, service programs.
The "Update" button is used to update the list of all running processes and available audio sessions. The all checked elements remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

## Change log

### Version 1.0: features of implementation
* This add-on is based on the advanced features of NVDA Unmute add-on, which were removed from the original add-on due to inconsistency with its main task.
* Added the ability to adjust the volume level of all audio devices detected in the system.
* Added keyboard shortcuts to quickly set the maximum and minimum volume levels for the selected audio source.
* Added add-on settings panel.

Good luck!
Oleksandr


Manolo
 

Hi Oleksandr, when I go into the settings it gives error, when I start NVDA there is a small pause of silence that breaks the feedback of the element where the cursor is. It doesn't always do this! I believe it conflicts with other add-ons.
I glue the log to you:


***

ERROR - eventHandler.executeEvent (20:52:57.925) - MainThread (6844):
error executing event: gainFocus on <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionDocumentEditorMozillaIAccessible object at 0x08E2CEF0> with extra args of {}
Traceback (most recent call last):
  File "speech\__init__.pyc", line 523, in getObjectSpeech
  File "documentBase.pyc", line 24, in makeTextInfo
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 108, in __init__
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 167, in _getSelectionBase
RuntimeError: No selection or caret

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "eventHandler.pyc", line 217, in executeEvent
  File "eventHandler.pyc", line 96, in __init__
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\objsounds\globalPlugins\objsounds\__init__.py", line 57, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\applicationDictionary\globalPlugins\applicationDictionary.py", line 85, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\remote\globalPlugins\remoteClient\__init__.py", line 426, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\__init__.py", line 72, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "appModules\thunderbird.pyc", line 28, in event_gainFocus
  File "eventHandler.pyc", line 105, in next
  File "NVDAObjects\behaviors.pyc", line 185, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 1105, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 991, in reportFocus
  File "speech\__init__.pyc", line 478, in speakObject
  File "speech\__init__.pyc", line 538, in getObjectSpeech
  File "documentBase.pyc", line 24, in makeTextInfo
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 89, in __init__
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 210, in _findContentDescendant
LookupError: Object has no text descendants
IO - inputCore.InputManager.executeGesture (20:53:01.980) - winInputHook (6340):
Input: kb(desktop):NVDA+n
IO - inputCore.InputManager.executeGesture (20:53:01.996) - winInputHook (6340):
Input: kb(desktop):NVDA+b
IO - speech.speak (20:53:02.081) - MainThread (6844):
Speaking [CallbackCommand(name=say-all:next), 'Scrivi: Re: [nvda-addons] Volume Adjustment add-on #review_request - Thunderbird']
DEBUG - speechDictHandler.SpeechDict.load (20:53:02.102) - MainThread (6844):
Loading speech dictionary 'C:\Users\Manolo\AppData\Roaming\nvda\speechDicts\appDicts\nvda.dic'...
DEBUG - speechDictHandler.SpeechDict.load (20:53:02.102) - MainThread (6844):
0 loaded records.
IO - speech.speak (20:53:02.142) - MainThread (6844):
Speaking ['NVDA', "Menu'"]
DEBUG - speech.manager.SpeechManager._handleIndex (20:53:02.147) - MainThread (6844):
Unknown index 3, speech probably cancelled from main thread.
IO - inputCore.InputManager.executeGesture (20:53:02.934) - winInputHook (6340):
Input: kb(desktop):downArrow
IO - speech.speak (20:53:02.997) - MainThread (6844):
Speaking ['Preferenze', "Sottomenu'", 'p']
IO - inputCore.InputManager.executeGesture (20:53:03.255) - winInputHook (6340):
Input: kb(desktop):rightArrow
IO - speech.speak (20:53:03.335) - MainThread (6844):
Speaking ['Impostazioni...', 'i', '1 di 7']
IO - inputCore.InputManager.executeGesture (20:53:04.225) - winInputHook (6340):
Input: kb(desktop):enter
DEBUG - gui.settingsDialogs.__new__ (20:53:04.225) - MainThread (6844):
Creating new settings dialog (multiInstanceAllowed:False). State of _instances {}
IO - speech.speak (20:53:04.585) - MainThread (6844):
Speaking ['Impostazioni NVDA: Generale (Configurazione normale)', 'Dialogo']
IO - speech.speak (20:53:04.595) - MainThread (6844):
Speaking ['Categorie', 'Elenco']
IO - speech.speak (20:53:04.615) - MainThread (6844):
Speaking ['Generale', '1 di 32']
IO - inputCore.InputManager.executeGesture (20:53:05.005) - winInputHook (6340):
Input: kb(desktop):v
DEBUG - gui.settingsDialogs.SettingsDialog._setInstanceDestroyedState (20:53:05.037) - MainThread (6844):
Setting state to destroyed for instance: <gui.settingsDialogs.NVDASettingsDialog object at 0x03D39A80>
Current _instances {<gui.settingsDialogs.NVDASettingsDialog object at 0x03D39A80>: 0}
IO - speech.speak (20:53:05.335) - MainThread (6844):
Speaking ['Voce', '2 di 32']
IO - inputCore.InputManager.executeGesture (20:53:05.855) - winInputHook (6340):
Input: kb(desktop):v
IO - speech.speak (20:53:06.025) - MainThread (6844):
Speaking ['Visione', '4 di 32']
IO - inputCore.InputManager.executeGesture (20:53:06.585) - winInputHook (6340):
Input: kb(desktop):v
ERROR - unhandled exception (20:53:06.655) - MainThread (6844):
Traceback (most recent call last):
  File "gui\settingsDialogs.pyc", line 3657, in onCategoryChange
  File "gui\settingsDialogs.pyc", line 597, in onCategoryChange
  File "gui\settingsDialogs.pyc", line 579, in _doCategoryChange
  File "gui\settingsDialogs.pyc", line 500, in _getCategoryPanel
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\settings.py", line 29, in __init__
    super(VASettingsPanel, self).__init__(parent)
  File "gui\settingsDialogs.pyc", line 275, in __init__
  File "gui\settingsDialogs.pyc", line 285, in _buildGui
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\settings.py", line 50, in makeSettings
    self.hideDevices.Append(name, id)
TypeError: ItemContainer.Append(): arguments did not match any overloaded call:
  overload 1: argument 1 has unexpected type 'NoneType'
  overload 2: argument 1 has unexpected type 'NoneType'
  overload 3: argument 1 has unexpected type 'NoneType'
IO - speech.speak (20:53:06.725) - MainThread (6844):
Speaking ['Volume Adjustment', '14 di 32']
IO - inputCore.InputManager.executeGesture (20:53:09.527) - winInputHook (6340):
Input: kb(desktop):NVDA+f1
INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (20:53:09.627) - MainThread (6844):
Developer info for navigator object:
name: 'Volume Adjustment'
role: ROLE_LISTITEM
roleText: None
states: STATE_FOCUSABLE, STATE_SELECTABLE, STATE_FOCUSED, STATE_SELECTED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.Dynamic_ColumnsReview32ListItemIAccessible object at 0x091D8FB0>
Python class mro: (<class 'NVDAObjects.Dynamic_ColumnsReview32ListItemIAccessible'>, <class 'globalPlugins.columnsReview.ColumnsReview32'>, <class 'globalPlugins.columnsReview.ColumnsReview'>, <class 'NVDAObjects.IAccessible.sysListView32.ListItem'>, <class 'NVDAObjects.behaviors.RowWithFakeNavigation'>, <class 'NVDAObjects.behaviors.RowWithoutCellObjects'>, <class 'NVDAObjects.IAccessible.sysListView32.ListItemWithoutColumnSupport'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <class 'garbageHandler.TrackedObject'>, <class 'object'>)
description: None
location: RectLTWH(left=260, top=544, width=157, height=19)
value: None
appModule: <'nvda' (appName 'nvda', process ID 2620) at address 8e16990>
appModule.productName: 'NVDA'
appModule.productVersion: '2020.3'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 1508250
windowClassName: 'SysListView32'
windowControlID: -31911
windowStyle: 1377910861
extendedWindowStyle: 0
windowThreadID: 6844
windowText: ''
displayText: 'Volume Adjustment'
IAccessibleObject: <POINTER(IAccessible) ptr=0x2faac40 at 91e4300>
IAccessibleChildID: 14
IAccessible event parameters: windowHandle=1508250, objectID=-4, childID=14
IAccessible accName: 'Volume Adjustment'
IAccessible accRole: ROLE_SYSTEM_LISTITEM
IAccessible accState: STATE_SYSTEM_SELECTED, STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_SELECTABLE, STATE_SYSTEM_VALID (3145734)
IAccessible accDescription: exception: (-2147352573, 'Impossibile trovare membro.', (None, None, None, 0, None))
IAccessible accValue: None


Il 04/11/2020 18:29, Oleksandr Gryshchenko ha scritto:
Hi colleagues,

Just published the first release of the add-on.
https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Description from the ReadMe file.

Adjust the volume level of all audio devices installed in the system and each running program separately using simple keyboard shortcuts.
You can always change the default keyboard shortcuts to your preferred ones through the NVDA input gestures dialog.

## Features
* adjust the volume level of all audio devices in the system;
* volume control for each running program separately;
* quickly switch to the maximum or minimum volume level of any audio source;
* flexible settings for announcing the list of detected audio devices and running programs;
* automatically switching to the program in focus;
* the ability to set a custom volume change step.

## Switch between audio sources
To go to the previous or next audio source you can use the NVDA+Windows+ left or right arrow key combinations. The list consists of two parts - system audio devices and running audio sessions. Switching occurs cyclically in a circle like NVDA settings circle.
Through the add-on settings panel you can hide any items in this list.
Switching between audio sessions can occur automatically when switching to the window of the corresponding program - this mode can be enabled in the add-on settings panel.

Note: The list of audio sessions changes dinamicly and depends on the running programs.

## Adjust the volume level
When the sound source is selected you can change its volume level using the following commands:
* increase volume - NVDA+Windows+Arrow Up;
* decrease volume - NVDA+Windows+Arrow Down;
* set maximum volume level - NVDA+Windows+Home;
* set minimum volume level - NVDA+Windows+End;
* mute audio source - NVDA+Windows+Arrow Down (when the minimum volume level is already set).

Note: The volume changes by one percent per one keypress by default. This value can be changed in the settings panel in the range from 1 to 20.

## Add-on settings panel
The following options allows to flexibly adjust the behavior of the add-on and the list of audio resources to switch between them.

### Step to change the volume level
The minimum value to which the volume level will be changed with a one keypress. You can set value from 1 to 20 points.

### Automatic audio session switching
If this check box is checked, the add-on will be automatically switching to the audio session that corresponds to the program in focus.
For example, if you are currently browsing a website in Firefox, the add-on will detect this and automatically switch to the Firefox audio session. And you can immediately adjust the volume level for the current process without finding it in the list.

### Hide audio devices
If you do not use one or more audio devices and do not want them to be present when switching between audio sources, you can easily remove them from the main list by simply checking them in the settings panel.
The "Update" button is used to scan all audio devices on the system and display updated information. And all checked elements are remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

### Hide processes
In this list of check boxes you can mark the processes that you want to hide from the main list. These can be, for example, service programs.
The "Update" button is used to update the list of all running processes and available audio sessions. The all checked elements remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

## Change log

### Version 1.0: features of implementation
* This add-on is based on the advanced features of NVDA Unmute add-on, which were removed from the original add-on due to inconsistency with its main task.
* Added the ability to adjust the volume level of all audio devices detected in the system.
* Added keyboard shortcuts to quickly set the maximum and minimum volume levels for the selected audio source.
* Added add-on settings panel.

Good luck!
Oleksandr


Manolo
 

I'm trying to set Hide audio devices but the settings are not saved. Beautiful add-on, very convenient to manage the microphone volume; good boy!

Il 04/11/2020 20:58, Manolo via groups.io ha scritto:
Hi Oleksandr, when I go into the settings it gives error, when I start NVDA there is a small pause of silence that breaks the feedback of the element where the cursor is. It doesn't always do this! I believe it conflicts with other add-ons.
I glue the log to you:


***

ERROR - eventHandler.executeEvent (20:52:57.925) - MainThread (6844):
error executing event: gainFocus on <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionDocumentEditorMozillaIAccessible object at 0x08E2CEF0> with extra args of {}
Traceback (most recent call last):
  File "speech\__init__.pyc", line 523, in getObjectSpeech
  File "documentBase.pyc", line 24, in makeTextInfo
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 108, in __init__
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 167, in _getSelectionBase
RuntimeError: No selection or caret

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "eventHandler.pyc", line 217, in executeEvent
  File "eventHandler.pyc", line 96, in __init__
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\objsounds\globalPlugins\objsounds\__init__.py", line 57, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\applicationDictionary\globalPlugins\applicationDictionary.py", line 85, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\remote\globalPlugins\remoteClient\__init__.py", line 426, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\__init__.py", line 72, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "appModules\thunderbird.pyc", line 28, in event_gainFocus
  File "eventHandler.pyc", line 105, in next
  File "NVDAObjects\behaviors.pyc", line 185, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 1105, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 991, in reportFocus
  File "speech\__init__.pyc", line 478, in speakObject
  File "speech\__init__.pyc", line 538, in getObjectSpeech
  File "documentBase.pyc", line 24, in makeTextInfo
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 89, in __init__
  File "NVDAObjects\IAccessible\ia2TextMozilla.pyc", line 210, in _findContentDescendant
LookupError: Object has no text descendants
IO - inputCore.InputManager.executeGesture (20:53:01.980) - winInputHook (6340):
Input: kb(desktop):NVDA+n
IO - inputCore.InputManager.executeGesture (20:53:01.996) - winInputHook (6340):
Input: kb(desktop):NVDA+b
IO - speech.speak (20:53:02.081) - MainThread (6844):
Speaking [CallbackCommand(name=say-all:next), 'Scrivi: Re: [nvda-addons] Volume Adjustment add-on #review_request - Thunderbird']
DEBUG - speechDictHandler.SpeechDict.load (20:53:02.102) - MainThread (6844):
Loading speech dictionary 'C:\Users\Manolo\AppData\Roaming\nvda\speechDicts\appDicts\nvda.dic'...
DEBUG - speechDictHandler.SpeechDict.load (20:53:02.102) - MainThread (6844):
0 loaded records.
IO - speech.speak (20:53:02.142) - MainThread (6844):
Speaking ['NVDA', "Menu'"]
DEBUG - speech.manager.SpeechManager._handleIndex (20:53:02.147) - MainThread (6844):
Unknown index 3, speech probably cancelled from main thread.
IO - inputCore.InputManager.executeGesture (20:53:02.934) - winInputHook (6340):
Input: kb(desktop):downArrow
IO - speech.speak (20:53:02.997) - MainThread (6844):
Speaking ['Preferenze', "Sottomenu'", 'p']
IO - inputCore.InputManager.executeGesture (20:53:03.255) - winInputHook (6340):
Input: kb(desktop):rightArrow
IO - speech.speak (20:53:03.335) - MainThread (6844):
Speaking ['Impostazioni...', 'i', '1 di 7']
IO - inputCore.InputManager.executeGesture (20:53:04.225) - winInputHook (6340):
Input: kb(desktop):enter
DEBUG - gui.settingsDialogs.__new__ (20:53:04.225) - MainThread (6844):
Creating new settings dialog (multiInstanceAllowed:False). State of _instances {}
IO - speech.speak (20:53:04.585) - MainThread (6844):
Speaking ['Impostazioni NVDA: Generale (Configurazione normale)', 'Dialogo']
IO - speech.speak (20:53:04.595) - MainThread (6844):
Speaking ['Categorie', 'Elenco']
IO - speech.speak (20:53:04.615) - MainThread (6844):
Speaking ['Generale', '1 di 32']
IO - inputCore.InputManager.executeGesture (20:53:05.005) - winInputHook (6340):
Input: kb(desktop):v
DEBUG - gui.settingsDialogs.SettingsDialog._setInstanceDestroyedState (20:53:05.037) - MainThread (6844):
Setting state to destroyed for instance: <gui.settingsDialogs.NVDASettingsDialog object at 0x03D39A80>
Current _instances {<gui.settingsDialogs.NVDASettingsDialog object at 0x03D39A80>: 0}
IO - speech.speak (20:53:05.335) - MainThread (6844):
Speaking ['Voce', '2 di 32']
IO - inputCore.InputManager.executeGesture (20:53:05.855) - winInputHook (6340):
Input: kb(desktop):v
IO - speech.speak (20:53:06.025) - MainThread (6844):
Speaking ['Visione', '4 di 32']
IO - inputCore.InputManager.executeGesture (20:53:06.585) - winInputHook (6340):
Input: kb(desktop):v
ERROR - unhandled exception (20:53:06.655) - MainThread (6844):
Traceback (most recent call last):
  File "gui\settingsDialogs.pyc", line 3657, in onCategoryChange
  File "gui\settingsDialogs.pyc", line 597, in onCategoryChange
  File "gui\settingsDialogs.pyc", line 579, in _doCategoryChange
  File "gui\settingsDialogs.pyc", line 500, in _getCategoryPanel
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\settings.py", line 29, in __init__
    super(VASettingsPanel, self).__init__(parent)
  File "gui\settingsDialogs.pyc", line 275, in __init__
  File "gui\settingsDialogs.pyc", line 285, in _buildGui
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\settings.py", line 50, in makeSettings
    self.hideDevices.Append(name, id)
TypeError: ItemContainer.Append(): arguments did not match any overloaded call:
  overload 1: argument 1 has unexpected type 'NoneType'
  overload 2: argument 1 has unexpected type 'NoneType'
  overload 3: argument 1 has unexpected type 'NoneType'
IO - speech.speak (20:53:06.725) - MainThread (6844):
Speaking ['Volume Adjustment', '14 di 32']
IO - inputCore.InputManager.executeGesture (20:53:09.527) - winInputHook (6340):
Input: kb(desktop):NVDA+f1
INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (20:53:09.627) - MainThread (6844):
Developer info for navigator object:
name: 'Volume Adjustment'
role: ROLE_LISTITEM
roleText: None
states: STATE_FOCUSABLE, STATE_SELECTABLE, STATE_FOCUSED, STATE_SELECTED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.Dynamic_ColumnsReview32ListItemIAccessible object at 0x091D8FB0>
Python class mro: (<class 'NVDAObjects.Dynamic_ColumnsReview32ListItemIAccessible'>, <class 'globalPlugins.columnsReview.ColumnsReview32'>, <class 'globalPlugins.columnsReview.ColumnsReview'>, <class 'NVDAObjects.IAccessible.sysListView32.ListItem'>, <class 'NVDAObjects.behaviors.RowWithFakeNavigation'>, <class 'NVDAObjects.behaviors.RowWithoutCellObjects'>, <class 'NVDAObjects.IAccessible.sysListView32.ListItemWithoutColumnSupport'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <class 'garbageHandler.TrackedObject'>, <class 'object'>)
description: None
location: RectLTWH(left=260, top=544, width=157, height=19)
value: None
appModule: <'nvda' (appName 'nvda', process ID 2620) at address 8e16990>
appModule.productName: 'NVDA'
appModule.productVersion: '2020.3'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 1508250
windowClassName: 'SysListView32'
windowControlID: -31911
windowStyle: 1377910861
extendedWindowStyle: 0
windowThreadID: 6844
windowText: ''
displayText: 'Volume Adjustment'
IAccessibleObject: <POINTER(IAccessible) ptr=0x2faac40 at 91e4300>
IAccessibleChildID: 14
IAccessible event parameters: windowHandle=1508250, objectID=-4, childID=14
IAccessible accName: 'Volume Adjustment'
IAccessible accRole: ROLE_SYSTEM_LISTITEM
IAccessible accState: STATE_SYSTEM_SELECTED, STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_SELECTABLE, STATE_SYSTEM_VALID (3145734)
IAccessible accDescription: exception: (-2147352573, 'Impossibile trovare membro.', (None, None, None, 0, None))
IAccessible accValue: None


Il 04/11/2020 18:29, Oleksandr Gryshchenko ha scritto:
Hi colleagues,

Just published the first release of the add-on.
https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Description from the ReadMe file.

Adjust the volume level of all audio devices installed in the system and each running program separately using simple keyboard shortcuts.
You can always change the default keyboard shortcuts to your preferred ones through the NVDA input gestures dialog.

## Features
* adjust the volume level of all audio devices in the system;
* volume control for each running program separately;
* quickly switch to the maximum or minimum volume level of any audio source;
* flexible settings for announcing the list of detected audio devices and running programs;
* automatically switching to the program in focus;
* the ability to set a custom volume change step.

## Switch between audio sources
To go to the previous or next audio source you can use the NVDA+Windows+ left or right arrow key combinations. The list consists of two parts - system audio devices and running audio sessions. Switching occurs cyclically in a circle like NVDA settings circle.
Through the add-on settings panel you can hide any items in this list.
Switching between audio sessions can occur automatically when switching to the window of the corresponding program - this mode can be enabled in the add-on settings panel.

Note: The list of audio sessions changes dinamicly and depends on the running programs.

## Adjust the volume level
When the sound source is selected you can change its volume level using the following commands:
* increase volume - NVDA+Windows+Arrow Up;
* decrease volume - NVDA+Windows+Arrow Down;
* set maximum volume level - NVDA+Windows+Home;
* set minimum volume level - NVDA+Windows+End;
* mute audio source - NVDA+Windows+Arrow Down (when the minimum volume level is already set).

Note: The volume changes by one percent per one keypress by default. This value can be changed in the settings panel in the range from 1 to 20.

## Add-on settings panel
The following options allows to flexibly adjust the behavior of the add-on and the list of audio resources to switch between them.

### Step to change the volume level
The minimum value to which the volume level will be changed with a one keypress. You can set value from 1 to 20 points.

### Automatic audio session switching
If this check box is checked, the add-on will be automatically switching to the audio session that corresponds to the program in focus.
For example, if you are currently browsing a website in Firefox, the add-on will detect this and automatically switch to the Firefox audio session. And you can immediately adjust the volume level for the current process without finding it in the list.

### Hide audio devices
If you do not use one or more audio devices and do not want them to be present when switching between audio sources, you can easily remove them from the main list by simply checking them in the settings panel.
The "Update" button is used to scan all audio devices on the system and display updated information. And all checked elements are remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

### Hide processes
In this list of check boxes you can mark the processes that you want to hide from the main list. These can be, for example, service programs.
The "Update" button is used to update the list of all running processes and available audio sessions. The all checked elements remain as marked.
"Clear" button - uncheck all checked elements and removes obsolete items.

## Change log

### Version 1.0: features of implementation
* This add-on is based on the advanced features of NVDA Unmute add-on, which were removed from the original add-on due to inconsistency with its main task.
* Added the ability to adjust the volume level of all audio devices detected in the system.
* Added keyboard shortcuts to quickly set the maximum and minimum volume levels for the selected audio source.
* Added add-on settings panel.

Good luck!
Oleksandr


Oleksandr Gryshchenko
 

Hi Manolo,
Thank you for such detailed information!

I seem to understand why there is an error when calling the settings panel.
It seems that such mistakes do not occur in everyone.
On my three computers, everything works smoothly and it's very inconvenient because it's hard to keep track of where the problem is.
I changed the code and updated the release - please try to install the add-on again.
I believe this change will also fix the save error.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Regarding the short startup delay.
I run a scan of available audio devices in a separate thread, but still for some reason there is a short delay...
Tomorrow I will try to find out the reason for such behavior.

Best wishes!


Manolo
 

Uau, Oleksandr! Great, works very well! Congratulations, I really like it!

Il 04/11/2020 22:52, Oleksandr Gryshchenko ha scritto:
Hi Manolo,
Thank you for such detailed information!

I seem to understand why there is an error when calling the settings panel.
It seems that such mistakes do not occur in everyone.
On my three computers, everything works smoothly and it's very inconvenient because it's hard to keep track of where the problem is.
I changed the code and updated the release - please try to install the add-on again.
I believe this change will also fix the save error.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Regarding the short startup delay.
I run a scan of available audio devices in a separate thread, but still for some reason there is a short delay...
Tomorrow I will try to find out the reason for such behavior.

Best wishes!


Manolo
 

Hi, since I set up the sound cards, so I deleted the virtual ones, it gives a lot of errors when starting NVDA. There is a bit generalized instability, the error sound pops up often.
Here is the log:

***

ERROR - external:globalPlugins.translate.GlobalPlugin.loadLocalCache (23:55:04.035) - MainThread (7956):
Cannot read or decode data from C:\Users\Manolo\AppData\Roaming\nvda\translation-cache: Expecting value: line 1 column 1 (char 0)
WARNING - garbageHandler.notifyObjectDeletion (23:55:04.795) - MainThread (7956):
Garbage collector has found one or more unreachable objects. See further warnings for specific objects.
Stack trace:
  File "nvda.pyw", line 215, in <module>
  File "core.pyc", line 480, in main
  File "globalPluginHandler.pyc", line 31, in initialize
  File "globalPluginHandler.pyc", line 23, in listPlugins
  File "importlib\__init__.pyc", line 127, in import_module
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 963, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 906, in _find_spec
  File "<frozen importlib._bootstrap_external>", line 1280, in find_spec
  File "<frozen importlib._bootstrap_external>", line 1252, in _get_spec
  File "<frozen importlib._bootstrap_external>", line 1391, in find_spec
  File "<frozen importlib._bootstrap_external>", line 59, in _path_join
  File "comtypesMonkeyPatches.pyc", line 104, in newCpbDel
  File "garbageHandler.pyc", line 64, in notifyObjectDeletion
WARNING - garbageHandler.notifyObjectDeletion (23:55:04.795) - MainThread (7956):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c68478 at 785d170>
ERROR - garbageHandler._collectionCallback (23:55:04.795) - MainThread (7956):
Found at least 1 unreachable objects in run
INFO - core.main (23:55:04.835) - MainThread (7956):
NVDA initialized
WARNING - garbageHandler.notifyObjectDeletion (23:55:04.925) - MainThread (7956):
Garbage collector has found one or more unreachable objects. See further warnings for specific objects.
Stack trace:
  File "nvda.pyw", line 215, in <module>
  File "core.pyc", line 550, in main
  File "wx\core.pyc", line 2134, in MainLoop
  File "gui\__init__.pyc", line 1050, in Notify
  File "core.pyc", line 520, in run
  File "queueHandler.pyc", line 88, in pumpAll
  File "queueHandler.pyc", line 55, in flushQueue
  File "eventHandler.pyc", line 65, in _queueEventCallback
  File "eventHandler.pyc", line 217, in executeEvent
  File "eventHandler.pyc", line 96, in __init__
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\__init__.py", line 76, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\applicationDictionary\globalPlugins\applicationDictionary.py", line 85, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\objsounds\globalPlugins\objsounds\__init__.py", line 57, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\remote\globalPlugins\remoteClient\__init__.py", line 426, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "appModules\explorer.pyc", line 395, in event_gainFocus
  File "eventHandler.pyc", line 105, in next
  File "NVDAObjects\IAccessible\__init__.pyc", line 1871, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 1105, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 991, in reportFocus
  File "speech\__init__.pyc", line 481, in speakObject
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\speechHistory\globalPlugins\speechHistory.py", line 97, in mySpeak
    oldSpeak(sequence, *args, **kwargs)
  File "speech\__init__.pyc", line 783, in speak
  File "speech\__init__.pyc", line 129, in processText
  File "characterProcessing.pyc", line 638, in processSpeechSymbols
  File "characterProcessing.pyc", line 44, in fetchLocaleData
  File "characterProcessing.pyc", line 408, in __init__
  File "characterProcessing.pyc", line 44, in fetchLocaleData
  File "characterProcessing.pyc", line 371, in _getSpeechSymbolsForLocale
  File "characterProcessing.pyc", line 220, in load
  File "characterProcessing.pyc", line 293, in _loadSymbol
  File "comtypesMonkeyPatches.pyc", line 104, in newCpbDel
  File "garbageHandler.pyc", line 64, in notifyObjectDeletion
WARNING - garbageHandler.notifyObjectDeletion (23:55:04.925) - MainThread (7956):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7d56ad0>
ERROR - garbageHandler._collectionCallback (23:55:04.925) - MainThread (7956):
Found at least 1 unreachable objects in run
WARNING - characterProcessing.SpeechSymbolProcessor.__init__ (23:55:04.995) - MainThread (7956):
Replacement not defined in locale it for symbol: 
WARNING - garbageHandler.notifyObjectDeletion (23:55:05.015) - MainThread (7956):
Garbage collector has found one or more unreachable objects. See further warnings for specific objects.
Stack trace:
  File "nvda.pyw", line 215, in <module>
  File "core.pyc", line 550, in main
  File "wx\core.pyc", line 2134, in MainLoop
  File "gui\__init__.pyc", line 1050, in Notify
  File "core.pyc", line 520, in run
  File "queueHandler.pyc", line 88, in pumpAll
  File "queueHandler.pyc", line 55, in flushQueue
  File "eventHandler.pyc", line 65, in _queueEventCallback
  File "eventHandler.pyc", line 217, in executeEvent
  File "eventHandler.pyc", line 96, in __init__
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\volumeAdjustment\globalPlugins\volumeAdjustment\__init__.py", line 76, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\applicationDictionary\globalPlugins\applicationDictionary.py", line 85, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\objsounds\globalPlugins\objsounds\__init__.py", line 57, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\remote\globalPlugins\remoteClient\__init__.py", line 426, in event_gainFocus
    nextHandler()
  File "eventHandler.pyc", line 105, in next
  File "appModules\explorer.pyc", line 395, in event_gainFocus
  File "eventHandler.pyc", line 105, in next
  File "NVDAObjects\IAccessible\__init__.pyc", line 1871, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 1105, in event_gainFocus
  File "NVDAObjects\__init__.pyc", line 991, in reportFocus
  File "speech\__init__.pyc", line 481, in speakObject
  File "C:\Users\Manolo\AppData\Roaming\nvda\addons\speechHistory\globalPlugins\speechHistory.py", line 97, in mySpeak
    oldSpeak(sequence, *args, **kwargs)
  File "speech\__init__.pyc", line 783, in speak
  File "speech\__init__.pyc", line 129, in processText
  File "characterProcessing.pyc", line 638, in processSpeechSymbols
  File "characterProcessing.pyc", line 44, in fetchLocaleData
  File "characterProcessing.pyc", line 517, in __init__
  File "re.pyc", line 236, in compile
  File "re.pyc", line 288, in _compile
  File "sre_compile.pyc", line 764, in compile
  File "sre_parse.pyc", line 924, in parse
  File "sre_parse.pyc", line 420, in _parse_sub
  File "sre_parse.pyc", line 810, in _parse
  File "sre_parse.pyc", line 420, in _parse_sub
  File "sre_parse.pyc", line 810, in _parse
  File "sre_parse.pyc", line 420, in _parse_sub
  File "sre_parse.pyc", line 543, in _parse
  File "comtypesMonkeyPatches.pyc", line 104, in newCpbDel
  File "garbageHandler.pyc", line 64, in notifyObjectDeletion
WARNING - garbageHandler.notifyObjectDeletion (23:55:05.015) - MainThread (7956):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7367350>
WARNING - garbageHandler.notifyObjectDeletion (23:55:05.015) - MainThread (7956):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 76af8f0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:05.015) - MainThread (7956):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c68478 at 5ce8b20>
ERROR - garbageHandler._collectionCallback (23:55:05.015) - MainThread (7956):
Found at least 3 unreachable objects in run
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Garbage collector has found one or more unreachable objects. See further warnings for specific objects.
Stack trace:
  File "threading.pyc", line 890, in _bootstrap
  File "threading.pyc", line 926, in _bootstrap_inner
  File "threading.pyc", line 870, in run
  File "winInputHook.pyc", line 79, in hookThreadFunc
  File "winInputHook.pyc", line 54, in keyboardHook
  File "keyboardHandler.pyc", line 199, in internal_keyDownEvent
  File "inputCore.pyc", line 449, in executeGesture
  File "baseObject.pyc", line 42, in __get__
  File "baseObject.pyc", line 146, in _getPropertyViaCache
  File "inputCore.pyc", line 158, in _get_script
  File "scriptHandler.pyc", line 103, in findScript
  File "abc.pyc", line 139, in __instancecheck__
  File "abc.pyc", line 143, in __subclasscheck__
  File "abc.pyc", line 143, in __subclasscheck__
  File "abc.pyc", line 143, in __subclasscheck__
  [Previous line repeated 1 more time]
  File "comtypesMonkeyPatches.pyc", line 104, in newCpbDel
  File "garbageHandler.pyc", line 64, in notifyObjectDeletion
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c68478 at 7efd580>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7367350>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 8243c60>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e1c0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e260>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e300>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c68478 at 7e5e210>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e2b0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e350>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c68478 at 7e5e440>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e4e0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e530>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e490>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e620>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e670>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e580>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e5d0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e6c0>
WARNING - garbageHandler.notifyObjectDeletion (23:55:08.731) - winInputHook (3620):
Deleting unreachable object <POINTER(IUnknown) ptr=0x3c687e8 at 7e5e7b0>
ERROR - garbageHandler._collectionCallback (23:55:08.731) - winInputHook (3620):
Found at least 19 unreachable objects in run
INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (23:55:12.319) - MainThread (7956):
Developer info for navigator object:
name: 'Barra delle applicazioni'
role: ROLE_PANE
roleText: None
states: STATE_FOCUSABLE, STATE_FOCUSED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.IAccessible.Taskbar object at 0x0769C790>
Python class mro: (<class 'NVDAObjects.IAccessible.Taskbar'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <class 'garbageHandler.TrackedObject'>, <class 'object'>)
description: None
location: RectLTWH(left=0, top=984, width=1280, height=40)
value: None
appModule: <'explorer' (appName 'explorer', process ID 5132) at address 6161450>
appModule.productName: 'Sistema operativo Microsoft® Windows®'
appModule.productVersion: '10.0.19041.561'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 65722
windowClassName: 'Shell_TrayWnd'
windowControlID: 0
windowStyle: -1778384896
extendedWindowStyle: 136
windowThreadID: 5408
windowText: ''
displayText: ''
IAccessibleObject: <POINTER(IAccessible) ptr=0x5f5afb0 at 7efdda0>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=65722, objectID=-4, childID=0
IAccessible accName: 'Barra delle applicazioni'
IAccessible accRole: ROLE_SYSTEM_CLIENT
IAccessible accState: STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048580)
IAccessible accDescription: None
IAccessible accValue: None

Il 04/11/2020 23:11, Manolo via groups.io ha scritto:
Uau, Oleksandr! Great, works very well! Congratulations, I really like it!
Il 04/11/2020 22:52, Oleksandr Gryshchenko ha scritto:
Hi Manolo,
Thank you for such detailed information!

I seem to understand why there is an error when calling the settings panel.
It seems that such mistakes do not occur in everyone.
On my three computers, everything works smoothly and it's very inconvenient because it's hard to keep track of where the problem is.
I changed the code and updated the release - please try to install the add-on again.
I believe this change will also fix the save error.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.0/volumeAdjustment-1.0.nvda-addon

Regarding the short startup delay.
I run a scan of available audio devices in a separate thread, but still for some reason there is a short delay...
Tomorrow I will try to find out the reason for such behavior.

Best wishes!


Rowen Cary
 

Hi, Oleksandr.
Very good Add-on, 
Can you add a function to switch the sound output device?
 


Oleksandr Gryshchenko
 

Hi colleagues,
i optimized the code of Volume Adjustment add-on.

Manolo, thanks for quoting the NVDA log - it allowed me to correct some mistakes.

Rowen, the pycaw module must scan all input and output audio devices.
But for some reason on some systems there are errors in the process of device detection.
The add-on ignores such devices, so they are not displayed.

I updated the add-on code.
At least one default audio output device should now be displayed.

The following changes have been made:

* fixed bug duplication of audio sessions for one running process;
For some reason, one running process can create multiple audio sessions. For example, Skype creates two or three audio sessions with the same name during a call.
Only one audio session is currently displayed, which is related to the running process. The volume control also works.

* the event_gainFocus () method, which tracks programs in system focus, is simplified as much as possible.
Earlier in the add-on in this method there occurred uncertain errors.

* the list of audio devices is scanned the first time user access them, not at the NVDA startup;
This removed the short pause that occurred during the launch of NVDA.

* overriding the default output device in another way if the first attempt was unsuccessful;
* improved code of add-on settings panel and many smaller changes.

Please, who is interested - try to update the add-on.
There are currently no errors in NVDA logs on my home computers. I hope now the add-on will work more stably.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.1/volumeAdjustment-1.1.nvda-addon

Have a nice week!
Oleksandr


Manolo
 

Hi Oleksandr, I don't know how to give you a log to help you out. Unfortunately NVDA crashes; I'll describe to you what happens to me: if I change source and then do alt + tab NVDA crashes and restarts, then, I wanted to point out that the add-on goes to look for card drivers that I installed years ago but are no longer there. part of my NVDA crashes are caused by this problem. The add-on should only see active audio devices and not deactivated and uninstalled. If I can give you a log I send it to you, somehow, I remember it was possible to do it even if NVDA chrasha. Greetings!


Il 08/11/2020 23:47, Oleksandr Gryshchenko ha scritto:
Hi colleagues,
i optimized the code of Volume Adjustment add-on.

Manolo, thanks for quoting the NVDA log - it allowed me to correct some mistakes.

Rowen, the pycaw module must scan all input and output audio devices.
But for some reason on some systems there are errors in the process of device detection.
The add-on ignores such devices, so they are not displayed.

I updated the add-on code.
At least one default audio output device should now be displayed.

The following changes have been made:

* fixed bug duplication of audio sessions for one running process;
For some reason, one running process can create multiple audio sessions. For example, Skype creates two or three audio sessions with the same name during a call.
Only one audio session is currently displayed, which is related to the running process. The volume control also works.

* the event_gainFocus () method, which tracks programs in system focus, is simplified as much as possible.
Earlier in the add-on in this method there occurred uncertain errors.

* the list of audio devices is scanned the first time user access them, not at the NVDA startup;
This removed the short pause that occurred during the launch of NVDA.

* overriding the default output device in another way if the first attempt was unsuccessful;
* improved code of add-on settings panel and many smaller changes.

Please, who is interested - try to update the add-on.
There are currently no errors in NVDA logs on my home computers. I hope now the add-on will work more stably.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.1/volumeAdjustment-1.1.nvda-addon

Have a nice week!
Oleksandr


Manolo
 

One more thing, I forgot! At startup NVDA struggles if I have filtered out the audio devices that should not be in control. It stays muted for a few seconds as if it were looking for something, after a while the add-on crashes NVDA starts to work.Yes, now I write this mail and it works ok, but the situation is random. I think there is an add-on that saves the NVDA log when it crashes.

I send the log.Thank you!

Il 08/11/2020 23:47, Oleksandr Gryshchenko ha scritto:
Hi colleagues,
i optimized the code of Volume Adjustment add-on.

Manolo, thanks for quoting the NVDA log - it allowed me to correct some mistakes.

Rowen, the pycaw module must scan all input and output audio devices.
But for some reason on some systems there are errors in the process of device detection.
The add-on ignores such devices, so they are not displayed.

I updated the add-on code.
At least one default audio output device should now be displayed.

The following changes have been made:

* fixed bug duplication of audio sessions for one running process;
For some reason, one running process can create multiple audio sessions. For example, Skype creates two or three audio sessions with the same name during a call.
Only one audio session is currently displayed, which is related to the running process. The volume control also works.

* the event_gainFocus () method, which tracks programs in system focus, is simplified as much as possible.
Earlier in the add-on in this method there occurred uncertain errors.

* the list of audio devices is scanned the first time user access them, not at the NVDA startup;
This removed the short pause that occurred during the launch of NVDA.

* overriding the default output device in another way if the first attempt was unsuccessful;
* improved code of add-on settings panel and many smaller changes.

Please, who is interested - try to update the add-on.
There are currently no errors in NVDA logs on my home computers. I hope now the add-on will work more stably.

https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.1/volumeAdjustment-1.1.nvda-addon

Have a nice week!
Oleksandr


Oleksandr Gryshchenko
 

Hi colleagues,

Unfortunately, I was unable to resolve the issue that caused errors on some systems when enumerating available audio devices.
It looks like the reason is in the PyCaw module used in the add-on.
In main repository there are open issues that indicate about this:
* https://github.com/AndreMiras/pycaw/issues/15
* https://github.com/AndreMiras/pycaw/issues/19

So I moved this advanced feature of the add-on to a separate option and noticed it as an experimental feature.
If desired, you can enable this check box in the add-on settings panel, as on some systems this feature still works correctly.

Another strange behavior occurs when using Skype.
When it starts, two or three audio sessions appear, duplicating each other.
So I added a checkbox in the settings panel to be able to hide duplicate audio sessions.

As for adjusting the volume for the Skype process - for some reason it works from time to time...
Unfortunately, I have not yet been able to understand the reason for this behavior.
I have tested the add-on with various programs and I must note that such strange behavior occurs only when using Skype.

Also, one user created a feature request to quickly switching the output to other audio devices:
https://github.com/grisov/NVDA_Volume_Adjustment/issues/6
NVDA has a standard dialog box that allows you to do this, which is called using NVDA+Ctrl+S.
The add-on allows now to quickly switch the output of NVDA sounds simply by pressing NVDA+Windows+PageUp or NVDA+Windows+PageDown.

Updated version of Volume Adjustment add-on is here:
https://github.com/grisov/NVDA_Volume_Adjustment/releases/download/v1.1/volumeAdjustment-1.1.nvda-addon

I wish everyone a good week-end!
Keep yourselves.
Oleksandr