{"id":50977403,"url":"https://github.com/xandwr/termwaves","last_synced_at":"2026-06-19T09:32:48.501Z","repository":{"id":363254372,"uuid":"1262313462","full_name":"xandwr/termwaves","owner":"xandwr","description":"Real-time audio visualization in the terminal, driven by PipeWire","archived":false,"fork":false,"pushed_at":"2026-06-08T05:48:16.000Z","size":192,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T06:23:41.671Z","etag":null,"topics":["audio","dsp","oscilloscope","pipewire","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xandwr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-07T21:01:18.000Z","updated_at":"2026-06-08T05:48:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xandwr/termwaves","commit_stats":null,"previous_names":["xandwr/termwaves"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/xandwr/termwaves","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xandwr%2Ftermwaves","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xandwr%2Ftermwaves/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xandwr%2Ftermwaves/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xandwr%2Ftermwaves/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xandwr","download_url":"https://codeload.github.com/xandwr/termwaves/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xandwr%2Ftermwaves/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34526065,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","dsp","oscilloscope","pipewire","rust"],"created_at":"2026-06-19T09:32:44.857Z","updated_at":"2026-06-19T09:32:48.470Z","avatar_url":"https://github.com/xandwr.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# termwaves\n\nReal-time audio visualization in the terminal, driven by [PipeWire](https://pipewire.org/).\n\n`termwaves` captures system audio via PipeWire and turns it into live oscilloscope\nand spectrum data. It ships as two crates:\n\n- **`termwaves`**: a library providing PipeWire capture, an FFT, a waveform scope,\n  and a spectrum analyzer with no rendering dependencies of its own.\n- **`termwaves-client`**: a [ratatui](https://ratatui.rs/) TUI that renders the\n  visualizers, installed as the `termwaves` command.\n\n\u003e **Platform:** Linux with PipeWire. The library links against the system PipeWire\n\u003e libraries (`libpipewire-0.3`), so those development headers must be installed.\n\n## Install the client\n\n```sh\ncargo install termwaves-client\ntermwaves\n```\n\n### Keybindings\n\n| Key            | Action                         |\n| -------------- | ------------------------------ |\n| `q` / `Esc`    | Quit                           |\n| `+` / `-`      | Zoom the time window in / out  |\n| `Tab` / `c`    | Cycle channel                  |\n| `F9`           | Toggle help overlay            |\n| `F10`          | Toggle settings overlay        |\n| `F1`–`F8`      | Select view                    |\n\n## Use the library\n\n```toml\n[dependencies]\ntermwaves = \"0.1\"\n```\n\n```rust\nuse termwaves::{Spectrum, WaveScope, start};\n\n// Begin capturing system audio from PipeWire.\nlet capture = start()?;\n\n// Build a spectrum analyzer over 32 logarithmic bands from 24 Hz to 20 kHz.\nlet mut spectrum = Spectrum::new(48_000, 32, 24.0, 20_000.0);\nlet mut scope = WaveScope::new();\n```\n\nPublic types: `start` / `CaptureHandle` (capture), `Fft`, `WaveScope` / `Envelope`\n(waveform), and `Spectrum` / `Band` (frequency analysis).\n\n## Building from source\n\n```sh\ngit clone https://github.com/xandwr/termwaves\ncd termwaves\ncargo run            # runs the client (default member)\n```\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n- MIT license ([LICENSE-MIT](LICENSE-MIT))\n\nat your option.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxandwr%2Ftermwaves","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxandwr%2Ftermwaves","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxandwr%2Ftermwaves/lists"}