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

오디오 파일에서 특정 음의 음파를 찾는 작업은 파이썬의 오디오 처리 라이브러리를 활용하여 수행할 수 있습니다. 이번 블로그 포스트에서는 파이썬의 librosa 라이브러리를 사용하여 오디오 파일에서 특정 음의 음파를 찾는 방법에 대해 알아보겠습니다.

librosa 라이브러리 설치

먼저, librosa 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 라이브러리를 설치할 수 있습니다.

pip install librosa

오디오 파일 로드

특정 음의 음파를 찾기 위해 먼저 오디오 파일을 로드해야 합니다. librosa.load() 함수를 사용하여 오디오 파일을 로드할 수 있습니다.

import librosa

audio_file = 'audio.wav'
audio_data, sample_rate = librosa.load(audio_file)

스펙트로그램 생성

로드한 오디오 데이터를 스펙트로그램으로 변환하여 특정 음의 음파를 시각화할 수 있습니다. librosa.stft() 함수를 사용하여 스펙트로그램을 생성합니다.

import numpy as np
import librosa.display

# 스펙트로그램 생성
stft = np.abs(librosa.stft(audio_data))

# 스펙트로그램 시각화
librosa.display.specshow(librosa.amplitude_to_db(stft), sr=sample_rate, x_axis='time', y_axis='log')

특정 음의 음파 탐색

스펙트로그램을 기반으로 특정 음의 음파를 찾을 수 있습니다. librosa.cqt_pitch() 함수를 사용하여 각 프레임에서의 피치를 추출합니다.

cqt = librosa.amplitude_to_db(librosa.cqt(audio_data, sr=sample_rate))
pitches, magnitudes = librosa.cqt_pitch(cqt)

target_pitch = 'C4'  # 찾고자 하는 음의 피치

# 특정 음의 인덱스 찾기
target_pitch_index = librosa.note_to_hz(target_pitch)

# 해당 인덱스에 해당하는 음의 프레임 추출
target_pitch_frames = np.where(pitches == target_pitch_index)[1]

# 특정 음파 시각화
librosa.display.specshow(cqt[:, target_pitch_frames], sr=sample_rate, x_axis='time', y_axis='cqt_note', bins_per_octave=12)

위의 코드를 실행하면, 특정 음(notes)에 해당하는 음파가 시각화됩니다.

마무리

이번 포스트에서는 파이썬을 사용하여 오디오 파일에서 특정 음의 음파를 찾는 방법에 대해 알아보았습니다. librosa 라이브러리를 활용하여 오디오 파일을 로드하고, 스펙트로그램을 생성하여 특정 음의 음파를 시각화하는 과정을 다루었습니다. 이를 통해 오디오 신호 처리에 대한 이해를 높일 수 있을 것입니다.

관련 참고 자료: