데이터 관리하기
modernGraphTool에 표시될 측정 데이터(Phone)와 타겟 커브(Target)를 관리하는 방법을 안내합니다.
데이터 목록은 data/phone_book.json 파일로 관리하며, 별도로 경로를 수정하지 않은 경우 측정 데이터 파일은 data/phones에, 그리고 타겟 커브 데이터 파일은 data/target 폴더에 저장됩니다.
데이터 폴더 구조
섹션 제목: “데이터 폴더 구조”dist/data 폴더는 다음과 같은 구조를 가집니다.
data/├── phones/ # 측정 데이터 파일 (.txt) 저장 위치│ ├── PhoneA L.txt│ ├── PhoneA R.txt│ └── PhoneB.txt├── target/ # 타겟 커브 데이터 파일 (.txt) 저장 위치│ ├── X Target.txt│ └── Y Target.txt└── phone_book.json # 측정 기기 목록 및 관련 데이터 정의 파일phones폴더: 각 Phone의 주파수 응답 측정 데이터 파일(.txt)을 저장합니다. 파일 이름은 자유롭게 지정할 수 있으나,phone_book.json을 작성할 때 정확한 파일 이름을 기재해야 합니다. 좌/우 채널 데이터가 별도 파일로 있는 경우, 파일 이름 끝에 빈 칸을 하나 두고L,R을 붙여 구분합니다.target폴더: 타겟 커브 데이터 파일(.txt)을 저장합니다.config.js의INITIAL_TARGETS및TARGET_MANIFEST설정 항목을 수정할 때 정확한 파일 이름을 기재해야 합니다.phone_book.json: 측정 기기 목록에 표시될 제품 이름과 여러 추가 정보(리뷰 링크, 가격 등)을 JSON 형식으로 정의하는 파일입니다.
JSON 문법 기초
섹션 제목: “JSON 문법 기초”JSON(JavaScript Object Notation)은 데이터를 구조적으로 표현하는 텍스트 형식입니다. 몇 가지 기본 규칙만 알면 쉽게 이해하고 수정할 수 있습니다.
- 데이터는 이름(Key)과 값(Value)의 쌍으로 이루어집니다. 이름은 항상 문자열(따옴표로 감쌈)입니다.
- 값은 문자열(따옴표), 숫자(따옴표 없음), 불리언(true/false, 따옴표 없음), 배열(
[와]로 감싸고 쉼표로 구분), 또는 다른 객체({와}로 감쌈)가 될 수 있습니다. - 객체 내의 각 키-값 쌍은 쉼표(
,)로 구분합니다. 마지막 쌍 뒤에는 쉼표를 붙이지 않습니다. - 배열 내의 각 요소도 쉼표(
,)로 구분합니다. 마지막 요소 뒤에는 쉼표를 붙이지 않습니다.
phone_book.json 구조
섹션 제목: “phone_book.json 구조”phone_book.json 파일은 전체적으로 하나의 큰 배열([])로 시작하고 끝납니다. 배열 안에는 여러 개의 브랜드 객체({})가 포함됩니다.
각 브랜드 객체는 brand 키 (예 - “Sennheiser”, “Sony”) 와 phones 키로 이루어집니다.
phones 키 안에는 각 브랜드에 해당하는 모델(Phone)의 정보들이 포함될 수 있습니다. 모델(Phone) 정보는 문자열 또는 객체로 정의할 수 있습니다.
[ { "brand": "Brand A", "suffix": "(Audio)", // Optional: Suffix for the brand name "phones": [ "ModelX_Simple", // Simple definition: Assumes files "ModelX_Simple L.txt" and "ModelX_Simple R.txt" { "name": "Model Y", "file": "BrandA ModelY", // File name (without L/R and .txt) "suffix": ["(Setting 1)", "(Setting 2)"], // Optional: Suffixes for different versions "reviewLink": "https://example.com/review/modely", // Optional: Review link "price": "$199", // Optional: Price (string) "notes": "Some notes about Model Y" // Optional: Additional notes } // ... more models for Brand A ] }, { "brand": "Brand B", "phones": [ // ... models for Brand B ] } // ... more brands]Brand 객체 키
섹션 제목: “Brand 객체 키”brand(문자열, 필수): 브랜드 이름을 나타냅니다.suffix(문자열, 선택 사항): 브랜드 이름 뒤에 붙는 접미사로, UI 상에 표시됩니다.phones(배열, 필수): 각 브랜드의 모든 Phone 정보를 포함하는 배열입니다. 각 모델은 간단하게 문자열 또는 상세한 객체로 정의할 수 있습니다.
Phone 정의 타입
섹션 제목: “Phone 정의 타입”phones 배열에는 다음과 같은 데이터가 포함될 수 있습니다:
단순 문자열 정의
섹션 제목: “단순 문자열 정의”단순 문자열(예 - “ModelX”)이 입력된 경우, 화면 상으로 표시될 이름은 “ModelX”이고, 데이터 파일의 이름은 ModelX L.txt, ModelX R.txt라고 가정합니다.
{ "brand": "BrandSimple", "phones": [ "ModelS1", // Loads `~/ModelS1 L.txt`, `~/ModelS1 R.txt` "ModelS2" // Loads `~/ModelS2 L.txt`, `~/ModelS2 R.txt` ]}상세 객체 정의
섹션 제목: “상세 객체 정의”더욱 자세한 설정을 원하는 경우, Phone은 다음과 같은 키를 가진 객체로 정의할 수 있습니다:
name(문자열, 필수): 화면에 표시될 Phone 모델 이름입니다.file(문자열, 필수): 측정 데이터가 담긴 실제 파일의 이름입니다. (L/R 접미사와 .txt 확장자는 제외합니다.) 예로, 파일의 이름이 MyPhone L.txt, MyPhone R.txt인 경우, file은 “MyPhone”으로 설정해야 합니다.suffix(문자열, 선택 사항): 선택 리스트에 표시될 이름 뒤에 붙는 접미사입니다. 실제 데이터 파일 이름에도 해당 접미사가 포함되어야 합니다. (예: MyPhone (Foam Tip) L.txt ).reviewScore(문자열, 선택 사항): 리뷰 점수입니다. “A+” 또는 0 ~ 5 사이의 숫자, “3” 등으로 표시할 수 있습니다.reviewLink(문자열, 선택 사항): Phone 리뷰의 URL 링크입니다.shopLink(문자열, 선택 사항): Shop 또는 구매 페이지의 URL입니다.price(문자열, 선택 사항): Phone의 가격입니다. (예: “$299”, “€250”). 문자열을 사용하여 다양한 형식의 통화 기호를 허용합니다.
{ "brand": "BrandDetailed", "phones": [ { "name": "Model D1", "file": "ModelD1_Data", "suffix": "Rev.2", "reviewScore": "A+", "reviewLink": "https://example.com/review/d1", "shopLink": "https://example.com/shop/d1", "price": "$299" } ]}Variations (다양한 데이터 파일을 하나의 이름으로 묶기)
섹션 제목: “Variations (다양한 데이터 파일을 하나의 이름으로 묶기)”(EQ 설정 또는 이어팁에 따른) 다양한 버전의 측정치가 존재하는 경우, 이를 하나의 이름으로 묶어서 UI 상에 표시할 수 있습니다.
{ "brand": "BrandVariations", "phones": [ { "name": "Model V1", // Base name for variations "file": ["ModelV1_Foam", "ModelV1_Silicone", "ModelV1_Hybrid"], "suffix": ["(Foam Tip)", "(Silicone Tip)", "(Hybrid Tip)"], "price": "$150" // Applies to all V1 variations } ]}- name , file , suffix 배열을 사용하는 경우 :
name(문자열 배열, 필수): 여러 개의 단일 문자열로 이루어진 배열로, 모든 Variation들에 대한 기본 이름이 됩니다.file(문자열 배열, 필수): 각 Variation에 대한 기본 파일 이름이 들어있는 배열입니다.suffix(문자열 배열, 필수): 각 파일에 대응하는 접미사가 들어있는 배열입니다. UI 상에서 표시되는 이름은 brand_name + name + suffix[i] 형태로 표시됩니다.- 이렇게 생성된 항목은 “BrandVariations Model V1 (Foam Tip)”, “BrandVariations Model V1 (Silicone Tip)”, 등과 같이 표시됩니다.
- file과 suffix 배열의 길이는 가급적 같아야 합니다. 다른 선택 사항 키들 (예: reviewLink, price 등)도 추가할 수 있으며, 모든 Variation에 동일하게 적용됩니다.
{ "brand": "BrandPrefix", "phones": [ { "name": "Model P1", // Base display name "file": ["BrandP ModelP1 (Foam Tip)", "BrandP ModelP1 (Silicone Tip)"], // Actual files would be: BrandP ModelP1 (Foam Tip) L.txt, BrandP ModelP1 (Silicone Tip) L.txt, etc. "prefix": "BrandP ModelP1", // Common file prefix "notes": "Uses different eartips" } ]}- prefix를 사용하여 공통 파일 접두사 사용하기 :
만약 Variation을 구성하는 파일들이 동일한 접두사를 가지면서도, 분명하게 구분되는 부분이 있다면, prefix를 사용할 수 있습니다.
name(문자열 배열, 필수): 여러 개의 단일 문자열로 이루어진 배열로, 모든 Variation들에 대한 기본 이름이 됩니다.file(문자열 배열, 필수): 각 Variation에 대한 기본 파일 이름이 들어있는 배열입니다.prefix(문자열, 필수): 모든 파일에 공통으로 사용되는 접두사입니다.- UI 상에서 표시되는 이름은 brand_name + name + suffix[i] 형태로 표시됩니다. (예 - “BrandPrefix Model P1 (Foam Tip)”, “BrandPrefix Model P1 (Silicone Tip)”)
- 여러 이어팁 / 이어패드를 조합하거나, 다양한 착용 위치 별로 측정한 데이터를 표시할 때 기기 별로 이들을 한데 묶을 수 있어 편리합니다.
측정 데이터 추가/수정 절차:
섹션 제목: “측정 데이터 추가/수정 절차:”- 새로운 Phone 측정 데이터 파일(.txt)을 data/phones 폴더에 복사합니다.
- 텍스트 에디터로
phone_book.json파일을 엽니다. - 새로운 Phone 정보를 JSON 문법에 맞게 추가하거나 기존 정보를 수정합니다.
phone_book.json파일을 저장합니다.- 웹 페이지를 새로고침하여 변경 사항이 올바르게 적용되었는지 확인합니다.