Вопрос или проблема
Я хотел бы заняться диджеингом, или хотя бы составлением песен в серии и сделать так, чтобы это работало. Я уже использовал bpmwrap, чтобы пометить темп каждой песни в моей библиотеке, и это сразу заставило меня понять, что даже когда работа с темпом сделана за меня, мне очень трудно сопоставить тональность. Есть ли какой-либо инструмент командной строки для Linux, который я мог бы использовать для определения тональности каждой песни в моей библиотеке?
Правка: вот текст скрипта, который я написал для анализа и тональности, и темпа. Вы можете изменить его по мере необходимости. Я могу прояснить что-то, если это нужно, но я сейчас устал и не сделаю это сейчас.
#!/bin/bash
total=$(tree | grep .mp3 | wc -l)
declare -i count=0
echo -ne "Анализ темпов... неизвестно/$total \r"
/home/spyndling/bigboy4tb/compiling/bpmwrap/bpmwrap.sh -w "/home/spyndling/bigboy4tb/Music imports/" > /dev/null
echo -ne "\033[2K"
echo "Темпы проанализированы."
for f in ./**/**/*.mp3; do
count+=1
echo -ne "Анализ тональностей... $count/$total \r"
mid3v2 --TKEY "$(keyfinder-cli "$f")" "$f"
echo -ne "\033[2K"
done
echo "Тональности проанализированы."
Это было немного приключением, но мне удалось установить keyfinder-cli.
Вы хотите собрать эти пакеты в следующем порядке.
Catch2-3.6.0.zip
fftw-3.3.10.tar.gz
libkeyfinder-2.2.8.tar.gz
keyfinder-cli-main.zip
Создайте директорию, я использовал название build_temp
, затем загрузите и извлеките все в эту папку.
Сборка Catch2:
sudo cmake -S . -B build
cd build
make
sudo make install
FFTW3 необходимо собрать с использованием -fPIC, чтобы удовлетворить требования сборки libkeyfinder.
./configure CFLAGS=-fPIC --enable-shared
make
sudo make install
Сборка libkeyfinder:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -S . -B build
cmake --build build --parallel
sudo cmake --install build
Сборка keyfinder-cli.
Первое, что нужно сделать, это скопировать заголовки libkeyfinder
в /usr/local/include
.
sudo mv /usr/bin/include/keyfinder /usr/local/include/
Вы не можете просто переместить файлы ffmpeg
, как заголовки libkeyfinder
.
Самое простое – это скопировать их в /usr/local/include из директории ffmpeg.
sudo cp /usr/include/ffmpeg/libavutil /usr/local/include/
sudo cp /usr/include/ffmpeg/libavcodec /usr/local/include/
sudo cp /usr/include/ffmpeg/libavformat /usr/local/include/
sudo cp /usr/include/ffmpeg/libswresample /usr/local/include/
Перейдите в директорию keyfinder-cli
. В Makefile
LDFLAGS необходимо изменить, чтобы включить /usr/local/lib64
. Замените его следующим:
PREFIX=/usr/local
CXX = g++
CXXFLAGS = -std=c++11 -Wall -I/usr/local/include/keyfinder -I/usr/local/include
LDFLAGS = -L/usr/local/lib64 -lkeyfinder -lavcodec -lavformat -lavutil -lswresample -lfftw3
TARGET = keyfinder-cli
all: $(TARGET)
$(TARGET): keyfinder_cli.o
$(CXX) $^ -o $@ $(LDFLAGS)
keyfinder_cli.o: keyfinder_cli.cpp
$(CXX) $(CXXFLAGS) -c $<
install: keyfinder-cli keyfinder-cli.1
install -d "${DESTDIR}${PREFIX}/bin"
install -m 755 keyfinder-cli "${DESTDIR}${PREFIX}/bin/keyfinder-cli"
install -d "${DESTDIR}${PREFIX}/share/man/man1"
install -m 644 keyfinder-cli.1 "${DESTDIR}${PREFIX}/share/man/man1/keyfinder-cli.1"
clean:
rm -f *.o $(TARGET)
Экспортируйте путь: export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
Теперь соберите keyfinder-cli:
sudo make
sudo make install
Теперь у вас должна быть установлена keyfinder-cli
.
Ответ или решение
Для обнаружения и записи метаданных о тональности музыкальных треков в командной строке Linux, существует несколько инструментов, которые могут значительно упростить задачу. На основании вашего запроса и уже выполненной работы, предлагаю рассмотреть использование библиотеки KeyFinder и её интерфейса командной строки keyfinder-cli, который вы успешно установили.
Установка и использование keyfinder-cli
1. Установка keyfinder-cli
Вы уже сделали большую часть работы по установке keyfinder-cli. Чтобы убедиться, что всё установлено корректно, выполните следующие команды в терминале:
keyfinder-cli --version
Это должно отобразить версию инструмента, если он установлен правильно.
2. Скрипт для анализа ключа и темпа
У вас уже имеется скрипт, который использует bpmwrap
для анализа темпа и keyfinder-cli
для определения ключа. Давайте внесем небольшие улучшения в ваш скрипт для повышения его эффективности и читаемости:
#!/bin/bash
# Параметры
music_dir="/home/spyndling/bigboy4tb/Music imports/"
total=$(find "$music_dir" -name "*.mp3" | wc -l)
count=0
echo -ne "Анализируем темпы... неизвестно/$total \r"
# Анализируем темпы
/home/spyndling/bigboy4tb/compiling/bpmwrap/bpmwrap.sh -w "$music_dir" > /dev/null
echo -ne "\033[2K"
echo "Темпы проанализированы."
# Анализ ключа и запись метаданных
for f in "$music_dir"/**/*.mp3; do
count+=1
echo -ne "Анализируем ключи... $count/$total \r"
key=$(keyfinder-cli "$f") # Сохраняем результат в переменной
if [ -n "$key" ]; then # Проверяем, что ключ определен
mid3v2 --TKEY "$key" "$f" # Записываем ключ в метаданные
else
echo "Ключ не найден для: $f" >> errors.log # Логируем ошибки
fi
echo -ne "\033[2K"
done
echo "Ключи проанализированы."
Объяснение изменений и улучшений
-
Использование
find
: Вместоtree | grep .mp3
, который может быть менее эффективным, мы используемfind
, который непосредственно находит все файлы.mp3
в указанной директории и ее поддиректориях. -
Проверка ключа: Перед записью ключа в метаданные проверяем, что он действительно найден. Это позволит избежать возможных ошибок при работе с файлами, которые не могут быть проанализированы.
-
Логирование ошибок: Если ключ не может быть определён, мы записываем сообщение в лог. Это может помочь вам в дальнейшем, если потребуется проанализировать, какие треки нуждаются в дополнительной обработке.
Заключение
Использование keyfinder-cli
вместе с существующим скриптом позволяет эффективно анализировать и устанавливать метаданные о тональности ваших музыкальных файлов. Это, безусловно, является важным шагом в подготовке вашей музыки для DJ-сетов. Такой подход обеспечит лучшее соответствие музыкальных треков, что сделает ваши выступления более гармоничными и профессиональными.
Попробуйте предложенные изменения, и надеюсь, это поможет вам более эффективно управлять своей музыкальной библиотекой!