재생전용 데이터레코더 만들기

재생전용(再生專用) 데이터레코더(DATA RECORDER)라니 뭔가 이율배반적인 제목입니다만, 데이터 레코더라는 것을 “카세트 테이프에 데이터를 읽고 썼던 그 장치군”을 말한다 정도로만 이해해주시면 되겠습니다. 일부 제품은 Program Player / Program Recorder라는 명칭을 쓰기도 합니다. 

데이터 레코더라는 게, 카세트 테이프를 쓰다보니 시간이 지남에 따라 테이프가 늘어나거나 벨트가 맛이가거나, 모터 회전수가 맛이가면서 제대로 쓸 수 없습니다. 기존에 가지고 있던 Tape 소프트웨어를 백업하는 가장 쉬운 방법은 녹음이겠지요.

그래서 일단 테이프의 것을 재생해고, 이를 디지털 레코더로 녹음해서 파일로 백업했습니다.

녹음하시기 전에 헤드위치는 잘 맞춰주세요. ^^;

녹음이 다 끝났으면….  적당히 앞뒤 필요없는 부분을 잘라주거나, 적절한 포맷으로 변경해(44.1KHz/16bit) 주는 작업을 합니다.

 

su-jeong-doem-au

이렇게 하면 파일 작업이 끝납니다.

그럼 이제 디지털 파일을 바로 쓸 수 있도록 WAV파일 재생기를 하나 만들면 되겠죠.

사실 걍 MP3P아무거나 쓰셔도 됩니다. 안 쓰는 스맛폰을 쓰셔도 되고요.

 

그런데, 이때는 문제가 2.5파이 검은색 리모트 단자를 연결할 수가 없다는 겁니다.

여기서 잠깐 데이터레코더 연결을 살펴보시면,

su-jeong-doem-img-7909

보통 이렇게 3개가 들어갑니다. 흰색은 소리가 나오는 재생용, 빨간색은 소리를 넣는 녹음용, 그리고 검은색은 리모트 컨트롤 용입니다.

이 검은색 단자는 데이터 레코더를 포즈/리줌 시켜주는 기능을 하는데, 파일 하나짜리를 쓸 때는 별 필요가 없지만 “쟈스”같은 어드벤쳐 게임같이 앞쪽 파일이 뒷쪽 파일을 불러오는 게임이면 문제가 발생합니다.

 

다시 맨 처음 백업 녹음한 파일을 살펴봅니다. 다음그림은  녹음한 카세트 테이프의 파일 구성을 나타낸 것입니다.

cass

총 파일 9개로 구성되어있고, 파일1이 MSX에 로드되면 잠시 멈췄다가, 뒤의 파일2~파일9를 진행상황에 따라 불러오게 되어있습니다. 따라서 파일 1이 로드 된 뒤에는 Pause기능이 있거나, 아니면 알아서 다음 파일을 재생할 수 있도록 대기해주는 상태가 될 필요가 있습니다.

 

일반 스맛폰이나 녹음기를 사용한다면 리모트 단자가 보내는 신호에 맞춰 정지할 수 없으니 파일1을 다읽은 뒤에도 계속해서 파일2-3-4순으로 재생하고 있겠지요. 그래서 실제로 MSX가 파일2를 로드해야할 상황에는 이미 뒤의 파일이 재생중이거나, 아니면 아예 파일 끝까지 재생을 끝내고 멈춰있는 상태가 될 것입니다. 따라서 파일1을 로드 한 뒤에는 딸깍 하는 릴레이소리를 듣고 사용자가 수동으로 포즈를 걸어줘야하는데, 그건 매우 번거롭습니다.

 

그러니 자작해야죠 뭐.

쓸만한 것으로 떠오르는 게 예전에 사둔 MP3P모듈이었습니다.

 

107020008-2

구입처 : https://www.seeedstudio.com/Grove-MP3-v2.0-p-2597.html

이걸 아두이노에 물리고, 쓰면 됩니다.

