본문 바로가기

작품

Matlab Piano 제작

신호처리 시간에 했었던 간단한 프로젝트이지만 나름 재밌었다고 생각되는 자료이기에 올립니다.

프로젝트의 목표는 최대한 실제 도음에 가깝게 음을 제작하는 것이였습니다.



DSP_piano.pptx


 위 파일과 내용이 비슷할테지만 간단한 설명을 위해 첨언합니다.


 피아노음을 제작하려면 음색은 하모닉스(배음)과 시간에 따른 음량의 변화인 엔벨로프(Envelope)라는 2가지 요소가 필요합니다.


 하모닉스는 자연계에 존재하는 모든 소리들의 파형은 실제 여러 개의 순수한 사인파(Sine)로 분리할 수 있다. 색을 이루고 있는 여러 가지 순수한 사인파들이 가진 주파수들 중에서 가장 낮은 주파수를 기본 주파수(Foundamental Frequency)라 하고, 이 주파수를 가진 파형을 기본 파형이라 한다. 실제 이 기본 주파수에 의해 모든 소리들의 음정(음의 높이)이 결정된다. 기본 주파수의 정수배(2, 4배 등등..)에 또 다른 순수한 사인파들이 존재 하는데 이걸 오버톤(Overtone)이라고 함다. 따라서 하모닉스란오버톤들의 집합을 말하며, 우리가 피아노나 바이올린등의 음색을 구분할 수 있게 해주는 역할을 한다.

 

엔벨로프 특정한 음이 발생한 후, 시간이 지남에 따라 그 음량이 변화하는 것을 말하며특히 악기의 음색을 구분짓는 중요한 요소이기도 하다. 하지만 엔벨로프는 실제 시간에 의한 음량 변화이므로 음색보다는 음량의 구성요소에 들어간다. 그러나 음색에 대한 영향이 아주 크다. 인벨로프를 구성하는 요소로는 어택(Attack), 디케이(Decay), 서스테인(Sustain), 릴리즈(Release)4가지가 있으며, 어택은 음량이 최대로 상승하기까지의 시간을, 디케이는 최대로 상승한 음량이 서스테인 레벨까지 감소하는 시간을 나타낸다엔벨로프 그래프는 우리가 건반을 누르고 있는 시간 동안 음량이 어떻게 변하는지 보여주는 것으로 어택, 디케이 타임동안 상승하였다가 서스테인 레벨만큼 하강한다.



위에는 엔벨로프를 시각적으로 보여주는 그래프입니다.


그럼 하모닉스와 엔벨로프를 직접 구현하기 위해선 어떠한 방법이 필요할까요?

먼저 음색을 만들기 위하여 다음 출처에 있는 자료를 먼저 살펴보도록 하겠습니다.


음색과 스펙트럼


 음색을 구현하기위해 많은 곳을 찾던 중 배합비율에 따라 음색을 만들 수 있다는 것을 알게 되었습니다. 예를 들어 10:5:2:1:1은 바이올린, 10:5:1:1:5는 클라리넷 등 많은 음색을 만들 수 있었습니다. 저는 배합비율을 바꾸어보면서 10:2:2:2:2로 구현을 먼저 시도하였습니다. 배합비율은 기본주파수에 2,3,4,5배의 진동수를 가진 진동수별배합비율을 뜻합니다.

 

 엔벨로프는 위의 나온 ADSR을 적용하였습니다. 지수함수를 이용하여 엔벨로프를 구할 수 있었습니다




<실제 도음의 스펙트럼_Time Domain>


<제작한 도음의 스펙트럼_Time Domain>


실제로 제작한 도음의 타임도메인상의 스펙트럼과 실제로 제작한 도음의 스펙트럼에는 물론 차이가 있지만 최대한 비슷하게 하려 노력하였다. 아무래도 지수함수를 이용하여 엔벨로프를 구현하는 것이 프로젝트라 간단히 생각나는대로 진행하고 최대한 비슷하게만 하려했기 때문이라고 생각하지만 정말 정확한 구현을 할 수 있다면 충분히 불가능하다고 생각하지 않습니다.



<실제 도음의 스펙트럼_Frequency Domain>


<제작한 도음의 스펙트럼_Frequency Domain>


 Frequency Domain상에서도 차이가 있었다. 하지만 나름 비슷하게 구현하게 된 것이 신기하기만 하였다.


학교 프로젝트로 피아노음 제작이나 피아노제작같은 것이 많이 나올 것 같은데, 이 프로젝트를 읽어보시면 구현방법이나 설계를 하는데 도움이 될 것이라 생각됩니다.