Thank you for your interest in contributing to Symbolic Soroll! This document provides guidelines and instructions for contributing to our Music Information Retrieval (MIR) system.
- Code of Conduct
- Getting Started
- Development Process
- Pull Request Process
- Development Guidelines
- Testing Guidelines
- Documentation Guidelines
We are committed to providing a welcoming and inspiring community for all. Please read and follow our Code of Conduct.
-
Fork the Repository
git clone https://github.com/yourusername/symbolic-soroll.git cd symbolic-soroll
-
Set Up Development Environment
# Python setup conda env create -f environment.yml conda activate soroll # Node.js setup (for frontend) cd client npm install
-
Create a Branch
git checkout -b feature/your-feature-name
-
Check Existing Issues
- Look for existing issues or create a new one
- Get approval for major changes before starting
-
Follow Best Practices
- Refer to our Best Practices Guide
- Follow code style guidelines
- Write tests for new features
-
Local Development
# Run backend cd api uvicorn main:app --reload # Run frontend cd client npm run dev
-
Before Submitting
- Update documentation
- Add/update tests
- Run the test suite
- Update CHANGELOG.md
-
PR Guidelines
- Use our PR template
- Link related issues
- Provide clear description
- Include screenshots for UI changes
-
PR Title Format
type(scope): brief description Types: feat, fix, docs, style, refactor, test, chore Example: feat(melody): add transposition support
- Follow PEP 8
- Use type hints
- Maximum line length: 88 characters
- Use Black for formatting
# Good example
from typing import List
def process_melody(abc_notation: str) -> List[str]:
"""Process an ABC notation melody.
Args:
abc_notation: Input melody string
Returns:
List of processed melody strings
"""
return [abc_notation]
- Follow Airbnb style guide
- Use functional components
- Implement proper types
// Good example
interface Props {
melody: string;
onPlay: () => void;
}
const MelodyPlayer: React.FC<Props> = ({ melody, onPlay }) => {
return <div onClick={onPlay}>{melody}</div>;
};
-
Audio Processing
- Handle different sample rates
- Implement proper error checking
- Use efficient algorithms
-
Model Management
- Version control large files with Git LFS
- Document model parameters
- Provide model cards
-
Data Handling
- Validate music notation
- Handle edge cases
- Implement proper error recovery
# Example test
def test_melody_transposition():
input_melody = "K:C\nCDEF|"
expected = "K:D\nDEF^F|"
result = transpose_melody(input_melody, semitones=2)
assert result == expected
- Test API endpoints
- Test UI components
- Test audio processing pipeline
- Write clear docstrings
- Document complex algorithms
- Update API documentation
- Update component README
- Document new features
- Include usage examples
- Use OpenAPI/Swagger
- Provide request/response examples
- Document error cases
-
Code quality
- Follows style guide
- No code smells
- Proper error handling
-
Testing
- Tests pass
- Adequate coverage
- Edge cases covered
-
Documentation
- Updated docs
- Clear comments
- API documentation
- Check memory usage
- Verify CPU efficiency
- Test with large datasets
Feel free to:
- Open an issue
- Join our discussions
- Contact maintainers
Thank you for contributing to Symbolic Soroll! 🎵