[python] 파이썬으로 오디오 파일에서 특정 음정을 찾는 방법

오디오 파일에서 특정 음정을 찾는 작업은 음악 분석, 음성 처리 등 다양한 응용 분야에서 사용됩니다. 파이썬을 사용하여 오디오 파일에서 특정 음정을 찾는 방법에 대해 알아보도록 하겠습니다.

1. 오디오 파일 로딩

먼저, 파이썬에서 오디오 파일을 로딩하는 방법부터 알아보겠습니다. 여기서는 librosa 라이브러리를 사용하여 오디오 파일을 로딩합니다.

import librosa

file_path = 'audio.wav'
audio, sr = librosa.load(file_path)

위 코드에서 audio는 오디오 데이터를, sr은 샘플링 속도를 나타냅니다.

2. 음악 분석

음악 분석을 통해 오디오 파일에서 특정 음정을 찾을 수 있습니다. 이를 위해 librosa 라이브러리의 pitch 모듈을 사용할 수 있습니다.

import librosa
import numpy as np

file_path = 'audio.wav'
audio, sr = librosa.load(file_path)

pitch, magnitudes = librosa.piptrack(audio, sr)
pitch = np.nan_to_num(pitch)

# 특정 음정에 해당하는 시간 구간 찾기
target_pitch = 440.0
indices = np.where(np.abs(pitch - target_pitch) < 1.0)[0]
time_intervals = librosa.frames_to_time(indices, sr=sr)

위 코드에서 piptrack 함수는 오디오의 피치와 관련된 정보를 반환합니다. 이를 통해 특정 음정에 해당하는 시간 구간을 찾을 수 있습니다.

3. 결과 시각화

찾은 특정 음정에 해당하는 시간 구간을 시각화하여 확인해보겠습니다. 이를 위해 matplotlib 라이브러리를 사용하겠습니다.

import librosa
import numpy as np
import matplotlib.pyplot as plt

file_path = 'audio.wav'
audio, sr = librosa.load(file_path)

pitch, magnitudes = librosa.piptrack(audio, sr)
pitch = np.nan_to_num(pitch)

# 특정 음정에 해당하는 시간 구간 찾기
target_pitch = 440.0
indices = np.where(np.abs(pitch - target_pitch) < 1.0)[0]
time_intervals = librosa.frames_to_time(indices, sr=sr)

# 결과 시각화
plt.figure(figsize=(10, 4))
plt.plot(np.arange(len(audio)) / float(sr), audio)
plt.vlines(time_intervals, -1, 1, color='r', linestyle='--', linewidth=2)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Audio with Target Pitch')
plt.show()

위 코드에서 vlines 함수는 시간 축에 수직선을 그려 특정 음정에 해당하는 시간 구간을 표시합니다.

4. 결론

위에서 설명한 방법을 사용하여 파이썬으로 오디오 파일에서 특정 음정을 찾을 수 있습니다. librosa 라이브러리의 기능을 활용하면 더욱 정확하고 다양한 분석이 가능합니다.

참고 문헌: