Skip to content

Electric-ray/E-RayDSB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

E-RayDSB

E-Ray Dos Sound Bridge

XIAO ESP32-S3 기반 DOS PC 사운드 브리지 펌웨어입니다.
RS232 MIDI / OPL 신호를 받아 로컬 합성 또는 네트워크 전송 중 하나로 처리합니다.
버튼 한 번으로 네 가지 모드를 전환하며, WS2812 LED가 현재 모드를 표시합니다. 이 프로젝트는 AI이용하여 진행되었습니다.

제작자: 전기가오리 (네이버 카페 도스박물관 Electric Ray)
보드: Seeed XIAO ESP32-S3


모드 일람

LED 모드 역할
🟢 Green SF2 MIDI SoftMPU RS232 → SF2 합성 → I2S / PCM5102A
🔵 Blue RTP-MIDI SoftMPU RS232 → WiFi AP → AppleMIDI (rtpMIDI)
🔴 Red OPL Local adlcom RS232 → YMF262 (YMFM) → I2S / PCM5102A
🟡 Yellow OPL UDP adlcom RS232 → WiFi AP → UDP 타이밍 패킷
  • D5 택트 스위치 짧게 누름 → 다음 모드로 전환 (순환)
  • D5 택트 스위치 길게 누름(3초) → 재부팅
  • 전환 순간 흰색 섬광 표시

하드웨어

핀 배열 (XIAO ESP32-S3)

GPIO 연결
D7 44 MAX3232 RX — RS232 입력 (SoftMPU / adlcom 공용)
D10 9 PCM5102A BCK
D9 8 PCM5102A DIN
D8 7 PCM5102A LCK / WS
D5 6 택트 스위치 (반대편 GND)
D3 4 WS2812B 데이터

필요 모듈

  • XIAO ESP32-S3 (8MB Flash, PSRAM 탑재 버전)
  • PCM5102A I2S DAC 모듈
  • MAX3232 RS232-TTL 변환 모듈
  • WS2812B LED (1개)
  • 택트 스위치
E-rayDSB

소프트웨어 준비

1. Arduino IDE 설정

항목
보드 XIAO_ESP32S3
Flash Size 8MB
PSRAM OPI PSRAM ← 필수
Partition Scheme Custom (partitions.csv 사용)
USB CDC On Boot Enabled
Upload Speed 921600

2. 필수 라이브러리 (Arduino 라이브러리 매니저)

라이브러리 제작자 용도
FastLED Daniel Garcia WS2812 LED 제어
Arduino MIDI Library Francois Best (FortySevenEffects) Serial MIDI 파싱
AppleMIDI lathoub RTP-MIDI / AppleMIDI 세션

3. 프로젝트 파일 구성

SF2Sampler 소스 복사
copych/ESP32_SF2_Sampler_Synthesizer 저장소의 SF2Sampler/ 폴더에서 아래 파일을 E-RayDSB/ 로 복사합니다.

adsr.cpp / adsr.h
biquad2.h
channel.h
fx_reverb.h
i2s_in_out.cpp / i2s_in_out.h   ← 이 프로젝트에서 수정됨
misc.h
operators.h
SF2Parser.cpp / SF2Parser.h
synth.cpp / synth.h
SynthState.h
TLVStorage.h
voice.cpp / voice.h

주의: i2s_in_out.cpp 는 원본 대신 이 저장소의 수정본을 사용합니다.
(I2S deInit 시 rx_handle 잔존 버그 수정)

사운드폰트 업로드
LittleFS 파티션에 SF2 파일을 업로드합니다. 디폴트는 soundfont.sf2 입니다. Arduino IDE → [Tools > LittleFS Upload] 또는 arduino-littlefs-upload 플러그인 사용.
파일 경로: data/soundfont.sf2 (3MB 이하 권장)

추천 사운드폰트:

  • [2gmgsmt.sf2]
  • 게임별 전용 SF2 (예: SC-55 패치셋) — 해당 게임에 최적

모드별 사용법

🟢 모드 0 — SF2 MIDI 로컬 합성

DOS PC에서 SoftMPU로 MIDI를 출력하면 ESP32가 SF2 사운드폰트로 합성해 PCM5102A로 재생합니다.

DOS 설정 예시:

