페트리 네트(Petri net)로 만드는 19가지 장르의 음악, 지금 바로 경험하세요!
1962년에 개발된 페트리 네트(Petri net)를 활용하여 음악 시퀀싱(Music Sequencing)을 구현, 19가지 장르의 음악을 생성
토큰 링(Token Ring), 억제 아크(Inhibitor Arc), 유클리드 리듬(Euclidean Rhythms)을 사용하여 결정론적 트랙(Deterministic Tracks) 생성
Tone.js를 사용하여 오디오 처리를, 순수 자바스크립트(Vanilla JavaScript)로 페트리 네트 엔진을 구현
시드(Seed) 값을 통해 동일한 음악을 반복 재생 가능하며, 오픈 소스(Open Source)로 공개
페트리 네트(Petri net) 기반 음악 생성 원리
본 시스템은 페트리 네트(Petri net)의 토큰(Token) 이동을 통해 음악을 생성한다. 각 악기는 고유한 페트리 네트(Petri net)를 가지며, 토큰이 특정 위치에 도달하면 음표가 트리거된다. 유클리드 리듬(Euclidean Rhythms)을 사용하여 드럼 패턴을 생성하고, 억제 아크(Inhibitor Arc)를 통해 곡의 구조를 제어한다. 이러한 구조는 결정론적(Deterministic) 음악 생성을 가능하게 하며, 동일한 시드(Seed) 값으로 항상 동일한 트랙을 재생할 수 있다.
기술적 구현 상세
프로젝트는 순수 자바스크립트(Vanilla JavaScript)로 구현된 100줄의 페트리 네트 엔진을 사용한다. 오디오 처리는 Tone.js 라이브러리를 활용하여 폴리포닉 신스(Polyphonic Synths), 리버브(Reverb), 압축(Compression) 등 다양한 효과를 제공한다. 음악 이론은 스케일(Scales), 코드(Chords), 유클리드 리듬(Euclidean Rhythms), 마르코프 체인(Markov Chains) 등을 포함하며, 약 3,700줄의 코드로 구성된다.
커뮤니티 반응 및 특징
커뮤니티에서는 결정론적(Deterministic) 음악 생성 방식에 대한 긍정적인 평가가 주를 이룬다. 동일한 시드(Seed) 값으로 항상 동일한 음악을 재생할 수 있다는 점은 디버깅(Debugging) 및 재현성(Reproducibility) 측면에서 큰 장점을 가진다. 또한, 오픈 소스(Open Source)로 공개되어 개발자들이 코드를 직접 확인하고 수정할 수 있다는 점도 긍정적인 요소로 작용한다.