Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -4,55 +4,42 @@ import numpy as np
|
|
| 4 |
from pydub import AudioSegment
|
| 5 |
import os
|
| 6 |
|
| 7 |
-
def
|
| 8 |
if tu_track is None:
|
| 9 |
-
return None, "⚠️ Sube tu track
|
| 10 |
|
| 11 |
try:
|
| 12 |
-
# 1. ANÁLISIS DE
|
| 13 |
y, sr = librosa.load(tu_track, duration=30)
|
| 14 |
|
| 15 |
-
#
|
| 16 |
chroma = librosa.feature.chroma_cqt(y=y, sr=sr)
|
| 17 |
key_idx = np.argmax(np.mean(chroma, axis=1))
|
| 18 |
notas = ["Do (C)", "Do# (C#)", "Re (D)", "Re# (D#)", "Mi (E)", "Fa (F)",
|
| 19 |
"Fa# (F#)", "Sol (G)", "Sol# (G#)", "La (A)", "La# (A#)", "Si (B)"]
|
| 20 |
key_detectada = notas[key_idx]
|
| 21 |
|
| 22 |
-
#
|
| 23 |
rms_tu = np.mean(librosa.feature.rms(y=y))
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
|
|
|
| 27 |
if track_ref is not None:
|
| 28 |
y_ref, _ = librosa.load(track_ref, duration=30)
|
| 29 |
rms_ref = np.mean(librosa.feature.rms(y=y_ref))
|
| 30 |
dif_db = 20 * np.log10(rms_ref / rms_tu)
|
| 31 |
-
|
| 32 |
-
comparativa = f"⚠️ Tu track suena {dif_db:.1f}dB más flojo que la referencia. ¡Dale más caña al master!"
|
| 33 |
-
else:
|
| 34 |
-
comparativa = "🔥 ¡Potencia brutal! Estás al nivel de la referencia de club."
|
| 35 |
-
|
| 36 |
-
# 3. GENERADOR DE ARTWORK (PROMPT)
|
| 37 |
-
estilo = "Dark Techstep" if rms_tu > 0.12 else "Deep Liquid"
|
| 38 |
-
prompt_arte = f"Cyberpunk album cover, {estilo} aesthetic, neon orange and slate grey, abstract geometric soundwaves, {key_detectada} mood, hyper-detailed, 8k resolution."
|
| 39 |
|
| 40 |
-
#
|
| 41 |
sound = AudioSegment.from_file(tu_track)
|
| 42 |
ganancia = (intensidad / 10) - 5
|
| 43 |
mastered = sound.apply_gain(ganancia)
|
| 44 |
-
|
| 45 |
-
out_path = "master_ultimate_v7.wav"
|
| 46 |
mastered.export(out_path, format="wav")
|
| 47 |
|
| 48 |
-
#
|
| 49 |
-
|
| 50 |
-
---------------------------------------
|
| 51 |
-
🎵 TONALIDAD: {key_detectada}
|
| 52 |
-
⚡ COMPARATIVA: {comparativa}
|
| 53 |
-
|
| 54 |
-
🎨 PROMPT PARA TU PORTADA (Cópialo en Midjourney/DALL-E):
|
| 55 |
-
"{prompt_arte}"
|
| 56 |
|
| 57 |
-
|
| 58 |
-
"{
|
|
|
|
| 4 |
from pydub import AudioSegment
|
| 5 |
import os
|
| 6 |
|
| 7 |
+
def ghost_ultimate_v7(tu_track, track_ref, intensidad, duda):
|
| 8 |
if tu_track is None:
|
| 9 |
+
return None, "⚠️ Sube tu track.", "Esperando...", "https://images.unsplash.com/photo-1614613535308-eb5fbd3d2c17?q=80&w=500", "Sube un audio."
|
| 10 |
|
| 11 |
try:
|
| 12 |
+
# 1. ANÁLISIS DE AUDIO
|
| 13 |
y, sr = librosa.load(tu_track, duration=30)
|
| 14 |
|
| 15 |
+
# Detección de Nota (Key)
|
| 16 |
chroma = librosa.feature.chroma_cqt(y=y, sr=sr)
|
| 17 |
key_idx = np.argmax(np.mean(chroma, axis=1))
|
| 18 |
notas = ["Do (C)", "Do# (C#)", "Re (D)", "Re# (D#)", "Mi (E)", "Fa (F)",
|
| 19 |
"Fa# (F#)", "Sol (G)", "Sol# (G#)", "La (A)", "La# (A#)", "Si (B)"]
|
| 20 |
key_detectada = notas[key_idx]
|
| 21 |
|
| 22 |
+
# Energía RMS
|
| 23 |
rms_tu = np.mean(librosa.feature.rms(y=y))
|
| 24 |
+
estilo = "Dark/Tech" if rms_tu > 0.12 else "Liquid/Deep"
|
| 25 |
+
|
| 26 |
+
# 2. COMPARADOR
|
| 27 |
+
comparativa = "No hay referencia."
|
| 28 |
if track_ref is not None:
|
| 29 |
y_ref, _ = librosa.load(track_ref, duration=30)
|
| 30 |
rms_ref = np.mean(librosa.feature.rms(y=y_ref))
|
| 31 |
dif_db = 20 * np.log10(rms_ref / rms_tu)
|
| 32 |
+
comparativa = f"Diferencia: {dif_db:.1f}dB respecto a la referencia."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
+
# 3. MASTERING
|
| 35 |
sound = AudioSegment.from_file(tu_track)
|
| 36 |
ganancia = (intensidad / 10) - 5
|
| 37 |
mastered = sound.apply_gain(ganancia)
|
| 38 |
+
out_path = "master_v7_final.wav"
|
|
|
|
| 39 |
mastered.export(out_path, format="wav")
|
| 40 |
|
| 41 |
+
# 4. GENERADOR DE PROMPT
|
| 42 |
+
p_arte = f"Cyberpunk DnB Art, Neon Orange, {estilo} aesthetic, {key_detectada} mood, 8k."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
+
# Informe formateado con cuidado para evitar errores de llaves
|
| 45 |
+
info_final = f"TONALIDAD: {key_detectada}\nESTILO: {estilo}\n\nCOMPARATIVA: {comparativa}\n\nCONSEJO: En {key_detectada}, el sub debe ser muy preciso
|