파이썬 오디오 라이브러리를 활용한 음악 분류 및 장르 탐지

음악은 우리의 일상에서 중요한 역할을 합니다. 그러나 수많은 음악이 존재하기 때문에 음악을 분류하고 장르를 탐지하는 것은 어려운 작업일 수 있습니다. 이러한 문제를 해결하기 위해 파이썬 언어와 오디오 라이브러리를 활용하여 음악 분류 및 장르 탐지를 구현해보려고 합니다.

음악 분류를 위한 파이썬 라이브러리

음악 분류 및 장르 탐지를 위해 파이썬에는 다양한 오디오 처리 및 머신 러닝 관련 라이브러리가 있습니다. 그 중 몇 가지를 살펴보겠습니다.

1. Librosa

import librosa

# 음악 파일 불러오기
audio_data, sample_rate = librosa.load('song.mp3')

# 음악 파일의 템포 추출
tempo, beat_frames = librosa.beat.beat_track(audio_data, sample_rate)

# 음악 파일의 멜 스펙트로그램 추출
mel_spec = librosa.feature.melspectrogram(y=audio_data, sr=sample_rate)

# 음악 파일의 MFCC 추출
mfcc = librosa.feature.mfcc(y=audio_data, sr=sample_rate)

2. Essentia

import essentia.standard as es

# 음악 파일 불러오기
audio = es.MonoLoader(filename='song.wav')()

# 음악 파일의 비트 추출
rhythm_extractor = es.RhythmExtractor2013(method="multifeature")
bpm, beats, beats_confidence, _, beats_intervals = rhythm_extractor(audio)

# 음악 파일의 스펙트럼 추출
spectrogram_extractor = es.Spectrum()
spectrogram = spectrogram_extractor(audio)

# 음악 파일의 세프트랄 컬로그램 추출
spectral_crest = es.SpectralCrest()(spectrogram)

음악 장르 탐지를 위한 머신 러닝

음악을 분류하고 장르를 탐지하기 위해 머신 러닝 알고리즘을 사용할 수 있습니다. 가장 일반적인 방법은 분류 모델을 훈련시켜 음악의 특징과 장르 사이의 관계를 학습하는 것입니다.

1. Scikit-learn

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

# 특징 벡터와 레이블 준비
X = [feature_1, feature_2, ..., feature_n]
y = [genre_1, genre_2, ..., genre_n]

# 훈련 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 특징 벡터의 스케일 조정
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 분류 모델 생성 및 학습
svm = SVC()
svm.fit(X_train_scaled, y_train)

# 테스트 데이터로 예측 수행
y_pred = svm.predict(X_test_scaled)

2. Keras

from keras.models import Sequential
from keras.layers import Dense

# 신경망 모델 생성
model = Sequential()
model.add(Dense(units=64, activation='relu', input_dim=input_dim))
model.add(Dense(units=num_classes, activation='softmax'))

# 모델 컴파일
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# 모델 훈련
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

# 모델 평가
loss, accuracy = model.evaluate(X_test, y_test)

결론

파이썬 언어와 오디오 라이브러리를 사용하여 음악 분류 및 장르 탐지를 구현할 수 있습니다. 음악 파일에서 특징을 추출하고 머신 러닝 알고리즘을 통해 음악의 장르를 예측하는 방법을 소개했습니다. 이를 통해 음악 관련 애플리케이션을 개발하거나 음악 정보를 분석하는 등 다양한 분야에서 활용할 수 있습니다.

#음악분류 #장르탐지