-
Notifications
You must be signed in to change notification settings - Fork 0
Fix Issue #51: Calculate accurate spectrogram time_resolution from audio recording database #52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ing database Resolves Issue #51 - Spectrogram time_resolution was hardcoded to 0.0116 s/frame, causing 23% error in duration calculations and misaligned time-based cropping. Changes: - Add SwaraClient.get_audio_recording() to fetch recording metadata from /getAudioRecording endpoint - Update SpectrogramData.__init__() to accept optional time_resolution parameter - Update SpectrogramData.from_audio_id() to calculate time_resolution from recording.duration - Update time_resolution property to return calculated value instead of hardcoded constant - Add DEFAULT_TIME_RESOLUTION (0.015080) as improved fallback when DB unavailable Implementation: - Spectrograms always cover full audio recording (not just transcribed excerpts) - time_resolution = recording.duration / spectrogram_time_frames - Graceful fallback to DEFAULT_TIME_RESOLUTION if recording metadata unavailable - All 36 existing tests pass without modification Verification: - Test recording (2192.45s): Previously calculated as 1683.88s (508s error) - After fix: Perfectly matches DB duration (0.000000s error) - Accuracy improved from 77% to 100%
|
📦 Test Package Built Successfully! This PR has been automatically built and uploaded to TestPyPI for testing. 🔗 TestPyPI Link: https://test.pypi.org/project/idtap/ To test this version: pip install --index-url https://test.pypi.org/simple/ idtap✅ All tests passed and package builds successfully. |
|
@claude review |
|
Claude finished @jon-myers's task —— View job Code Review Complete ✅Reviewing PR #52: Fix Issue #51 - Calculate accurate spectrogram time_resolution from audio recording database Todo List:
Overall Assessment: ✅ APPROVEDThis is a well-designed fix that addresses a significant accuracy issue in spectrogram duration calculations. The implementation is robust, follows best practices, and maintains backward compatibility. Code Quality: Excellent ⭐Positive Aspects:
Bug Analysis: No Issues Found ✅Error Handling Review:
Edge Cases Covered:
Performance Considerations: Well Optimized ⚡Strengths:
Minor Optimization Opportunity: Security Review: Secure ✅Authentication:
Input Validation:
Error Information Disclosure:
Test Coverage: Adequate ✅Existing Tests: All 36 spectrogram tests continue to pass - excellent backward compatibility Suggested Additional Tests: def test_time_resolution_from_database():
"""Test accurate time_resolution calculation from recording duration"""
def test_time_resolution_fallback():
"""Test fallback to DEFAULT_TIME_RESOLUTION when recording unavailable"""
def test_duration_calculation_accuracy():
"""Test 100% accurate duration calculations (addresses Issue #51)"""Technical Implementation: Solid 🏗️Architecture:
Design Decisions:
Minor Suggestions:
Validation of Fix:The PR description demonstrates excellent problem-solving:
This is exactly the kind of precision improvement that's critical for music analysis applications. Recommendation: APPROVE AND MERGE ✅This PR successfully resolves Issue #51 with a clean, robust implementation that maintains backward compatibility while significantly improving accuracy. Ready for production. |
Summary
Fixes #51 - Resolves incorrect
time_resolutioncausing 23% error in spectrogram duration calculations and misaligned time-based cropping.Problem
The
SpectrogramData.time_resolutionproperty was hardcoded to 0.0116 seconds/frame, based on incorrect assumptions about NSGConstantQ hop size. This caused:crop_time()Root Cause Analysis
The hardcoded value assumed:
Reality: NSGConstantQ with server parameters produces:
Solution
Calculate
time_resolutionfrom the audio recording duration in the database:Implementation Details
Added:
SwaraClient.get_audio_recording(audio_id)/getAudioRecordingendpointUpdated:
SpectrogramData.from_audio_id()time_resolution = duration / time_framesDEFAULT_TIME_RESOLUTIONif DB unavailableUpdated:
SpectrogramData.__init__()time_resolutionparameter_time_resolutionattributeDEFAULT_TIME_RESOLUTION = 0.015080as fallbackUpdated:
time_resolutionproperty_time_resolutionvalueTesting
Verification with Issue #51 Test Case
Before fix:
After fix:
Test Suite
Design Considerations
Spectrograms always cover full recordings:
Single source of truth:
audioRecordingsMongoDB collectionImpact
🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com