피아노 물리 모델 실험 — C4 한 음

펠트 해머(비선형 스프링) + 강성 현 유한차분(FDTD). 매개변수 = Chaigne & Askenfelt 1994 의 C4. 샘플 없음. 향판 없음(현이 브리지에 주는 힘을 그대로 들음). 실행 40초.

E1 배음이 위로 늘어나는가맞음 · 16번 배음 +69 cent
E1 수치 분산(한계)B 13% 과소 · 입력 3.77e-04 → 측정 3.29e-04
E2 타격 위치의 골맞음 · β=1/8 에서 8번 배음 −29.5 dB
E3 세게 칠수록 밝고 짧은가맞음 · 604 → 1,074 Hz
E4 감쇠 시간±0.4% · 단, 자기 손실식 재현만 확인

0. 들어보기

세기 pp (0.5 m/s)
세기 mf (2 m/s)
세기 ff (5 m/s)
타격 위치 β = 1/8
타격 위치 β = 0.12 (실제 피아노 근처)
타격 위치 β = 1/5

모든 파일은 최대 음량을 같게 맞췄다. 세기 차이는 음량이 아니라 음색으로 들린다.

E1. 배음이 정수배보다 위로 늘어나는가

피아노 현은 뻣뻣하다. 그래서 높은 배음이 정수배보다 올라간다. 이론식은 fn = n·f0·√(1+B·n²) 이다. 모델 소리에서 배음 16개를 찾아 정수배와 비교했다.

정수배 대비 배음 위치 (cent)
039.979.812345678910111213141516배음 번호 n정수배 대비 (cent)■ 이론 (강성 현)■ 모델 측정값■ 정수배 (강성 0)

모델은 이론과 같은 방향으로 늘어난다. 그러나 높은 배음일수록 이론보다 조금 낮다(16번 −10.8 cent). 이것은 유한차분 격자가 만드는 수치 분산이다. 그래서 측정한 B 가 입력보다 13% 작다.

계산을 촘촘히 하면 오차가 줄어드는가 (오버샘플 1·2·4배)
-9.9-5.12-0.344124오버샘플 배수이론 대비 오차 (cent)■ n=4■ n=8■ n=12

오버샘플을 2배로 하면 오차가 약 절반이 되고 계산 시간은 2배가 된다. 현재 기본값은 2배(오디오 1초에 약 0.7초). 대안: 입력 B 를 미리 키워 보정한다(다음 단계 후보).

E2. 해머가 친 자리에서 배음이 사라지는가

현의 길이 β 지점을 치면, 그 지점이 마디(움직이지 않는 점)인 배음은 거의 울리지 않는다. β=1/8 이면 8·16번, β=1/5 이면 5·10·15번이 사라져야 한다. 실제 피아노는 1/7~1/9 근처를 쳐서 귀에 거슬리는 7·9번 배음을 줄인다.

타격 위치 β = 1/8 · 8번 배음 골 깊이 29.5 dB
12345678910111213141516배음 번호 n (주황 = 이론상 마디점)레벨 (dB)
타격 위치 β = 0.12 (C-A) · 8번 배음 골 깊이 5.0 dB
12345678910111213141516배음 번호 n (주황 = 이론상 마디점)레벨 (dB)
타격 위치 β = 1/5 · 8번 배음 골 깊이 2.1 dB
12345678910111213141516배음 번호 n (주황 = 이론상 마디점)레벨 (dB)

β=1/8 에서 8번 배음이 이웃보다 29.5 dB 낮다. β=1/5 에서는 5·10·15번이 꺼지고 8번은 거의 그대로다(2.1 dB). 반대 대조가 통과했다 — 골이 아무 데나 생기는 것이 아니다.

E3. 세게 칠수록 밝아지는가

해머 펠트는 누를수록 단단해진다(힘 ∝ 압축2.5). 그래서 세게 치면 접촉이 짧아지고 고음 성분이 늘어난다. 이것이 피아노의 세기별 음색 차이다.

해머 접촉 시간
0.5261.522.510.512345해머 속도 (m/s)해머 접촉 시간 (ms)■ 현을 칠 때 (모델)■ 단단한 벽을 칠 때

벽을 칠 때 접촉 시간은 속도의 -0.43 제곱에 비례했다. 이론값 -0.43 과 같다(수치 풀이 검증). 현을 칠 때는 -0.13 제곱으로 훨씬 덜 줄었다. 현이 밀려나며 해머를 받아주기 때문이다. 벽 모델로 피아노 해머를 예측하면 틀린다.

어택(처음 0.3초)의 밝기
60483910740.512345해머 속도 (m/s)밝기 (Hz)■ 어택 0.3초 스펙트럼 중심

E4. 배음마다 감쇠 시간이 맞는가

배음이론 T60 (s)측정 T60 (s)오차
110.0010.00+0.00%
28.898.89+0.00%
46.146.15+0.04%
82.752.76+0.33%

이 검사는 "스킴이 입력한 손실식을 그대로 구현했는가"만 확인한다. 실제 피아노의 두 단계 감쇠(빠른 초기 감쇠 → 긴 여운)는 한 음에 현 2~3줄이 함께 울려야 생긴다. 이 모델은 현이 1줄이라 그 현상이 없다.

남은 것

코드: ~/projects/instrument-physics · 테스트 python3 -m pytest tests · 실험 python3 experiments/run_piano.py