SOFTMPU /MPU:330 /SB:220 /IRQ:5 /COM:1 /BAUD:38400

게임 실행 시 자동으로 MIDI 출력됩니다.

  • RS232 속도: 38400 baud
  • 사운드폰트: LittleFS의 /soundfont.sf2
  • 출력: PCM5102A → 3.5mm 오디오 잭

🔵 모드 1 — RTP-MIDI (AppleMIDI) 전송

ESP32가 WiFi AP DOS_MIDI를 열고, 연결된 PC/Mac의 가상 MIDI 드라이버로 MIDI를 전송합니다.
Munt (MT-32 에뮬레이터), rtpMIDI, DAW 등과 함께 사용합니다. (제 다른 저장소에 android용으로 munt를 포팅해두었습니다.)

WiFi 접속:

  • SSID: DOS_MIDI
  • Password: 12345678
  • IP: 192.168.4.1

Windows (rtpMIDI):

  1. rtpMIDI 설치
  2. 새 세션 추가 → dosmidi._apple-midi._udp.local 또는 192.168.4.1:5004
  3. 연결 후 가상 MIDI 포트를 Munt / DAW 의 입력으로 지정

macOS:

  • 시스템 환경설정 → Audio MIDI 설정 → MIDI 네트워크 설정 → dosmidi 자동 검색됨

연결 확인 후 게임 시작 (연결 전 전송된 SysEx는 드롭됩니다)

  • RS232 속도: 38400 baud
  • mDNS: dosmidi._apple-midi._udp.local (포트 5004)

🔴 모드 2 — OPL3 로컬 합성

adlcom이 RS232로 보내는 NukeYKT OPL 명령을 ESP32의 YMFM(YMF262) 에뮬레이터로 처리해 PCM5102A로 재생합니다. (adlcom은 제 다른 저장소의 패치된 버전을 사용하셔야 원활하게 구동됩니다.)

DOS 설정 예시:

adlcom COM1 OPL3
implay
  • RS232 속도: 115200 baud
  • OPL 타입: YMF262 (OPL3, OPL2 하위 호환)
  • 출력: PCM5102A → 3.5mm 오디오 잭

🟡 모드 3 — OPL UDP 브리지

adlcom이 보내는 OPL 명령을 타이밍 정보와 함께 UDP로 외부 기기에 전송합니다.
OPL 에뮬레이터(제 다른 저장소에 windows와 android용이 있습니다.)로 재생할 수 있습니다.

WiFi 접속:

  • SSID: COMOPL
  • Password: 12345678
  • UDP 포트: 9800

PC 수신 프로그램 시작 순서:

  1. ESP32가 COMOPL AP에 연결
  2. PC에서 ESP32 IP(192.168.4.1)로 UDP HELLO 문자열 전송
  3. 이후 ESP32가 해당 PC IP로 유니캐스트 전송 시작

패킷 포맷:

magic[4]  = "OPL3"
type      = 0 (events) / 1 (reset)
count     = 이벤트 수 (max 32)
seq       = uint16 패킷 순번
events[]: deltaUs(uint16) + reg(uint16, bank<<8|reg8) + val(uint8) + flags(uint8)

시리얼 명령 (115200 baud)

USB 시리얼 모니터에서 입력 가능합니다.

명령 동작
stat 현재 모드 상태 표시
mode 0 ~ mode 3 강제 모드 전환
reset 재부팅

출처 및 참조 프로젝트

이 프로젝트는 다음 오픈소스 프로젝트를 기반으로 합니다.

프로젝트 저자 라이선스 용도
ESP32_SF2_Sampler_Synthesizer copych MIT SF2 합성 엔진, I2S 드라이버
ymfm Aaron Giles BSD-3-Clause OPL2/OPL3 에뮬레이션
Arduino MIDI Library FortySevenEffects MIT MIDI 파싱
AppleMIDI lathoub MIT RTP-MIDI 세션
FastLED Daniel Garcia MIT WS2812 LED 제어

OPL UDP 전송 프로토콜은 NukeYKT OPL 브리지 방식을 참고했습니다.


라이선스

MIT License — 자유롭게 사용, 수정, 배포 가능합니다.
단, 위 출처 프로젝트 각각의 라이선스를 함께 준수해 주세요.

Releases

No releases published

Packages

 
 
 

Contributors