From 7fe846fbf90e439c4f9e09b403396501fa93d728 Mon Sep 17 00:00:00 2001 From: MasterBabol Date: Fri, 28 Aug 2026 19:43:46 +0900 Subject: [PATCH] feat: add varied microphone array presets --- README.md | 11 +- apps/acoustic-camera/README.md | 5 +- apps/acoustic-camera/index.html | 25 +- apps/acoustic-camera/main.js | 6 + assets/array-geometries/README.md | 54 +- .../rectangular-16x12-compact.array.json | 1556 +++++++++ .../rectangular-16x12-large.array.json | 1556 +++++++++ .../rectangular-24x16-450mm.array.json | 3092 +++++++++++++++++ .../rectangular-2x2-450mm.array.json | 52 + .../rectangular-4x3-450mm.array.json | 116 + .../rectangular-8x6-450mm.array.json | 404 +++ scripts/generate-array-fixture.ps1 | 165 +- tests/integration/camera-ui.test.js | 25 + tests/unit/contracts.test.js | 96 + 14 files changed, 7086 insertions(+), 77 deletions(-) create mode 100644 assets/array-geometries/rectangular-16x12-compact.array.json create mode 100644 assets/array-geometries/rectangular-16x12-large.array.json create mode 100644 assets/array-geometries/rectangular-24x16-450mm.array.json create mode 100644 assets/array-geometries/rectangular-2x2-450mm.array.json create mode 100644 assets/array-geometries/rectangular-4x3-450mm.array.json create mode 100644 assets/array-geometries/rectangular-8x6-450mm.array.json diff --git a/README.md b/README.md index 9163edc..a085306 100644 --- a/README.md +++ b/README.md @@ -201,10 +201,13 @@ noise source는 스펙트럼을 미리 알 수 없으므로 모든 band의 groun ## 배열 예제 -- `assets/array-geometries/rectangular-16x12.array.json`: 0.45 m 정사각 aperture의 16×12 기준 배열 -- `assets/array-geometries/fermat-spiral-192.array.json`: 0.45 m 원형 aperture의 192채널 Fermat spiral +- **채널 수 비교:** 같은 0.45 m aperture에서 4·12·48·192·384채널 rectangular 배열 +- **물리 크기 비교:** 같은 192채널 16×12 topology에서 0.12·0.45·1.20 m 배열 +- **배치 비교:** 같은 192채널 규모의 rectangular baseline과 0.45 m Fermat spiral -Camera의 **비교 배열** 선택으로 두 fixture를 같은 scene과 experiment에서 연속 실행할 수 있습니다. +Camera의 **배열 선택**에서 8개 fixture를 바로 불러와 같은 Scene/Experiment로 연속 실행할 수 있습니다. +저채널·대형 배열의 grating lobe나 compact 배열의 넓은 main lobe는 배치 trade-off를 관찰하기 위한 +의도된 예제 특성입니다. 상세한 생성법은 [`assets/array-geometries/README.md`](assets/array-geometries/README.md)를 참고하세요. ## 테스트와 benchmark @@ -241,7 +244,7 @@ test.cmd ```text apps/ Dataset Builder와 Acoustic Camera UI -assets/ 192채널 배열과 synthetic Scene/Experiment fixture +assets/ 마이크 배열과 synthetic Scene/Experiment fixture benchmarks/ 현재 브라우저에서 실행하는 WebGPU scaling 측정 docs/ 사용자 안내, 데이터 계약, 실행 계획과 기준 실측 packages/ 음향 수치 모델, 계약 검증, UI, WebGPU kernel diff --git a/apps/acoustic-camera/README.md b/apps/acoustic-camera/README.md index 25e5e70..ef17f18 100644 --- a/apps/acoustic-camera/README.md +++ b/apps/acoustic-camera/README.md @@ -113,8 +113,9 @@ curve는 합성 microphone channel에 항상 적용됩니다. **마이크 주파 - **Ground truth**를 켜면 source 위치와 검출 peak를 비교할 수 있습니다. - **빔 분포**는 peak 주변 half-power lobe의 power 가중 공분산을 1× RMS 점선과 2× RMS 영역으로 표시합니다. 위치 확률, Gaussian 신뢰구간 또는 측정 불확실성 보정값은 아닙니다. -- rectangular와 Fermat spiral preset을 같은 Scene/Experiment에서 연속 실행하면 **배열 비교 기록**에 - backend, timing과 평가 요약이 남습니다. +- **배열 선택**에는 채널 수(4·12·48·192·384), aperture 크기(0.12·0.45·1.20 m), rectangular와 + Fermat spiral 배치를 분리 비교하는 8개 preset이 있습니다. 같은 Scene/Experiment에서 연속 실행하면 + **배열 비교 기록**에 backend, timing과 평가 요약이 남습니다. - 입력을 바꾼 뒤 화면에 남은 결과는 이전 실행 snapshot이며 UI가 이전 설정 결과임을 표시합니다. - Camera에서 거리·음속·seed를 바꾼 Scene과 scan·STFT·band를 바꾼 Experiment는 우측의 각 **JSON 저장** 버튼으로 보존할 수 있습니다. diff --git a/apps/acoustic-camera/index.html b/apps/acoustic-camera/index.html index 9a9ca23..1387135 100644 --- a/apps/acoustic-camera/index.html +++ b/apps/acoustic-camera/index.html @@ -3,7 +3,7 @@ - + Acoustic Camera · micarrsim @@ -52,7 +52,28 @@
MIC ARRAY

배열

