관리 메뉴

A seeker after truth

4. 진척 상황 2 본문

수업 필기/데이터분석캡스톤디자인

4. 진척 상황 2

dr.meteor 2020. 4. 14. 21:20

1. 파일을 불러오고 trim 하는 작업

코드는 여기서 참고중: https://kaen2891.tistory.com/32

여기서 샘플링 비율 개념에 대해 검색해서 알아봄

그 과정에서 오디오 용어에 대한 좋은 포스트를 찾았고

https://blog.naver.com/PostView.nhn?blogId=kimyoseob&logNo=220760163474

 

mp3 파일에 대해 먼저 불러오는 시험을 해봤다. 그랬더니 /usr/local/lib/python3.7/site-packages/librosa/core/audio.py:161: UserWarning: PySoundFile failed. Trying audioread instead. warnings.warn('PySoundFile failed. Trying audioread instead.')

가 떠서 에러메시지 그대로 검색해봤더니, 아직 Mp3는 리브로사에서 지원 안하고 libsndfile 양식만 지원한단다. 뭔지 찾아보니 오디오 관련 c 라이브러리임 흠...일단은 분석이 그대로 되기 때문에 나중에 문제 생기면 그때 고치는걸로 하고

https://github.com/librosa/librosa/issues/1015

아 나 이거 알게됐음. pysoundfile이 있고 원제는 soundfile=libsndfile. 이 형태를 읽어와야 데이터 분석을 똑바로 할 수 있는 것이여.

https://pysoundfile.readthedocs.io/en/latest/index.html#soundfile.write

 

 

 

 

 

 

음악의 기승전결이 얼마나 잘 파악되는지 대략적으로 한번 보려고

뮤직2 폴더의 모든 곡을 다 load(Load an audio file as a floating point time series.) 하여

matplotlib.pyplot.subplot을 그려보았다. 그랬더니 발견한 문제: 같은 스테레오 음원이지만 옛날 음원과 요즘 출시된 음원 간에 극심한 그래프 차이를 보였다. 말인 즉, 요즘 출시된 곡들은 모든 구간의 '볼륨'을 일정하도록 엔지니어링한 모양인 듯했다. 물론 이는 옛날 음원이라고 모두 다 그런 것은 아니다. thefinalcountdown은 앞부분에 작은 부분만 그런 음원의 차이가 나타났고, 뒷부분은 일정했다

=> 결국 원하는 부분을 쪼개고 추출하는 과정을 거쳐야만 한다는 뜻, 그리고 시간에 따른 amplitude의 변화는 곡에 대해서 별로 설명해주는 것이 없다는 점(엔지니어링 탓이든 뭐든)

아참, thisisme는 예외구나.... 그러면 꼭 이렇게 말할 수도 없겠군.

근데 소리에서 amplitude가 갖는 의미가 뭐지? 음의 높낮이야? 아님 볼륨이야? 뭐야? 나는 볼륨같긴 함. ->"소리의 세기"를 말한다고 함

http://wiki.gurubee.net/pages/viewpage.action?pageId=33751692

https://if-blog.tistory.com/5413

음... 그럼 곡에서 얼마나 강약을 조절해서 곡의 기승전결을 전개했는지 알 수 있는 셈이겠네. 특히 지금 정확히 뮤지컬 넘버 세 곡만 이런 곡의 기승전결 변화가 시간에 대한 진폭 그래프로 나타났다.

 

그럼 이번엔 코드에서 시계열 부분을 이해한 뒤, 내가 원하는 부분만 자르도록 하자.

...그렇게 하려 했는데, 여기 목록에 있는 곡들은 생각해보니 곡 전체를 분석해야만 곡 전체를 대표하는 특징이 나온다. 그래서 어..노래 기승전결 파트를 구분해서 생각해봐야겠다.

 

음... 이렇게 되면 어려우니까 원래도 파트 잘라서 생각하려 했던 우주/하늘 파트로 가자.

그러나 막상 곡을 들어보니, 딱 한 개의 특징만이 그런 것도 아님. makemeloveyou 같은 건 완전 명확한데... 더필링을 들어보면 그렇지도 않다.

그럼 이런 곡의 전개를 어떻게 고려하여 분석해야할까...? 이건 진짜 논문을 참고할 수밖에 없어보이는걸...?

나의 경우는 템포, (채널별) 음색, 선율 등에서 유사도를 계산해야 하는 입장인데, 이걸 어느 정도 기준으로 했나... 선행연구를 찾아본다.

아, 그리고 곡 전체를 분석해야 하면 어떻게 분석하는지(했는지)도.

가사 감정분석 논문 보면, 12~14 논문이 곡의 유사도에 대한 논문이라 하는데, 한번 찾아볼까.

[12] H. T. Cheng, Y. H. Yang, Y. C. Lin, and H. H. Chen, "Multimodal structure segmentation and analysis of music using audio and textual information," Proc. IEEE International Symposium on Circuits and Systems, pp. 1677-1680, 2009.

[13] "Ten Minute Master No 18: Song Structure," MUSIC TECH magazine, pp. 62-63, 2003.

[14] N. C. Maddage, C. Xu, M. S. Kankanhalli, and X. Shao, "Content-based music structure analysis with applications to music semantics understanding," Proc. 12th Annu. ACM Int. Conf. Multimed., pp. 112-119, 2004.

 

*코드 문법 이해

- linspace: linspace 명령이나 logspace 명령은 선형 구간 혹은 로그 구간을 지정한 구간의 수만큼 분할한다.

>>np.linspace(0, 100, 5) # 시작, 끝(포함), 갯수

array([ 0., 25., 50., 75., 100.])

numpy.linspace(start, end, num=개수, endpoint=True, retstep=False, dtype=자료형)을 사용하여 start ~ end 사이의 값을 개수만큼 생성하여 배열로 반환합니다.

endpoint가 True일 경우 end의 값이 마지막 값이 되며, False일 경우 end의 값을 마지막 값으로 사용하지 않습니다.

retstep이 True일 경우 값들의 간격을 배열에 포함합니다. numpy.arange()의 step과 동일한 의미를 지닙니다.

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html

- librosa.load, matplotlib.pyplot.plot()에 대해선 공식문서 찾아서 했음. 근데 그렇게 안해도 파라미터 안해 뭐 끄적이면 알아서 그 설명 뜨더라... 커서 갖다대도 뜨겠지...?

https://librosa.github.io/librosa/generated/librosa.core.load.html

 

 

 

 

소우주의 경우, 어어어어~어어어어~ 이 파트 있잖아? 하이라이트 들어가면서 전주 파트 멜로디는 유지되지만 여기에 뭔가 음악이 하나가 더 첨가된다. 암튼 진짜 말하고 싶은건 이 파트가 이 곡의 핵심 파트 중 하나라는 것이다. 이거랑 맨 마지막 파트 나나나~ 하는 파트.

좋아 얘까진 그렇다치자 근데... 나머지 곡은... 메테오라 빼고 나머지는...😱대체 더 필링처럼 ⭐️중간에 전개 바뀌는 곡은 어찌해야 하는가...? 메테오라도 완전 초반 부분하고 라라 라도시시 미미 도도 이거 들어가는 부분하고 서로 꽤 다른데 이것을 어찌합니까...?