"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como diminuir o tom de uma música usando Python

Como diminuir o tom de uma música usando Python

Publicado em 31/10/2024
Navegar:586

How to Down-Pitch A Song Using Python

Se você sempre quis mudar o tom de uma música sem alterar sua velocidade, esta postagem do blog é para você. A mudança de tom é uma tarefa comum para músicos, DJs e engenheiros de áudio. Neste tutorial, exploraremos como diminuir o tom de uma música usando Python e a biblioteca pydub e aplicar esse processo a várias músicas em uma pasta automaticamente.

Por que mudança de tom?

Na música, mudança de tom significa mudar o tom de uma música (aumentando ou diminuindo) sem acelerá-la ou desacelerá-la. Isso pode ser útil para:

  • Combinando o tom de uma música com outra faixa

  • Transposição de músicas para instrumentos afinados em um tom diferente

  • Criando remixes ou mashups

Ferramentas que você precisa

Usaremos a biblioteca Python pydub para manipular arquivos de áudio. Você pode instalá-lo usando pip:

pip install pydub

Além disso, o pydub requer o ffmpeg para lidar com arquivos de áudio como MP3. Você pode instalar o ffmpeg através do terminal:

sudo apt install ffmpeg

Guia passo a passo para mudança de tom

Agora vamos mergulhar no script Python que automatiza a mudança de tom para várias músicas em uma pasta. O script percorre os arquivos em uma pasta de músicas, diminui o tom deles em meio tom (semitom = -1) e salva os novos arquivos em uma pasta de saída.

O Código

import os
from pydub import AudioSegment

# Function to shift pitch down
def pitch_shift(audio, semitones):
    # Adjust sample rate to shift pitch
    new_sample_rate = int(audio.frame_rate * (2.0 ** (semitones / 12.0)))
    return audio._spawn(audio.raw_data, overrides={'frame_rate': new_sample_rate}).set_frame_rate(audio.frame_rate)

# Input and output folders
input_folder = './songs'
output_folder = './output'

# Ensure the output folder exists
os.makedirs(output_folder, exist_ok=True)

# Loop through all files in the songs folder
for filename in os.listdir(input_folder):
    # Check if the file is an audio file (e.g., mp3 or wav)
    if filename.endswith(".mp3") or filename.endswith(".wav"):
        # Construct the full file path
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        # Load the audio file
        audio = AudioSegment.from_file(input_path)

        # Shift pitch down by a half-step (semitone = -1)
        shifted_audio = pitch_shift(audio, -1)

        # Export the pitch-shifted audio to the output folder
        shifted_audio.export(output_path, format="mp3")
        print(f"Processed and saved: {output_path}")

Explicação

  1. Importando bibliotecas:
    Importamos os para trabalhar com diretórios de arquivos e AudioSegment do pydub para manipular arquivos de áudio.

  2. Função Pitch-Shift:
    A função pitch_shift ajusta a taxa de amostragem do áudio. Quando alteramos a taxa de amostragem, o tom muda. Neste caso, calculamos a nova taxa de amostragem para diminuir o tom em um semitom usando a fórmula:

    new_sample_rate = int(audio.frame_rate * (2,0 ** (semitons / 12,0)))

  3. Pastas de entrada e saída:
    Definimos as pastas onde leremos os arquivos de áudio e salvaremos as versões com pitch shifted. Se a pasta de saída não existir, ela será criada.

  4. Loop pelas músicas:
    Usando os.listdir(), percorremos cada arquivo na pasta de músicas. O script verifica se o arquivo é um arquivo de áudio (.mp3 ou .wav) antes de processá-lo. Para cada arquivo:

    • Carrega o áudio.
    • A função pitch_shift é aplicada, diminuindo o tom em meio passo.
    • O áudio com mudança de tom é exportado para a pasta de saída.
  5. Exportação e feedback:
    Assim que o processamento for concluído, a música com afinação alterada é salva na pasta de saída e uma mensagem de confirmação é impressa.

Executando o script

Certifique-se de ter seus arquivos de áudio na pasta de músicas e execute o script:

python -m pitch_down.py

Os arquivos com pitch shift serão salvos na pasta de saída.

Personalização

Você pode facilmente modificar este script para:

  • Aumente o áudio passando um valor positivo (por exemplo, pitch_shift(audio, 1) para meio tom acima).

  • Processe diferentes formatos de arquivo adicionando outras extensões como .ogg ou .flac à verificação condicional.

  • Mude um número diferente de semitons ajustando o argumento de semitons.

Conclusão

Este script é uma maneira simples, mas poderosa, de alterar o tom de vários arquivos de áudio usando Python. Com pydub e ffmpeg, você pode manipular arquivos de áudio em massa, facilitando tarefas como correção de tom ou preparação de áudio para músicos, produtores ou qualquer pessoa que trabalhe com áudio.

Sinta-se à vontade para experimentar este script e ver como você pode adaptá-lo às suas necessidades. Boa codificação!

Declaração de lançamento Este artigo é reproduzido em: https://dev.to/highcenburg/how-to-wow-pitch-a-song-using-python-1opc?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3