Oxygen is a voice journal and audio analysis toolkit for people who want to change the way their voice comes across. Or rather, it will be. This is still in very early development.
You can watch me code this at https://www.youtube.com/c/JocelynStericker
Like many others, I couldn't stand my voice, but it's not until fairly recently that I learned just how flexible our vocal system is and took advantage of that. With the risk of being a little bold, with enough training, it's possible for most people to develop their voice to take on the character of another voice they like. The main limitation is that it can be physically impossible to develop a darker, more boomy voice than your vocal tract supports, but otherwise, whatever traits you wish your voice had, you can probably build them!
Voice training feels a bit like a game. The "core loop" is recording a sample, analyzing it, both with my ear and with software, trying to change some aspect of it, and then repeating. Progress is slow, so it's also important to be able to look back weeks or months to see improvement and stay motivated. Software can help visualize or measure the aspects we need to work on, but my current setup, without that software, is a bit of a Rube Goldberg machine, and I hope I can make training more accessible, organized, and addicting.
Building Oxygen requires Rust, Node 16, and CMake on all platforms. The Linux build also requires ALSA development files.
I recommend installing Rust using rustup.
Oxygen is tested with Node 16. If your package manager contains Node 16, I recommend using that. Otherwise, see Installing Node.js via package manager.
I recommend installing CMake via your package manager.
In addition, on Linux, the ALSA development files are required. These are provided as part of the libasound2-dev
package on Debian and Ubuntu distributions and alsa-lib-devel
on Fedora.
I recommend installing Node and CMake using brew (brew install node cmake
), and Rust using rustup.
I recommend installing all dependencies from the download links on their homepages.
When installing Rust and Node on Windows, please follow the instructions in the respective installers to install associated build tools.
This project uses Rust. Once Rust is installed, you can build and run the oxygen CLI with cargo:
cd ./core
cargo run
You can run the CLI by running cargo run
in ./core
.
Oxygen will store clips in the "oxygen.sqlite" file in the current working directory.
Oxygen supports the following commands:
cargo run -- record [name]
Record an audio clip using the default input device until ctrl+c is pressed.
If name is not specified, the current date and time will be used.
cargo run -- list
List all clips
cargo run -- record [name]
cargo run -- play name
Play the clip with the given name
cargo run -- delete name
Delete the clip with the given name
cargo run -- import path [name]
Import the clip at the given path. If a name is not specified, the clip will be
named after the path.
cargo run -- export name path
Export the clip with the given name to the given path.
The path should end in ".wav".
cargo run -- export-all folder
Export all clips to the given folder.
To run the UI:
cd ./ui
npm install
npm start
To run UI and integration tests, as well as lints, run:
cd ./ui
npm test
You can also run jest directly with:
cd ./ui
npm run dev:build-core
npm run jest
Or in watch mode with:
cd ./ui
npm run dev:build-core
npm run jest -- --watch`.
To build a package to ui/out
:
cd ./ui
npm run prod:package
To create the kind of asset that would get uploaded to GitHub releases:
cd ./ui
npm run prod:make
npm run prod:publish
would publish the app to GitHub releases, but it requires GITHUB_TOKEN
to be set. We only publish releases from GitHub Actions.
Bug fixes are very welcome! I do have a rough roadmap planned for this project, and am uploading development recordings, so reach out (e.g., in issues) before implementing any major features.