1차 공개일 · 8월 18일1차 강의가 모두 공개됩니다
TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 33 READS

도형을 그리면 소리가 된다: 유한요소법으로 북소리를 푸는 Eigendrum

도형을 그리면 소리가 된다: 유한요소법으로 북소리를 푸는 Eigendrum
SOURCE IMAGE · HACKER NEWS

화면에 아무 도형이나 그리면 그것이 북이 되어 울린다. Eigendrum은 이렇게 단순한 인터랙션 뒤에 꽤 진지한 수치해석을 숨겨 둔 웹 프로젝트다. 사용자가 그린 윤곽선을 놓고 실제로 진동 방정식을 풀어 소리를 만들어내는데, 어떤 음원 샘플을 재생하는 것이 아니라 도형마다 고유한 주파수를 매번 계산해서 합성한다. 브라우저 안에서 물리 시뮬레이션을 돌려 청각적으로 확인하게 해 준다는 점에서, 수학 교육과 오디오 합성이 만나는 흥미로운 사례다.

북소리는 고유값 문제다

테두리가 고정된 북의 막은 아무렇게나 떨리지 못한다. 특정한 모양과 특정한 주파수로만 진동할 수 있고, 그 조합 하나하나를 모드(mode), 즉 정상파라고 부른다. 수학적으로는 도형 내부에서 −∇²u = λu가 성립하고 가장자리에서 u = 0이 되는 조건을 만족하는 해를 찾는 문제이며, 각 λ의 제곱근에 비례해 주파수가 정해진다. 이것이 전형적인 고유값 문제인데, 문제는 거의 모든 형태의 도형에 대해 이 해를 나타내는 공식이 존재하지 않는다는 점이다.

그래서 Eigendrum은 도형을 삼각형 메시로 덮은 뒤 유한요소법의 강성행렬과 질량행렬을 구성하고, Kφ = λMφ라는 일반화 고유값 문제에서 가장 작은 고유값들을 수치적으로 찾는다. 이 방식의 신뢰성은 정답을 아는 몇 가지 도형으로 검증된다. 원의 주파수는 베셀 함수의 영점, 직사각형의 주파수는 π²(m²/a² + n²/b²)라는 닫힌 형태의 해가 있는데, 솔버는 이 둘을 0.1퍼센트 이내 오차로 재현한다. 게다가 유한요소법은 제한된 공간에서 에너지를 최소화하는 방식이라 계산값이 항상 실제보다 아주 약간 큰 쪽으로만 치우친다는 성질이 있어, 오차의 방향까지 예측 가능하다.

치는 위치가 음색을 만든다

북을 한 번 치면 단일 주파수가 나는 것이 아니라 모든 모드가 동시에 섞여 울린다. 그 배합은 말렛이 어디에 닿았는가로 결정된다. 어떤 모드가 정지해 있는 선(마디)을 정확히 때리면 그 모드는 전혀 여기되지 않는다. 흥미로운 점은 이 규칙을 따로 프로그래밍한 것이 아니라, 말렛의 타격을 각 모드에 사영(projection)하는 계산에서 자연스럽게 도출된다는 것이다. 반대로 목록에서 특정 행을 누르면 그 모드 하나만 단독으로 울리는데, 이는 현실의 어떤 타격으로도 만들 수 없는, 한 도형의 개별 주파수를 순수하게 듣는 유일한 방법이다.

말렛 자체도 물리적으로 모델링되어 있다. 접촉 폭은 슬라이더로 조절되고 접촉 시간은 수 밀리초로 고정되어 있는데, 실제 어떤 타격도 순간적이지 않으며 만약 순간적이라면 모든 모드를 똑같이 세게 때려 버리기 때문이다. 감쇠는 레일리 감쇠를 써서 손실이 주파수의 제곱에 비례해 커지도록 했다. 그래서 고음 배음이 먼저 사라지고, 북소리가 울리는 동안 점점 어두워지는 실제 현상이 재현된다.

그리는 대신 쓰는 도형, 그리고 카츠의 질문

윤곽선을 손으로 그리는 대신 수식으로 쓸 수도 있다. 1 + 0.3cos(5t)처럼 반지름을 각도의 함수로 주면 다섯 갈래 꽃 모양이 되고, x(t)·y(t) 매개변수 쌍을 쓰면 극좌표로는 닿지 못하는 신장형(nephroid)이나 달걀형 같은 닫힌 곡선까지 만들 수 있다. 이는 단순히 그리기를 대신하는 것이 아니라 숫자 하나를 바꿔 도형이 어떻게 변하는지 소리로 확인하게 해 준다. 이렇게 쓴 도형은 수식 그대로 링크에 담겨 주소창에서 읽고 고칠 수 있다. 반면 메시로 정직하게 나누기에 너무 얇은 도형은 틀린 숫자를 내놓느니 아예 거부한다.

이 프로젝트의 백미는 마크 카츠가 1966년에 던진 질문, 즉 '북소리만 듣고 그 모양을 알 수 있는가'에 대한 답을 직접 들려준다는 데 있다. 1992년 캐럴린 고든, 데이비드 웹, 스콧 월퍼트는 스펙트럼이 완전히 동일하면서도 모양이 다른 두 도형을 만들어 '아니오'라고 답했다. 두 도형은 같은 일곱 개의 삼각형을 다르게 배열한 것으로, 면적과 둘레가 같고 모든 주파수가 일치한다. Eigendrum의 도형 목록에 카츠 드럼 I·II로 들어 있어, 번갈아 눌러 보면 윤곽은 분명히 다른데 소리는 구별되지 않는 상황을 직접 경험할 수 있다.

실무적으로 눈여겨볼 지점

엔지니어 관점에서 주목할 부분은 구조다. 빌드 단계도 없고 애플리케이션 백엔드도 없어 메시 생성, 고유값 풀이, 오디오 합성이 모두 사용자 기기에서 돈다. 사용자가 그린 도형은 URL의 # 뒤에 저장되는데, 브라우저는 이 부분을 서버로 전송하지 않으므로 도형 자체가 외부로 나가지 않는다. 솔버와 검증 테스트를 포함한 소스는 공개되어 있어, 유한요소법으로 고유값 문제를 어떻게 검증 가능하게 구현하는지 참고 자료로 삼을 만하다. 다만 음높이의 절대값은 물리적으로 고정된 값이 아니라는 점은 짚어 둘 필요가 있다. 주파수 비율과 모드 형태는 윤곽선만으로 결정되지만, 파동 속도에 해당하는 장력과 밀도는 슬라이더로 지정하는 값이다. 모든 도형은 풀기 전에 같은 면적으로 정규화되므로 도형 간 음높이 차이는 크기가 아니라 형태의 차이이며, 원이 가장 낮은 것은 파버-크란 부등식에 따른 필연적 결과이지 설계자의 선택이 아니다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://baselashraf81.github.io/eigendrum/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...