오늘 해낸 것 (2026-07-06)
이 글은 Daily Log 시리즈의 95번째 기록입니다. (총 155개)
오늘 한 일
- 소리꽃 KeyBloom — 실질적 최종 목표였던 실시간 연주까지
- 실시간 연주 모드 — Web MIDI 건반이나 컴퓨터 키보드로 라이브 연주. 치는 순간 그 건반 위로 이펙트. 비주얼 엔진은 그대로 두고 노트 입력 소스만 교체(
noteOn/noteOff공통 핸들러). 숫자키 1~6로 큐 전환, 라이브 수동 녹화 - 오디오 지연 개선·진단 — 최소 버퍼·콜드스타트 방지·빠른 어택. 실측 지연을 화면에 표시
- 프로젝트 저장/불러오기 — 큐·큐포인트·트랙·원본 MIDI(base64)를 JSON 한 파일로. 새로고침해도 안 날아감
- 라이브 저지연 연주는 웹 한계(브라우저가 ASIO를 못 씀)라, 추후 네이티브(하이브리드)로 가기로 방향 결정
- 실시간 연주 모드 — Web MIDI 건반이나 컴퓨터 키보드로 라이브 연주. 치는 순간 그 건반 위로 이펙트. 비주얼 엔진은 그대로 두고 노트 입력 소스만 교체(
- 메트로놈(Simple Metronome) — 예전에 ChatGPT 복붙으로 만든 앱을 Claude Code로 관리 시작
- git이 없던 프로젝트라 저장소를 새로 만들고, 서명 키스토어 비밀번호가 평문으로 노출돼 있던 걸 분리해서 보호
- 프로젝트 지침(CLAUDE.md) 작성 — 다른 프로젝트들의 작업 원칙을 이 앱에 맞게 정리
- 강아지 테마 1차 — 밋밋하던 비트 인디케이터를 발자국과 강아지 얼굴로 바꾸고, 기본(다크) ↔ 강아지(크림·밤색) 테마 전환 토글을 붙임
어려웠던 점
-
실시간 연주에서 소리가 늦게 나서 지연을 줄이려 했는데, 실측해보니 장치 지연 48ms가 브라우저 바닥이었다. 브라우저는 오디오 인터페이스의 저지연 드라이버(ASIO)를 못 쓰고 OS 공유모드로만 소리를 내서, 좋은 장비를 꽂아도 웹에선 저지연이 안 나온다는 걸 숫자로 확인했다. 앱에서 더 손댈 수 없는 한계라 네이티브 얘기로 넘어감
-
메트로놈 — 밋밋한 UI를 귀엽게 바꾸려니 방향 잡는 게 제일 고민이었다. 강아지 테마에 맞게 메트로놈의 똑-딱 왕복을 강아지가 발자국 컨셉으로 정했다.
-
(소리꽃 KeyBloom TIL 4로 정리) 파일 재생과 실시간 연주를
noteOn/noteOff공통 핸들러로 합쳐 비주얼 엔진 재사용 / Web MIDI로 건반 입력(requestMIDIAccess, 메시지 파싱) / 컴퓨터 키보드를 건반으로(Musical Typing, 오토리핏·옥타브 처리) / 웹 오디오 지연의 정체(WASAPI 공유모드 vs ASIO) / 전체 상태를 파일 하나로 저장(직렬화 + MIDI base64 + 후방호환 3원칙) -
(안드로이드 TIL로 정리) 안드로이드 앱 서명 키스토어·비밀번호를 git에서 빼는 법(keystore.properties + gitignore) / 앱 안에서 테마를 통째로 바꾸는 법(setTheme는 setContentView 전에, recreate로 재적용) / 색 하드코딩 대신 커스텀 테마 속성(?attr)으로 참조 / 벡터 드로어블 + backgroundTint 리틴트로 인디케이터 점등
해야 할 일
- 메트로놈 — 인디케이터 크기 키우기, 강아지 표시를 이모지 느낌으로 다듬기
- 소리꽃 KeyBloom
- 라이브용 네이티브(하이브리드) — 저지연 연주·연주 녹화(웹 한계라 네이티브 전제)
- 합성음 피아노틱하게(조사), 고화질 인코딩(ffmpeg.wasm), 모양별 색 지정, 스크럽 시 큐 미리보기
- 회사 툴 — 팀 ERP 기능 기획
- UE5 수업 복습
- ChordSheet — 섹션 색상 Picker, 다중선택 마디 복제
- 습관만들기 Pawbit — Asset 교체, 출시 블로커(AdMob ID·DEV 패널 제거), 파스텔 리스킨
- Crescendo — 오디오 제작, 밸런스, 엔딩 폴리시
Series: Daily Log
1 | 오늘 해낸 것 2 | 오늘 해낸 것 3 | 오늘 해낸 것 4 | 오늘 해낸 것 5 | 오늘 해낸 것 6 | 오늘 해낸 것 7 | 오늘 해낸 것 8 | 오늘 해낸 것 9 | 오늘 해낸 것 10 | 오늘 해낸 것 11 | 오늘 해낸 것 12 | 오늘 해낸 것 13 | 오늘 해낸 것 14 | 오늘 해낸 것 15 | 오늘 해낸 것 16 | 오늘 해낸 것 17 | 오늘 해낸 것 18 | 오늘 해낸 것 19 | 오늘 해낸 것 20 | 오늘 해낸 것 21 | 오늘 해낸 것 22 | 오늘 해낸 것 23 | 오늘 해낸 것 24 | 오늘 해낸 것 25 | 오늘 해낸 것 26 | 오늘 해낸 것 27 | 오늘 해낸 것 28 | 오늘 해낸 것 29 | 오늘 해낸 것 30 | 오늘 해낸 것 31 | 오늘 해낸 것 32 | 오늘 해낸 것 33 | 오늘 해낸 것 34 | 오늘 해낸 것 35 | 오늘 해낸 것 36 | 오늘 해낸 것 37 | 오늘 해낸 것 38 | 오늘 해낸 것 39 | 오늘 해낸 것 40 | 오늘 해낸 것 41 | 오늘 해낸 것 42 | 오늘 해낸 것 43 | 오늘 해낸 것 44 | 오늘 해낸 것 45 | 오늘 해낸 것 46 | 오늘 해낸 것 47 | 오늘 해낸 것 48 | 오늘 해낸 것 49 | 오늘 해낸 것 50 | 오늘 해낸 것 51 | 오늘 해낸 것 52 | 오늘 해낸 것 53 | 오늘 해낸 것 54 | 오늘 해낸 것 55 | 오늘 해낸 것 56 | 오늘 해낸 것 57 | 오늘 해낸 것 58 | 오늘 해낸 것 59 | 오늘 해낸 것 60 | 오늘 해낸 것 61 | 오늘 해낸 것 62 | 오늘 해낸 것 63 | 오늘 해낸 것 64 | 오늘 해낸 것 65 | 오늘 해낸 것 66 | 오늘 해낸 것 67 | 오늘 해낸 것 68 | 오늘 해낸 것 69 | 오늘 해낸 것 70 | 오늘 해낸 것 71 | 오늘 해낸 것 72 | 오늘 해낸 것 73 | 오늘 해낸 것 74 | 오늘 해낸 것 75 | 오늘 해낸 것 76 | 오늘 해낸 것 77 | 오늘 해낸 것 78 | 오늘 해낸 것 79 | 오늘 해낸 것 80 | 오늘 해낸 것 81 | 오늘 해낸 것 82 | 오늘 해낸 것 83 | 오늘 해낸 것 84 | 오늘 해낸 것 85 | 오늘 해낸 것 86 | 오늘 해낸 것 87 | 오늘 해낸 것 88 | 오늘 해낸 것 89 | 오늘 해낸 것 90 | 오늘 해낸 것 91 | 오늘 해낸 것 92 | 오늘 해낸 것 93 | 오늘 해낸 것 94 | 오늘 해낸 것 95 | 오늘 해낸 것 읽는 중 96 | 오늘 해낸 것 97 | 오늘 해낸 것 98 | 오늘 해낸 것 99 | 오늘 해낸 것 100 | 오늘 해낸 것 101 | 오늘 해낸 것 102 | 오늘 해낸 것 103 | 오늘 해낸 것 104 | 오늘 해낸 것 105 | 오늘 해낸 것 106 | 오늘 해낸 것 107 | 오늘 해낸 것 108 | 오늘 해낸 것 109 | 오늘 해낸 것 110 | 오늘 해낸 것 111 | 오늘 해낸 것 112 | 오늘 해낸 것 113 | 오늘 해낸 것 114 | 오늘 해낸 것 115 | 오늘 해낸 것 116 | 오늘 해낸 것 117 | 오늘 해낸 것 118 | 오늘 해낸 것 119 | 오늘 해낸 것 120 | 오늘 해낸 것 121 | 오늘 해낸 것 122 | 오늘 해낸 것 123 | 오늘 해낸 것 124 | 오늘 해낸 것 125 | 오늘 해낸 것 126 | 오늘 해낸 것 127 | 오늘 해낸 것 128 | 오늘 해낸 것 129 | 오늘 해낸 것 130 | 오늘 해낸 것 131 | 오늘 해낸 것 132 | 오늘 해낸 것 133 | 오늘 해낸 것 134 | 오늘 해낸 것 135 | 오늘 해낸 것 136 | 오늘 해낸 것 137 | 오늘 해낸 것 138 | 오늘 해낸 것 139 | 오늘 해낸 것 140 | 오늘 해낸 것 141 | 오늘 해낸 것 142 | 오늘 해낸 것 143 | 오늘 해낸 것 144 | 오늘 해낸 것 145 | 오늘 해낸 것 146 | 오늘 해낸 것 147 | 오늘 해낸 것 148 | 오늘 해낸 것 149 | 오늘 해낸 것 150 | 오늘 해낸 것 151 | 오늘 해낸 것 152 | 오늘 해낸 것 153 | 오늘 해낸 것 154 | 오늘 해낸 것 155 | 오늘 해낸 것