— ch
- +
배열 미리보기와 좌표 정보 diff --git a/apps/acoustic-camera/main.js b/apps/acoustic-camera/main.js index fff81ed..53ce254 100644 --- a/apps/acoustic-camera/main.js +++ b/apps/acoustic-camera/main.js @@ -44,6 +44,12 @@ const MOVING_EXAMPLE_URLS = { const ARRAY_PRESET_URLS = new Map([ ["rectangular-16x12", "/assets/array-geometries/rectangular-16x12.array.json"], ["fermat-spiral-192", "/assets/array-geometries/fermat-spiral-192.array.json"], + ["rectangular-2x2-450mm", "/assets/array-geometries/rectangular-2x2-450mm.array.json"], + ["rectangular-4x3-450mm", "/assets/array-geometries/rectangular-4x3-450mm.array.json"], + ["rectangular-8x6-450mm", "/assets/array-geometries/rectangular-8x6-450mm.array.json"], + ["rectangular-24x16-450mm", "/assets/array-geometries/rectangular-24x16-450mm.array.json"], + ["rectangular-16x12-compact", "/assets/array-geometries/rectangular-16x12-compact.array.json"], + ["rectangular-16x12-large", "/assets/array-geometries/rectangular-16x12-large.array.json"], ]); const BAND_COLORS = ["#65f2bf", "#58c7ff", "#ff7f8f", "#ffc56e", "#b294ff", "#8fe388", "#ff9ee5", "#83a8ff"]; const MAX_HISTORY_ITEMS = 24; diff --git a/assets/array-geometries/README.md b/assets/array-geometries/README.md index 06a6900..6139ba9 100644 --- a/assets/array-geometries/README.md +++ b/assets/array-geometries/README.md @@ -1,40 +1,46 @@ # Array Geometries -Camera에서 즉시 사용하고 테스트에서 재현할 수 있는 계약 버전 `1.0.0`의 192채널 Array JSON -fixture입니다. 좌표 단위는 m이고 모든 microphone은 배열 평면 `z = 0`에 있습니다. `+x`는 오른쪽, -`+y`는 위, `+z`는 scene 방향입니다. +Acoustic Camera에서 즉시 선택하고 같은 Scene/Experiment로 비교할 수 있는 Array JSON 예제입니다. +모든 파일은 계약 버전 `1.0.0`을 따르며 좌표 단위는 m입니다. microphone은 배열 평면 +`z = 0`에 있고, `+x`는 오른쪽, `+y`는 위, `+z`는 scene 방향입니다. -## 포함된 배열 +## 비교용 preset -### `rectangular-16x12.array.json` +| 비교 축 | 파일 | 채널 | aperture | x × y pitch | +| --- | --- | ---: | ---: | ---: | +| 채널 수 · 최소 | `rectangular-2x2-450mm.array.json` | 4 | 0.45 × 0.45 m | 450 × 450 mm | +| 채널 수 · 적음 | `rectangular-4x3-450mm.array.json` | 12 | 0.45 × 0.45 m | 150 × 225 mm | +| 채널 수 · 중간 | `rectangular-8x6-450mm.array.json` | 48 | 0.45 × 0.45 m | 64.286 × 90 mm | +| 채널 수·크기 기준 | `rectangular-16x12.array.json` | 192 | 0.45 × 0.45 m | 30 × 40.909 mm | +| 채널 수 · 많음 | `rectangular-24x16-450mm.array.json` | 384 | 0.45 × 0.45 m | 19.565 × 30 mm | +| 물리 크기 · 소형 | `rectangular-16x12-compact.array.json` | 192 | 0.12 × 0.12 m | 8 × 10.909 mm | +| 물리 크기 · 대형 | `rectangular-16x12-large.array.json` | 192 | 1.20 × 1.20 m | 80 × 109.091 mm | +| 배치 패턴 | `fermat-spiral-192.array.json` | 192 | Ø 0.45 m | 비균일 | -- 16 columns × 12 rows = 192 microphones -- 폭과 높이가 각각 0.45 m인 정사각 aperture -- x/y 양 끝을 포함해 균일한 간격으로 배치 -- 기본 single-tone experiment와 CPU/WebGPU 기준 fixture가 참조하는 baseline +Camera의 **배열 선택**은 비교 목적에 맞춰 preset을 그룹으로 나눕니다. -### `fermat-spiral-192.array.json` +- 채널 수 효과는 aperture가 모두 0.45 m인 4·12·48·192·384채널 rectangular 배열끼리 비교합니다. +- 물리 크기 효과는 topology와 채널 수가 같은 192채널 compact·baseline·large 배열끼리 비교합니다. +- 배치 패턴 효과는 192채널 0.45 m rectangular baseline과 Fermat spiral을 비교합니다. -- 192 microphones -- 반지름 0.225 m, 지름 0.45 m인 원형 aperture -- golden angle과 면적 균등 반지름으로 만든 Fermat spiral -- rectangular baseline과 sidelobe·집중도·위치 오차를 비교하기 위한 preset - -Acoustic Camera의 **비교 배열**에서 두 배열을 선택해 같은 Scene/Experiment 결과를 세션 기록에 -나란히 추가할 수 있습니다. +이 preset들은 정확도를 보장하는 제품 사양이 아니라 trade-off를 관찰하기 위한 입력입니다. 채널 간격이 +넓은 저채널·대형 배열에서 고주파 spatial aliasing과 grating lobe가 나타나거나, compact 배열에서 +main lobe가 넓어지는 것은 예상 가능한 결과입니다. 384채널 배열은 같은 grid에서 계산량과 메모리 사용량도 +가장 큽니다. 빠른 동작 확인은 4채널이나 12채널부터 시작하세요. ## fixture 다시 생성하기 -저장소 최상위에서 다음 명령을 실행하면 두 JSON을 결정론적으로 다시 생성합니다. +저장소 최상위에서 다음 명령을 실행하면 위 8개 JSON을 결정론적으로 다시 생성합니다. ```powershell powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File .\scripts\generate-array-fixture.ps1 ``` -이 스크립트는 기존 `rectangular-16x12.array.json`과 `fermat-spiral-192.array.json`을 덮어씁니다. -`ExecutionPolicy Bypass`는 이 PowerShell 프로세스에만 적용됩니다. 생성 뒤 -에서 schema와 192채널 배치 검증을 실행하세요. +`ExecutionPolicy Bypass`는 해당 PowerShell 프로세스에만 적용됩니다. 생성 뒤 +`test.cmd`로 schema, 채널 수, 좌표 중복, 평면성, grid 행·열 수와 aperture 경계를 검증할 수 +있습니다. -사용자 배열은 [`../../schemas/array.schema.json`](../../schemas/array.schema.json) 구조를 따르고 -고유한 `id`, aperture와 microphone별 `[x, y, z]`를 가져야 합니다. 선택적인 `sensitivityDb`와 -`phaseOffsetDeg`는 합성 channel 편차와 beamforming 역 calibration에 사용됩니다. +사용자 배열은 [array schema](../../schemas/array.schema.json) 구조를 따르고 고유한 `id`, +aperture와 microphone별 `[x, y, z]`를 가져야 합니다. 선택적인 `sensitivityDb`와 +`phaseOffsetDeg`는 합성 channel 편차와 beamforming 역 calibration에 사용됩니다. geometry +효과와 calibration 효과를 분리하기 위해 기본 preset에는 이 값을 넣지 않았습니다. diff --git a/assets/array-geometries/rectangular-16x12-compact.array.json b/assets/array-geometries/rectangular-16x12-compact.array.json new file mode 100644 index 0000000..61fda47 --- /dev/null +++ b/assets/array-geometries/rectangular-16x12-compact.array.json @@ -0,0 +1,1556 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-16x12-compact", + "name": "16x12 compact rectangular", + "description": "192-channel uniform rectangular layout on a 0.12 m square aperture", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 0.12, + "height": 0.12 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.06, + -0.06, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + -0.052, + -0.06, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + -0.044, + -0.06, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + -0.036, + -0.06, + 0 + ] + }, + { + "id": "mic-005", + "position": [ + -0.028, + -0.06, + 0 + ] + }, + { + "id": "mic-006", + "position": [ + -0.02, + -0.06, + 0 + ] + }, + { + "id": "mic-007", + "position": [ + -0.012, + -0.06, + 0 + ] + }, + { + "id": "mic-008", + "position": [ + -0.004, + -0.06, + 0 + ] + }, + { + "id": "mic-009", + "position": [ + 0.004, + -0.06, + 0 + ] + }, + { + "id": "mic-010", + "position": [ + 0.012, + -0.06, + 0 + ] + }, + { + "id": "mic-011", + "position": [ + 0.02, + -0.06, + 0 + ] + }, + { + "id": "mic-012", + "position": [ + 0.028, + -0.06, + 0 + ] + }, + { + "id": "mic-013", + "position": [ + 0.036, + -0.06, + 0 + ] + }, + { + "id": "mic-014", + "position": [ + 0.044, + -0.06, + 0 + ] + }, + { + "id": "mic-015", + "position": [ + 0.052, + -0.06, + 0 + ] + }, + { + "id": "mic-016", + "position": [ + 0.06, + -0.06, + 0 + ] + }, + { + "id": "mic-017", + "position": [ + -0.06, + -0.049091, + 0 + ] + }, + { + "id": "mic-018", + "position": [ + -0.052, + -0.049091, + 0 + ] + }, + { + "id": "mic-019", + "position": [ + -0.044, + -0.049091, + 0 + ] + }, + { + "id": "mic-020", + "position": [ + -0.036, + -0.049091, + 0 + ] + }, + { + "id": "mic-021", + "position": [ + -0.028, + -0.049091, + 0 + ] + }, + { + "id": "mic-022", + "position": [ + -0.02, + -0.049091, + 0 + ] + }, + { + "id": "mic-023", + "position": [ + -0.012, + -0.049091, + 0 + ] + }, + { + "id": "mic-024", + "position": [ + -0.004, + -0.049091, + 0 + ] + }, + { + "id": "mic-025", + "position": [ + 0.004, + -0.049091, + 0 + ] + }, + { + "id": "mic-026", + "position": [ + 0.012, + -0.049091, + 0 + ] + }, + { + "id": "mic-027", + "position": [ + 0.02, + -0.049091, + 0 + ] + }, + { + "id": "mic-028", + "position": [ + 0.028, + -0.049091, + 0 + ] + }, + { + "id": "mic-029", + "position": [ + 0.036, + -0.049091, + 0 + ] + }, + { + "id": "mic-030", + "position": [ + 0.044, + -0.049091, + 0 + ] + }, + { + "id": "mic-031", + "position": [ + 0.052, + -0.049091, + 0 + ] + }, + { + "id": "mic-032", + "position": [ + 0.06, + -0.049091, + 0 + ] + }, + { + "id": "mic-033", + "position": [ + -0.06, + -0.038182, + 0 + ] + }, + { + "id": "mic-034", + "position": [ + -0.052, + -0.038182, + 0 + ] + }, + { + "id": "mic-035", + "position": [ + -0.044, + -0.038182, + 0 + ] + }, + { + "id": "mic-036", + "position": [ + -0.036, + -0.038182, + 0 + ] + }, + { + "id": "mic-037", + "position": [ + -0.028, + -0.038182, + 0 + ] + }, + { + "id": "mic-038", + "position": [ + -0.02, + -0.038182, + 0 + ] + }, + { + "id": "mic-039", + "position": [ + -0.012, + -0.038182, + 0 + ] + }, + { + "id": "mic-040", + "position": [ + -0.004, + -0.038182, + 0 + ] + }, + { + "id": "mic-041", + "position": [ + 0.004, + -0.038182, + 0 + ] + }, + { + "id": "mic-042", + "position": [ + 0.012, + -0.038182, + 0 + ] + }, + { + "id": "mic-043", + "position": [ + 0.02, + -0.038182, + 0 + ] + }, + { + "id": "mic-044", + "position": [ + 0.028, + -0.038182, + 0 + ] + }, + { + "id": "mic-045", + "position": [ + 0.036, + -0.038182, + 0 + ] + }, + { + "id": "mic-046", + "position": [ + 0.044, + -0.038182, + 0 + ] + }, + { + "id": "mic-047", + "position": [ + 0.052, + -0.038182, + 0 + ] + }, + { + "id": "mic-048", + "position": [ + 0.06, + -0.038182, + 0 + ] + }, + { + "id": "mic-049", + "position": [ + -0.06, + -0.027273, + 0 + ] + }, + { + "id": "mic-050", + "position": [ + -0.052, + -0.027273, + 0 + ] + }, + { + "id": "mic-051", + "position": [ + -0.044, + -0.027273, + 0 + ] + }, + { + "id": "mic-052", + "position": [ + -0.036, + -0.027273, + 0 + ] + }, + { + "id": "mic-053", + "position": [ + -0.028, + -0.027273, + 0 + ] + }, + { + "id": "mic-054", + "position": [ + -0.02, + -0.027273, + 0 + ] + }, + { + "id": "mic-055", + "position": [ + -0.012, + -0.027273, + 0 + ] + }, + { + "id": "mic-056", + "position": [ + -0.004, + -0.027273, + 0 + ] + }, + { + "id": "mic-057", + "position": [ + 0.004, + -0.027273, + 0 + ] + }, + { + "id": "mic-058", + "position": [ + 0.012, + -0.027273, + 0 + ] + }, + { + "id": "mic-059", + "position": [ + 0.02, + -0.027273, + 0 + ] + }, + { + "id": "mic-060", + "position": [ + 0.028, + -0.027273, + 0 + ] + }, + { + "id": "mic-061", + "position": [ + 0.036, + -0.027273, + 0 + ] + }, + { + "id": "mic-062", + "position": [ + 0.044, + -0.027273, + 0 + ] + }, + { + "id": "mic-063", + "position": [ + 0.052, + -0.027273, + 0 + ] + }, + { + "id": "mic-064", + "position": [ + 0.06, + -0.027273, + 0 + ] + }, + { + "id": "mic-065", + "position": [ + -0.06, + -0.016364, + 0 + ] + }, + { + "id": "mic-066", + "position": [ + -0.052, + -0.016364, + 0 + ] + }, + { + "id": "mic-067", + "position": [ + -0.044, + -0.016364, + 0 + ] + }, + { + "id": "mic-068", + "position": [ + -0.036, + -0.016364, + 0 + ] + }, + { + "id": "mic-069", + "position": [ + -0.028, + -0.016364, + 0 + ] + }, + { + "id": "mic-070", + "position": [ + -0.02, + -0.016364, + 0 + ] + }, + { + "id": "mic-071", + "position": [ + -0.012, + -0.016364, + 0 + ] + }, + { + "id": "mic-072", + "position": [ + -0.004, + -0.016364, + 0 + ] + }, + { + "id": "mic-073", + "position": [ + 0.004, + -0.016364, + 0 + ] + }, + { + "id": "mic-074", + "position": [ + 0.012, + -0.016364, + 0 + ] + }, + { + "id": "mic-075", + "position": [ + 0.02, + -0.016364, + 0 + ] + }, + { + "id": "mic-076", + "position": [ + 0.028, + -0.016364, + 0 + ] + }, + { + "id": "mic-077", + "position": [ + 0.036, + -0.016364, + 0 + ] + }, + { + "id": "mic-078", + "position": [ + 0.044, + -0.016364, + 0 + ] + }, + { + "id": "mic-079", + "position": [ + 0.052, + -0.016364, + 0 + ] + }, + { + "id": "mic-080", + "position": [ + 0.06, + -0.016364, + 0 + ] + }, + { + "id": "mic-081", + "position": [ + -0.06, + -0.005455, + 0 + ] + }, + { + "id": "mic-082", + "position": [ + -0.052, + -0.005455, + 0 + ] + }, + { + "id": "mic-083", + "position": [ + -0.044, + -0.005455, + 0 + ] + }, + { + "id": "mic-084", + "position": [ + -0.036, + -0.005455, + 0 + ] + }, + { + "id": "mic-085", + "position": [ + -0.028, + -0.005455, + 0 + ] + }, + { + "id": "mic-086", + "position": [ + -0.02, + -0.005455, + 0 + ] + }, + { + "id": "mic-087", + "position": [ + -0.012, + -0.005455, + 0 + ] + }, + { + "id": "mic-088", + "position": [ + -0.004, + -0.005455, + 0 + ] + }, + { + "id": "mic-089", + "position": [ + 0.004, + -0.005455, + 0 + ] + }, + { + "id": "mic-090", + "position": [ + 0.012, + -0.005455, + 0 + ] + }, + { + "id": "mic-091", + "position": [ + 0.02, + -0.005455, + 0 + ] + }, + { + "id": "mic-092", + "position": [ + 0.028, + -0.005455, + 0 + ] + }, + { + "id": "mic-093", + "position": [ + 0.036, + -0.005455, + 0 + ] + }, + { + "id": "mic-094", + "position": [ + 0.044, + -0.005455, + 0 + ] + }, + { + "id": "mic-095", + "position": [ + 0.052, + -0.005455, + 0 + ] + }, + { + "id": "mic-096", + "position": [ + 0.06, + -0.005455, + 0 + ] + }, + { + "id": "mic-097", + "position": [ + -0.06, + 0.005455, + 0 + ] + }, + { + "id": "mic-098", + "position": [ + -0.052, + 0.005455, + 0 + ] + }, + { + "id": "mic-099", + "position": [ + -0.044, + 0.005455, + 0 + ] + }, + { + "id": "mic-100", + "position": [ + -0.036, + 0.005455, + 0 + ] + }, + { + "id": "mic-101", + "position": [ + -0.028, + 0.005455, + 0 + ] + }, + { + "id": "mic-102", + "position": [ + -0.02, + 0.005455, + 0 + ] + }, + { + "id": "mic-103", + "position": [ + -0.012, + 0.005455, + 0 + ] + }, + { + "id": "mic-104", + "position": [ + -0.004, + 0.005455, + 0 + ] + }, + { + "id": "mic-105", + "position": [ + 0.004, + 0.005455, + 0 + ] + }, + { + "id": "mic-106", + "position": [ + 0.012, + 0.005455, + 0 + ] + }, + { + "id": "mic-107", + "position": [ + 0.02, + 0.005455, + 0 + ] + }, + { + "id": "mic-108", + "position": [ + 0.028, + 0.005455, + 0 + ] + }, + { + "id": "mic-109", + "position": [ + 0.036, + 0.005455, + 0 + ] + }, + { + "id": "mic-110", + "position": [ + 0.044, + 0.005455, + 0 + ] + }, + { + "id": "mic-111", + "position": [ + 0.052, + 0.005455, + 0 + ] + }, + { + "id": "mic-112", + "position": [ + 0.06, + 0.005455, + 0 + ] + }, + { + "id": "mic-113", + "position": [ + -0.06, + 0.016364, + 0 + ] + }, + { + "id": "mic-114", + "position": [ + -0.052, + 0.016364, + 0 + ] + }, + { + "id": "mic-115", + "position": [ + -0.044, + 0.016364, + 0 + ] + }, + { + "id": "mic-116", + "position": [ + -0.036, + 0.016364, + 0 + ] + }, + { + "id": "mic-117", + "position": [ + -0.028, + 0.016364, + 0 + ] + }, + { + "id": "mic-118", + "position": [ + -0.02, + 0.016364, + 0 + ] + }, + { + "id": "mic-119", + "position": [ + -0.012, + 0.016364, + 0 + ] + }, + { + "id": "mic-120", + "position": [ + -0.004, + 0.016364, + 0 + ] + }, + { + "id": "mic-121", + "position": [ + 0.004, + 0.016364, + 0 + ] + }, + { + "id": "mic-122", + "position": [ + 0.012, + 0.016364, + 0 + ] + }, + { + "id": "mic-123", + "position": [ + 0.02, + 0.016364, + 0 + ] + }, + { + "id": "mic-124", + "position": [ + 0.028, + 0.016364, + 0 + ] + }, + { + "id": "mic-125", + "position": [ + 0.036, + 0.016364, + 0 + ] + }, + { + "id": "mic-126", + "position": [ + 0.044, + 0.016364, + 0 + ] + }, + { + "id": "mic-127", + "position": [ + 0.052, + 0.016364, + 0 + ] + }, + { + "id": "mic-128", + "position": [ + 0.06, + 0.016364, + 0 + ] + }, + { + "id": "mic-129", + "position": [ + -0.06, + 0.027273, + 0 + ] + }, + { + "id": "mic-130", + "position": [ + -0.052, + 0.027273, + 0 + ] + }, + { + "id": "mic-131", + "position": [ + -0.044, + 0.027273, + 0 + ] + }, + { + "id": "mic-132", + "position": [ + -0.036, + 0.027273, + 0 + ] + }, + { + "id": "mic-133", + "position": [ + -0.028, + 0.027273, + 0 + ] + }, + { + "id": "mic-134", + "position": [ + -0.02, + 0.027273, + 0 + ] + }, + { + "id": "mic-135", + "position": [ + -0.012, + 0.027273, + 0 + ] + }, + { + "id": "mic-136", + "position": [ + -0.004, + 0.027273, + 0 + ] + }, + { + "id": "mic-137", + "position": [ + 0.004, + 0.027273, + 0 + ] + }, + { + "id": "mic-138", + "position": [ + 0.012, + 0.027273, + 0 + ] + }, + { + "id": "mic-139", + "position": [ + 0.02, + 0.027273, + 0 + ] + }, + { + "id": "mic-140", + "position": [ + 0.028, + 0.027273, + 0 + ] + }, + { + "id": "mic-141", + "position": [ + 0.036, + 0.027273, + 0 + ] + }, + { + "id": "mic-142", + "position": [ + 0.044, + 0.027273, + 0 + ] + }, + { + "id": "mic-143", + "position": [ + 0.052, + 0.027273, + 0 + ] + }, + { + "id": "mic-144", + "position": [ + 0.06, + 0.027273, + 0 + ] + }, + { + "id": "mic-145", + "position": [ + -0.06, + 0.038182, + 0 + ] + }, + { + "id": "mic-146", + "position": [ + -0.052, + 0.038182, + 0 + ] + }, + { + "id": "mic-147", + "position": [ + -0.044, + 0.038182, + 0 + ] + }, + { + "id": "mic-148", + "position": [ + -0.036, + 0.038182, + 0 + ] + }, + { + "id": "mic-149", + "position": [ + -0.028, + 0.038182, + 0 + ] + }, + { + "id": "mic-150", + "position": [ + -0.02, + 0.038182, + 0 + ] + }, + { + "id": "mic-151", + "position": [ + -0.012, + 0.038182, + 0 + ] + }, + { + "id": "mic-152", + "position": [ + -0.004, + 0.038182, + 0 + ] + }, + { + "id": "mic-153", + "position": [ + 0.004, + 0.038182, + 0 + ] + }, + { + "id": "mic-154", + "position": [ + 0.012, + 0.038182, + 0 + ] + }, + { + "id": "mic-155", + "position": [ + 0.02, + 0.038182, + 0 + ] + }, + { + "id": "mic-156", + "position": [ + 0.028, + 0.038182, + 0 + ] + }, + { + "id": "mic-157", + "position": [ + 0.036, + 0.038182, + 0 + ] + }, + { + "id": "mic-158", + "position": [ + 0.044, + 0.038182, + 0 + ] + }, + { + "id": "mic-159", + "position": [ + 0.052, + 0.038182, + 0 + ] + }, + { + "id": "mic-160", + "position": [ + 0.06, + 0.038182, + 0 + ] + }, + { + "id": "mic-161", + "position": [ + -0.06, + 0.049091, + 0 + ] + }, + { + "id": "mic-162", + "position": [ + -0.052, + 0.049091, + 0 + ] + }, + { + "id": "mic-163", + "position": [ + -0.044, + 0.049091, + 0 + ] + }, + { + "id": "mic-164", + "position": [ + -0.036, + 0.049091, + 0 + ] + }, + { + "id": "mic-165", + "position": [ + -0.028, + 0.049091, + 0 + ] + }, + { + "id": "mic-166", + "position": [ + -0.02, + 0.049091, + 0 + ] + }, + { + "id": "mic-167", + "position": [ + -0.012, + 0.049091, + 0 + ] + }, + { + "id": "mic-168", + "position": [ + -0.004, + 0.049091, + 0 + ] + }, + { + "id": "mic-169", + "position": [ + 0.004, + 0.049091, + 0 + ] + }, + { + "id": "mic-170", + "position": [ + 0.012, + 0.049091, + 0 + ] + }, + { + "id": "mic-171", + "position": [ + 0.02, + 0.049091, + 0 + ] + }, + { + "id": "mic-172", + "position": [ + 0.028, + 0.049091, + 0 + ] + }, + { + "id": "mic-173", + "position": [ + 0.036, + 0.049091, + 0 + ] + }, + { + "id": "mic-174", + "position": [ + 0.044, + 0.049091, + 0 + ] + }, + { + "id": "mic-175", + "position": [ + 0.052, + 0.049091, + 0 + ] + }, + { + "id": "mic-176", + "position": [ + 0.06, + 0.049091, + 0 + ] + }, + { + "id": "mic-177", + "position": [ + -0.06, + 0.06, + 0 + ] + }, + { + "id": "mic-178", + "position": [ + -0.052, + 0.06, + 0 + ] + }, + { + "id": "mic-179", + "position": [ + -0.044, + 0.06, + 0 + ] + }, + { + "id": "mic-180", + "position": [ + -0.036, + 0.06, + 0 + ] + }, + { + "id": "mic-181", + "position": [ + -0.028, + 0.06, + 0 + ] + }, + { + "id": "mic-182", + "position": [ + -0.02, + 0.06, + 0 + ] + }, + { + "id": "mic-183", + "position": [ + -0.012, + 0.06, + 0 + ] + }, + { + "id": "mic-184", + "position": [ + -0.004, + 0.06, + 0 + ] + }, + { + "id": "mic-185", + "position": [ + 0.004, + 0.06, + 0 + ] + }, + { + "id": "mic-186", + "position": [ + 0.012, + 0.06, + 0 + ] + }, + { + "id": "mic-187", + "position": [ + 0.02, + 0.06, + 0 + ] + }, + { + "id": "mic-188", + "position": [ + 0.028, + 0.06, + 0 + ] + }, + { + "id": "mic-189", + "position": [ + 0.036, + 0.06, + 0 + ] + }, + { + "id": "mic-190", + "position": [ + 0.044, + 0.06, + 0 + ] + }, + { + "id": "mic-191", + "position": [ + 0.052, + 0.06, + 0 + ] + }, + { + "id": "mic-192", + "position": [ + 0.06, + 0.06, + 0 + ] + } + ] +} diff --git a/assets/array-geometries/rectangular-16x12-large.array.json b/assets/array-geometries/rectangular-16x12-large.array.json new file mode 100644 index 0000000..da1ce8c --- /dev/null +++ b/assets/array-geometries/rectangular-16x12-large.array.json @@ -0,0 +1,1556 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-16x12-large", + "name": "16x12 large rectangular", + "description": "192-channel uniform rectangular layout on a 1.20 m square aperture for spatial-aliasing comparison", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 1.2, + "height": 1.2 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.6, + -0.6, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + -0.52, + -0.6, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + -0.44, + -0.6, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + -0.36, + -0.6, + 0 + ] + }, + { + "id": "mic-005", + "position": [ + -0.28, + -0.6, + 0 + ] + }, + { + "id": "mic-006", + "position": [ + -0.2, + -0.6, + 0 + ] + }, + { + "id": "mic-007", + "position": [ + -0.12, + -0.6, + 0 + ] + }, + { + "id": "mic-008", + "position": [ + -0.04, + -0.6, + 0 + ] + }, + { + "id": "mic-009", + "position": [ + 0.04, + -0.6, + 0 + ] + }, + { + "id": "mic-010", + "position": [ + 0.12, + -0.6, + 0 + ] + }, + { + "id": "mic-011", + "position": [ + 0.2, + -0.6, + 0 + ] + }, + { + "id": "mic-012", + "position": [ + 0.28, + -0.6, + 0 + ] + }, + { + "id": "mic-013", + "position": [ + 0.36, + -0.6, + 0 + ] + }, + { + "id": "mic-014", + "position": [ + 0.44, + -0.6, + 0 + ] + }, + { + "id": "mic-015", + "position": [ + 0.52, + -0.6, + 0 + ] + }, + { + "id": "mic-016", + "position": [ + 0.6, + -0.6, + 0 + ] + }, + { + "id": "mic-017", + "position": [ + -0.6, + -0.490909, + 0 + ] + }, + { + "id": "mic-018", + "position": [ + -0.52, + -0.490909, + 0 + ] + }, + { + "id": "mic-019", + "position": [ + -0.44, + -0.490909, + 0 + ] + }, + { + "id": "mic-020", + "position": [ + -0.36, + -0.490909, + 0 + ] + }, + { + "id": "mic-021", + "position": [ + -0.28, + -0.490909, + 0 + ] + }, + { + "id": "mic-022", + "position": [ + -0.2, + -0.490909, + 0 + ] + }, + { + "id": "mic-023", + "position": [ + -0.12, + -0.490909, + 0 + ] + }, + { + "id": "mic-024", + "position": [ + -0.04, + -0.490909, + 0 + ] + }, + { + "id": "mic-025", + "position": [ + 0.04, + -0.490909, + 0 + ] + }, + { + "id": "mic-026", + "position": [ + 0.12, + -0.490909, + 0 + ] + }, + { + "id": "mic-027", + "position": [ + 0.2, + -0.490909, + 0 + ] + }, + { + "id": "mic-028", + "position": [ + 0.28, + -0.490909, + 0 + ] + }, + { + "id": "mic-029", + "position": [ + 0.36, + -0.490909, + 0 + ] + }, + { + "id": "mic-030", + "position": [ + 0.44, + -0.490909, + 0 + ] + }, + { + "id": "mic-031", + "position": [ + 0.52, + -0.490909, + 0 + ] + }, + { + "id": "mic-032", + "position": [ + 0.6, + -0.490909, + 0 + ] + }, + { + "id": "mic-033", + "position": [ + -0.6, + -0.381818, + 0 + ] + }, + { + "id": "mic-034", + "position": [ + -0.52, + -0.381818, + 0 + ] + }, + { + "id": "mic-035", + "position": [ + -0.44, + -0.381818, + 0 + ] + }, + { + "id": "mic-036", + "position": [ + -0.36, + -0.381818, + 0 + ] + }, + { + "id": "mic-037", + "position": [ + -0.28, + -0.381818, + 0 + ] + }, + { + "id": "mic-038", + "position": [ + -0.2, + -0.381818, + 0 + ] + }, + { + "id": "mic-039", + "position": [ + -0.12, + -0.381818, + 0 + ] + }, + { + "id": "mic-040", + "position": [ + -0.04, + -0.381818, + 0 + ] + }, + { + "id": "mic-041", + "position": [ + 0.04, + -0.381818, + 0 + ] + }, + { + "id": "mic-042", + "position": [ + 0.12, + -0.381818, + 0 + ] + }, + { + "id": "mic-043", + "position": [ + 0.2, + -0.381818, + 0 + ] + }, + { + "id": "mic-044", + "position": [ + 0.28, + -0.381818, + 0 + ] + }, + { + "id": "mic-045", + "position": [ + 0.36, + -0.381818, + 0 + ] + }, + { + "id": "mic-046", + "position": [ + 0.44, + -0.381818, + 0 + ] + }, + { + "id": "mic-047", + "position": [ + 0.52, + -0.381818, + 0 + ] + }, + { + "id": "mic-048", + "position": [ + 0.6, + -0.381818, + 0 + ] + }, + { + "id": "mic-049", + "position": [ + -0.6, + -0.272727, + 0 + ] + }, + { + "id": "mic-050", + "position": [ + -0.52, + -0.272727, + 0 + ] + }, + { + "id": "mic-051", + "position": [ + -0.44, + -0.272727, + 0 + ] + }, + { + "id": "mic-052", + "position": [ + -0.36, + -0.272727, + 0 + ] + }, + { + "id": "mic-053", + "position": [ + -0.28, + -0.272727, + 0 + ] + }, + { + "id": "mic-054", + "position": [ + -0.2, + -0.272727, + 0 + ] + }, + { + "id": "mic-055", + "position": [ + -0.12, + -0.272727, + 0 + ] + }, + { + "id": "mic-056", + "position": [ + -0.04, + -0.272727, + 0 + ] + }, + { + "id": "mic-057", + "position": [ + 0.04, + -0.272727, + 0 + ] + }, + { + "id": "mic-058", + "position": [ + 0.12, + -0.272727, + 0 + ] + }, + { + "id": "mic-059", + "position": [ + 0.2, + -0.272727, + 0 + ] + }, + { + "id": "mic-060", + "position": [ + 0.28, + -0.272727, + 0 + ] + }, + { + "id": "mic-061", + "position": [ + 0.36, + -0.272727, + 0 + ] + }, + { + "id": "mic-062", + "position": [ + 0.44, + -0.272727, + 0 + ] + }, + { + "id": "mic-063", + "position": [ + 0.52, + -0.272727, + 0 + ] + }, + { + "id": "mic-064", + "position": [ + 0.6, + -0.272727, + 0 + ] + }, + { + "id": "mic-065", + "position": [ + -0.6, + -0.163636, + 0 + ] + }, + { + "id": "mic-066", + "position": [ + -0.52, + -0.163636, + 0 + ] + }, + { + "id": "mic-067", + "position": [ + -0.44, + -0.163636, + 0 + ] + }, + { + "id": "mic-068", + "position": [ + -0.36, + -0.163636, + 0 + ] + }, + { + "id": "mic-069", + "position": [ + -0.28, + -0.163636, + 0 + ] + }, + { + "id": "mic-070", + "position": [ + -0.2, + -0.163636, + 0 + ] + }, + { + "id": "mic-071", + "position": [ + -0.12, + -0.163636, + 0 + ] + }, + { + "id": "mic-072", + "position": [ + -0.04, + -0.163636, + 0 + ] + }, + { + "id": "mic-073", + "position": [ + 0.04, + -0.163636, + 0 + ] + }, + { + "id": "mic-074", + "position": [ + 0.12, + -0.163636, + 0 + ] + }, + { + "id": "mic-075", + "position": [ + 0.2, + -0.163636, + 0 + ] + }, + { + "id": "mic-076", + "position": [ + 0.28, + -0.163636, + 0 + ] + }, + { + "id": "mic-077", + "position": [ + 0.36, + -0.163636, + 0 + ] + }, + { + "id": "mic-078", + "position": [ + 0.44, + -0.163636, + 0 + ] + }, + { + "id": "mic-079", + "position": [ + 0.52, + -0.163636, + 0 + ] + }, + { + "id": "mic-080", + "position": [ + 0.6, + -0.163636, + 0 + ] + }, + { + "id": "mic-081", + "position": [ + -0.6, + -0.054545, + 0 + ] + }, + { + "id": "mic-082", + "position": [ + -0.52, + -0.054545, + 0 + ] + }, + { + "id": "mic-083", + "position": [ + -0.44, + -0.054545, + 0 + ] + }, + { + "id": "mic-084", + "position": [ + -0.36, + -0.054545, + 0 + ] + }, + { + "id": "mic-085", + "position": [ + -0.28, + -0.054545, + 0 + ] + }, + { + "id": "mic-086", + "position": [ + -0.2, + -0.054545, + 0 + ] + }, + { + "id": "mic-087", + "position": [ + -0.12, + -0.054545, + 0 + ] + }, + { + "id": "mic-088", + "position": [ + -0.04, + -0.054545, + 0 + ] + }, + { + "id": "mic-089", + "position": [ + 0.04, + -0.054545, + 0 + ] + }, + { + "id": "mic-090", + "position": [ + 0.12, + -0.054545, + 0 + ] + }, + { + "id": "mic-091", + "position": [ + 0.2, + -0.054545, + 0 + ] + }, + { + "id": "mic-092", + "position": [ + 0.28, + -0.054545, + 0 + ] + }, + { + "id": "mic-093", + "position": [ + 0.36, + -0.054545, + 0 + ] + }, + { + "id": "mic-094", + "position": [ + 0.44, + -0.054545, + 0 + ] + }, + { + "id": "mic-095", + "position": [ + 0.52, + -0.054545, + 0 + ] + }, + { + "id": "mic-096", + "position": [ + 0.6, + -0.054545, + 0 + ] + }, + { + "id": "mic-097", + "position": [ + -0.6, + 0.054545, + 0 + ] + }, + { + "id": "mic-098", + "position": [ + -0.52, + 0.054545, + 0 + ] + }, + { + "id": "mic-099", + "position": [ + -0.44, + 0.054545, + 0 + ] + }, + { + "id": "mic-100", + "position": [ + -0.36, + 0.054545, + 0 + ] + }, + { + "id": "mic-101", + "position": [ + -0.28, + 0.054545, + 0 + ] + }, + { + "id": "mic-102", + "position": [ + -0.2, + 0.054545, + 0 + ] + }, + { + "id": "mic-103", + "position": [ + -0.12, + 0.054545, + 0 + ] + }, + { + "id": "mic-104", + "position": [ + -0.04, + 0.054545, + 0 + ] + }, + { + "id": "mic-105", + "position": [ + 0.04, + 0.054545, + 0 + ] + }, + { + "id": "mic-106", + "position": [ + 0.12, + 0.054545, + 0 + ] + }, + { + "id": "mic-107", + "position": [ + 0.2, + 0.054545, + 0 + ] + }, + { + "id": "mic-108", + "position": [ + 0.28, + 0.054545, + 0 + ] + }, + { + "id": "mic-109", + "position": [ + 0.36, + 0.054545, + 0 + ] + }, + { + "id": "mic-110", + "position": [ + 0.44, + 0.054545, + 0 + ] + }, + { + "id": "mic-111", + "position": [ + 0.52, + 0.054545, + 0 + ] + }, + { + "id": "mic-112", + "position": [ + 0.6, + 0.054545, + 0 + ] + }, + { + "id": "mic-113", + "position": [ + -0.6, + 0.163636, + 0 + ] + }, + { + "id": "mic-114", + "position": [ + -0.52, + 0.163636, + 0 + ] + }, + { + "id": "mic-115", + "position": [ + -0.44, + 0.163636, + 0 + ] + }, + { + "id": "mic-116", + "position": [ + -0.36, + 0.163636, + 0 + ] + }, + { + "id": "mic-117", + "position": [ + -0.28, + 0.163636, + 0 + ] + }, + { + "id": "mic-118", + "position": [ + -0.2, + 0.163636, + 0 + ] + }, + { + "id": "mic-119", + "position": [ + -0.12, + 0.163636, + 0 + ] + }, + { + "id": "mic-120", + "position": [ + -0.04, + 0.163636, + 0 + ] + }, + { + "id": "mic-121", + "position": [ + 0.04, + 0.163636, + 0 + ] + }, + { + "id": "mic-122", + "position": [ + 0.12, + 0.163636, + 0 + ] + }, + { + "id": "mic-123", + "position": [ + 0.2, + 0.163636, + 0 + ] + }, + { + "id": "mic-124", + "position": [ + 0.28, + 0.163636, + 0 + ] + }, + { + "id": "mic-125", + "position": [ + 0.36, + 0.163636, + 0 + ] + }, + { + "id": "mic-126", + "position": [ + 0.44, + 0.163636, + 0 + ] + }, + { + "id": "mic-127", + "position": [ + 0.52, + 0.163636, + 0 + ] + }, + { + "id": "mic-128", + "position": [ + 0.6, + 0.163636, + 0 + ] + }, + { + "id": "mic-129", + "position": [ + -0.6, + 0.272727, + 0 + ] + }, + { + "id": "mic-130", + "position": [ + -0.52, + 0.272727, + 0 + ] + }, + { + "id": "mic-131", + "position": [ + -0.44, + 0.272727, + 0 + ] + }, + { + "id": "mic-132", + "position": [ + -0.36, + 0.272727, + 0 + ] + }, + { + "id": "mic-133", + "position": [ + -0.28, + 0.272727, + 0 + ] + }, + { + "id": "mic-134", + "position": [ + -0.2, + 0.272727, + 0 + ] + }, + { + "id": "mic-135", + "position": [ + -0.12, + 0.272727, + 0 + ] + }, + { + "id": "mic-136", + "position": [ + -0.04, + 0.272727, + 0 + ] + }, + { + "id": "mic-137", + "position": [ + 0.04, + 0.272727, + 0 + ] + }, + { + "id": "mic-138", + "position": [ + 0.12, + 0.272727, + 0 + ] + }, + { + "id": "mic-139", + "position": [ + 0.2, + 0.272727, + 0 + ] + }, + { + "id": "mic-140", + "position": [ + 0.28, + 0.272727, + 0 + ] + }, + { + "id": "mic-141", + "position": [ + 0.36, + 0.272727, + 0 + ] + }, + { + "id": "mic-142", + "position": [ + 0.44, + 0.272727, + 0 + ] + }, + { + "id": "mic-143", + "position": [ + 0.52, + 0.272727, + 0 + ] + }, + { + "id": "mic-144", + "position": [ + 0.6, + 0.272727, + 0 + ] + }, + { + "id": "mic-145", + "position": [ + -0.6, + 0.381818, + 0 + ] + }, + { + "id": "mic-146", + "position": [ + -0.52, + 0.381818, + 0 + ] + }, + { + "id": "mic-147", + "position": [ + -0.44, + 0.381818, + 0 + ] + }, + { + "id": "mic-148", + "position": [ + -0.36, + 0.381818, + 0 + ] + }, + { + "id": "mic-149", + "position": [ + -0.28, + 0.381818, + 0 + ] + }, + { + "id": "mic-150", + "position": [ + -0.2, + 0.381818, + 0 + ] + }, + { + "id": "mic-151", + "position": [ + -0.12, + 0.381818, + 0 + ] + }, + { + "id": "mic-152", + "position": [ + -0.04, + 0.381818, + 0 + ] + }, + { + "id": "mic-153", + "position": [ + 0.04, + 0.381818, + 0 + ] + }, + { + "id": "mic-154", + "position": [ + 0.12, + 0.381818, + 0 + ] + }, + { + "id": "mic-155", + "position": [ + 0.2, + 0.381818, + 0 + ] + }, + { + "id": "mic-156", + "position": [ + 0.28, + 0.381818, + 0 + ] + }, + { + "id": "mic-157", + "position": [ + 0.36, + 0.381818, + 0 + ] + }, + { + "id": "mic-158", + "position": [ + 0.44, + 0.381818, + 0 + ] + }, + { + "id": "mic-159", + "position": [ + 0.52, + 0.381818, + 0 + ] + }, + { + "id": "mic-160", + "position": [ + 0.6, + 0.381818, + 0 + ] + }, + { + "id": "mic-161", + "position": [ + -0.6, + 0.490909, + 0 + ] + }, + { + "id": "mic-162", + "position": [ + -0.52, + 0.490909, + 0 + ] + }, + { + "id": "mic-163", + "position": [ + -0.44, + 0.490909, + 0 + ] + }, + { + "id": "mic-164", + "position": [ + -0.36, + 0.490909, + 0 + ] + }, + { + "id": "mic-165", + "position": [ + -0.28, + 0.490909, + 0 + ] + }, + { + "id": "mic-166", + "position": [ + -0.2, + 0.490909, + 0 + ] + }, + { + "id": "mic-167", + "position": [ + -0.12, + 0.490909, + 0 + ] + }, + { + "id": "mic-168", + "position": [ + -0.04, + 0.490909, + 0 + ] + }, + { + "id": "mic-169", + "position": [ + 0.04, + 0.490909, + 0 + ] + }, + { + "id": "mic-170", + "position": [ + 0.12, + 0.490909, + 0 + ] + }, + { + "id": "mic-171", + "position": [ + 0.2, + 0.490909, + 0 + ] + }, + { + "id": "mic-172", + "position": [ + 0.28, + 0.490909, + 0 + ] + }, + { + "id": "mic-173", + "position": [ + 0.36, + 0.490909, + 0 + ] + }, + { + "id": "mic-174", + "position": [ + 0.44, + 0.490909, + 0 + ] + }, + { + "id": "mic-175", + "position": [ + 0.52, + 0.490909, + 0 + ] + }, + { + "id": "mic-176", + "position": [ + 0.6, + 0.490909, + 0 + ] + }, + { + "id": "mic-177", + "position": [ + -0.6, + 0.6, + 0 + ] + }, + { + "id": "mic-178", + "position": [ + -0.52, + 0.6, + 0 + ] + }, + { + "id": "mic-179", + "position": [ + -0.44, + 0.6, + 0 + ] + }, + { + "id": "mic-180", + "position": [ + -0.36, + 0.6, + 0 + ] + }, + { + "id": "mic-181", + "position": [ + -0.28, + 0.6, + 0 + ] + }, + { + "id": "mic-182", + "position": [ + -0.2, + 0.6, + 0 + ] + }, + { + "id": "mic-183", + "position": [ + -0.12, + 0.6, + 0 + ] + }, + { + "id": "mic-184", + "position": [ + -0.04, + 0.6, + 0 + ] + }, + { + "id": "mic-185", + "position": [ + 0.04, + 0.6, + 0 + ] + }, + { + "id": "mic-186", + "position": [ + 0.12, + 0.6, + 0 + ] + }, + { + "id": "mic-187", + "position": [ + 0.2, + 0.6, + 0 + ] + }, + { + "id": "mic-188", + "position": [ + 0.28, + 0.6, + 0 + ] + }, + { + "id": "mic-189", + "position": [ + 0.36, + 0.6, + 0 + ] + }, + { + "id": "mic-190", + "position": [ + 0.44, + 0.6, + 0 + ] + }, + { + "id": "mic-191", + "position": [ + 0.52, + 0.6, + 0 + ] + }, + { + "id": "mic-192", + "position": [ + 0.6, + 0.6, + 0 + ] + } + ] +} diff --git a/assets/array-geometries/rectangular-24x16-450mm.array.json b/assets/array-geometries/rectangular-24x16-450mm.array.json new file mode 100644 index 0000000..7a68653 --- /dev/null +++ b/assets/array-geometries/rectangular-24x16-450mm.array.json @@ -0,0 +1,3092 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-24x16-450mm", + "name": "24x16 dense rectangular", + "description": "384-channel uniform rectangular layout on the 0.45 m reference aperture", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 0.45, + "height": 0.45 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + -0.205435, + -0.225, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + -0.18587, + -0.225, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + -0.166304, + -0.225, + 0 + ] + }, + { + "id": "mic-005", + "position": [ + -0.146739, + -0.225, + 0 + ] + }, + { + "id": "mic-006", + "position": [ + -0.127174, + -0.225, + 0 + ] + }, + { + "id": "mic-007", + "position": [ + -0.107609, + -0.225, + 0 + ] + }, + { + "id": "mic-008", + "position": [ + -0.088043, + -0.225, + 0 + ] + }, + { + "id": "mic-009", + "position": [ + -0.068478, + -0.225, + 0 + ] + }, + { + "id": "mic-010", + "position": [ + -0.048913, + -0.225, + 0 + ] + }, + { + "id": "mic-011", + "position": [ + -0.029348, + -0.225, + 0 + ] + }, + { + "id": "mic-012", + "position": [ + -0.009783, + -0.225, + 0 + ] + }, + { + "id": "mic-013", + "position": [ + 0.009783, + -0.225, + 0 + ] + }, + { + "id": "mic-014", + "position": [ + 0.029348, + -0.225, + 0 + ] + }, + { + "id": "mic-015", + "position": [ + 0.048913, + -0.225, + 0 + ] + }, + { + "id": "mic-016", + "position": [ + 0.068478, + -0.225, + 0 + ] + }, + { + "id": "mic-017", + "position": [ + 0.088043, + -0.225, + 0 + ] + }, + { + "id": "mic-018", + "position": [ + 0.107609, + -0.225, + 0 + ] + }, + { + "id": "mic-019", + "position": [ + 0.127174, + -0.225, + 0 + ] + }, + { + "id": "mic-020", + "position": [ + 0.146739, + -0.225, + 0 + ] + }, + { + "id": "mic-021", + "position": [ + 0.166304, + -0.225, + 0 + ] + }, + { + "id": "mic-022", + "position": [ + 0.18587, + -0.225, + 0 + ] + }, + { + "id": "mic-023", + "position": [ + 0.205435, + -0.225, + 0 + ] + }, + { + "id": "mic-024", + "position": [ + 0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-025", + "position": [ + -0.225, + -0.195, + 0 + ] + }, + { + "id": "mic-026", + "position": [ + -0.205435, + -0.195, + 0 + ] + }, + { + "id": "mic-027", + "position": [ + -0.18587, + -0.195, + 0 + ] + }, + { + "id": "mic-028", + "position": [ + -0.166304, + -0.195, + 0 + ] + }, + { + "id": "mic-029", + "position": [ + -0.146739, + -0.195, + 0 + ] + }, + { + "id": "mic-030", + "position": [ + -0.127174, + -0.195, + 0 + ] + }, + { + "id": "mic-031", + "position": [ + -0.107609, + -0.195, + 0 + ] + }, + { + "id": "mic-032", + "position": [ + -0.088043, + -0.195, + 0 + ] + }, + { + "id": "mic-033", + "position": [ + -0.068478, + -0.195, + 0 + ] + }, + { + "id": "mic-034", + "position": [ + -0.048913, + -0.195, + 0 + ] + }, + { + "id": "mic-035", + "position": [ + -0.029348, + -0.195, + 0 + ] + }, + { + "id": "mic-036", + "position": [ + -0.009783, + -0.195, + 0 + ] + }, + { + "id": "mic-037", + "position": [ + 0.009783, + -0.195, + 0 + ] + }, + { + "id": "mic-038", + "position": [ + 0.029348, + -0.195, + 0 + ] + }, + { + "id": "mic-039", + "position": [ + 0.048913, + -0.195, + 0 + ] + }, + { + "id": "mic-040", + "position": [ + 0.068478, + -0.195, + 0 + ] + }, + { + "id": "mic-041", + "position": [ + 0.088043, + -0.195, + 0 + ] + }, + { + "id": "mic-042", + "position": [ + 0.107609, + -0.195, + 0 + ] + }, + { + "id": "mic-043", + "position": [ + 0.127174, + -0.195, + 0 + ] + }, + { + "id": "mic-044", + "position": [ + 0.146739, + -0.195, + 0 + ] + }, + { + "id": "mic-045", + "position": [ + 0.166304, + -0.195, + 0 + ] + }, + { + "id": "mic-046", + "position": [ + 0.18587, + -0.195, + 0 + ] + }, + { + "id": "mic-047", + "position": [ + 0.205435, + -0.195, + 0 + ] + }, + { + "id": "mic-048", + "position": [ + 0.225, + -0.195, + 0 + ] + }, + { + "id": "mic-049", + "position": [ + -0.225, + -0.165, + 0 + ] + }, + { + "id": "mic-050", + "position": [ + -0.205435, + -0.165, + 0 + ] + }, + { + "id": "mic-051", + "position": [ + -0.18587, + -0.165, + 0 + ] + }, + { + "id": "mic-052", + "position": [ + -0.166304, + -0.165, + 0 + ] + }, + { + "id": "mic-053", + "position": [ + -0.146739, + -0.165, + 0 + ] + }, + { + "id": "mic-054", + "position": [ + -0.127174, + -0.165, + 0 + ] + }, + { + "id": "mic-055", + "position": [ + -0.107609, + -0.165, + 0 + ] + }, + { + "id": "mic-056", + "position": [ + -0.088043, + -0.165, + 0 + ] + }, + { + "id": "mic-057", + "position": [ + -0.068478, + -0.165, + 0 + ] + }, + { + "id": "mic-058", + "position": [ + -0.048913, + -0.165, + 0 + ] + }, + { + "id": "mic-059", + "position": [ + -0.029348, + -0.165, + 0 + ] + }, + { + "id": "mic-060", + "position": [ + -0.009783, + -0.165, + 0 + ] + }, + { + "id": "mic-061", + "position": [ + 0.009783, + -0.165, + 0 + ] + }, + { + "id": "mic-062", + "position": [ + 0.029348, + -0.165, + 0 + ] + }, + { + "id": "mic-063", + "position": [ + 0.048913, + -0.165, + 0 + ] + }, + { + "id": "mic-064", + "position": [ + 0.068478, + -0.165, + 0 + ] + }, + { + "id": "mic-065", + "position": [ + 0.088043, + -0.165, + 0 + ] + }, + { + "id": "mic-066", + "position": [ + 0.107609, + -0.165, + 0 + ] + }, + { + "id": "mic-067", + "position": [ + 0.127174, + -0.165, + 0 + ] + }, + { + "id": "mic-068", + "position": [ + 0.146739, + -0.165, + 0 + ] + }, + { + "id": "mic-069", + "position": [ + 0.166304, + -0.165, + 0 + ] + }, + { + "id": "mic-070", + "position": [ + 0.18587, + -0.165, + 0 + ] + }, + { + "id": "mic-071", + "position": [ + 0.205435, + -0.165, + 0 + ] + }, + { + "id": "mic-072", + "position": [ + 0.225, + -0.165, + 0 + ] + }, + { + "id": "mic-073", + "position": [ + -0.225, + -0.135, + 0 + ] + }, + { + "id": "mic-074", + "position": [ + -0.205435, + -0.135, + 0 + ] + }, + { + "id": "mic-075", + "position": [ + -0.18587, + -0.135, + 0 + ] + }, + { + "id": "mic-076", + "position": [ + -0.166304, + -0.135, + 0 + ] + }, + { + "id": "mic-077", + "position": [ + -0.146739, + -0.135, + 0 + ] + }, + { + "id": "mic-078", + "position": [ + -0.127174, + -0.135, + 0 + ] + }, + { + "id": "mic-079", + "position": [ + -0.107609, + -0.135, + 0 + ] + }, + { + "id": "mic-080", + "position": [ + -0.088043, + -0.135, + 0 + ] + }, + { + "id": "mic-081", + "position": [ + -0.068478, + -0.135, + 0 + ] + }, + { + "id": "mic-082", + "position": [ + -0.048913, + -0.135, + 0 + ] + }, + { + "id": "mic-083", + "position": [ + -0.029348, + -0.135, + 0 + ] + }, + { + "id": "mic-084", + "position": [ + -0.009783, + -0.135, + 0 + ] + }, + { + "id": "mic-085", + "position": [ + 0.009783, + -0.135, + 0 + ] + }, + { + "id": "mic-086", + "position": [ + 0.029348, + -0.135, + 0 + ] + }, + { + "id": "mic-087", + "position": [ + 0.048913, + -0.135, + 0 + ] + }, + { + "id": "mic-088", + "position": [ + 0.068478, + -0.135, + 0 + ] + }, + { + "id": "mic-089", + "position": [ + 0.088043, + -0.135, + 0 + ] + }, + { + "id": "mic-090", + "position": [ + 0.107609, + -0.135, + 0 + ] + }, + { + "id": "mic-091", + "position": [ + 0.127174, + -0.135, + 0 + ] + }, + { + "id": "mic-092", + "position": [ + 0.146739, + -0.135, + 0 + ] + }, + { + "id": "mic-093", + "position": [ + 0.166304, + -0.135, + 0 + ] + }, + { + "id": "mic-094", + "position": [ + 0.18587, + -0.135, + 0 + ] + }, + { + "id": "mic-095", + "position": [ + 0.205435, + -0.135, + 0 + ] + }, + { + "id": "mic-096", + "position": [ + 0.225, + -0.135, + 0 + ] + }, + { + "id": "mic-097", + "position": [ + -0.225, + -0.105, + 0 + ] + }, + { + "id": "mic-098", + "position": [ + -0.205435, + -0.105, + 0 + ] + }, + { + "id": "mic-099", + "position": [ + -0.18587, + -0.105, + 0 + ] + }, + { + "id": "mic-100", + "position": [ + -0.166304, + -0.105, + 0 + ] + }, + { + "id": "mic-101", + "position": [ + -0.146739, + -0.105, + 0 + ] + }, + { + "id": "mic-102", + "position": [ + -0.127174, + -0.105, + 0 + ] + }, + { + "id": "mic-103", + "position": [ + -0.107609, + -0.105, + 0 + ] + }, + { + "id": "mic-104", + "position": [ + -0.088043, + -0.105, + 0 + ] + }, + { + "id": "mic-105", + "position": [ + -0.068478, + -0.105, + 0 + ] + }, + { + "id": "mic-106", + "position": [ + -0.048913, + -0.105, + 0 + ] + }, + { + "id": "mic-107", + "position": [ + -0.029348, + -0.105, + 0 + ] + }, + { + "id": "mic-108", + "position": [ + -0.009783, + -0.105, + 0 + ] + }, + { + "id": "mic-109", + "position": [ + 0.009783, + -0.105, + 0 + ] + }, + { + "id": "mic-110", + "position": [ + 0.029348, + -0.105, + 0 + ] + }, + { + "id": "mic-111", + "position": [ + 0.048913, + -0.105, + 0 + ] + }, + { + "id": "mic-112", + "position": [ + 0.068478, + -0.105, + 0 + ] + }, + { + "id": "mic-113", + "position": [ + 0.088043, + -0.105, + 0 + ] + }, + { + "id": "mic-114", + "position": [ + 0.107609, + -0.105, + 0 + ] + }, + { + "id": "mic-115", + "position": [ + 0.127174, + -0.105, + 0 + ] + }, + { + "id": "mic-116", + "position": [ + 0.146739, + -0.105, + 0 + ] + }, + { + "id": "mic-117", + "position": [ + 0.166304, + -0.105, + 0 + ] + }, + { + "id": "mic-118", + "position": [ + 0.18587, + -0.105, + 0 + ] + }, + { + "id": "mic-119", + "position": [ + 0.205435, + -0.105, + 0 + ] + }, + { + "id": "mic-120", + "position": [ + 0.225, + -0.105, + 0 + ] + }, + { + "id": "mic-121", + "position": [ + -0.225, + -0.075, + 0 + ] + }, + { + "id": "mic-122", + "position": [ + -0.205435, + -0.075, + 0 + ] + }, + { + "id": "mic-123", + "position": [ + -0.18587, + -0.075, + 0 + ] + }, + { + "id": "mic-124", + "position": [ + -0.166304, + -0.075, + 0 + ] + }, + { + "id": "mic-125", + "position": [ + -0.146739, + -0.075, + 0 + ] + }, + { + "id": "mic-126", + "position": [ + -0.127174, + -0.075, + 0 + ] + }, + { + "id": "mic-127", + "position": [ + -0.107609, + -0.075, + 0 + ] + }, + { + "id": "mic-128", + "position": [ + -0.088043, + -0.075, + 0 + ] + }, + { + "id": "mic-129", + "position": [ + -0.068478, + -0.075, + 0 + ] + }, + { + "id": "mic-130", + "position": [ + -0.048913, + -0.075, + 0 + ] + }, + { + "id": "mic-131", + "position": [ + -0.029348, + -0.075, + 0 + ] + }, + { + "id": "mic-132", + "position": [ + -0.009783, + -0.075, + 0 + ] + }, + { + "id": "mic-133", + "position": [ + 0.009783, + -0.075, + 0 + ] + }, + { + "id": "mic-134", + "position": [ + 0.029348, + -0.075, + 0 + ] + }, + { + "id": "mic-135", + "position": [ + 0.048913, + -0.075, + 0 + ] + }, + { + "id": "mic-136", + "position": [ + 0.068478, + -0.075, + 0 + ] + }, + { + "id": "mic-137", + "position": [ + 0.088043, + -0.075, + 0 + ] + }, + { + "id": "mic-138", + "position": [ + 0.107609, + -0.075, + 0 + ] + }, + { + "id": "mic-139", + "position": [ + 0.127174, + -0.075, + 0 + ] + }, + { + "id": "mic-140", + "position": [ + 0.146739, + -0.075, + 0 + ] + }, + { + "id": "mic-141", + "position": [ + 0.166304, + -0.075, + 0 + ] + }, + { + "id": "mic-142", + "position": [ + 0.18587, + -0.075, + 0 + ] + }, + { + "id": "mic-143", + "position": [ + 0.205435, + -0.075, + 0 + ] + }, + { + "id": "mic-144", + "position": [ + 0.225, + -0.075, + 0 + ] + }, + { + "id": "mic-145", + "position": [ + -0.225, + -0.045, + 0 + ] + }, + { + "id": "mic-146", + "position": [ + -0.205435, + -0.045, + 0 + ] + }, + { + "id": "mic-147", + "position": [ + -0.18587, + -0.045, + 0 + ] + }, + { + "id": "mic-148", + "position": [ + -0.166304, + -0.045, + 0 + ] + }, + { + "id": "mic-149", + "position": [ + -0.146739, + -0.045, + 0 + ] + }, + { + "id": "mic-150", + "position": [ + -0.127174, + -0.045, + 0 + ] + }, + { + "id": "mic-151", + "position": [ + -0.107609, + -0.045, + 0 + ] + }, + { + "id": "mic-152", + "position": [ + -0.088043, + -0.045, + 0 + ] + }, + { + "id": "mic-153", + "position": [ + -0.068478, + -0.045, + 0 + ] + }, + { + "id": "mic-154", + "position": [ + -0.048913, + -0.045, + 0 + ] + }, + { + "id": "mic-155", + "position": [ + -0.029348, + -0.045, + 0 + ] + }, + { + "id": "mic-156", + "position": [ + -0.009783, + -0.045, + 0 + ] + }, + { + "id": "mic-157", + "position": [ + 0.009783, + -0.045, + 0 + ] + }, + { + "id": "mic-158", + "position": [ + 0.029348, + -0.045, + 0 + ] + }, + { + "id": "mic-159", + "position": [ + 0.048913, + -0.045, + 0 + ] + }, + { + "id": "mic-160", + "position": [ + 0.068478, + -0.045, + 0 + ] + }, + { + "id": "mic-161", + "position": [ + 0.088043, + -0.045, + 0 + ] + }, + { + "id": "mic-162", + "position": [ + 0.107609, + -0.045, + 0 + ] + }, + { + "id": "mic-163", + "position": [ + 0.127174, + -0.045, + 0 + ] + }, + { + "id": "mic-164", + "position": [ + 0.146739, + -0.045, + 0 + ] + }, + { + "id": "mic-165", + "position": [ + 0.166304, + -0.045, + 0 + ] + }, + { + "id": "mic-166", + "position": [ + 0.18587, + -0.045, + 0 + ] + }, + { + "id": "mic-167", + "position": [ + 0.205435, + -0.045, + 0 + ] + }, + { + "id": "mic-168", + "position": [ + 0.225, + -0.045, + 0 + ] + }, + { + "id": "mic-169", + "position": [ + -0.225, + -0.015, + 0 + ] + }, + { + "id": "mic-170", + "position": [ + -0.205435, + -0.015, + 0 + ] + }, + { + "id": "mic-171", + "position": [ + -0.18587, + -0.015, + 0 + ] + }, + { + "id": "mic-172", + "position": [ + -0.166304, + -0.015, + 0 + ] + }, + { + "id": "mic-173", + "position": [ + -0.146739, + -0.015, + 0 + ] + }, + { + "id": "mic-174", + "position": [ + -0.127174, + -0.015, + 0 + ] + }, + { + "id": "mic-175", + "position": [ + -0.107609, + -0.015, + 0 + ] + }, + { + "id": "mic-176", + "position": [ + -0.088043, + -0.015, + 0 + ] + }, + { + "id": "mic-177", + "position": [ + -0.068478, + -0.015, + 0 + ] + }, + { + "id": "mic-178", + "position": [ + -0.048913, + -0.015, + 0 + ] + }, + { + "id": "mic-179", + "position": [ + -0.029348, + -0.015, + 0 + ] + }, + { + "id": "mic-180", + "position": [ + -0.009783, + -0.015, + 0 + ] + }, + { + "id": "mic-181", + "position": [ + 0.009783, + -0.015, + 0 + ] + }, + { + "id": "mic-182", + "position": [ + 0.029348, + -0.015, + 0 + ] + }, + { + "id": "mic-183", + "position": [ + 0.048913, + -0.015, + 0 + ] + }, + { + "id": "mic-184", + "position": [ + 0.068478, + -0.015, + 0 + ] + }, + { + "id": "mic-185", + "position": [ + 0.088043, + -0.015, + 0 + ] + }, + { + "id": "mic-186", + "position": [ + 0.107609, + -0.015, + 0 + ] + }, + { + "id": "mic-187", + "position": [ + 0.127174, + -0.015, + 0 + ] + }, + { + "id": "mic-188", + "position": [ + 0.146739, + -0.015, + 0 + ] + }, + { + "id": "mic-189", + "position": [ + 0.166304, + -0.015, + 0 + ] + }, + { + "id": "mic-190", + "position": [ + 0.18587, + -0.015, + 0 + ] + }, + { + "id": "mic-191", + "position": [ + 0.205435, + -0.015, + 0 + ] + }, + { + "id": "mic-192", + "position": [ + 0.225, + -0.015, + 0 + ] + }, + { + "id": "mic-193", + "position": [ + -0.225, + 0.015, + 0 + ] + }, + { + "id": "mic-194", + "position": [ + -0.205435, + 0.015, + 0 + ] + }, + { + "id": "mic-195", + "position": [ + -0.18587, + 0.015, + 0 + ] + }, + { + "id": "mic-196", + "position": [ + -0.166304, + 0.015, + 0 + ] + }, + { + "id": "mic-197", + "position": [ + -0.146739, + 0.015, + 0 + ] + }, + { + "id": "mic-198", + "position": [ + -0.127174, + 0.015, + 0 + ] + }, + { + "id": "mic-199", + "position": [ + -0.107609, + 0.015, + 0 + ] + }, + { + "id": "mic-200", + "position": [ + -0.088043, + 0.015, + 0 + ] + }, + { + "id": "mic-201", + "position": [ + -0.068478, + 0.015, + 0 + ] + }, + { + "id": "mic-202", + "position": [ + -0.048913, + 0.015, + 0 + ] + }, + { + "id": "mic-203", + "position": [ + -0.029348, + 0.015, + 0 + ] + }, + { + "id": "mic-204", + "position": [ + -0.009783, + 0.015, + 0 + ] + }, + { + "id": "mic-205", + "position": [ + 0.009783, + 0.015, + 0 + ] + }, + { + "id": "mic-206", + "position": [ + 0.029348, + 0.015, + 0 + ] + }, + { + "id": "mic-207", + "position": [ + 0.048913, + 0.015, + 0 + ] + }, + { + "id": "mic-208", + "position": [ + 0.068478, + 0.015, + 0 + ] + }, + { + "id": "mic-209", + "position": [ + 0.088043, + 0.015, + 0 + ] + }, + { + "id": "mic-210", + "position": [ + 0.107609, + 0.015, + 0 + ] + }, + { + "id": "mic-211", + "position": [ + 0.127174, + 0.015, + 0 + ] + }, + { + "id": "mic-212", + "position": [ + 0.146739, + 0.015, + 0 + ] + }, + { + "id": "mic-213", + "position": [ + 0.166304, + 0.015, + 0 + ] + }, + { + "id": "mic-214", + "position": [ + 0.18587, + 0.015, + 0 + ] + }, + { + "id": "mic-215", + "position": [ + 0.205435, + 0.015, + 0 + ] + }, + { + "id": "mic-216", + "position": [ + 0.225, + 0.015, + 0 + ] + }, + { + "id": "mic-217", + "position": [ + -0.225, + 0.045, + 0 + ] + }, + { + "id": "mic-218", + "position": [ + -0.205435, + 0.045, + 0 + ] + }, + { + "id": "mic-219", + "position": [ + -0.18587, + 0.045, + 0 + ] + }, + { + "id": "mic-220", + "position": [ + -0.166304, + 0.045, + 0 + ] + }, + { + "id": "mic-221", + "position": [ + -0.146739, + 0.045, + 0 + ] + }, + { + "id": "mic-222", + "position": [ + -0.127174, + 0.045, + 0 + ] + }, + { + "id": "mic-223", + "position": [ + -0.107609, + 0.045, + 0 + ] + }, + { + "id": "mic-224", + "position": [ + -0.088043, + 0.045, + 0 + ] + }, + { + "id": "mic-225", + "position": [ + -0.068478, + 0.045, + 0 + ] + }, + { + "id": "mic-226", + "position": [ + -0.048913, + 0.045, + 0 + ] + }, + { + "id": "mic-227", + "position": [ + -0.029348, + 0.045, + 0 + ] + }, + { + "id": "mic-228", + "position": [ + -0.009783, + 0.045, + 0 + ] + }, + { + "id": "mic-229", + "position": [ + 0.009783, + 0.045, + 0 + ] + }, + { + "id": "mic-230", + "position": [ + 0.029348, + 0.045, + 0 + ] + }, + { + "id": "mic-231", + "position": [ + 0.048913, + 0.045, + 0 + ] + }, + { + "id": "mic-232", + "position": [ + 0.068478, + 0.045, + 0 + ] + }, + { + "id": "mic-233", + "position": [ + 0.088043, + 0.045, + 0 + ] + }, + { + "id": "mic-234", + "position": [ + 0.107609, + 0.045, + 0 + ] + }, + { + "id": "mic-235", + "position": [ + 0.127174, + 0.045, + 0 + ] + }, + { + "id": "mic-236", + "position": [ + 0.146739, + 0.045, + 0 + ] + }, + { + "id": "mic-237", + "position": [ + 0.166304, + 0.045, + 0 + ] + }, + { + "id": "mic-238", + "position": [ + 0.18587, + 0.045, + 0 + ] + }, + { + "id": "mic-239", + "position": [ + 0.205435, + 0.045, + 0 + ] + }, + { + "id": "mic-240", + "position": [ + 0.225, + 0.045, + 0 + ] + }, + { + "id": "mic-241", + "position": [ + -0.225, + 0.075, + 0 + ] + }, + { + "id": "mic-242", + "position": [ + -0.205435, + 0.075, + 0 + ] + }, + { + "id": "mic-243", + "position": [ + -0.18587, + 0.075, + 0 + ] + }, + { + "id": "mic-244", + "position": [ + -0.166304, + 0.075, + 0 + ] + }, + { + "id": "mic-245", + "position": [ + -0.146739, + 0.075, + 0 + ] + }, + { + "id": "mic-246", + "position": [ + -0.127174, + 0.075, + 0 + ] + }, + { + "id": "mic-247", + "position": [ + -0.107609, + 0.075, + 0 + ] + }, + { + "id": "mic-248", + "position": [ + -0.088043, + 0.075, + 0 + ] + }, + { + "id": "mic-249", + "position": [ + -0.068478, + 0.075, + 0 + ] + }, + { + "id": "mic-250", + "position": [ + -0.048913, + 0.075, + 0 + ] + }, + { + "id": "mic-251", + "position": [ + -0.029348, + 0.075, + 0 + ] + }, + { + "id": "mic-252", + "position": [ + -0.009783, + 0.075, + 0 + ] + }, + { + "id": "mic-253", + "position": [ + 0.009783, + 0.075, + 0 + ] + }, + { + "id": "mic-254", + "position": [ + 0.029348, + 0.075, + 0 + ] + }, + { + "id": "mic-255", + "position": [ + 0.048913, + 0.075, + 0 + ] + }, + { + "id": "mic-256", + "position": [ + 0.068478, + 0.075, + 0 + ] + }, + { + "id": "mic-257", + "position": [ + 0.088043, + 0.075, + 0 + ] + }, + { + "id": "mic-258", + "position": [ + 0.107609, + 0.075, + 0 + ] + }, + { + "id": "mic-259", + "position": [ + 0.127174, + 0.075, + 0 + ] + }, + { + "id": "mic-260", + "position": [ + 0.146739, + 0.075, + 0 + ] + }, + { + "id": "mic-261", + "position": [ + 0.166304, + 0.075, + 0 + ] + }, + { + "id": "mic-262", + "position": [ + 0.18587, + 0.075, + 0 + ] + }, + { + "id": "mic-263", + "position": [ + 0.205435, + 0.075, + 0 + ] + }, + { + "id": "mic-264", + "position": [ + 0.225, + 0.075, + 0 + ] + }, + { + "id": "mic-265", + "position": [ + -0.225, + 0.105, + 0 + ] + }, + { + "id": "mic-266", + "position": [ + -0.205435, + 0.105, + 0 + ] + }, + { + "id": "mic-267", + "position": [ + -0.18587, + 0.105, + 0 + ] + }, + { + "id": "mic-268", + "position": [ + -0.166304, + 0.105, + 0 + ] + }, + { + "id": "mic-269", + "position": [ + -0.146739, + 0.105, + 0 + ] + }, + { + "id": "mic-270", + "position": [ + -0.127174, + 0.105, + 0 + ] + }, + { + "id": "mic-271", + "position": [ + -0.107609, + 0.105, + 0 + ] + }, + { + "id": "mic-272", + "position": [ + -0.088043, + 0.105, + 0 + ] + }, + { + "id": "mic-273", + "position": [ + -0.068478, + 0.105, + 0 + ] + }, + { + "id": "mic-274", + "position": [ + -0.048913, + 0.105, + 0 + ] + }, + { + "id": "mic-275", + "position": [ + -0.029348, + 0.105, + 0 + ] + }, + { + "id": "mic-276", + "position": [ + -0.009783, + 0.105, + 0 + ] + }, + { + "id": "mic-277", + "position": [ + 0.009783, + 0.105, + 0 + ] + }, + { + "id": "mic-278", + "position": [ + 0.029348, + 0.105, + 0 + ] + }, + { + "id": "mic-279", + "position": [ + 0.048913, + 0.105, + 0 + ] + }, + { + "id": "mic-280", + "position": [ + 0.068478, + 0.105, + 0 + ] + }, + { + "id": "mic-281", + "position": [ + 0.088043, + 0.105, + 0 + ] + }, + { + "id": "mic-282", + "position": [ + 0.107609, + 0.105, + 0 + ] + }, + { + "id": "mic-283", + "position": [ + 0.127174, + 0.105, + 0 + ] + }, + { + "id": "mic-284", + "position": [ + 0.146739, + 0.105, + 0 + ] + }, + { + "id": "mic-285", + "position": [ + 0.166304, + 0.105, + 0 + ] + }, + { + "id": "mic-286", + "position": [ + 0.18587, + 0.105, + 0 + ] + }, + { + "id": "mic-287", + "position": [ + 0.205435, + 0.105, + 0 + ] + }, + { + "id": "mic-288", + "position": [ + 0.225, + 0.105, + 0 + ] + }, + { + "id": "mic-289", + "position": [ + -0.225, + 0.135, + 0 + ] + }, + { + "id": "mic-290", + "position": [ + -0.205435, + 0.135, + 0 + ] + }, + { + "id": "mic-291", + "position": [ + -0.18587, + 0.135, + 0 + ] + }, + { + "id": "mic-292", + "position": [ + -0.166304, + 0.135, + 0 + ] + }, + { + "id": "mic-293", + "position": [ + -0.146739, + 0.135, + 0 + ] + }, + { + "id": "mic-294", + "position": [ + -0.127174, + 0.135, + 0 + ] + }, + { + "id": "mic-295", + "position": [ + -0.107609, + 0.135, + 0 + ] + }, + { + "id": "mic-296", + "position": [ + -0.088043, + 0.135, + 0 + ] + }, + { + "id": "mic-297", + "position": [ + -0.068478, + 0.135, + 0 + ] + }, + { + "id": "mic-298", + "position": [ + -0.048913, + 0.135, + 0 + ] + }, + { + "id": "mic-299", + "position": [ + -0.029348, + 0.135, + 0 + ] + }, + { + "id": "mic-300", + "position": [ + -0.009783, + 0.135, + 0 + ] + }, + { + "id": "mic-301", + "position": [ + 0.009783, + 0.135, + 0 + ] + }, + { + "id": "mic-302", + "position": [ + 0.029348, + 0.135, + 0 + ] + }, + { + "id": "mic-303", + "position": [ + 0.048913, + 0.135, + 0 + ] + }, + { + "id": "mic-304", + "position": [ + 0.068478, + 0.135, + 0 + ] + }, + { + "id": "mic-305", + "position": [ + 0.088043, + 0.135, + 0 + ] + }, + { + "id": "mic-306", + "position": [ + 0.107609, + 0.135, + 0 + ] + }, + { + "id": "mic-307", + "position": [ + 0.127174, + 0.135, + 0 + ] + }, + { + "id": "mic-308", + "position": [ + 0.146739, + 0.135, + 0 + ] + }, + { + "id": "mic-309", + "position": [ + 0.166304, + 0.135, + 0 + ] + }, + { + "id": "mic-310", + "position": [ + 0.18587, + 0.135, + 0 + ] + }, + { + "id": "mic-311", + "position": [ + 0.205435, + 0.135, + 0 + ] + }, + { + "id": "mic-312", + "position": [ + 0.225, + 0.135, + 0 + ] + }, + { + "id": "mic-313", + "position": [ + -0.225, + 0.165, + 0 + ] + }, + { + "id": "mic-314", + "position": [ + -0.205435, + 0.165, + 0 + ] + }, + { + "id": "mic-315", + "position": [ + -0.18587, + 0.165, + 0 + ] + }, + { + "id": "mic-316", + "position": [ + -0.166304, + 0.165, + 0 + ] + }, + { + "id": "mic-317", + "position": [ + -0.146739, + 0.165, + 0 + ] + }, + { + "id": "mic-318", + "position": [ + -0.127174, + 0.165, + 0 + ] + }, + { + "id": "mic-319", + "position": [ + -0.107609, + 0.165, + 0 + ] + }, + { + "id": "mic-320", + "position": [ + -0.088043, + 0.165, + 0 + ] + }, + { + "id": "mic-321", + "position": [ + -0.068478, + 0.165, + 0 + ] + }, + { + "id": "mic-322", + "position": [ + -0.048913, + 0.165, + 0 + ] + }, + { + "id": "mic-323", + "position": [ + -0.029348, + 0.165, + 0 + ] + }, + { + "id": "mic-324", + "position": [ + -0.009783, + 0.165, + 0 + ] + }, + { + "id": "mic-325", + "position": [ + 0.009783, + 0.165, + 0 + ] + }, + { + "id": "mic-326", + "position": [ + 0.029348, + 0.165, + 0 + ] + }, + { + "id": "mic-327", + "position": [ + 0.048913, + 0.165, + 0 + ] + }, + { + "id": "mic-328", + "position": [ + 0.068478, + 0.165, + 0 + ] + }, + { + "id": "mic-329", + "position": [ + 0.088043, + 0.165, + 0 + ] + }, + { + "id": "mic-330", + "position": [ + 0.107609, + 0.165, + 0 + ] + }, + { + "id": "mic-331", + "position": [ + 0.127174, + 0.165, + 0 + ] + }, + { + "id": "mic-332", + "position": [ + 0.146739, + 0.165, + 0 + ] + }, + { + "id": "mic-333", + "position": [ + 0.166304, + 0.165, + 0 + ] + }, + { + "id": "mic-334", + "position": [ + 0.18587, + 0.165, + 0 + ] + }, + { + "id": "mic-335", + "position": [ + 0.205435, + 0.165, + 0 + ] + }, + { + "id": "mic-336", + "position": [ + 0.225, + 0.165, + 0 + ] + }, + { + "id": "mic-337", + "position": [ + -0.225, + 0.195, + 0 + ] + }, + { + "id": "mic-338", + "position": [ + -0.205435, + 0.195, + 0 + ] + }, + { + "id": "mic-339", + "position": [ + -0.18587, + 0.195, + 0 + ] + }, + { + "id": "mic-340", + "position": [ + -0.166304, + 0.195, + 0 + ] + }, + { + "id": "mic-341", + "position": [ + -0.146739, + 0.195, + 0 + ] + }, + { + "id": "mic-342", + "position": [ + -0.127174, + 0.195, + 0 + ] + }, + { + "id": "mic-343", + "position": [ + -0.107609, + 0.195, + 0 + ] + }, + { + "id": "mic-344", + "position": [ + -0.088043, + 0.195, + 0 + ] + }, + { + "id": "mic-345", + "position": [ + -0.068478, + 0.195, + 0 + ] + }, + { + "id": "mic-346", + "position": [ + -0.048913, + 0.195, + 0 + ] + }, + { + "id": "mic-347", + "position": [ + -0.029348, + 0.195, + 0 + ] + }, + { + "id": "mic-348", + "position": [ + -0.009783, + 0.195, + 0 + ] + }, + { + "id": "mic-349", + "position": [ + 0.009783, + 0.195, + 0 + ] + }, + { + "id": "mic-350", + "position": [ + 0.029348, + 0.195, + 0 + ] + }, + { + "id": "mic-351", + "position": [ + 0.048913, + 0.195, + 0 + ] + }, + { + "id": "mic-352", + "position": [ + 0.068478, + 0.195, + 0 + ] + }, + { + "id": "mic-353", + "position": [ + 0.088043, + 0.195, + 0 + ] + }, + { + "id": "mic-354", + "position": [ + 0.107609, + 0.195, + 0 + ] + }, + { + "id": "mic-355", + "position": [ + 0.127174, + 0.195, + 0 + ] + }, + { + "id": "mic-356", + "position": [ + 0.146739, + 0.195, + 0 + ] + }, + { + "id": "mic-357", + "position": [ + 0.166304, + 0.195, + 0 + ] + }, + { + "id": "mic-358", + "position": [ + 0.18587, + 0.195, + 0 + ] + }, + { + "id": "mic-359", + "position": [ + 0.205435, + 0.195, + 0 + ] + }, + { + "id": "mic-360", + "position": [ + 0.225, + 0.195, + 0 + ] + }, + { + "id": "mic-361", + "position": [ + -0.225, + 0.225, + 0 + ] + }, + { + "id": "mic-362", + "position": [ + -0.205435, + 0.225, + 0 + ] + }, + { + "id": "mic-363", + "position": [ + -0.18587, + 0.225, + 0 + ] + }, + { + "id": "mic-364", + "position": [ + -0.166304, + 0.225, + 0 + ] + }, + { + "id": "mic-365", + "position": [ + -0.146739, + 0.225, + 0 + ] + }, + { + "id": "mic-366", + "position": [ + -0.127174, + 0.225, + 0 + ] + }, + { + "id": "mic-367", + "position": [ + -0.107609, + 0.225, + 0 + ] + }, + { + "id": "mic-368", + "position": [ + -0.088043, + 0.225, + 0 + ] + }, + { + "id": "mic-369", + "position": [ + -0.068478, + 0.225, + 0 + ] + }, + { + "id": "mic-370", + "position": [ + -0.048913, + 0.225, + 0 + ] + }, + { + "id": "mic-371", + "position": [ + -0.029348, + 0.225, + 0 + ] + }, + { + "id": "mic-372", + "position": [ + -0.009783, + 0.225, + 0 + ] + }, + { + "id": "mic-373", + "position": [ + 0.009783, + 0.225, + 0 + ] + }, + { + "id": "mic-374", + "position": [ + 0.029348, + 0.225, + 0 + ] + }, + { + "id": "mic-375", + "position": [ + 0.048913, + 0.225, + 0 + ] + }, + { + "id": "mic-376", + "position": [ + 0.068478, + 0.225, + 0 + ] + }, + { + "id": "mic-377", + "position": [ + 0.088043, + 0.225, + 0 + ] + }, + { + "id": "mic-378", + "position": [ + 0.107609, + 0.225, + 0 + ] + }, + { + "id": "mic-379", + "position": [ + 0.127174, + 0.225, + 0 + ] + }, + { + "id": "mic-380", + "position": [ + 0.146739, + 0.225, + 0 + ] + }, + { + "id": "mic-381", + "position": [ + 0.166304, + 0.225, + 0 + ] + }, + { + "id": "mic-382", + "position": [ + 0.18587, + 0.225, + 0 + ] + }, + { + "id": "mic-383", + "position": [ + 0.205435, + 0.225, + 0 + ] + }, + { + "id": "mic-384", + "position": [ + 0.225, + 0.225, + 0 + ] + } + ] +} diff --git a/assets/array-geometries/rectangular-2x2-450mm.array.json b/assets/array-geometries/rectangular-2x2-450mm.array.json new file mode 100644 index 0000000..fc65274 --- /dev/null +++ b/assets/array-geometries/rectangular-2x2-450mm.array.json @@ -0,0 +1,52 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-2x2-450mm", + "name": "2x2 sparse rectangular", + "description": "4-channel uniform rectangular layout on the 0.45 m reference aperture", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 0.45, + "height": 0.45 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + 0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + -0.225, + 0.225, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + 0.225, + 0.225, + 0 + ] + } + ] +} diff --git a/assets/array-geometries/rectangular-4x3-450mm.array.json b/assets/array-geometries/rectangular-4x3-450mm.array.json new file mode 100644 index 0000000..87db3ff --- /dev/null +++ b/assets/array-geometries/rectangular-4x3-450mm.array.json @@ -0,0 +1,116 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-4x3-450mm", + "name": "4x3 sparse rectangular", + "description": "12-channel uniform rectangular layout on the 0.45 m reference aperture", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 0.45, + "height": 0.45 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + -0.075, + -0.225, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + 0.075, + -0.225, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + 0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-005", + "position": [ + -0.225, + 0, + 0 + ] + }, + { + "id": "mic-006", + "position": [ + -0.075, + 0, + 0 + ] + }, + { + "id": "mic-007", + "position": [ + 0.075, + 0, + 0 + ] + }, + { + "id": "mic-008", + "position": [ + 0.225, + 0, + 0 + ] + }, + { + "id": "mic-009", + "position": [ + -0.225, + 0.225, + 0 + ] + }, + { + "id": "mic-010", + "position": [ + -0.075, + 0.225, + 0 + ] + }, + { + "id": "mic-011", + "position": [ + 0.075, + 0.225, + 0 + ] + }, + { + "id": "mic-012", + "position": [ + 0.225, + 0.225, + 0 + ] + } + ] +} diff --git a/assets/array-geometries/rectangular-8x6-450mm.array.json b/assets/array-geometries/rectangular-8x6-450mm.array.json new file mode 100644 index 0000000..ea205fb --- /dev/null +++ b/assets/array-geometries/rectangular-8x6-450mm.array.json @@ -0,0 +1,404 @@ +{ + "schemaVersion": "1.0.0", + "kind": "micarrsim.array", + "id": "rectangular-8x6-450mm", + "name": "8x6 rectangular", + "description": "48-channel uniform rectangular layout on the 0.45 m reference aperture", + "units": "m", + "coordinateSystem": { + "handedness": "right", + "xAxis": "right", + "yAxis": "up", + "zAxis": "toward-scene" + }, + "aperture": { + "width": 0.45, + "height": 0.45 + }, + "microphones": [ + { + "id": "mic-001", + "position": [ + -0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-002", + "position": [ + -0.160714, + -0.225, + 0 + ] + }, + { + "id": "mic-003", + "position": [ + -0.096429, + -0.225, + 0 + ] + }, + { + "id": "mic-004", + "position": [ + -0.032143, + -0.225, + 0 + ] + }, + { + "id": "mic-005", + "position": [ + 0.032143, + -0.225, + 0 + ] + }, + { + "id": "mic-006", + "position": [ + 0.096429, + -0.225, + 0 + ] + }, + { + "id": "mic-007", + "position": [ + 0.160714, + -0.225, + 0 + ] + }, + { + "id": "mic-008", + "position": [ + 0.225, + -0.225, + 0 + ] + }, + { + "id": "mic-009", + "position": [ + -0.225, + -0.135, + 0 + ] + }, + { + "id": "mic-010", + "position": [ + -0.160714, + -0.135, + 0 + ] + }, + { + "id": "mic-011", + "position": [ + -0.096429, + -0.135, + 0 + ] + }, + { + "id": "mic-012", + "position": [ + -0.032143, + -0.135, + 0 + ] + }, + { + "id": "mic-013", + "position": [ + 0.032143, + -0.135, + 0 + ] + }, + { + "id": "mic-014", + "position": [ + 0.096429, + -0.135, + 0 + ] + }, + { + "id": "mic-015", + "position": [ + 0.160714, + -0.135, + 0 + ] + }, + { + "id": "mic-016", + "position": [ + 0.225, + -0.135, + 0 + ] + }, + { + "id": "mic-017", + "position": [ + -0.225, + -0.045, + 0 + ] + }, + { + "id": "mic-018", + "position": [ + -0.160714, + -0.045, + 0 + ] + }, + { + "id": "mic-019", + "position": [ + -0.096429, + -0.045, + 0 + ] + }, + { + "id": "mic-020", + "position": [ + -0.032143, + -0.045, + 0 + ] + }, + { + "id": "mic-021", + "position": [ + 0.032143, + -0.045, + 0 + ] + }, + { + "id": "mic-022", + "position": [ + 0.096429, + -0.045, + 0 + ] + }, + { + "id": "mic-023", + "position": [ + 0.160714, + -0.045, + 0 + ] + }, + { + "id": "mic-024", + "position": [ + 0.225, + -0.045, + 0 + ] + }, + { + "id": "mic-025", + "position": [ + -0.225, + 0.045, + 0 + ] + }, + { + "id": "mic-026", + "position": [ + -0.160714, + 0.045, + 0 + ] + }, + { + "id": "mic-027", + "position": [ + -0.096429, + 0.045, + 0 + ] + }, + { + "id": "mic-028", + "position": [ + -0.032143, + 0.045, + 0 + ] + }, + { + "id": "mic-029", + "position": [ + 0.032143, + 0.045, + 0 + ] + }, + { + "id": "mic-030", + "position": [ + 0.096429, + 0.045, + 0 + ] + }, + { + "id": "mic-031", + "position": [ + 0.160714, + 0.045, + 0 + ] + }, + { + "id": "mic-032", + "position": [ + 0.225, + 0.045, + 0 + ] + }, + { + "id": "mic-033", + "position": [ + -0.225, + 0.135, + 0 + ] + }, + { + "id": "mic-034", + "position": [ + -0.160714, + 0.135, + 0 + ] + }, + { + "id": "mic-035", + "position": [ + -0.096429, + 0.135, + 0 + ] + }, + { + "id": "mic-036", + "position": [ + -0.032143, + 0.135, + 0 + ] + }, + { + "id": "mic-037", + "position": [ + 0.032143, + 0.135, + 0 + ] + }, + { + "id": "mic-038", + "position": [ + 0.096429, + 0.135, + 0 + ] + }, + { + "id": "mic-039", + "position": [ + 0.160714, + 0.135, + 0 + ] + }, + { + "id": "mic-040", + "position": [ + 0.225, + 0.135, + 0 + ] + }, + { + "id": "mic-041", + "position": [ + -0.225, + 0.225, + 0 + ] + }, + { + "id": "mic-042", + "position": [ + -0.160714, + 0.225, + 0 + ] + }, + { + "id": "mic-043", + "position": [ + -0.096429, + 0.225, + 0 + ] + }, + { + "id": "mic-044", + "position": [ + -0.032143, + 0.225, + 0 + ] + }, + { + "id": "mic-045", + "position": [ + 0.032143, + 0.225, + 0 + ] + }, + { + "id": "mic-046", + "position": [ + 0.096429, + 0.225, + 0 + ] + }, + { + "id": "mic-047", + "position": [ + 0.160714, + 0.225, + 0 + ] + }, + { + "id": "mic-048", + "position": [ + 0.225, + 0.225, + 0 + ] + } + ] +} diff --git a/scripts/generate-array-fixture.ps1 b/scripts/generate-array-fixture.ps1 index 47a0740..c4bd371 100644 --- a/scripts/generate-array-fixture.ps1 +++ b/scripts/generate-array-fixture.ps1 @@ -1,46 +1,132 @@ $ErrorActionPreference = 'Stop' $projectRoot = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..')) -$outputPath = Join-Path $projectRoot 'assets/array-geometries/rectangular-16x12.array.json' -$microphones = [System.Collections.Generic.List[object]]::new() -$columns = 16 -$rows = 12 -$width = 0.45 -$height = 0.45 +$utf8WithoutBom = [System.Text.UTF8Encoding]::new($false) -for ($row = 0; $row -lt $rows; $row++) { - for ($column = 0; $column -lt $columns; $column++) { - $index = $row * $columns + $column - $x = -$width / 2 + $column * $width / ($columns - 1) - $y = -$height / 2 + $row * $height / ($rows - 1) - $microphones.Add([ordered]@{ - id = 'mic-{0:D3}' -f ($index + 1) - position = @([Math]::Round($x, 6), [Math]::Round($y, 6), 0) - }) - } -} - -$arrayDefinition = [ordered]@{ - schemaVersion = '1.0.0' - kind = 'micarrsim.array' - id = 'rectangular-16x12' - name = '16x12 rectangular baseline' - description = '192-channel uniform rectangular layout on a 0.45 m square aperture' - units = 'm' - coordinateSystem = [ordered]@{ +function New-CoordinateSystem { + return [ordered]@{ handedness = 'right' xAxis = 'right' yAxis = 'up' zAxis = 'toward-scene' } - aperture = [ordered]@{ width = $width; height = $height } - microphones = $microphones } -$json = $arrayDefinition | ConvertTo-Json -Depth 8 -[System.IO.File]::WriteAllText($outputPath, $json + [Environment]::NewLine, [System.Text.UTF8Encoding]::new($false)) -Write-Host "Generated $($microphones.Count) microphones: $outputPath" +function New-RectangularArray { + param( + [Parameter(Mandatory = $true)][string]$Id, + [Parameter(Mandatory = $true)][string]$Name, + [Parameter(Mandatory = $true)][string]$Description, + [Parameter(Mandatory = $true)][int]$Columns, + [Parameter(Mandatory = $true)][int]$Rows, + [Parameter(Mandatory = $true)][double]$Width, + [Parameter(Mandatory = $true)][double]$Height + ) + + $microphones = [System.Collections.Generic.List[object]]::new() + for ($row = 0; $row -lt $Rows; $row++) { + for ($column = 0; $column -lt $Columns; $column++) { + $index = $row * $Columns + $column + $x = if ($Columns -eq 1) { 0 } else { -$Width / 2 + $column * $Width / ($Columns - 1) } + $y = if ($Rows -eq 1) { 0 } else { -$Height / 2 + $row * $Height / ($Rows - 1) } + $microphones.Add([ordered]@{ + id = 'mic-{0:D3}' -f ($index + 1) + position = @([Math]::Round($x, 6), [Math]::Round($y, 6), 0) + }) + } + } + + return [ordered]@{ + schemaVersion = '1.0.0' + kind = 'micarrsim.array' + id = $Id + name = $Name + description = $Description + units = 'm' + coordinateSystem = New-CoordinateSystem + aperture = [ordered]@{ width = $Width; height = $Height } + microphones = $microphones + } +} + +function Write-ArrayFixture { + param([Parameter(Mandatory = $true)]$Definition) + + $outputPath = Join-Path $projectRoot "assets/array-geometries/$($Definition.id).array.json" + $json = $Definition | ConvertTo-Json -Depth 8 + [System.IO.File]::WriteAllText($outputPath, $json + [Environment]::NewLine, $utf8WithoutBom) + Write-Host "Generated $($Definition.microphones.Count) microphones: $outputPath" +} + +$rectangularFixtures = @( + @{ + Id = 'rectangular-2x2-450mm' + Name = '2x2 sparse rectangular' + Description = '4-channel uniform rectangular layout on the 0.45 m reference aperture' + Columns = 2 + Rows = 2 + Width = 0.45 + Height = 0.45 + }, + @{ + Id = 'rectangular-4x3-450mm' + Name = '4x3 sparse rectangular' + Description = '12-channel uniform rectangular layout on the 0.45 m reference aperture' + Columns = 4 + Rows = 3 + Width = 0.45 + Height = 0.45 + }, + @{ + Id = 'rectangular-8x6-450mm' + Name = '8x6 rectangular' + Description = '48-channel uniform rectangular layout on the 0.45 m reference aperture' + Columns = 8 + Rows = 6 + Width = 0.45 + Height = 0.45 + }, + @{ + Id = 'rectangular-16x12' + Name = '16x12 rectangular baseline' + Description = '192-channel uniform rectangular layout on a 0.45 m square aperture' + Columns = 16 + Rows = 12 + Width = 0.45 + Height = 0.45 + }, + @{ + Id = 'rectangular-24x16-450mm' + Name = '24x16 dense rectangular' + Description = '384-channel uniform rectangular layout on the 0.45 m reference aperture' + Columns = 24 + Rows = 16 + Width = 0.45 + Height = 0.45 + }, + @{ + Id = 'rectangular-16x12-compact' + Name = '16x12 compact rectangular' + Description = '192-channel uniform rectangular layout on a 0.12 m square aperture' + Columns = 16 + Rows = 12 + Width = 0.12 + Height = 0.12 + }, + @{ + Id = 'rectangular-16x12-large' + Name = '16x12 large rectangular' + Description = '192-channel uniform rectangular layout on a 1.20 m square aperture for spatial-aliasing comparison' + Columns = 16 + Rows = 12 + Width = 1.2 + Height = 1.2 + } +) + +foreach ($fixture in $rectangularFixtures) { + Write-ArrayFixture (New-RectangularArray @fixture) +} -$spiralOutputPath = Join-Path $projectRoot 'assets/array-geometries/fermat-spiral-192.array.json' $spiralMicrophones = [System.Collections.Generic.List[object]]::new() $microphoneCount = 192 $radius = 0.225 @@ -64,20 +150,9 @@ $spiralDefinition = [ordered]@{ name = '192-channel Fermat spiral' description = 'Equal-area Fermat spiral on a 0.45 m circular aperture for comparison with the rectangular baseline' units = 'm' - coordinateSystem = [ordered]@{ - handedness = 'right' - xAxis = 'right' - yAxis = 'up' - zAxis = 'toward-scene' - } + coordinateSystem = New-CoordinateSystem aperture = [ordered]@{ width = 0.45; height = 0.45 } microphones = $spiralMicrophones } -$spiralJson = $spiralDefinition | ConvertTo-Json -Depth 8 -[System.IO.File]::WriteAllText( - $spiralOutputPath, - $spiralJson + [Environment]::NewLine, - [System.Text.UTF8Encoding]::new($false) -) -Write-Host "Generated $($spiralMicrophones.Count) microphones: $spiralOutputPath" +Write-ArrayFixture $spiralDefinition diff --git a/tests/integration/camera-ui.test.js b/tests/integration/camera-ui.test.js index 392250c..92eab88 100644 --- a/tests/integration/camera-ui.test.js +++ b/tests/integration/camera-ui.test.js @@ -196,6 +196,31 @@ test("Acoustic Camera가 8×8 CPU 실행·결과 저장·stale·재실행 흐름 !documentObject.querySelector("#run-button").disabled, "original comparison configuration restore", ); + + const comparisonPresets = [ + ["rectangular-2x2-450mm", "4 ch", "0.450 × 0.450 m"], + ["rectangular-4x3-450mm", "12 ch", "0.450 × 0.450 m"], + ["rectangular-8x6-450mm", "48 ch", "0.450 × 0.450 m"], + ["rectangular-24x16-450mm", "384 ch", "0.450 × 0.450 m"], + ["rectangular-16x12-compact", "192 ch", "0.120 × 0.120 m"], + ["rectangular-16x12-large", "192 ch", "1.200 × 1.200 m"], + ]; + assertEqual( + documentObject.querySelectorAll("#array-preset option").length, + 9, + "all built-in and custom array choices are visible", + ); + for (const [presetId, microphoneCount, aperture] of comparisonPresets) { + dispatchValue(windowObject, documentObject.querySelector("#array-preset"), presetId); + await waitFor( + () => documentObject.querySelector("#array-preset").value === presetId && + documentObject.querySelector("#microphone-count").textContent === microphoneCount && + documentObject.querySelector("#array-meta").textContent.includes(aperture) && + documentObject.documentElement.dataset.cameraValid === "true", + `${presetId} preset`, + ); + } + dispatchValue( windowObject, documentObject.querySelector("#array-preset"), diff --git a/tests/unit/contracts.test.js b/tests/unit/contracts.test.js index 39e350c..325016c 100644 --- a/tests/unit/contracts.test.js +++ b/tests/unit/contracts.test.js @@ -11,6 +11,16 @@ async function loadJson(path) { return response.json(); } +const RECTANGULAR_ARRAY_EXAMPLES = [ + { id: "rectangular-2x2-450mm", microphoneCount: 4, columns: 2, rows: 2, width: 0.45, height: 0.45 }, + { id: "rectangular-4x3-450mm", microphoneCount: 12, columns: 4, rows: 3, width: 0.45, height: 0.45 }, + { id: "rectangular-8x6-450mm", microphoneCount: 48, columns: 8, rows: 6, width: 0.45, height: 0.45 }, + { id: "rectangular-16x12", microphoneCount: 192, columns: 16, rows: 12, width: 0.45, height: 0.45 }, + { id: "rectangular-24x16-450mm", microphoneCount: 384, columns: 24, rows: 16, width: 0.45, height: 0.45 }, + { id: "rectangular-16x12-compact", microphoneCount: 192, columns: 16, rows: 12, width: 0.12, height: 0.12 }, + { id: "rectangular-16x12-large", microphoneCount: 192, columns: 16, rows: 12, width: 1.2, height: 1.2 }, +]; + test("moving-tone sample Scene and Experiment satisfy their linked contracts", async () => { const [arrayDefinition, scene, experiment] = await Promise.all([ loadJson("/assets/array-geometries/rectangular-16x12.array.json"), @@ -36,6 +46,92 @@ test("192채널 기준 배열이 계약을 통과한다", async () => { assertEqual((await validateArrayDefinition(arrayDefinition)).length, 0, "array issues"); }); +test("rectangular array examples cover low-to-high channel counts and compact-to-wide apertures", async () => { + const arrays = await Promise.all(RECTANGULAR_ARRAY_EXAMPLES.map(({ id }) => + loadJson(`/assets/array-geometries/${id}.array.json`))); + + for (let index = 0; index < arrays.length; index += 1) { + const arrayDefinition = arrays[index]; + const expected = RECTANGULAR_ARRAY_EXAMPLES[index]; + assertEqual(arrayDefinition.id, expected.id, `${expected.id} fixture id`); + assertEqual(arrayDefinition.microphones.length, expected.microphoneCount, `${expected.id} channel count`); + assertEqual(arrayDefinition.aperture.width, expected.width, `${expected.id} aperture width`); + assertEqual(arrayDefinition.aperture.height, expected.height, `${expected.id} aperture height`); + assertEqual( + (await validateArrayDefinition(arrayDefinition)).length, + 0, + `${expected.id} contract issues`, + ); + assertEqual( + new Set(arrayDefinition.microphones.map(({ id }) => id)).size, + expected.microphoneCount, + `${expected.id} microphone ids are unique`, + ); + assertEqual( + new Set(arrayDefinition.microphones.map(({ position }) => position.join(","))).size, + expected.microphoneCount, + `${expected.id} positions are unique`, + ); + + const xCoordinates = arrayDefinition.microphones.map(({ position }) => position[0]); + const yCoordinates = arrayDefinition.microphones.map(({ position }) => position[1]); + assert( + arrayDefinition.microphones.every(({ position }) => position[2] === 0), + `${expected.id} microphones stay on the z=0 plane`, + ); + assertEqual(new Set(xCoordinates).size, expected.columns, `${expected.id} column count`); + assertEqual(new Set(yCoordinates).size, expected.rows, `${expected.id} row count`); + const uniqueX = [...new Set(xCoordinates)].sort((left, right) => left - right); + const uniqueY = [...new Set(yCoordinates)].sort((left, right) => left - right); + const expectedXPitch = expected.width / (expected.columns - 1); + const expectedYPitch = expected.height / (expected.rows - 1); + assert( + uniqueX.slice(1).every((value, position) => + Math.abs(value - uniqueX[position] - expectedXPitch) < 1.1e-6), + `${expected.id} uniform x pitch`, + ); + assert( + uniqueY.slice(1).every((value, position) => + Math.abs(value - uniqueY[position] - expectedYPitch) < 1.1e-6), + `${expected.id} uniform y pitch`, + ); + assert(Math.abs(Math.min(...xCoordinates) + expected.width / 2) < 1e-6, `${expected.id} x minimum`); + assert(Math.abs(Math.max(...xCoordinates) - expected.width / 2) < 1e-6, `${expected.id} x maximum`); + assert(Math.abs(Math.min(...yCoordinates) + expected.height / 2) < 1e-6, `${expected.id} y minimum`); + assert(Math.abs(Math.max(...yCoordinates) - expected.height / 2) < 1e-6, `${expected.id} y maximum`); + } + + const channelSeries = arrays.slice(0, 5); + assert( + channelSeries.every(({ aperture }) => aperture.width === 0.45 && aperture.height === 0.45), + "channel-count series keeps the 0.45 m aperture fixed", + ); + assertEqual( + channelSeries.map(({ microphones }) => microphones.length).join(","), + "4,12,48,192,384", + "channel-count series", + ); + const apertureSeries = [ + arrays.find(({ id }) => id === "rectangular-16x12-compact"), + arrays.find(({ id }) => id === "rectangular-16x12"), + arrays.find(({ id }) => id === "rectangular-16x12-large"), + ]; + assert( + apertureSeries.every(({ microphones }) => microphones.length === 192), + "aperture series keeps 192 channels fixed", + ); + assertEqual( + apertureSeries.map(({ aperture }) => aperture.width).join(","), + "0.12,0.45,1.2", + "compact-to-large aperture series", + ); + assertEqual( + Math.max(...arrays.map(({ microphones }) => microphones.length)), + 384, + "high-count example", + ); +}); + test("192채널 Fermat spiral 비교 배열이 계약과 원형 aperture를 만족한다", async () => { const arrayDefinition = await loadJson("/assets/array-geometries/fermat-spiral-192.array.json"); assertEqual(arrayDefinition.microphones.length, 192, "spiral microphone count");