| """ |
| Test generation script for ACE-Step Custom Edition |
| """ |
|
|
| import sys |
| from pathlib import Path |
| import logging |
|
|
| |
| sys.path.insert(0, str(Path(__file__).parent.parent)) |
|
|
| from src import ACEStepEngine, load_config, setup_logging |
|
|
| logger = setup_logging() |
|
|
|
|
| def test_basic_generation(): |
| """Test basic music generation.""" |
| logger.info("\n" + "="*60) |
| logger.info("Testing Basic Music Generation") |
| logger.info("="*60) |
| |
| try: |
| |
| config = load_config() |
| |
| |
| logger.info("Initializing ACE-Step engine...") |
| engine = ACEStepEngine(config) |
| |
| |
| logger.info("\nGenerating test audio...") |
| audio_path = engine.generate( |
| prompt="A cheerful pop song with piano and drums", |
| lyrics=None, |
| duration=10, |
| temperature=0.7, |
| seed=42 |
| ) |
| |
| logger.info(f"\nβ
Generation successful!") |
| logger.info(f"Output: {audio_path}") |
| |
| return True |
| |
| except Exception as e: |
| logger.error(f"\nβ Generation failed: {e}") |
| import traceback |
| traceback.print_exc() |
| return False |
|
|
|
|
| def test_timeline_workflow(): |
| """Test timeline-based generation.""" |
| logger.info("\n" + "="*60) |
| logger.info("Testing Timeline Workflow") |
| logger.info("="*60) |
| |
| try: |
| from src import TimelineManager |
| |
| config = load_config() |
| timeline = TimelineManager(config) |
| |
| logger.info("Creating timeline...") |
| timeline_id = timeline.create_timeline() |
| logger.info(f"Timeline ID: {timeline_id}") |
| |
| logger.info("\nβ
Timeline system operational!") |
| return True |
| |
| except Exception as e: |
| logger.error(f"\nβ Timeline test failed: {e}") |
| return False |
|
|
|
|
| def test_audio_processing(): |
| """Test audio processing utilities.""" |
| logger.info("\n" + "="*60) |
| logger.info("Testing Audio Processing") |
| logger.info("="*60) |
| |
| try: |
| from src import AudioProcessor |
| import numpy as np |
| |
| config = load_config() |
| processor = AudioProcessor(config) |
| |
| |
| test_audio = np.random.randn(2, 44100) * 0.1 |
| |
| |
| normalized = processor.normalize_audio(test_audio) |
| logger.info("β Normalization OK") |
| |
| |
| crossfaded = processor.crossfade(test_audio, test_audio, fade_duration=0.5) |
| logger.info("β Crossfade OK") |
| |
| logger.info("\nβ
Audio processing operational!") |
| return True |
| |
| except Exception as e: |
| logger.error(f"\nβ Audio processing test failed: {e}") |
| return False |
|
|
|
|
| def main(): |
| """Run all tests.""" |
| logger.info(""" |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| β ACE-Step Custom Edition - Test Suite β |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| """) |
| |
| results = { |
| "Audio Processing": test_audio_processing(), |
| "Timeline Workflow": test_timeline_workflow(), |
| |
| } |
| |
| |
| logger.info("\n" + "="*60) |
| logger.info("Test Summary") |
| logger.info("="*60) |
| |
| all_passed = True |
| for test_name, passed in results.items(): |
| status = "β
PASS" if passed else "β FAIL" |
| logger.info(f"{status} - {test_name}") |
| if not passed: |
| all_passed = False |
| |
| logger.info("="*60) |
| |
| if all_passed: |
| logger.info("\nβ
All tests passed!") |
| logger.info("\nNote: Full generation test requires model download.") |
| logger.info("Run: python scripts/download_model.py") |
| else: |
| logger.error("\nβ Some tests failed. Check logs above.") |
| sys.exit(1) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|