CLIAMP — ターミナル版 Winamp(CLIAMP)
概要
CLIAMP は、Winamp 2.x の雰囲気をターミナル上で再現するレトロな音楽プレイヤーです。MP3 の再生に対応し、10バンドのスペクトラム表示と10バンドのパラメトリックイコライザで音を視覚的かつ直感的に調整できます。プレイリスト機能を備え、Bubbletea(TUIフレームワーク)と Lip Gloss(スタイリング)、Beep(オーディオ処理)といった Go エコシステムのライブラリを組み合わせて構築されているため、TUIアプリケーションとしての表現力と音声処理の実装が特徴です。コンパクトなコードベースで動作し、ターミナル操作に慣れたユーザーに向けた軽量プレイヤーを提供します。
リポジトリの統計情報
- スター数: 29
- フォーク数: 0
- ウォッチャー数: 29
- コミット数: 3
- ファイル数: 9
- メインの言語: Go
主な特徴
- ターミナル上で動作する Winamp 風のUI(TUI)
- MP3 再生サポートとプレイリスト管理
- 10バンドスペクトラムビジュアライザで音の可視化
- 10バンドパラメトリックEQによるリアルタイム調整
技術的なポイント
CLIAMP は Go 言語で記述され、TUI 部分に Bubbletea、スタイリングに Lip Gloss を採用しています。これにより、Model-Update-View パターンで状態管理を行い、キーボード入力や画面描画を効率的に扱える点がメリットです。音声処理には Beep ライブラリを利用しており、MP3 データのデコード→ストリーミング再生→エフェクト(EQなど)というパイプラインが構成されています。
スペクトラム表示は音声のサンプルを解析して周波数成分を可視化する仕組みを持ちます。一般にこの種のビジュアライザはウィンドウ内のサンプルに対してFFT(高速フーリエ変換)やフィルタバンク処理を行うことで周波数ごとのエネルギーを算出します。CLIAMP の小規模なコードベースから想定されるのは、Beep から取り出したサンプルを一定間隔で集め、周波数帯ごとにエネルギーを算出して10バンドにマッピングしている実装です。パラメトリックEQは各バンドに対するゲインやQ値を適用することで、ストリーム上でリアルタイムにフィルタをかける構成になっていると考えられます。
UI は ASCII アート風の枠組みやカラースキームでレトロ感を出しつつ、Lip Gloss による余白や色付けで見やすさを保っています。これにより低解像度の端末でも見栄えを保てる設計です。また、Go の単一バイナリとして配布可能な点は、依存関係の少なさとクロスコンパイルの容易さという利点を与えます。
現状コミット数やファイル数が少ないため開発初期・プロトタイプ段階にあり、拡張ポイントとしては以下が挙げられます:MP3 以外のフォーマット対応、スペクトラムやEQの詳細設定(Qや中心周波数の微調整)、再生のギャップレス対応、プレイリストの永続化やタグベースのブラウズ機能など。TUI と音声処理を分離したテスト可能な設計にしておくと、将来的な機能追加やユニットテストの導入が容易になります。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- README.md: file
- go.mod: file
- go.sum: file
- main.go: file
…他 4 ファイル
まとめ
レトロな見た目と実用的な音声機能を両立する、ターミナル向け音楽プレイヤーのプロトタイプです。
リポジトリ情報:
- 名前: cliamp
- 説明: Terminal Winamp
- スター数: 29
- 言語: Go
- URL: https://github.com/bjarneo/cliamp
- オーナー: bjarneo
- アバター: https://avatars.githubusercontent.com/u/1419214?v=4
READMEの抜粋:
CLIAMP
A retro terminal music player inspired by Winamp 2.x. MP3 playback with a 10-band spectrum visualizer, 10-band parametric EQ, and playlist management.
Built with Bubbletea, Lip Gloss, and Beep.
https://github.com/user-attachments/assets/270ee066-95d2-4a3b-90bc-68a67ae9b92f
Ascii
╭────────────────────────────────────────────────────────────────╮
│ ...