k•KINDNICK김광진 · 포트폴리오
← 전체 작업
소프트웨어 / Mingle

Mingle Audio

구현
구현한 기능

음향 장비를 직접 제작하고 PC 앱·음향 엔진을 개발했습니다. 마이크·인이어와 네트워크 오디오를 연결하고 USB 진단·무선 송신 보드는 별도 연구로 진행했습니다.

내가 한 일

PC 앱·ASIO/UDP 엔진·장치 제어 개발, USB 진단 펌웨어·회로/PCB 연구

  • PC 앱과 ASIO·네트워크 음향 처리·장치 제어를 개발했습니다.
  • 입출력 경로의 시작·정지와 연결·설정 오류 복구를 구성했습니다.
  • 별도 USB Host 진단과 무선 송신 보드의 회로·전원을 연구했습니다.
오디오 장치와 케이블로 연결한 직접 제작 모듈.
작업 사진

음향 모듈과 케이스 제작

케이스에 넣은 소형 모듈과 오디오 장치의 연결 모습입니다.

내가 한 일

음향 장비용 모듈을 직접 제작하고 주변 오디오 장치와 연결했습니다.

자료 범위

음향 모듈·케이스 제작 기록입니다. 함께 연결한 상용 오디오 장치의 제조는 담당 범위에 포함하지 않습니다.

보드와 오디오 장치를 연결한 음향 장비 제작 기록.
작업 사진

직접 제작한 음향 장비의 연결 구성

오디오 장치와 보드·케이블을 연결한 제작 상태입니다.

내가 한 일

음향 장비를 직접 제작하고 각 장치의 연결과 설정을 진행했습니다.

자료 범위

직접 제작한 음향 장비의 연결 기록입니다. 구성에 사용한 상용 부품의 원설계·제조는 각 제조사 담당입니다.

기술과 문제 해결 과정구현 방법 · 문제 해결 사례 4개 · 시험 조건

작업 배경

연속 PCM 처리를 유지하면서 장치 검색과 설정·재연결을 처리해야 했고, 출연자 라우팅 저장과 실제 송신기 등록이 따로여서 시작 단계에서 빠진 설정이 드러났습니다. 새 USB 오디오 장치와 무선 보드는 앱의 기존 운용 경로와 분리해 단계별로 확인해야 했습니다.

구현한 내용

  1. 01

    ASIO callback은 미리 확보한 PCM ring buffer와 포맷 변환을 사용하고 제어·네트워크 작업은 callback 밖에서 처리했습니다.

  2. 02

    시작 시 필요한 무음과 운용 중 underflow를 별도 집계하고 입력 초과도 드러내도록 했습니다.

  3. 03

    USB 연결 확인에서 장치 읽기·등록을 이어가고 Wi-Fi 저장 뒤 같은 ID의 복귀를 확인했습니다.

  4. 04

    활성 라우트만 시작·정지시키며 비활성·삭제된 출연자가 수명주기 명령을 막지 않게 했습니다.

  5. 05

    손상 pairing·preset은 기존 파일과 현재 설정을 보존하며 복구하고, 실패한 native worker 시작에서도 소유권을 반환해 재시도할 수 있게 했습니다.

  6. 06

    별도 S3 진단 펌웨어에서 메모리·USB Host 초기화와 USB Audio descriptor를 검사하도록 만들었습니다.

  7. 07

    C5 RevD 보드의 서비스/오디오 경로와 전원·충전 승인 정책을 설계하고 CAD·제조 검토 자료를 정리했습니다.

C++ASIOPCM/UDPPythonTauriESP32 연동오디오 라우팅ESP32-C5ESP32-S3KiCadUSB Host회로·PCB오디오 연구
문제 해결

어떤 문제를 다뤘는지

01

오디오 callback과 제어 작업의 분리

