2024년 11월 10일 일요일

WAU 제작 #8 - 리모트 플레이어

MSX의 사운드 기기만으로 재생이 불가능한 미디어파일들이 많이 있는데요.

이것들을 PC쪽 리모트 드라이브에 놓고 플레이해보아요~


WAU 서버가 오디오(PCM)를 MP3 320kbps로 인코딩 후 MSX로 스트리밍해주는 방식입니다.

MSX에서는 Wi-Fi로 데이터를 받아서 VS1003으로 재생(디코딩 출력)합니다.

PAC-V가 있다면 LED 비주얼라이저도 함께 동작하겠네요 ㅎ.ㅎ


WAU 서버에는 OpenMPT와 VGMplay가 내장되어 있습니다.

ffmpeg의 경우는 외부 프로그램으로 구동되지만, 데이터를 pipe로 전달받아서 사용합니다.


ffmepg  -> MKV, MP4, FLAC, OGG 등의 오디오 처리

OpenMPT -> S3M, MOD 등의 모듈 음악 플레이

VGMplay -> VGM, VGZ(압축) 음악 플레이


M 파일매니저에 내장된 #MPXP, #VGMP 플레이어에서는,

현재 재생하려는 파일이 리모트 드라이브에 존재하는 경우, 자동으로 WAU 리모트 플레이어로 전환합니다.

이렇게 동작하는 방식이 사용자 입장에서는 제일 편한 것 같네요.


그럼, 실기에서 동작하는 모습을 감상하시죠~

부팅 후 리모트 드라이브를 연결하고 S3M -> MP4 -> VGM 순으로 재생하는 모습을 볼 수 있습니다.



그럼, 다음편에서 이어집니다...


2024년 11월 1일 금요일

WAU 제작 #7 - S3M 플레이어 테스트

WAU에 들어있는 Wi-Fi 모듈은 ESP-12F입니다.

ESP8266 32BIT MCU에 4MB(32Mbit) SPI 플래쉬롬이 붙어있는데요. 이 플래쉬롬은 1MB 영역만 CPU에 매핑됩니다.

결국 나머지 3MB는 코드가 아닌 다른 영역으로 활용하게 됩니다.


보통은 F/W를 2세트로 넣어서, 런타임으로 다운로드 및 교체하는 방식으로 2MB를 사용하구요.

나머지는 영역에는 파일시스템을 탑재하거나, 별도의 데이터로 활용하면 됩니다.

아니면 그냥 F/W를 4세트로 넣어버려도 좋구요 ㅎ.ㅎ


사실 1MB 맵에서 공용 데이터를 제외하면 실제 메인 프로그램의 영역은 896KB가 되는데요.

이게 TCP/IP 및 RF 등의 기본적인 코드만 넣어도 700KB 수준이라서,

사용자가 추가할 수 있는 코드가 200KB 정도로 보시면 되겠습니다.


현재 WAU에서는 기본 F/W 1개, MP3 스트리밍 모드 전용(TCP 수신버퍼 최대활용) F/W 1개가 들어갑니다.

이제 플래쉬롬 2MB가 남았네요.

남은 부분으로 뭘 만들면 재밌을까요? ㅎ.ㅎ


Wi-Fi 모듈 및 USB-UART 모듈은 둘 다 UART 921KBPS를 사용합니다.

UART start 1bit, data 8bit, stop 1bit 세팅에서 92KB/s 전송이 가능합니다.


만약 전송되는 데이터를 몽땅 사운드 PCM으로 활용한다면, 오디오 디코더처럼 쓸 수 있겠네요!

16BIT MONO 44KHz PCM은 가능하겠죠? STEREO PCM이라면 16BIT 22KHz 또는 8BIT 44KHz가 되겠습니다.

전송되는 데이터는 88KB/s입니다.


사운드 테스트를 위해 S3M 플레이어를 넣어보았습니다.

RTOS와 최소한의 라이브러리만 남기고, 기본적인 S3M 플레이어 코드를 넣으니, 285KB 정도의 F/W를 만들 수 있네요.

896KB 범위 내에서라면... 608KB 정도의 S3M 데이터를 넣어서 실행가능합니다.


참고로, ESP8266 칩은 사용자용 램(캐시를 제외)이 80KB밖에 없어요.

따라서 프로그램에서 쓰는 변수 외의 const 데이터 테이블은 모두 SPI 플래쉬롬 상에서 직접 액세스해야합니다.

캐시도 작아서, 악기용 PCM 샘플과 노트 데이터를 연속으로 읽으면 캐시미스로 성능이 대폭 하락할 예정ㅋ


그래도 한번 해보면 재미겠죠? ㅎ.ㅎ


전체적인 프로그램의 흐름은 이렇게 되겠습니다.

1. MSX의 디스크에서 S3M 데이터를 읽어서 ESP로 전송합니다. (SPI 플래쉬롬 1섹터 4KB단위)

2. ESP에서는 전송받은 S3M 데이터를 플래쉬롬에 다운로드합니다.

3. 전송 및 다운로드가 완료되면, ESP에서 S3M 전용 F/W로 전환하고 리부팅합니다.

4. ESP의 S3M 플레이어는 최종 PCM 데이터를 생성 후 MSX로 전송(스트리밍)합니다.

5. MSX에서는 수신된 PCM 데이터를 WAU의 VS1003 디코더로 전송합니다.

6. 주기적으로 VS1003의 스펙트럼 애널라이저 데이터를 수신하여, PAC-V의 LED 비주얼라이저를 설정합니다.


이렇게 해서, 최종 오디오는 WAU의 HP출력단자로 나오게 되겠습니다요~ ㅎ.ㅎ/


그럼, 제 GT에서 동작하는 모습을 보시죠!




이번 S3M 플레이어는 이런식으로 Wi-Fi(ESP) 모듈을 활용할 수 있다...정도로 보시면 되겠습니다.

이미 문사운드용 MOD/S3M 플레이어가 있어서, 굳이 WAU-S3M을 사용할 이유는 딱히 없어요 ㅎ.ㅎ


그럼, 다음편에서 이어집니다...