Skip to content

feat: Implement Temporal Audio Analysis Engine (#105)#110

Merged
seonghobae merged 5 commits into
developfrom
feature/issue-105-audio-ingestion
Mar 28, 2026
Merged

feat: Implement Temporal Audio Analysis Engine (#105)#110
seonghobae merged 5 commits into
developfrom
feature/issue-105-audio-ingestion

Conversation

@seonghobae
Copy link
Copy Markdown
Owner

Description

Resolves #105.
This PR removes the first layer of mock debt by introducing a real librosa and soundfile based Temporal Analyzer.

Changes

  • Updated pyproject.toml to include librosa and soundfile using uv.
  • Created bandscope_analysis.temporal.analyzer.TemporalAnalyzer.
  • Extracts BPM, beat times, and downbeat arrays from real audio paths.
  • Wrote full test suite guaranteeing 100% coverage on the new module.
  • Integrated an initial execution call into the CLI runner.

… tracking (#105)

- Added librosa and soundfile as dependencies.
- Created TemporalAnalyzer to extract BPM, duration, and beat grids from audio.
- Replaces future mock data with actual DSP analysis.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 28, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e4d9bb7e-d3ce-4358-9663-483a624ad5da

📥 Commits

Reviewing files that changed from the base of the PR and between 49c93d1 and 534e68a.

⛔ Files ignored due to path filters (1)
  • services/analysis-engine/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • .github/workflows/build-baseline.yml
  • docs/plans/2026-03-28-ml-engine-integration.md
  • services/analysis-engine/pyproject.toml
  • services/analysis-engine/src/bandscope_analysis/cli.py
  • services/analysis-engine/src/bandscope_analysis/temporal/__init__.py
  • services/analysis-engine/src/bandscope_analysis/temporal/analyzer.py
  • services/analysis-engine/src/bandscope_analysis/temporal/model.py
  • services/analysis-engine/tests/test_cli.py
  • services/analysis-engine/tests/test_temporal.py

Cache: Disabled due to Reviews > Disable Cache setting

Disabled knowledge base sources:

  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.


📝 Walkthrough

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 오디오의 템포와 비트 감지 기능 추가
    • CLI에 상태 확인 및 작업 파일 로드 기능 추가
  • 문서

    • ML 엔진 통합 로드맵 추가
  • 테스트

    • CLI 및 오디오 분석 기능에 대한 포괄적인 테스트 커버리지 추가
  • 기타

    • 오디오 처리 라이브러리 의존성 추가

Walkthrough

이 PR은 모의 데이터를 실제 오디오 처리로 대체하여 시간축 분석 기능을 구현합니다. Librosa 기반 오디오 처리, BPM/비트 추출을 위한 새로운 TemporalAnalyzer 클래스, CLI 개선사항(--status, --job 모드), 단위 테스트, 그리고 ARM64 빌드 워크플로우 업데이트를 포함합니다.

Changes

Cohort / File(s) Summary
빌드 및 의존성
.github/workflows/build-baseline.yml, services/analysis-engine/pyproject.toml
build-windows-arm64의 Python 의존성 동기화 단계에 조건부 실행 추가; librosa, numba, soundfile 런타임 의존성 신규 추가.
시간축 분석 핵심
services/analysis-engine/src/bandscope_analysis/temporal/__init__.py, services/analysis-engine/src/bandscope_analysis/temporal/analyzer.py, services/analysis-engine/src/bandscope_analysis/temporal/model.py
새로운 temporal 패키지 구현; TemporalFeatures TypedDict 모델 정의; librosa 기반 오디오 로드, 템포/비트 추출 및 다운비트 계산 로직 포함한 TemporalAnalyzer 클래스 추가.
CLI 및 통합
services/analysis-engine/src/bandscope_analysis/cli.py
로깅 지원 추가; stdin 페이로드 전체 읽기 구현; --status 및 --job 모드 신규 추가; 로컬 오디오 처리 시 TemporalAnalyzer 조건부 호출 통합.
테스트 및 문서
services/analysis-engine/tests/test_cli.py, services/analysis-engine/tests/test_temporal.py, docs/plans/2026-03-28-ml-engine-integration.md
CLI 신규 모드, 오류 처리, 상태 조회 기능을 위한 포괄적 테스트; TemporalAnalyzer 동작 및 오류 케이스 검증; 5개 실행 트랙을 포함한 ML/DSP 통합 계획 문서.

Sequence Diagram

sequenceDiagram
    participant User
    participant CLI
    participant TemporalAnalyzer
    participant Librosa
    participant FileSystem

    User->>CLI: invoke with --status or local_audio job
    CLI->>CLI: read stdin/args payload
    
    alt --status mode
        CLI->>CLI: get_analysis_status()
        CLI->>User: return status JSON
    else local_audio job
        CLI->>TemporalAnalyzer: analyze(audio_path)
        TemporalAnalyzer->>FileSystem: read audio file
        FileSystem-->>TemporalAnalyzer: audio data
        TemporalAnalyzer->>Librosa: load(audio, mono, sr=44100)
        Librosa-->>TemporalAnalyzer: resampled ndarray
        TemporalAnalyzer->>Librosa: beat_track(y, sr)
        Librosa-->>TemporalAnalyzer: tempo, beat_frames
        TemporalAnalyzer->>TemporalAnalyzer: compute beat/downbeat times
        TemporalAnalyzer-->>CLI: TemporalFeatures dict
        CLI->>CLI: log bpm, continue with analysis job
        CLI->>User: return job result JSON
    end
Loading

Estimated Code Review Effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly Related PRs

  • PR #39: build-windows-arm64 작업에 대한 다중 아키텍처 기본 빌드 PR과 동일한 워크플로우 파일 수정으로 직접 연관.

Poem

🐰 오디오의 비트를 찾아내고,
다운비트가 춤을 추네!
Librosa와 함께 박자를 세며,
모의 데이터는 이제 안녕!
실제 리듬이 울려 퍼져라 ♪

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/issue-105-audio-ingestion

Comment @coderabbitai help to get the list of available commands and usage tips.

@seonghobae seonghobae enabled auto-merge (squash) March 28, 2026 13:00
@seonghobae
Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 28, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae seonghobae merged commit f6cbd3b into develop Mar 28, 2026
22 of 23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Epic: Temporal Analysis (Audio Ingestion & Beat Tracking)

1 participant