Code Monkey home page Code Monkey logo

oxygen's Introduction

Oxygen Voice Journal

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

Motivation

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.

Dependencies

Building Oxygen requires Rust, Node 16, and CMake on all platforms. The Linux build also requires ALSA development files.

Linux

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.

macOS

I recommend installing Node and CMake using brew (brew install node cmake), and Rust using rustup.

Windows

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.

Building the CLI

This project uses Rust. Once Rust is installed, you can build and run the oxygen CLI with cargo:

cd ./core
cargo run

Using the CLI

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.

Running the UI

To run the UI:

cd ./ui
npm install
npm start

Tests

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`.

Building the app in release mode

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.

Contributing

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.

oxygen's People

Contributors

jocelyn-stericker avatar ajetski avatar pushrax avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.