"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python을 사용하여 노래의 피치를 낮추는 방법

Python을 사용하여 노래의 피치를 낮추는 방법

2024년 10월 31일에 게시됨
검색:707

How to Down-Pitch A Song Using Python

속도를 변경하지 않고 노래의 피치를 변경하고 싶다면 이 블로그 게시물을 참조하세요. 피치 변경은 음악가, DJ, 오디오 엔지니어의 일반적인 작업입니다. 이 튜토리얼에서는 Python과 pydub 라이브러리를 사용하여 노래의 피치를 낮추고 이 프로세스를 폴더의 여러 노래에 자동으로 적용하는 방법을 살펴보겠습니다.

왜 피치 시프트인가?

음악에서 피치 이동은 노래의 속도를 높이거나 낮추지 않고 노래의 피치를 변경(높이거나 낮추는) 것을 의미합니다. 이는 다음과 같은 경우에 유용할 수 있습니다.

  • 한 노래의 키를 다른 트랙과 일치

  • 다른 키로 조율된 악기의 노래 조옮김

  • 리믹스 또는 매시업 만들기

필요한 도구

Python 라이브러리 pydub를 사용하여 오디오 파일을 조작하겠습니다. pip:
를 사용하여 설치할 수 있습니다.

pip install pydub

또한 pydub에서는 MP3와 같은 오디오 파일을 처리하려면 ffmpeg가 필요합니다. 터미널을 통해 ffmpeg를 설치할 수 있습니다:

sudo apt install ffmpeg

피치 이동에 대한 단계별 가이드

이제 폴더에 있는 여러 노래의 피치 이동을 자동화하는 Python 스크립트를 살펴보겠습니다. 스크립트는 노래 폴더의 파일을 반복하고 반음씩 낮추고(반음 = -1) 새 파일을 출력 폴더에 저장합니다.

코드

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}")

설명

  1. 라이브러리 가져오기:
    오디오 파일을 조작하기 위해 pydub에서 파일 디렉토리 및 AudioSegment를 사용하기 위해 os를 가져옵니다.

  2. 피치 시프트 기능:
    itch_shift 함수는 오디오의 샘플링 속도를 조정합니다. 샘플링 속도를 변경하면 피치가 변경됩니다. 이 경우 다음 공식을 사용하여 피치를 반음씩 낮추기 위한 새로운 샘플링 속도를 계산합니다.
    new_sample_rate = int(audio.frame_rate * (2.0 ** (반음 / 12.0)))

  3. 입력 및 출력 폴더:

    오디오 파일을 읽고 피치 이동 버전을 저장할 폴더를 정의합니다. 출력 폴더가 없으면 생성됩니다.

  4. 노래 반복:

    os.listdir()을 사용하여 노래 폴더의 각 파일을 반복합니다. 스크립트는 파일을 처리하기 전에 파일이 오디오 파일(.mp3 또는 .wav)인지 확인합니다. 각 파일에 대해:

      오디오를 로드합니다.
    • pitch_shift 기능이 적용되어 음정이 반음씩 낮아집니다.
    • 피치 이동 오디오가 출력 폴더로 내보내집니다.
  5. 수출 및 피드백:

    처리가 완료되면 피치 시프트된 곡이 출력 폴더에 저장되고 확인 메시지가 인쇄됩니다.

스크립트 실행

노래 폴더에 오디오 파일이 있는지 확인한 후 다음 스크립트를 실행하세요.


python -mitch_down.py
python -m pitch_down.py
피치 시프트된 파일은 출력 폴더에 저장됩니다.

맞춤화

이 스크립트를 다음과 같이 쉽게 수정할 수 있습니다.

  • 양수 값을 전달하여 오디오 피치를 높입니다(예: 반음 높이려면itch_shift(audio, 1)).

  • 조건부 검사에 .ogg 또는 .flac와 같은 다른 확장자를 추가하여 다양한 파일 형식을 처리합니다.

  • 반음 인수를 조정하여 다른 반음 수만큼 이동합니다.

결론

이 스크립트는 Python을 사용하여 여러 오디오 파일의 피치를 이동하는 간단하면서도 강력한 방법입니다. pydub 및 ffmpeg를 사용하면 오디오 파일을 대량으로 조작할 수 있으므로 음악가, 프로듀서 또는 오디오 작업을 하는 모든 사람이 피치 수정이나 오디오 준비와 같은 작업을 더 쉽게 수행할 수 있습니다.

이 스크립트를 자유롭게 실험해보고 필요에 맞게 어떻게 조정할 수 있는지 알아보세요. 즐거운 코딩하세요!

릴리스 선언문 이 글은 https://dev.to/highcenburg/how-to-down-pitch-a-song-using-python-1opc?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3