Skip to content

guilopeszw/Produce.it

Repository files navigation

Produce.it — Ferramenta de Análise Comparativa de Áudio

Visão Geral

O Produce.it é uma ferramenta de software assistida por IA focada em análise comparativa de áudio. O sistema diagnostica problemas de mixagem comparando produções do usuário com referências comerciais, fornecendo insights técnicos e sugestões de melhoria.

Características Principais

  • Análise LUFS: Normalização de loudness para comparação justa
  • Campo Estéreo: Avaliação de largura, correlação de fase e compatibilidade mono
  • Análise Espectral: Detecção de desequilíbrios de frequência por bandas
  • IA Interpretativa: Modelo neural para scoring de similaridade
  • Relatórios Automatizados: Geração de CSV e métricas estruturadas

Público-Alvo

  • Produtores musicais e engenheiros de mixagem
  • Músicos de home-studio
  • Profissionais de áudio que necessitam análise comparativa objetiva

Filosofia "Plug n' Play"

Interface simplificada que abstrai complexidade técnica, permitindo que músicos obtenham feedback profissional sem dominar processamento de sinais.

Input: Faixa do usuário + Referência comercial
Output: Métricas técnicas, diagnósticos e sugestões de correção

Instalação e Configuração

Pré-requisitos

  • Python 3.8 ou superior
  • uv (gerenciador de pacotes Python)

Instalação via uv

# Instalar uv (se não estiver instalado)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clonar o repositório
git clone <repository-url>
cd Produce.it

# Instalar dependências
uv sync

Instalação Manual

# Criar ambiente virtual
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate   # Windows

# Instalar dependências
pip install -r requirements.txt

Dependências do Sistema

# Ubuntu/Debian
sudo apt-get install ffmpeg libsndfile1

# macOS
brew install ffmpeg libsndfile

Execução

Modo Individual

Análise de um par de arquivos (usuário + referência):

# Usando uv
uv run main.py "minha_mixagem.wav" "referencia_comercial.wav"

# Usando Python diretamente
python main.py "minha_mixagem.wav" "referencia_comercial.wav"

# Com diretório de saída customizado
uv run main.py "user_track.wav" "ref_track.wav" --out "resultados"

Modo Batch

Processamento automático de múltiplos arquivos:

# Colocar arquivos em data/input/ seguindo convenção:
# user_song.wav + ref_song.wav
# track_user.wav + track_ref.wav
# music.wav + music_ref.wav

# Executar processamento batch
uv run batch_main.py

# Listar arquivos sem processar
uv run batch_main.py --list

# Diretórios customizados
uv run batch_main.py --input "meus_audios" --output "resultados"

Formatos Suportados

  • Recomendado: WAV, FLAC (sem compressão)
  • Suportado: MP3, M4A, OGG
  • Canais: Mono ou Estéreo
  • Sample Rate: Qualquer (conversão automática)

Arquitetura do Sistema

Pipeline de Processamento

O sistema opera através de uma pipeline sequencial de 3 etapas:

Áudio Bruto → [1] Pré-Masterização → [2] Campo Estéreo → [3] Análise Espectral → Relatório

Etapa 1: Pré-Masterização (LUFS)

  • Função: Normalização de loudness para comparação justa
  • Entrada: Faixa usuário + referência (volumes diferentes)
  • Saída: Faixa usuário normalizada + métricas LUFS
  • Documentação: Módulo de Pré-Masterização

Etapa 2: Campo Estéreo

  • Função: Análise espacial e correlação de fase
  • Entrada: Faixa normalizada + referência
  • Saída: Métricas de largura, correlação e score IA
  • Documentação: Módulo de Campo Estéreo

Etapa 3: Análise Espectral

  • Função: Detecção de problemas de frequência
  • Entrada: Faixa normalizada + referência
  • Saída: Análise por bandas, problemas detectados e sugestões
  • Documentação: Módulo de Processamento de Espectrogramas

Fluxo de Execução

# main.py
parser = ArgumentParser()
args = parser.parse_args()
pipeline = AnalysisPipeline(output_dir=args.out)
results = pipeline.run(args.user_track, args.ref_track)

# pipeline.py
class AnalysisPipeline:
    def run(self, user_track, ref_track):
        # Etapa 1: LUFS
        mastered_path = self.lufs_analyzer.master_to_reference(user_track, ref_track)
        
        # Etapa 2: Estéreo
        stereo_results = self.stereo_analyzer.compare_stereo_fields(mastered_path, ref_track)
        
        # Etapa 3: Espectral
        spectral_results = self.spectrogram_processor.detect_spectral_issues(mastered_path, ref_track)
        
        return consolidated_results

