[Sound Domain Technology]/[Sound] Fundamentals

Audio data에서 자주 쓰이는 feature와 추출 방법

do.hyeon 2024. 5. 7. 17:29

 

오늘은 audio data를 다룰 때 많이 쓰이는 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

What

주어진 시간에서 소리의 강도(세기)를 나타낸다.

 

Why

다른 여러 feature들을 추출할 때 광범위하게 사용된다.

 

How

소리는 2차원 상에 시간 축과 진폭 축으로 나타내기 때문에, 자연스럽게 구해진다.

 

Fundamental Frequency(f0)

(참고 : https://www.studysmarter.co.uk/explanations/english/phonetics/fundamental-frequency/)

What

합성 고조파 중에서 가장 작은 양의 주파수를 의미한다. 즉, 한 음역 부분에서 가장 낮은 음이다.

 

Why

이 f0을 기반으로 pitch를 구한다.

 

How

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

한국어로 '음형대'이다. 소리가 공명되는 특정 주파수 영역을 의미한다.

 

Why

speech analysis, characterizing vowel sounds, and speaker characteristics 등에 사용된다.

 

How

https://gist.github.com/inspirit941/9f758f7f748a735e5bcd31a6521f7eab

 

get_formant.ipynb

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

Prosody

What

한국어로 '운율'이다. 

 

Why

 

 

How

 

 

Pitch

What

음의 높낮이를 나타낸다.

 

Why

여러 소리를 각 소리별로 구분해내는 데에 중요한 역할을 한다. 여러 사람이 대화를 할 때 남자 목소리와 여자 목소리가 구분되는 이유라고 생각하면 될 것 같다.

 

How

https://librosa.org/doc/main/generated/librosa.piptrack.html

 

librosa.piptrack — librosa 0.10.2 documentation

Caution You're reading the documentation for a development version. For the latest released version, please have a look at 0.10.2.

librosa.org

https://m.blog.naver.com/gaechuni/221650457087

 

[음성/오디오 신호처리] Python을 이용한 오디오 신호 분석 - 오디오 신호 pitch 추출하기

실제 오디오 데이터를 이용하여 pitch를 추출하는 과정을 정리하겠습니다. 일단 신호처리적으로 pitch를 추...

blog.naver.com

 

Spectral Entropy

 

 

 

Spectral Flux (Superflux)

 

What

Spectral Flux는 오디오 신호의 파워 스펙트럼이 한 프레임에서 다른 프레임으로 얼마나 변하는지를 정량화한 것이다.

그리고 추가로 소개할 Superflux는 기본적인 Spectra Flux 개념의 확장으로, vibrato(음떨림) 이나 rapid, minor spectral changes와 같은 음악 신호에서 흔히 발생하는 변동에 대해 더 강건하게 설계되었다. 특히 더 정확한 시작 감지에 유용하다고 한다.

 

Why

둘 다 음악 노트나 다른 사운드 이벤트의 시작을 감지하는 데 자주 사용된다.

슈퍼플럭스의 스펙트럴 플럭스에 대한 차별점은 슈퍼플럭스가 변동의 영향을 줄이는 필터를 포함한다는 것이다. 스펙트럴 차이를 계산하기 전에 여러 이전 프레임에 걸쳐 이동 평균(Moving Average, MA)이나 중앙값 필터(Median filter)를 사용하여 스펙트럼 데이터를 평활화(smooth)하는 것 등이다.

 

How

그러니 Superflux를 사용하는 편이 더 나을 것이다.

https://librosa.org/librosa_gallery/auto_examples/plot_superflux.html

 

Superflux onsets — librosa-gallery 0.1.0 documentation

Docs » Superflux onsets View page source Superflux onsets This notebook demonstrates how to recover the Superflux onset detection algorithm of Boeck and Widmer, 2013 from librosa. This algorithm improves onset detection accuracy in the presence of vibrato

librosa.org