프로젝트 소개

NeriPlayer는 Jetpack Compose와 Media3로 구축된 네이티브 Android 오디오 플레이어로, Android 9(API 28) 이상 기기를 지원합니다. 프로젝트는 '다중 소스 탐색, 온라인 재생, 로컬 제어, 데이터 자체 보유'를 지향하며, 공용 클라우드 음원 라이브러리나 미디어 배포 서비스를 제공하지 않습니다. 온라인 기능은 사용자가 제3자 플랫폼에서 계정을 인증하는 데 의존합니다. 주요 기능은 다음과 같습니다: - 다중 소스 온라인 재생: NetEase Cloud Music, Bilibili, YouTube Music을 통합하며, 검색, 플레이리스트, 즐겨찾기, 앨범, 아티스트 상세 등의 진입점을 지원하고, 음원 파싱, 큐 관리, 실패 복구를 제공합니다. NetEase Cloud Music에 권한이 없거나 미리듣기 일부만 반환되는 경우 음질을 낮추고, 설정에 따라 Bilibili 또는 로컬 오디오로 대체합니다. - 로컬 우선 데이터: 재생 캐시, 다운로드 파일, 플레이리스트, 재생 기록, 재생 통계, 설정은 기본적으로 기기 로컬에 저장됩니다. 플랫폼 쿠키, GitHub 토큰, WebDAV 비밀번호 등은 Android Keystore와 EncryptedSharedPreferences로 암호화하여 저장합니다. - 선택적 자체 동기화: 로컬 플레이리스트, 즐겨찾기, 최근 재생, 재생 통계 등의 메타데이터를 사용자 자신의 GitHub 저장소 또는 WebDAV 원격 파일에 동기화할 수 있으며, WorkManager를 사용하여 지연 및 주기적 동기화를 수행하고 3방향 병합으로 충돌을 처리합니다. - 가사 경험: 줄 단위, 단어/글자 단위 LRC, YRC/TTML 가사의 하이라이트, 번역, 음역, 오프셋, 클릭 점프, 길게 눌러 공유, 가사 카드 생성을 지원합니다. 가사 편집기를 제공하며 LRCLIB 등 외부 소스를 연결할 수 있고, 플로팅 가사, 상태 표시줄 가사, SuperLyric, Lyricon, 블루투스 가사 출력을 지원합니다. - 재생 및 음향 효과: Media3 ExoPlayer 기반으로 배속, 피치, 이퀄라이저, 라우드니스 향상, 페이드 인/아웃, 크로스페이드, 블루투스 연결 끊김 시 일시정지, 오디오 포커스 정책, UAC1.0 및 호환 UAC2.0 Type I PCM 장치를 위한 USB 독점 재생을 지원합니다. - 다운로드 및 로컬 관리: 앱 내 다운로드는 여러 플랫폼 오디오, 작업 진행률, 취소/재시도, 중단점 이어받기(직접 HTTP, 청크 Range, HLS 각각 처리)를 지원하며, 기본 동시성 6, 최대 8입니다. SAF 사용자 지정 다운로드 디렉터리와 파일 이름 템플릿을 지원합니다. 로컬 오디오는 외부 공유, 기기 스캔 또는 권한 있는 폴더 스캔으로 가져올 수 있으며, 인접한 가사와 커버 파일을 인식합니다. - 함께 듣기: Cloudflare Workers와 Durable Objects를 통해 방, 역할, 큐, 재생 상태, 반복/셔플 모드 동기화를 제공하며, 초대 링크, 딥링크 참여, 사용자 지정 서버, 방장 오프라인 복구를 지원합니다. - 진단 및 복구: 안전 모드, 크래시 로그, ANR 기록, 개발자 모드 디버깅 프로브, 저장 공간 사용량 그룹 통계 및 재생성 가능한 캐시 정리를 제공합니다. 프로젝트는 단일 Activity + Compose 아키텍처를 채택하며, 메인 인터페이스는 NavHost와 동적 하단 바, 재생 페이지는 오버레이 전체 화면 레이어로 구성되고 미니 플레이어가 상주합니다. 저장소에는 설정 항목 KSP 자동 등록, 가사 파싱 및 UI 하위 모듈, 함께 듣기 서비스 하위 모듈 등이 포함됩니다. 프로젝트는 학습 및 연구 목적으로만 제공되며, 미디어 콘텐츠, 키 또는 플랫폼 제한 우회 방법을 제공하지 않습니다.