Saída e Resultados

Estrutura de Dados

{
    'lufs': {
        'original': -18.5,
        'target': -8.2,
        'mastered': -8.18,
        'difference_before': 10.3,
        'csv_path': 'data/output/annotations/track_lufs.csv'
    },
    'stereo': {
        'user': {'correlation': 0.85, 'width': 0.45},
        'reference': {'correlation': 0.78, 'width': 0.62},
        'similarity_score': 78.5,
        'ai_score': 72.3
    },
    'spectral': {
        'similarity_score': 65.2,
        'issues_detected': ['Baixa energia em bass', 'Excesso em highs'],
        'suggestions': ['Aumentar bass frequencies', 'Reduzir highs frequencies'],
        'overall_balance': False
    }
}

Arquivos Gerados

data/output/
├── batch_analysis_results.json    # Resultados consolidados (modo batch)
├── annotations/
│   └── track_name_lufs.csv        # Dados LUFS tabulares
└── tmpXXX.wav                     # Arquivo masterizado temporário

Score de Similaridade

  • 0-100: Índice de similaridade técnica com a referência
  • 100: Proporcionalmente semelhante (não cópia idêntica)
  • Componentes: LUFS + Estéreo + Espectral + IA

Módulos do Sistema

Módulos Principais

Componentes de Suporte

Desenvolvimento

Estrutura do Projeto

Produce.it/
├── src/
│   ├── pre_mastering/          # Módulo LUFS
│   ├── stereo_field/           # Módulo campo estéreo
│   ├── process_spectrograms/   # Módulo espectral
│   ├── crnn/                   # Modelos IA
│   ├── pipeline.py             # Pipeline principal
│   └── batch_pipeline.py       # Pipeline batch
├── data/
│   ├── input/                  # Arquivos de entrada (batch)
│   └── output/                 # Resultados gerados
├── main.py                     # Interface individual
├── batch_main.py              # Interface batch
└── requirements.txt           # Dependências Python

Testes

# Testar pipeline completa
uv run test_pipeline.py

# Testar com arquivos sintéticos
uv run create_test_files.py
uv run main.py user_track.wav ref_track.wav

Exemplos de Uso

Análise Individual

# Exemplo básico
uv run main.py "minha_mixagem.wav" "referencia_comercial.wav"

# Com saída customizada
uv run main.py "track.wav" "ref.wav" --out "analise_projeto"

Análise Programática

from src.pipeline import AnalysisPipeline

# Inicializar pipeline
pipeline = AnalysisPipeline(output_dir="resultados")

# Executar análise
results = pipeline.run("user_track.wav", "reference_track.wav")

# Acessar resultados
print(f"Score LUFS: {results['lufs']['difference_before']:.2f}")
print(f"Score Estéreo: {results['stereo']['similarity_score']:.1f}/100")
print(f"Problemas Espectrais: {len(results['spectral']['issues_detected'])}")

Processamento Batch

# Preparar arquivos
cp user1.wav data/input/
cp ref1.wav data/input/
cp user2.wav data/input/
cp ref2.wav data/input/

# Executar batch
uv run batch_main.py

# Verificar resultados
cat data/output/batch_analysis_results.json

Troubleshooting

Problemas Comuns

Erro: "No module named 'numpy'"

# Verificar ambiente virtual
source .venv/bin/activate
uv sync

Erro: "Could not read audio file"

# Instalar dependências do sistema
sudo apt-get install ffmpeg libsndfile1  # Ubuntu
brew install ffmpeg libsndfile           # macOS

Erro: "Stereo model not found"

  • O modelo IA é opcional, o sistema funciona sem ele
  • Score IA será 0.0 mas outras análises continuam funcionando

Performance

  • Use arquivos WAV/FLAC para melhor qualidade
  • Arquivos longos (>5min) podem demorar mais para processar
  • Modo batch é mais eficiente para múltiplos arquivos

Licença

Este projeto utiliza apenas dados de treinamento com licenças CC0 e domínio público para garantir conformidade legal.

Contribuição

Para contribuir com o projeto:

  1. Fork o repositório
  2. Crie branch para feature (git checkout -b feature/nova-funcionalidade)
  3. Commit suas mudanças (git commit -am 'Adiciona nova funcionalidade')
  4. Push para branch (git push origin feature/nova-funcionalidade)
  5. Abra Pull Request

About

Convolutional recurring neural networks based mixing engineer assistant

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors