Если вы когда-нибудь хотели изменить высоту тона песни, не изменяя ее скорость, эта запись в блоге для вас. Изменение высоты тона — обычная задача для музыкантов, диджеев и звукоинженеров. В этом уроке мы рассмотрим, как понизить тон песни с помощью Python и библиотеки pydub и автоматически применить этот процесс к нескольким песням в папке.
В музыке изменение высоты звука означает изменение высоты звука песни (повышение или понижение ее) без ее ускорения или замедления. Это может быть полезно для:
Сопоставление тональности песни с другим треком
Транспонирование песен для инструментов, настроенных на другую тональность
Создание ремиксов или коллажей
Мы будем использовать библиотеку 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}")
Импорт библиотек:
Мы импортируем os для работы с файловыми каталогами и AudioSegment из pydub для управления аудиофайлами.
Функция изменения высоты тона:
Функция Pitch_shift регулирует частоту дискретизации звука. Когда мы меняем частоту дискретизации, меняется высота тона. В этом случае мы вычисляем новую частоту дискретизации для смещения высоты звука на один полутон вниз по формуле:
new_sample_rate = int(audio.frame_rate * (2.0 ** (полутона / 12.0)))
Входные и выходные папки:
Мы определяем папки, в которых будем читать аудиофайлы и сохранять версии со сдвигом высоты тона. Если выходная папка не существует, она будет создана.
Прокрутка песен:
Используя os.listdir(), мы просматриваем каждый файл в папке с песнями. Перед обработкой скрипт проверяет, является ли файл аудиофайлом (.mp3 или .wav). Для каждого файла:
Экспорт и обратная связь:
После завершения обработки песня со смещенной высотой тона сохраняется в выходной папке, и печатается подтверждающее сообщение.
Убедитесь, что ваши аудиофайлы находятся в папке с песнями, а затем запустите скрипт:
python -m pitch_down.py
Файлы со сдвигом высоты тона будут сохранены в выходной папке.
Вы можете легко изменить этот скрипт, чтобы:
Увеличьте высоту звука, передав положительное значение (например, Pitch_shift(audio, 1) для повышения на полтона).
Обработка файлов различных форматов, добавляя к условной проверке другие расширения, например .ogg или .flac.
Сдвиг на другое количество полутонов путем настройки аргумента полутонов.
Этот скрипт представляет собой простой, но мощный способ изменить высоту звука нескольких аудиофайлов с помощью Python. С помощью pydub и ffmpeg вы можете массово манипулировать аудиофайлами, упрощая такие задачи, как коррекция высоты тона или подготовку звука, для музыкантов, продюсеров и всех, кто работает со звуком.
Не стесняйтесь экспериментировать с этим скриптом и посмотрите, как можно адаптировать его к своим потребностям. Приятного кодирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3