ai-music-detection / classify_audio.py
juzer09's picture
Upload 19 files
f280f9f verified
raw
history blame
3.91 kB
#!/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()