<p align="center">
<img src="https://raw.githubusercontent.com/ianjamesburke/nooise/v1.0.4/assets/nooise-wordmark.svg" alt="nooise" width="760">
</p>
<p align="center">
Ambient music generator for the terminal.
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/ianjamesburke/nooise/v1.0.4/assets/nooise-preview.png" alt="nooise running in a terminal" width="900">
</p>
I wanted an excuse to build a Rust synth engine. I kept putting on long, repetitive ambient music to get into flow, so I made a small terminal app that does that.
Playlist: https://www.youtube.com/playlist?list=PLdHqCi9SgnRY
## Install
nooise requires Rust. Install it with rustup:
```sh
Open a new terminal after rustup finishes, then install nooise:
```sh
cargo install nooise --locked
```
## Start
```sh
nooise
```
Use arrows to browse and adjust controls, and Tab to move between layers.
Press `Ctrl+Q` to quit.
While browsing, hold `z` for a reverb Bloom, `c` to Submerge the sound,
`v` for Echo, `b` to Thin the layer, or `x` to Lift its low end out. Release
to return in 50 ms. The
current layer is the target; on Master, the gesture affects the whole mix.
Arrows and Tab keep working while you hold a gesture. These holds require
a terminal that reports key releases; the footer shows when support is missing.
See [live performance](docs/PERFORMANCE.md) for overlap, saving, and Sequence.
```sh
nooise --version
```
The app checks crates.io at most once every 24 hours while running and shows a
small update message when a newer release is available.
## Update
```sh
nooise update
```
Checks crates.io and only reinstalls when a newer release exists.
`nooise upgrade` does the same thing.
## Render to a File
```sh
nooise render --seconds 60 --out ambient.wav
```
Renders the default mix straight to a wav, no audio device needed. Pass `--seed N` to make the render reproducible.
## From Source
```sh
cargo run
```