KeiStory

Python 으로 wav 파일 비교하기

 

아래 코드를 이용하면 wav 파일을 비교합니다.

dist 값이 낮을수록 동일합니다.

# 필요한 라이브러리 임포트
import librosa  # 오디오 처리를 위한 라이브러리
import matplotlib.pyplot as plt  # 시각화를 위한 라이브러리
from dtw import dtw  # 동적 시간 워핑 알고리즘
from numpy.linalg import norm  # 벡터 정규화를 위한 함수

# 오디오 파일 로드
y1, sr1 = librosa.load('source.wav')  # 첫 번째 오디오 파일 로드
y2, sr2 = librosa.load('target.wav')  # 두 번째 오디오 파일 로드

# 서브플롯을 사용하여 여러 그래프 표시
plt.subplot(1, 2, 1)  # 1행 2열의 첫 번째 서브플롯
mfcc1 = librosa.feature.mfcc(y=y1, sr=sr1)  # 첫 번째 오디오의 MFCC 특성 추출
librosa.display.specshow(mfcc1)  # MFCC 스펙트로그램 표시

plt.subplot(1, 2, 2)  # 1행 2열의 두 번째 서브플롯
mfcc2 = librosa.feature.mfcc(y=y2, sr=sr2)  # 두 번째 오디오의 MFCC 특성 추출
librosa.display.specshow(mfcc2)  # MFCC 스펙트로그램 표시

# DTW 알고리즘을 사용하여 두 MFCC 특성 간의 거리 계산
dist, cost, acc_cost, path = dtw(mfcc1.T, mfcc2.T, dist=lambda x, y: norm(x - y, ord=1))
# dist: 정규화된 거리
# cost: 비용 행렬
# acc_cost: 누적 비용 행렬
# path: 최적 경로

# 결과 출력
print('Normalized distance between the two sounds:', dist)

코드 간단 설명

두 개의 오디오 파일('source.wav'와 'target.wav')을 로드합니다.

각 오디오 파일에 대해 MFCC(Mel-frequency cepstral coefficients)를 계산합니다.
MFCC는 오디오 신호의 특징을 나타내는 데 널리 사용되는 방법입니다.

계산된 MFCC를 시각화하기 위해 스펙트로그램을 그립니다.

DTW(Dynamic Time Warping) 알고리즘을 사용하여 두 MFCC 행렬 간의 거리를 계산합니다.
DTW는 시간 축에서 신축성 있게 두 시계열 데이터를 비교할 수 있는 알고리즘입니다.

마지막으로, 두 오디오 간의 정규화된 거리를 출력합니다.
이 거리 값이 작을수록 두 오디오가 더 유사하다는 것을 의미합니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band