Automatizar com Macros

    Definição curta: Tutorial sobre como usar scripting Python no Tenacity para automatizar tarefas repetitivas — desde macros simples até processamento em lote de múltiplos arquivos.

    Antes de começar

    O que você vai aprender

    • Explicar Habilitar Python scripting com suas palavras
    • Explicar Script simples: normalizar todos os arquivos de uma pasta com suas palavras
    • Explicar Script de processamento em lote com suas palavras
    • Reconhecer, no seu próprio material, onde o assunto desta página se aplica

    O que é

    O Tenacity suporta scripting via Python, permitindo automatizar workflows que seriam manuais. Isso é especialmente útil para:

    • Processar múltiplos arquivos de uma vez
    • Aplicar chain de efeitos idêntico em várias faixas
    • Análiselote de áudio (BPM, pitch, loudness)
    • Gerar relatórios de projeto

    Índice de sub-tópicos

    Habilitar Python scripting

    1. Edit > Preferences > Effects
    2. Marcar Enable Python scripting
    3. Reiniciar Tenacity
    4. Tools > Script Browser para ver exemplos

    Script simples: normalizar todos os arquivos de uma pasta

    Script

    import tenacity
    import os
    from glob import glob
    
    # Pasta com arquivos
    pasta = "/home/user/gravacoes/"
    
    # Extensões a processar
    extensoes = ["*.wav", "*.mp3", "*.flac"]
    
    for ext in extensoes:
        for arquivo in glob(os.path.join(pasta, ext)):
            print(f"Processando: {arquivo}")
    
            # Abrir arquivo
            tenacity.open(arquivo)
    
            # Normalizar
            tenacity.apply_effect("Normalize", {
                "peak amplitude": -3.0,
                "remove DC offset": True
            })
    
            # Exportar (sobrescreve original)
            tenacity.export(arquivo, format="WAV")
    
            print(f"Concluído: {arquivo}")
    
    print("Todos os arquivos processados!")

    Como executar

    1. Salvar script como normalizar_lote.py
    2. Tools > Script Browser > Run Script
    3. Selecionar o arquivo

    Script de processamento em lote

    Processar episódios de podcast com chain fixo:

    import tenacity
    
    def processar_podcast(caminho):
        """Aplica chain completo de pós-produção"""
        print(f"Iniciando: {caminho}")
    
        # 1. Abrir
        tenacity.open(caminho)
    
        # 2. Noise Reduction
        print("  - Removendo ruído...")
        tenacity.apply_effect("Noise Reduction", {
            "Noise Reduction": 12,
            "Sensitivity": 0.0,
            "Smoothing": 6
        })
    
        # 3. Compressor
        print("  - Comprimindo...")
        tenacity.apply_effect("Compressor", {
            "Threshold": -18,
            "Ratio": 4.0,
            "Attack": 10,
            "Release": 100,
            "Makeup Gain": True
        })
    
        # 4. Limiter
        print("  - Limitando...")
        tenacity.apply_effect("Limiter", {
            "Ceiling": -0.3
        })
    
        # 5. Exportar como MP3 192kbps
        output = caminho.replace(".wav", "_final.mp3")
        tenacity.export(output, format="MP3", bitrate=192)
    
        print(f"Concluído: {output}")
    
    # Processar todos os WAVs na pasta
    import os
    pasta = "/home/user/podcast/"
    for f in os.listdir(pasta):
        if f.endswith(".wav"):
            processar_podcast(os.path.join(pasta, f))

    Aplicar chain de efeitos automaticamente

    Para criar um preset reutilizável:

    flowchart LR
        A[Arquivo.wav] --> B[Noise Gate]
        B --> C[Compressor]
        C --> D[EQ 3 bandas]
        D --> E[Normalize -3dB]
        E --> F[Limiter -0.3dB]
        F --> G[Podcast_Final.mp3]

    Script para salvar este chain:

    import tenacity
    
    def aplicar_chain_ podcast():
        """Chain de efeitos para podcast"""
    
        effects = [
            ("Noise Gate", {"Threshold": -30, "Attack": 10}),
            ("Compressor", {"Threshold": -18, "Ratio": 3.5}),
            ("Normalize", {"peak amplitude": -3.0}),
            ("Limiter", {"Ceiling": -0.3})
        ]
    
        for name, params in effects:
            tenacity.apply_effect(name, params)
    
    # Executar no arquivo aberto
    # Tenacity.open("/path/to/file.wav")
    # aplicar_chain_podcast()

    Gerar relatório de loudness

    import tenacity
    
    def analisar_loudness(caminho):
        """Gera relatório de loudness do arquivo"""
        tenacity.open(caminho)
    
        # Analyze > Loudness
        resultado = tenacity.analyze("Loudness")
    
        print(f"Arquivo: {caminho}")
        print(f"  Integrated: {resultado['integrated']:.1f} LUFS")
        print(f"  Short-term: {resultado['shortterm_max']:.1f} LUFS")
        print(f"  Peak: {resultado['peak']:.1f} dBTP")
    
        return resultado
    
    # Analisar pasta
    import os
    pasta = "/home/user/podcast/"
    for f in sorted(os.listdir(pasta)):
        if f.endswith(".wav") or f.endswith(".mp3"):
            try:
                analisar_loudness(os.path.join(pasta, f))
            except Exception as e:
                print(f"Erro em {f}: {e}")

    Cuidados e limitações

    RiscoMitigação
    Script com erro pode crashar TenacityTestar em cópia primeiro
    Arquivos podem ser sobrescritosUsar backup ou output diferente
    Nem todos efeitos têm API PythonVerificar documentação
    Scripts em batch demoramRodar overnight comprogresso

    Você aprendeu

    • Habilitar Python scripting
    • Script simples: normalizar todos os arquivos de uma pasta
    • Script de processamento em lote
    • Aplicar chain de efeitos automaticamente
    • Gerar relatório de loudness

    Perguntas para reflexão

    1. O que Habilitar Python scripting resolve, e o que se perde sem isso?
    2. O que Script simples: normalizar todos os arquivos de uma pasta resolve, e o que se perde sem isso?
    3. O que Script de processamento em lote resolve, e o que se perde sem isso?
    4. Que parte desta página você conseguiria executar sem consultar o texto?

    Artigos relacionados

    Veja também

    Referências