>  기사  >  백엔드 개발  >  Python을 사용하여 노래의 피치를 낮추는 방법

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

Barbara Streisand
Barbara Streisand원래의
2024-09-25 17:16:42968검색

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 -m pitch_down.py

피치 시프트된 파일은 출력 폴더에 저장됩니다.

맞춤화

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

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

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

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

결론

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

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

위 내용은 Python을 사용하여 노래의 피치를 낮추는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.