본문 바로가기
study_life

쇼미더머니9(Show Me The Money 9, SMTM 9, 쇼미9) 출연자의 톤을 분석해보자!

by skyjwoo 2020. 10. 22.
728x90
반응형

 

실험 음성학 수업을 듣고 있는데, F0(Fundamental frequency, Fo)는 개념에 대해 배웠다. F0은 푸리에 변환을 통해 변환된 주파수 중 가장 낮은 주파수를 말하며, 사람의 pitch와 관련이 깊다. 랩도 어떻게 보면 노래와 유사한 측면이 있는데, 자신의 목소리를 악기 삼아 pitch를 조절하며 소리를 뱉는다는 것이다. 여기서 필자는 래퍼에 대한 평가 요소와 관련해서 '톤'이라는 요소와 pitch, F0을 연관시켜 보고 싶었다. 외국에서는 good voice라고 불리는 거 같은데(톤이 좋다는 게 확실하게 매칭되는 지는 모르겠다. 오히려 그냥 목소리가 좋다 일수도...), 한국에서는 '톤이 좋다'라는 내용을 확실하게 찾아볼 수 있다. 꼭 톤과 관련되지 않더라도 래퍼들이 어떤 F0으로 랩을 하는 지 알아보면 재밌을 것 같았다.

좋은 목소리를 가진 래퍼 자동 완성
톤 좋은 래퍼

현재 수업에서 사용하는 Praat이라는 프로그램을 써보려다 파이썬 라이브러리를 찾아보니 Librosa라는 라이브러리가 있어서 한 번 써 볼 겸, 또 마침 쇼미더머니9의 1차 예선에서 무반주 랩을 하길래 각 래퍼들의 F0이 어떻게 되는 지 한 번 확인해 볼 겸 이 글을 작성하게 되었다. Librosa 라이브러리에서는 f0을 확률에 기반하여 추정하는 YIN 알고리즘을 사용했다고 한다. 요즘 핫한 요들랩(Bibii the black cat 님, 맞나요..?), 머쉬베놈, 릴보이, 유자, 안병웅 님의 1차 예선 무반주 랩에 대한 f0의 평균을 각각 구해보고 시각화해 보았다.

 

요들랩(Bibii the black cat님)의 f0

위 표는 Spectrogram 형식의 그래프인데, 음성 분석에 많이 쓰인다. y축은 주파수를 나타내고 x축은 시간, 색깔로 강도를 표시한다. 위 그래프에서 하늘색으로 표시된 부분이 바로 f0을 나타낸다. 요들랩(Bibii님 죄송합니다.. 이게 더 친숙해서..)의 f0을 살펴보면, f0이 고음을 중간에 찍어주는 부분들이 있다. 그리고 마지막에 저음으로 떨어지는 부분까지 잘 표현된 것 같다. 솔직히 '요들랩'으로 프레임이 씌워지면서 웃음거리가 된 면이 없잖아 있는 거 같긴한데, 필자가 듣기엔 좋았다. 이런 음악적인 시도가 잘 녹아져 들어간 것 같고 뭔가 목소리를 악기처럼 잘 사용한 것 같았다. 

 

머쉬베놈 f0

머쉬베놈님은 처음에 여유롭게 하다가 뒤에 조금 타이트해졌는데 이게 그래프에 잘 나타난 것 같다. 초반에 측정되지 않은 텀이 있고 뒤에서는 쭉 이어지는 것을 볼 수 있다. 

릴보이 f0

릴보이님은 꽤 타이트하게 랩을 하셨다. 중간에 f0이 잘 측정되지 않은 부분이 있는데 이유는 정확히 모르겠다. 요들랩에서 처럼 찍어주는 부분은 확실히 아니었다. 1분 30초? 정도의 꽤 긴 시간 동안 저정도의 타이트함을 유지한 게 대단한 것 같다.

유자 f0

남성 목소리와 여성 목소리를 비교해 보고자 유자님의 1차도 넣어 보았다. 매우 짧아서 제대로된 측정이 되었을 지 모르겠다. 중간에 f0이 떨어진 부분은 남자 목소리가 삽입돼 있어서이다. 랩과 일반 목소리의 차이로 볼 수도 있지만, 남성과 여성 목소리의 차이로도 생각해 볼 수 있을 것 같다. 유자님이 확실히 멜로디컬한 랩을 주로 해서인지 f0이 왔다갔다 하는 것을 볼 수 있다.

안병웅 f0

사람들이 톤이 좋다는 평가가 많아서 안병웅님의 1차 예선도 분석해 보았다. 평균적으로도 상당히 높은 톤이며 타이트하고 일정한 간격이 유지되는 걸 살펴볼 수 있었다. 

래퍼 요들랩 머쉬베놈 릴보이 유자 안병웅
f0 평균 235.42 235.74 288.53 272.23 304.38

전체적으로 생각보다 높은 f0이 나타났다. 남성 목소리의 일반적인 주파수 범위가 85~180Hz, 여성이 165~255Hz라고 한다. 음악의 영역이라 앞서 말했던 것처럼 자신의 평소 목소리랑은 다르게 쓰였을 것이라 보인다. 그래서 높은 f0이 나타난 것으로 생각된다.

 

위 분석들에 사용된 코드는 다음과 같다.

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

filename = '요들랩.wav'
y, sr = librosa.load(filename)
f0, voiced_flag, voiced_probs = librosa.pyin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'))
times = librosa.times_like(f0)


D = librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)
fig, ax = plt.subplots()
img = librosa.display.specshow(D, x_axis='time', y_axis='log', ax=ax)
ax.set(title='pYIN fundamental frequency estimation-yodel_rap')
fig.colorbar(img, ax=ax, format="%+2.f dB")
ax.plot(times, f0, label='f0', color='cyan', linewidth=3)
ax.legend(loc='upper right')
print("f0 avg: ", np.nanmean(f0)) #f0값에 nan값이 들어가 있어서 nanmean함수로 평균을 구했다.

 

 

 

728x90
반응형

댓글