본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

Bonfire가 뭔가

~13 min · identity, overview, views, engine

Level 0식은 재
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"탭 플레이어가 아냐. 이해하러 가는 곳이야."

엔진을 화면으로 보면

이게 Bonfire v1이야. 이 한 페이지가 하는 일은 딱 하나야. 아빠가 지금 칠 수 있는 수준에서 곡 하나를 이해하게 돕는 거.

Bonfire v1. 음악 학습 엔진의 한 페이지 UI. 오른쪽 위에 fretboard view, 구간이 선택된 오디오 waveform, 타임라인 위에 깔린 easy-mode 노트 그리드, 아래쪽에 코드 voicing 다이어그램, 그리고 멀티 채널 믹서가 달린 transport.
Bonfire v1. fretboard와 waveform, easy-mode 노트 그리드, 코드 voicing이 전부 하나의 음악 모델을 읽고 있어.

이 한 화면에 몇 개가 떠 있는지 세어 봐. 그리고 전부 같은 곡을 설명하고 있다는 걸 눈에 담아 둬.

  • fretboard(오른쪽 위)는 스케일과 타깃 노트를 기타리스트의 손 모양에 맞춰 보여줘.
  • waveform(넓은 amber 띠)에는 실제 오디오가 있고, 반복해서 돌릴 구간이 밝게 표시돼 있어.
  • 노트 그리드(waveform 아래 색 블록들)는 타임라인 위에 easy-mode 노트를 얹어서 무엇을 언제 칠지 보여줘.
  • 코드 voicing(작은 다이어그램들)은 진행에 나오는 코드를 실제로 잡을 수 있는 모양으로 보여줘.
  • 아래쪽 transport와 믹서는 재생과 정지, 템포, 그리고 원곡과 solo, 코드를 섞는 채널 스트립이야.

이 한 장에 thesis가 통째로 들어 있고, 퀘스트 나머지는 그걸 증명하는 과정이야. fretboard와 그리드, voicing 다이어그램은 따로따로 붙인 앱이 아냐. 하나의 음악 모델을 바라보는 여러 view야. 곡을 바꾸면 모든 pane이 같은 진실에서 다시 그려져. Track 3이 통째로 이 생각 위에 서 있어.

Bonfire가 아닌 것

먼저 경계부터 세 개 긋자.

  • 탭 플레이어 아님. Songsterr랑 Guitar Pro가 이미 탭을 훌륭하게 보여줘. Bonfire는 그 경주에서 이기려는 게 아냐.
  • DAW 아님. Logic이랑 Ableton은 음악 제작에 강해. Bonfire는 학습 흐름을 직접 설계해. Track 6에서는 어떤 DAW도 학습 기능을 품을 수 없다는 식으로 일반화하지 않고, Bonfire의 심장을 특정 DAW에 맡기지 않는다는 제품 경계를 따져 볼 거야.
  • 채보 도구 아님. "이 솔로의 모든 음을 뽑아 줘"는 어렵고 이미 여러 도구가 겨루는 문제야. Bonfire는 그걸 다시 짓지 않고 전문 도구로 가는 길을 열어 둬.

셋을 빼고 남는 게 진짜 제품이야. 학습 엔진. 분석(무슨 키야? 무슨 코드야?)과 하나의 음악 모델, easy-mode 단순화(못 치는 원곡 대신 이걸 쳐), 이론 레퍼런스, 그리고 API를 소유해. 위에 있는 웹 UI는 그 엔진하고 대화하는 첫 번째 화면일 뿐이야.

제작 도구가 아니라 학습 도구

이 구분을 꽉 쥐고 있으면 뒤에 나올 결정이 거의 다 설명돼. 제작 도구가 하는 일은 완성품을 만드는 거야. 믹스된 트랙, export한 탭 같은 거. 학습 도구는 네 머리와 손에 남는 걸 바꾸는 게 일이야. Bonfire는 두 번째야. 그래서 "오늘 감당할 수 있는 단순화 버전을 쳐"가 타협이 아니라 헤드라인 기능이 돼. 분석이 가끔 어긋나도 네가 바로잡을 수 있게 만드는 것까지 학습 흐름 안에 들어가.

Code

한 곡 로드 = 하나의 모델 (모양 스케치)·json
{
  "key": "E minor",
  "tempo_bpm": 132,
  "sections": [
    { "name": "Verse", "start_s": 0.0, "end_s": 18.4 }
  ],
  "chords": [
    { "roman": "i",  "symbol": "Em", "start_s": 0.0, "beats": 4 },
    { "roman": "VI", "symbol": "C",  "start_s": 2.0, "beats": 4 }
  ],
  "notes": [
    { "string": 1, "fret": 7, "start_s": 4.0, "dur_s": 0.5 }
  ]
}

// fretboard는 `key`와 `notes`를 읽어.
// 노트 그리드는 시간 위에 놓인 `notes`를 읽어.
// voicing 다이어그램은 `chords`를 읽어.
// 객체 하나, view 여럿. 어떤 view도 이걸 고치지 않아.

External links

Exercise

네가 실제로 쓰는 음악 도구 하나를 열어 봐. Songsterr든 DAW든 유튜브 레슨이든 Spotify든 좋아. 먼저 제작 도구인지 학습 도구인지 정해. 그다음 곡 하나를 놓고 그 도구가 보여주는 'view'를 전부 적어. 그 view들이 하나의 공유 모델을 읽고 있어, 아니면 따로따로 붙인 기능들이야?
Hint
곡을 바꿨을 때 모든 view가 한꺼번에 갱신되면 밑에 모델 하나가 있을 가능성이 커. view마다 다시 import하거나 다시 불러와야 한다면 따로 붙인 기능일 수 있어. Bonfire가 피하려는 조각남이 바로 그거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 피파warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.