Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Librosa 스펙트로그램 플롯을 특정 크기의 이미지로 저장하는 방법

Librosa는 오디오 및 음악 파일 분석을 돕는 Python 패키지입니다. 이 패키지는 음악 검색 정보 시스템(MIR) 구축에도 폭넓게 활용되고 있습니다. 이 글에서는 Librosa로 생성한 스펙트로그램 플롯을 원하는 특정 크기의 이미지 파일로 저장하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 사이와 주변의 여백(padding)을 조정합니다.

  • figure와 서브플롯 집합을 생성합니다.

  • 스펙트로그램의 시간당 샘플 수(hl), 이미지의 높이(hi)와 너비(wi)를 저장할 세 개의 변수를 초기화합니다.

  • 데모 트랙을 로드합니다.

  • 오디오 시계열 데이터 목록인 window를 생성합니다.

  • melspectrogram() 함수에 window와 앞서 정의한 변수들을 사용해 멜 스케일(mel-scaled) 스펙트로그램을 계산합니다.

  • power_to_db() 메서드를 사용해 파워 스펙트로그램(진폭의 제곱)을 데시벨(dB) 단위로 변환합니다.

  • 스펙트로그램을 img로 표시합니다(이 단계에서 바로 저장할 수도 있습니다).

  • savefig()를 사용해 이미지를 저장합니다.

  • plt.show() 메서드로 화면에 이미지를 출력합니다.

예제 코드

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

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig, ax = plt.subplots()

hl = 512 # 스펙트로그램에서 시간 단계당 샘플 수
hi = 128 # 이미지 높이
wi = 384 # 이미지 너비

# 데모 트랙 로드
y, sr = librosa.load(librosa.ex('trumpet'))
window = y[0:wi*hl]

S = librosa.feature.melspectrogram(y=window, sr=sr, n_mels=hi, fmax=8000,
hop_length=hl)
S_dB = librosa.power_to_db(S, ref=np.max)
img = librosa.display.specshow(S_dB, x_axis='time', y_axis='mel', sr=sr, fmax=8000, ax=ax)

plt.savefig("out.png")
plt.show()

실행 결과

위 코드를 실행하면 지정한 그림 크기(7.50 × 3.50 인치)대로 멜 스펙트로그램이 out.png 파일로 저장되며, 동시에 화면에도 표시됩니다. figure.figsize 값을 조절하면 저장되는 이미지의 크기를 자유롭게 변경할 수 있고, 필요에 따라 savefig()dpi 옵션을 추가하면 해상도까지 세밀하게 제어할 수 있습니다.

Librosa 스펙트로그램 플롯을 특정 크기의 이미지로 저장하는 방법