피아노에 인터랙티브 프로젝션 매핑 포함

완제품



트위터 에서 실연 동영상을 투고했으므로 봐 주셨으면 합니다.
GitHub 에 아티팩트가 있습니다.

디자인



빌드 다이어그램, 사용 장치 소프트웨어에 대해 설명합니다.

구축도



구조도는 다음과 같습니다.
흐름을 간단히 설명하면,

 ① 피아노로부터 음성 데이터와 MIDI 데이터를 취득
  ※음성 데이터는 MIDI 인터페이스를 통한다
② 취득한 데이터 각각,
"음성 데이터: Audacity로 녹음"
MIDI 데이터 : Unity에서 이펙트 생성
③ 프로젝터로 투영

라는 느낌입니다.



사용 장치 소프트웨어



하드웨어


품목
규격・형번


피아노
CASIO Privia PX-S1000

MIDI 인터페이스
벨링거 UCA222

케이블류
오디오 레드 화이트 오디오 3.5mm 저항 있음 HDMIUSB A 남성-B 남성


소프트웨어


품목
버전


OS
Windows10 Home

Unity
2019.2.0f1

blender
2.79b

Audacity
2.2.2


PC로 MIDI 데이터 획득



keijiro 님의 MIDIreceiver 을 사용했습니다.

발안 당초는, 피아노 → Python → C# → Unity 와 같이 Python을 걸어 MIDI 데이터를 Unity에 처리시키려고 하고 있었습니다. 그러나 Python을 사용하면 Unity에서의 동작이 엄청 느려지는 문제를 알거나 C#만으로 MIDI를 읽는 것이 상당히 편하다는 것을 알고 폐안되었습니다.

Unity 내에서 실행하면 MIDI Receiver의 인스펙터로부터 C# 스크립트의 거동을 확인할 수 있습니다.


Unity 내에서의 MIDI 데이터 처리



C# 스크립팅



MIDI 데이터는 예를 들어
s(144) d(60, 127) from 3016879824
이렇게 구성되어 있으며 각각
s("144:on
  128:off")
d("音高:21~108",
 "ベロシティ")
from "デバイス名"

되어 있습니다.

Unity내에서 간이적인 건반을 작성해 입력한 MIDI데이터(21~108)까지의 수치 각각에 대응한 좌표로부터 파티클이 나와 애니메이션이 재생되도록 C# 스크립트 ParticleTrigger.cs 를 썼습니다. 파티클 사출 좌표 지정과 애니메이션 재생에 대해, 1옥타브마다 제어하는 ​​편이 절대 좋았습니다만, 미친 나는 88분기의 switch case문을 썼습니다.
↓ 88 분기의 일부(대체 더 좋은 방법이 있는 생각이 든다…


파티클



파티클은 분위기 좋은 머티리얼을 선택하고, 사출 각도나 속도가 랜덤하게 빗나가도록 곡선의 조정을 실시했습니다.
↓ 파티클의 생존 기간의 속도 곡선


↓ 완성품


애니메이션



또 파티클 외에 건반을 빛나게 하는 애니메이션도 작성했습니다.
그렇다고 해도, 타키의 순간에 확실히 밝게 빛나 천천히 사라져 가는 간소한 애니메이션입니다.

좋은 웹페이지 즐겨찾기