ホームページ  >  記事  >  バックエンド開発  >  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 スクリプトを見てみましょう。このスクリプトは、曲フォルダー内のファイルをループし、半音 (semitone = -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. ライブラリのインポート:
    ファイルディレクトリを操作するために OS をインポートし、オーディオファイルを操作するために pydub から AudioSegment をインポートします。

  2. ピッチシフト機能:
    itch_shift 関数はオーディオのサンプル レートを調整します。サンプルレートを変更すると、ピッチが変わります。この場合、次の式を使用してピッチを半音下にシフトする新しいサンプル レートを計算します。

    new_sample_rate = int(audio.frame_rate * (2.0 ** (半音 / 12.0)))

  3. 入力フォルダーと出力フォルダー:
    オーディオ ファイルを読み取り、ピッチ シフトしたバージョンを保存するフォルダーを定義します。出力フォルダーが存在しない場合は作成されます。

  4. 曲をループする:
    os.listdir() を使用して、 songs フォルダー内の各ファイルをループします。スクリプトは、ファイルを処理する前に、ファイルがオーディオ ファイル (.mp3 または .wav) であるかどうかを確認します。各ファイルについて:

    • オーディオをロードします。
    • pitch_shift 関数が適用され、ピッチが半音下がります。
    • ピッチシフトされたオーディオが出力フォルダーにエクスポートされます。
  5. エクスポートとフィードバック:
    処理が完了すると、ピッチシフトされたソングが出力フォルダーに保存され、確認メッセージが出力されます。

スクリプトの実行

オーディオ ファイルが songs フォルダーにあることを確認してから、スクリプトを実行します。

python -m pitch_down.py

ピッチシフトされたファイルは出力フォルダーに保存されます。

カスタマイズ

このスクリプトは次のように簡単に変更できます。

  • 正の値を渡すことでオーディオのピッチを上げます (例: 半音上げの場合は、pitch_shift(audio, 1))。

  • .ogg や .flac などの他の拡張子を条件チェックに追加して、さまざまなファイル形式を処理します。

  • 半音引数を調整して、異なる半音数だけシフトします。

結論

このスクリプトは、Python を使用して複数のオーディオ ファイルをピッチシフトするシンプルかつ強力な方法です。 pydub と ffmpeg を使用すると、オーディオ ファイルを一括操作できるため、ミュージシャン、プロデューサー、またはオーディオを扱うすべての人にとって、ピッチ補正やオーディオの準備などのタスクが簡単になります。

このスクリプトを自由に試して、ニーズに合わせてどのように調整できるかを確認してください。コーディングを楽しんでください!

以上がPython を使用して曲のピッチを下げる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。