«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как понизить тон песни с помощью Python

Как понизить тон песни с помощью Python

Опубликовано 31 октября 2024 г.
Просматривать:934

How to Down-Pitch A Song Using Python

Если вы когда-нибудь хотели изменить высоту тона песни, не изменяя ее скорость, эта запись в блоге для вас. Изменение высоты тона — обычная задача для музыкантов, диджеев и звукоинженеров. В этом уроке мы рассмотрим, как понизить тон песни с помощью Python и библиотеки pydub и автоматически применить этот процесс к нескольким песням в папке.

Почему Pitch Shift?

В музыке изменение высоты звука означает изменение высоты звука песни (повышение или понижение ее) без ее ускорения или замедления. Это может быть полезно для:

  • Сопоставление тональности песни с другим треком

  • Транспонирование песен для инструментов, настроенных на другую тональность

  • Создание ремиксов или коллажей

Инструменты, которые вам понадобятся

Мы будем использовать библиотеку Python pydub для управления аудиофайлами. Вы можете установить его с помощью pip:

pip install pydub

Кроме того, pydub требует ffmpeg для обработки аудиофайлов, таких как MP3. Вы можете установить 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. Импорт библиотек:
    Мы импортируем os для работы с файловыми каталогами и AudioSegment из pydub для управления аудиофайлами.

  2. Функция изменения высоты тона:
    Функция Pitch_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

Файлы со сдвигом высоты тона будут сохранены в выходной папке.

Кастомизация

Вы можете легко изменить этот скрипт, чтобы:

  • Увеличьте высоту звука, передав положительное значение (например, Pitch_shift(audio, 1) для повышения на полтона).

  • Обработка файлов различных форматов, добавляя к условной проверке другие расширения, например .ogg или .flac.

  • Сдвиг на другое количество полутонов путем настройки аргумента полутонов.

Заключение

Этот скрипт представляет собой простой, но мощный способ изменить высоту звука нескольких аудиофайлов с помощью Python. С помощью pydub и ffmpeg вы можете массово манипулировать аудиофайлами, упрощая такие задачи, как коррекция высоты тона или подготовку звука, для музыкантов, продюсеров и всех, кто работает со звуком.

Не стесняйтесь экспериментировать с этим скриптом и посмотрите, как можно адаптировать его к своим потребностям. Приятного кодирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/highcenburg/how-to-pitch-a-song-using-python-1opc?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3