문제
장치 설정·네트워크 지연이 PCM callback에 섞이면 연속 출력의 부족·초과를 유발할 수 있었습니다.
처리 방법
단일 생산자·소비자 ring buffer를 미리 할당하고 atomic cursor로 PCM을 교환했습니다. callback 안에서는 장치 포맷 변환과 버퍼 처리·카운터만 수행하며 시작 준비 무음과 실제 운용 중 underflow를 따로 기록했습니다.
결과·범위
소스에서 callback과 ring buffer 경계를 확인했습니다. 2026년 9월 14일 기록에는 S3와 Audient ASIO 48kHz·256프레임에서 약 23초 동안 11,531패킷을 받고 잘못된 패킷·소켓 오류·출력 부족·입력 초과가 0이었다고 남아 있습니다. 마이크·반환 레벨과 정지는 확인했지만 직접 청음과 전체 지연은 별도입니다.
02

등록·설정·시작이 끊기던 작업 흐름 정리

문제
출연자를 저장해도 S3 제어 등록이 빠질 수 있었고 손상된 pairing이나 삭제된 출연자 때문에 시작·정지가 실패했습니다.
처리 방법
USB 연결 확인에서 읽기와 등록을 연결하고 Wi-Fi 저장 뒤 동일 장치의 재연결을 확인했습니다. 활성 라우트에만 수명주기 명령을 보내며 긴 시작·정지 요청은 상태 조회와 timeout을 구분했습니다. pairing·preset 검증과 원자 저장, native 스레드 생성 실패 후 정리·재시도를 추가했습니다.
결과·범위
당시 Python 249개·프런트엔드 53개·native 5개 검사 통과와 frozen 엔진의 실제 시작·정지 기록이 있습니다. 설치 EXE와 portable의 엔진·DLL hash를 대조했으며 기존 설치 앱을 덮어쓴 결과로 표현하지 않습니다.
03

USB 오디오 전송 전에 보드·장치 지원 범위를 확인하는 진단기

문제
USB Host 시작이 된다는 사실만으로 마이크의 USB Audio 형식과 실제 PCM 전송이 지원된다고 판단할 수 없었습니다.
처리 방법
보드 메모리·상태를 먼저 확인하고 USB Host는 별도 명령으로 시작합니다. 장치가 연결되면 descriptor 원문과 Audio 인터페이스·엔드포인트 요약을 출력하도록 했습니다.
결과·범위
2026-10-05 기록에는 256KiB PSRAM 샘플 검사와 USB Host 초기화 성공이 있습니다. 당시 외부 USB 장치는 0개였으며 PCM·UDP·IEM 검증으로 확대하지 않습니다.
04

USB 전원 승인과 충전 시작을 분리한 보드 설계

문제
USB 브리지의 기본 설정 상태에서 충전 회로를 바로 활성화하면 승인 전 전류 조건과 다른 동작이 생길 수 있어 설정·검증 후에만 충전을 연결하는 절차가 필요했습니다.
처리 방법
FT231XS 서비스 연결과 C5 전원 영역을 분리하고, 충전 승인 연결을 미실장 저항으로 열어뒀습니다. 브리지의 MTP 설정을 재읽고 USB 열거·정상 구성·suspend·충전기 상태의 전류를 확인한 뒤 연결하는 commissioning 절차를 정리했습니다.
결과·범위
전원·USB 상태를 고려한 CAD와 조립 후 검사 절차가 준비돼 있습니다. 문서의 ERC/DRC 통과는 과거 CAD 검사 결과이며 실물 USB 전류·안전·오디오·RF 인증을 의미하지 않습니다.
구현과 검증 범위

앱·네이티브 오디오·장치 제어 구현 및 0.3.7 패키징 기록. 짧은 단일 S3 실기와 다중 소스 loopback을 구분. 다중 실기·장시간 RF·음질·전체 지연 측정은 남음. 새 UAC·C5 경로는 보드 진단·CAD 연구입니다.

실행·측정 결과는 각 사례에 적힌 당시 기록과 조건을 따릅니다.

시험 조건과 적용 범위

2026년 9월 14일 S3·Audient ASIO의 짧은 실제 연결·수신·정지 기록이 있습니다. 약 23초 시험을 다중 송신기·장시간 무선 안정성·전체 음향 지연이나 청음 품질의 보장으로 확대하지 않습니다. 별도 USB Host 진단·C5 RevD 경로는 PCM·무선 IEM 구현 완료 단계가 아닙니다. 기존 S3/ASIO의 짧은 시험 결과를 새 하드웨어의 검증으로 합치지 않습니다.

활동
Mingle
작업 구분
구현