오늘은 대중적으로 쓰이는 acoustic feature들에 대해 정리해 보려 한다.
간단한 것들은 새로 배울 때마다 그때그때 내용을 추가할 예정이다.
<자주 사용하는 라이브러리>
librosa : 대표적으로 사용하는 auduio domain 라이브러리이다. MFCC/Mel Spectrogram 등을 추출할 때 사용하며 이외에도 여러 피처를 추출할 때 자주 쓰인다.
(Document) https://librosa.org/doc/latest/index.html
opensmile : pitch, energy, formant 등을 추출할 수 있는 기능을 제공한다. (이러한 피처들이 감정 분석에 중요한 요소라고 한다)
(Document) https://audeering.github.io/opensmile/
parselmouth : Praat software를 위한 라이브러리라고 한다. 자세한 내용은 이 링크 참고 : https://inspirit941.tistory.com/250
*Praat : 간단한 음성분석에서 음성 합성, 시각화 등 복잡하고 전문적인 처리까지 가능한 도구
(Document) https://parselmouth.readthedocs.io/en/stable/
주의! 본인은 이 라이브러리 다운받으려고 pip install parselmouth 수십번 해봤다가 실패했는데, 한참 뒤에서야 pip install praat-parselmouth가 올바른 방법임을 알게 되었다,,,,,, 이 글을 보는 여러분들은 시간 버리지 않길
pyACA : tempo, beat, harmonic elements등의 피처를 추출할 수 있는 기능을 제공한다. (특히 music에서 많이 사용되는 것 같다)
(Document) http://www.alexanderlerch.com/pyACA/docs/html/index.html
Amplitude
주어진 시간에서 소리의 강도(세기)를 나타낸다. 다른 여러 feature들을 추출할 때 광범위하게 사용된다.
Audio를 로드할 때, 시간에 대응되는 값이 바로 amplitude이다.
Fundamental Frequency(f0)
(참고 : https://www.studysmarter.co.uk/explanations/english/phonetics/fundamental-frequency/)
합성 고조파 중에서 가장 작은 양의 주파수를 의미한다. 즉, 한 음역 부분에서 가장 낮은 음이다. Pitch 추출, Harmony Analysis 등에 사용된다.
import librosa
import librosa.display
import librosa_yin
import matplotlib.pyplot as plt
# Load audio file
y, sr = librosa.load('audio_file.wav', sr=None)
# Extract the fundamental frequency using pYIN
# 통상적으로 C2가 남자가 낼 수 있는 가장 낮은 음, C7이 여자가 낼 수 있는 가장 높은 음
f0, voiced_flag, voiced_probs = librosa_yin.pyin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'), sr=sr)
# Plot the fundamental frequency over time
times = librosa.times_like(f0)
plt.figure()
plt.plot(times, f0, label='F0 estimate')
plt.legend()
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.title('Fundamental Frequency over Time')
plt.show()
Formant
(참고) https://blog.naver.com/200613241/221149632021
What
한국어로 '음형대'이다. 소리가 공명되는 특정 주파수 영역을 의미한다. Speech analysis, characterizing vowel sounds, and speaker characteristics 등에 사용된다.
https://gist.github.com/inspirit941/9f758f7f748a735e5bcd31a6521f7eab
Pitch
음의 높낮이를 나타낸다. 여러 소리를 각 소리별로 구분해내는 데에 중요한 역할을 한다. 여러 사람이 대화를 할 때 남자 목소리와 여자 목소리가 구분되는 이유이다.
https://librosa.org/doc/main/generated/librosa.piptrack.html
https://m.blog.naver.com/gaechuni/221650457087
Spectral Entropy
Spectral Flux (Superflux)
What
Spectral Flux는 오디오 신호의 파워 스펙트럼이 한 프레임에서 다른 프레임으로 얼마나 변하는지를 정량화한 것이다.
그리고 추가로 소개할 Superflux는 기본적인 Spectra Flux 개념의 확장으로, vibrato(음떨림) 이나 rapid, minor spectral changes와 같은 음악 신호에서 흔히 발생하는 변동에 대해 더 robust하게 설계되었다. 특히 더 정확한 시작 감지에 유용하다고 한다.
Why
둘 다 음악 노트나 다른 sound event의 시작을 감지하는 데 자주 사용된다.
Superflux의 spectral flux에 대한 차별점은 superflux가 변동의 영향을 줄이는 필터를 포함한다는 것이다. 스펙트럴 차이를 계산하기 전에 여러 이전 프레임에 걸쳐 이동 평균(Moving Average, MA)이나 중앙값 필터(Median filter)를 사용하여 스펙트럼 데이터를 평활화(smooth)하는 것 등이다.
그러니 Superflux를 사용하는 편이 더 나을 것이다.
https://librosa.org/librosa_gallery/auto_examples/plot_superflux.html
'[Audio & Speech Fundamentals]' 카테고리의 다른 글
[202002]A Framework for the Robust Evaluation of Sound Event Detection (1) | 2025.01.08 |
---|---|
Audio & Speech 기본 개념 (0) | 2025.01.03 |
MFCC(Mel Frequency Cepstral Coefficient) 간단 정리 (1) | 2024.05.07 |
멜 스펙트로그램(Mel Spectrogram) 간단 정리 (1) | 2024.04.29 |