This repository implements Tasks 2 & 4 from the CSE153 Music Generation assignment:
- Task 2: Symbolic Conditioned Generation (Onsets and Frames)
- Task 4: Continuous Conditioned Generation (Musika)
- Python 3.12+
- Git
- ~8GB disk space for datasets
- Clone and initialize submodules:
git clone <your-repo-url>
cd MusicGenerationMLThe repository already includes Magenta and Musika as Git submodules in libs/.
- Create virtual environments:
Task 2 Environment (TensorFlow + Magenta):
python3 -m venv ~/env_task2
source ~/env_task2/bin/activate
pip install --upgrade pip
pip install tensorflow==2.16.1
pip install ipykernel
python -m ipykernel install --user --name=task2_env --display-name "Task2 TensorFlow"
deactivateTask 4 Environment (PyTorch + Musika):
python3 -m venv ~/env_task4
source ~/env_task4/bin/activate
pip install --upgrade pip
pip install torch torchvision torchaudio
pip install librosa matplotlib scipy tensorboard tqdm pydub huggingface-hub
pip install jupyterlab ipykernel
python -m ipykernel install --user --name=task4_env --display-name "Task4 PyTorch"- Launch Jupyter Lab:
source ~/env_task4/bin/activate
jupyter lab --ip=0.0.0.0 --port=8888 --no-browserOpen http://localhost:8888 in your browser.
MusicGenerationML/
├── libs/ # Git submodules
│ ├── magenta/ # Magenta library for Task 2
│ └── musika/ # Musika library for Task 4
├── Task2_OnsetsFrames.ipynb # Task 2 notebook
├── Task4_Musika.ipynb # Task 4 notebook
├── data/ # Datasets (create this)
├── results/ # Generated outputs
├── setup_assignment.sh # Automated setup script
└── README.md # This file
- Model: Onsets and Frames (Magenta)
- Input: Audio recordings
- Output: MIDI transcriptions
- Dataset: MAESTRO
- Kernel: "Task2 TensorFlow"
- Output File:
symbolic_conditioned.mid
- Model: Musika (GAN-based)
- Input: Text/style conditioning
- Output: High-quality audio
- Dataset: Custom music dataset
- Kernel: "Task4 PyTorch"
- Output File:
continuous_conditioned.mp3
cd data
wget https://storage.googleapis.com/magentadata/datasets/maestro/v3.0.0/maestro-v3.0.0-midi.zip
unzip maestro-v3.0.0-midi.zipFollow instructions in the Task4 notebook for dataset preparation.
- Start Jupyter Lab with the Task 4 environment
- Open notebooks and select appropriate kernels:
Task2_OnsetsFrames.ipynb→ "Task2 TensorFlow"Task4_Musika.ipynb→ "Task4 PyTorch"
- Run experiments following the 4-section structure:
- Data analysis and preprocessing
- Modeling
- Evaluation
- Related work discussion
- Generate outputs:
symbolic_conditioned.mid(Task 2)continuous_conditioned.mp3(Task 4)
- Jupyter Notebook (exported as HTML)
- Video Presentation (~20 minutes)
- Generated Music Files
symbolic_conditioned.midcontinuous_conditioned.mp3
- Data Analysis: Dataset exploration, preprocessing
- Modeling: Architecture, implementation details
- Evaluation: Metrics, baselines, results
- Related Work: Literature review, comparisons
Environment conflicts:
- Use separate virtual environments for each task
- TensorFlow (Task 2) and PyTorch (Task 4) can conflict
Missing dependencies:
- Some older packages may have compatibility issues
- Install core packages first, then add others as needed
Kernel not showing in Jupyter:
- Ensure you've run
python -m ipykernel installin each environment - Refresh Jupyter Lab browser page
Memory issues:
- Music models are memory-intensive
- Close other applications if needed
- Consider using smaller dataset samples for testing
- Check the notebook cell outputs for error details
- Verify virtual environment activation
- Ensure all required packages are installed
- Review the assignment instructions for clarification
- High-quality MIDI transcription of audio input
- Evaluation metrics showing transcription accuracy
- Comparison with baseline methods
- Generated audio responding to conditioning
- Quality metrics and subjective evaluation
- Demonstration of controllable generation
Note: This setup follows the assignment instructions for creating isolated environments with proper Jupyter kernel registration. Each task has its own environment to avoid dependency conflicts between TensorFlow and PyTorch.