Spaces:
Running
Running
File size: 3,909 Bytes
f280f9f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
#!/usr/bin/env python3
"""
Simple Audio Classifier using Madverse Music AI Model
Usage: python classify_audio.py <audio_file_path>
"""
import sys
import os
from pathlib import Path
def load_model():
"""Load the Madverse Music AI model"""
try:
from sonics import HFAudioClassifier
print("π Loading Madverse Music AI model...")
model = HFAudioClassifier.from_pretrained("awsaf49/sonics-spectttra-alpha-120s")
print("β
Model loaded successfully!")
return model
except Exception as e:
print(f"β Error loading model: {e}")
return None
def classify_audio(model, audio_path):
"""Classify a single audio file"""
try:
import librosa
import torch
print(f"π΅ Analyzing: {audio_path}")
# Load audio file (model uses 16kHz sample rate)
audio, sr = librosa.load(audio_path, sr=16000)
# Convert to tensor and add batch dimension
audio_tensor = torch.FloatTensor(audio).unsqueeze(0)
# Set model to evaluation mode
model.eval()
# Get prediction
with torch.no_grad():
output = model(audio_tensor)
# Convert logit to probability using sigmoid
prob = torch.sigmoid(output).item()
# Classify: prob < 0.5 = Real, prob >= 0.5 = Fake
if prob < 0.5:
result = "Real"
emoji = "π€"
description = "Human-created music"
confidence = (1 - prob) * 2 # Convert to 0-1 scale
else:
result = "Fake"
emoji = "π€"
description = "AI-generated music"
confidence = (prob - 0.5) * 2 # Convert to 0-1 scale
print(f"{emoji} Result: {result} ({description})")
print(f" Confidence: {confidence:.2f} | Raw output: {output.item():.3f}")
return result
except Exception as e:
print(f"β Error classifying {audio_path}: {e}")
return None
def classify_multiple_files(model, directory_path="."):
"""Classify all audio files in a directory"""
audio_extensions = ['.wav', '.mp3', '.flac', '.m4a', '.ogg']
directory = Path(directory_path)
audio_files = []
for ext in audio_extensions:
audio_files.extend(list(directory.glob(f'*{ext}')))
if not audio_files:
print(f"No audio files found in {directory}")
return
print(f"Found {len(audio_files)} audio file(s) to classify:")
print("=" * 50)
results = {}
for audio_file in audio_files:
result = classify_audio(model, str(audio_file))
if result:
results[str(audio_file)] = result
print()
# Summary
if results:
print("π Summary:")
print("=" * 30)
real_count = sum(1 for r in results.values() if r.lower() == 'real')
fake_count = len(results) - real_count
print(f"π€ Real music: {real_count}")
print(f"π€ AI-generated: {fake_count}")
def main():
"""Main function"""
print("π΅ Madverse Music: AI Audio Classifier")
print("=" * 40)
# Load model
model = load_model()
if not model:
return
if len(sys.argv) > 1:
# Classify specific file
audio_path = sys.argv[1]
if os.path.exists(audio_path):
classify_audio(model, audio_path)
else:
print(f"β File not found: {audio_path}")
else:
# Classify all files in current directory
print("\nNo specific file provided. Scanning current directory...")
classify_multiple_files(model)
if __name__ == "__main__":
main() |