diff --git a/README.md b/README.md index 87fed77..b8444f0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A remote control app for [Voicemeeter][voicemeeter], designed to be used with the [NVDA screen reader][nvda]. -This is still an early release but it should be usable. +For an outline of this projects goals see the [SPECIFICATION][spec]. Image of Voicemeeter NVDA app settings tab @@ -18,11 +18,31 @@ This is still an early release but it should be usable. ### Installation -First clone the source files from this repository +#### `From Source` -`git clone https://github.com/onyx-and-iris/nvda-voicemeeter.git` +First clone the source files from this repository and install the dependencies. -Then download the [Controller Client][controller_client] and place the files into the directory `controllerClient`. +``` +git clone https://github.com/onyx-and-iris/nvda-voicemeeter.git +cd nvda-voicemeeter +pip install . +``` + +Then download the [Controller Client][controller_client] and place the dll files into the directory `controllerClient`. + +Your directory structure should look like this: + +├── `controllerClient/` + +        ├── `x64/` + +                ├── nvdaControllerClient64.dll + +        ├── `x86/` + +                ├── nvdaControllerClient32.dll + +#### `From Releases` If you want to get started quickly and easily I have uploaded some compiled versions of the app in the [Releases][releases] section. @@ -52,24 +72,38 @@ May be one of the following: ### Use -The app presents four tabs `Settings`, `Physical Strip`, `Virtual Strip` and `Buses`. Navigate between the tabs with `Control + TAB` and `Control + SHIFT + TAB`. +#### `Tabs` + +The app presents four tabs `Settings`, `Physical Strip`, `Virtual Strip` and `Buses`. Navigate between the tabs with `Control + TAB` and `Control + SHIFT + TAB` or once focused on any tab, `Left` and `Right` arrow keys. All controls within the tabs may be navigated between using `TAB`. +#### `Settings` + The following controls offer context menus accessed by pressing `SPACE` or `ENTER`: - Hardware In - Hardware Out - Patch Composite +Press `ESCAPE` to exit any context menu. + All other buttons can be triggered by pressing `SPACE` or `ENTER`. To adjust Patch Asio Inputs to Strips and Patch Insert values use `UP` and `DOWN` arrows when in focus. +To access Advanced Settings you may press the Advanced Settings button or use `Control + A` when in the `Settings` tab. + +#### `Strip/Bus` + To rename a strip/bus channel navigate to the relevant tab, then press `F2`. This will open a popup window where you can set the channel index (with a spinbox) and set the new label using a text input box. + Pressing the `OK` button with an empty text input will clear the label. In this case the label will be read as a default value for that channel. For example, if the leftmost Strip label were cleared, the screen reader will now read `Hardware Input 1`. + Pressing `Cancel` will close the popup window with no affect on the label. +#### `Menu` + A single menu item `Voicemeeter` can be opened using `Alt` and then `v`. The menu allows you to: - Restart Voicemeeter audio engine @@ -94,6 +128,7 @@ If you have any questions/suggestions feel free to raise an issue or open a new [PySimpleGUI](https://github.com/PySimpleGUI) team for creating an awesome GUI framework. +[spec]: ./SPECIFICATION.md [voicemeeter]: https://voicemeeter.com/ [nvda]: https://www.nvaccess.org/ [controller_client]: https://github.com/nvaccess/nvda/tree/master/extras/controllerClient diff --git a/SPECIFICATION.md b/SPECIFICATION.md new file mode 100644 index 0000000..3841b69 --- /dev/null +++ b/SPECIFICATION.md @@ -0,0 +1,30 @@ +# Software Specification + +## Description + +A remote control utility for Voicemeeter designed to be used with the NVDA screen reader. + +## Requirements + +#### Functional Goals + +- Parameter updates caused by user input should be read back to the user via the screen reader. +- When focusing a control the current value for that control should be read back to the user. +- The application should scale correctly according to each kind of Voicemeeter (basic, banana, potato). This means the following: + - Correct number of strips/buses. + - Correct number of bus assignments for each strip. + - Where certain controls are valid for one kind they may not be for another. +- Where possible set limits on data entry and keep controls appropriate for the type of parameter. + +#### Accessibility Goals + +- Every control must be usable with a keyboard. +- Navigation around the application must be doable with a keyboard. +- Should use standard Windows controls only. + +## Limitations + +- May not cover 100% of the Voicemeeter GUI, for example the many EQ parameters. +- Only designed to work with the NVDA screen reader. Other screen readers not supported. +- Only the main Voicemeeter GUI supported by this application. No support for Matrix or other Voicemeeter products. +- Runs on Python version 3.10 or greater. diff --git a/pdm.lock b/pdm.lock index b5e223e..e463c44 100644 --- a/pdm.lock +++ b/pdm.lock @@ -6,7 +6,7 @@ groups = ["default", "build", "lint", "test"] cross_platform = true static_urls = false lock_version = "4.3" -content_hash = "sha256:9051151ac4ac0edefdfaf52faa91dbff89d8bbc942a6ffa61b6ec6fee502aa8a" +content_hash = "sha256:ba53368b628b713c9cf4eb54e6f5c5c4af207c8e247d473417e4c2a4b47f645d" [[package]] name = "altgraph" diff --git a/pyproject.toml b/pyproject.toml index 0e93ee4..297403a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ dependencies = [ "pyparsing>=3.1.1", "voicemeeter-api>=2.4.9", ] -requires-python = ">=3.10,<3.11" +requires-python = ">=3.10,<3.12" readme = "README.md" [project.license]