프로젝트 소개

Music Player는 Rust로 작성된 확장 가능한 음악 데몬, 서버, 클라이언트로, 런타임 의존성 없이 단일 바이너리로 배포됩니다. MPD와 Mopidy의 정신을 따라 설계되었습니다. 재생은 Rockbox 펌웨어의 오디오 엔진(rockbox-playback, rockbox-dsp, rockbox-metadata 크레이트를 통해)으로 구동되며, MP3, FLAC, Vorbis, Opus, MP4/AAC/ALAC, WavPack, APE, WMA, 칩튠을 포함한 40개 이상의 포맷을 지원합니다. DSP 체인은 EQ 프리셋, 크로스페이드, ReplayGain을 제공하며, 갭리스 수준의 버퍼링과 네이티브 HTTP 스트리밍을 갖추고 있습니다. 데몬은 음악 라이브러리를 FTS5 전문 검색이 적용된 SQLite로 인덱싱하며, 데이터베이스 트리거에 의해 자동으로 동기화 상태가 유지됩니다. 라이브러리를 gRPC(tonic, grpc-web 활성화), GraphQL(GraphiQL 포함), WebSocket 이벤트, 웹 UI를 통해 노출합니다. 동일한 바이너리가 서버와 클라이언트 역할을 모두 수행합니다. 첫 실행 시 데몬이 시작되고, 이후 실행은 데몬에 연결됩니다. 사용자 인터페이스는 다음과 같습니다: - fzf 스타일 퍼지 파인더, neovim에서 영감을 받은 상태 표시줄, 도움말 오버레이가 있는 터미널 UI(ratatui). - GraphQL 구독을 통한 실시간 재생 위치 표시, 휴대폰 너비까지 반응형인 웹 UI(React 19, TanStack Query, Jotai, Tailwind v4). - 웹 UI와 동일한 스킨, 폰트, 컴포넌트를 공유하며 내장 데몬을 갖춘 스킨 적용 가능한 Slint 데스크톱 앱. 추가 기능: - Subsonic/Navidrome 및 Jellyfin 서버에서 탐색 및 스트리밍. - Chromecast 및 UPnP/DLNA 렌더러로 캐스팅하거나 다른 music-player 데몬을 제어. - 북마크와 전체 화면 현재 재생 뷰가 있는 인터넷 라디오 검색 및 탐색(Radio Browser + TuneIn). - AT Protocol을 통한 Rocksky 스크로블링. - 기기 간 라디오 북마크 및 좋아하는 곡의 AT Protocol 동기화. - Chromaprint를 통한 음향 핑거프린팅으로, 오디오로 파일을 식별하고 태그가 부실한 파일을 AcoustID/MusicBrainz에서 이름 지정. - DuckDB 기반 청취 분석으로, Spotify, Last.fm, Rocksky 기록을 가져와(소스 간 중복 제거) 세션, 건너뛰기, 취향 변화 분석. - 유연한 오디오 출력: 시스템 장치(cpal), stdout, FIFO, Unix 소켓, TCP 소켓. 설치는 curl 설치 스크립트, npm, Homebrew(데스크톱 앱용 macOS cask 포함), APT 및 DNF 저장소, AUR, Nix flakes, macOS(arm64/x86_64) 및 Linux(amd64/arm64)용 사전 빌드 바이너리를 통해 가능합니다. 설정은 ~/.config/music-player/settings.toml에 있으며, 모든 키는 MUSIC_PLAYER_* 환경 변수로 재정의할 수 있습니다.