Grove 시리즈라서 포트 규격이 있는지라, Grove 전용 아두이노를 쓰시거나 ( https://www.seeedstudio.com/Seeeduino-Lotus-ATMega328-Board-with-Grove-Interface-p-1942.html ) 아니면 Grove 실드 ( https://www.seeedstudio.com/Base-Shield-V2-p-1378.html )를 쓰시면 됩니다.

그냥 간단하게 D2/D3 포트에 연결해주시면 됩니다.

뭐, 따로 돈 들이기 싫고 집에 있는 아두이노 쓰시겠다면 그냥 D2, D3에 각각 데이터선을 연결해주시고, VCC, GND 맞춰 연결해주셔도 됩니다.

su-jeong-doem-img-7915

이것으로 일차 완성.

 

2차로, 리모트 단자를 만들어줍니다.

2.5파이 폰잭을 하나 구해서 케이블링 해서, 적당한 포트에 연결해줍니다. 저는 D11에 연결했습니다.

리모트 단자의 원리는 별게 아니고요, 데이터 레코더에서 나온 선이 MSX에서 릴레이로 서로 붙여주면 Resume 상태, 단락 시켜놓으면 Pause 상태인 것입니다. 그냥 외부에 스위치 붙여놓은 것입니다.

그리고 PLAY/STOP용 푸시 스위치를 하나 D8에 연결해줍니다. (당장 쓸 푸시 스위치가 없어서 그냥 접점을 연결하는 것으로 했습니다.) 양쪽 다 반대쪽 케이블은 GND로 연결해주시면 됩니다.

su-jeong-doem-img-7948

su-jeong-doem-img-7942

이것으로 하드웨어는 전부 완성입니다.

 

다음은 Arduino IDE를 실행시키고…

라이브러리를 임포트해줍니다.

SeeedStudio에서 제공해주는 녀석이 있긴한데, Stop기능을 안 넣어뒀길래 살짝 수정했습니다.

첨부파일을 다운로드 받으시고, 스케치 -> 라이브러리 임포트를 이용해서 파일을 불러주시면 자동으로 라이브러리 등록이 됩니다. ( 첨부 파일 : grove-serial-mp3-player-v2-1-asteris )

그뒤 예제에서 data recorder를 골라주시면…

테스트용으로 만들어놓은 녀석이 불러집니다.

 

이걸 펌에 올리시고… 흰색 케이블과 검은색 케이블을 각각 3.5파이 포트와 2.5파이 포트에 연결해주시고..

녹음한 데이터 파일을 하나 wav로 넣어둔 다음…

전원을 넣고 푸시 스위치를 눌러주면, Play 모드가 됩니다.(13번 LED가 켜집니다) 하지만 검은색 리모트 케이블이 연결되어있으므로 바로 Pause 상태로 들어갑니다. (MP3모듈의 LED가 재생시에는 깜박이고, 포즈시에는 계속 켜져있습니다.)

MSX에서 BLOAD”CAS:”,R 등의 명령을 주면 릴레이 소리가 나면서 계속 켜져있던 MP3모듈 LED가 깜박이며 파일을 재생한다고 알려줍니다.

su-jeong-doem-img-7897

리모트 단자 기능이 있으므로, 로드가 끝나면 자동으로 Pause상태로 전환됩니다. 따라서 계속해서 파일 안에서 파일을 연쇄로 불러오는 어드벤쳐 게임같은 것에도 대응합니다. 테이프 하나를 통째로 이미지로 뜨시면 됩니다.

로드가 다 끝났으면 다시 푸시 버튼을 누르면 STOP이 됩니다. 물론 다시 누르면 처음부터 Play입니다.

 

 

 

필요하신 분들은 받아서 하나쯤 만들어두시면 WAV파일을 재생하는 실물 데이터레코더로도 쓰실 수 있을 겁니다.

테스트해봤는데, MP3의 경우 압축률에 따라 데이터가 깨지는 경우가 있으니… 걍 속편하게 WAV파일을 쓰시는 게 가장 낫지 않나 싶습니다. ^^

걍 샘플 코드니까 지저분하고, 개선할 곳이 많습니다. 여러개 파일을 넣었을 때의 처리라거나…그런 건 안들어있습니다. 무조건 하나만 지원합니다. 라이브러리 .h파일과 .cpp 파일을 살펴보시면 쓸 수 있는 기본 명령들이 나와있습니다. 이걸 응용하심 될거고요. 거기서 다루지 않는 건 Datasheet를 보시고 추가하심 될 겁니다. 또, 모듈자체가 녹음 기능이 없으므로 녹음을 지원하진 않습니다. 적당한 녹음 기능이 있는 모듈을 쓰신다면 녹음에도 대응하겠죠. (그렇게 된다면 진정한 의미의 재생/기록이 가능한 데이터 레코더가 될 것입니다)

전원은 조이스틱 포트에서 뽑아쓰시면 될 거고요.

아예 롬팩 형태로 만들어서 본체 전원만 끌어다 쓰면서 투명창에 LCD등을 이용해서 파일명이나 재생상태 등을 표시해주는 등의 개선품도 생각해볼 수 있겠습니다.

능력있는 분들이 계속 개선해서 해주시면 될 거 같습니다. ^^;

 

 

디스크도 느려서 MMC/SD Drive에 이미지 마운트해서 쓰고 하는 시대에 웬 아날로그 감성인지 모르겠지만, 테이프 돌아가는 시간만큼 기다려야 게임 한 판 할 수 있는 그런 장치 되겠습니다. ㅇㅂㅇ)/

e-hyu

 

PS. 참 MSX turboR 사용자분들은 쓰실 수 없습니다. 카세트 단자가 없어요. ㅋ

One thought on “재생전용 데이터레코더 만들기”