현재 아이템 명과 이것저것 해 놓긴 했습니다. 몇몇 메시지에 대해서 그럭저럭 수준으로만 했습니다.
폰트 수정 계획 없습니다. 피드백이 없었기에 대사창 바탕체 그대로 갈 겁니다.
마음에 안 들면 아래에 설명을 했기에 본인들이 직접 하면 됩니다.
캐릭터 이름이 영문으로 나온다면 게임을 새로 시작하셔야 합니다. 세이브 파일에 캐릭터 이름이 기록되는 듯 합니다.
이 툴 킷은 스팀판에서만 확인했지만 GOG.com 판에서도 문제가 없다고 합니다. 개인적으로 스팀판은 문제가 많으므로 GOG.com에서 구매하셔야 편합니다.
이 게임이 출시된지도 좀 됐고 이제 슬슬 한국어 화 방법을 풀어도 될 것 같아서(이미지도 가능 하지만 그건 나중에 하고) 글을 올립니다.
일단 해당 압축 파일을 Neptunia re;birth1이 설치된 곳에 풀어버리면 한국어화 준비는 끝입니다. 일단 일본어 폰트의 일부를 한글 1023자로 교체했고(폰트가 좀 더럽습니다.) txt파일을 한국 로케일에서 읽기 쉽게 utf8로 저장했습니다.
~~.txt.utf 라는 형태로 되어있는 파일이 UTF8 형태로 저장된 파일입니다.
이 파일을 수정하고
~~.txt.utf.ko
라는 파일 이름으로 저장하면 번역작업은 끝이납니다.
그리고 준비된 to_cp932_utf_ko.py 스크립트를 실행하면 번역된 txt파일이 만들어 집니다.
그러니까... Neptools/SYSTEM/database 폴더의 경우
파일명에 .utf로 끝나는 파일을 연 뒤에(.txt 아닙니다! 이건 나중에 바뀔 파일!)
영문을 한국어로 번역하고
파일-다른 이름으로 저장을 누른 다음 ~~.ko를 붙입니다. (아래 로케일에 UTF-8주목!)
그리고 아래 to_cp932_txt_ko.py 파이썬 스크립트를 실행하면 번역된 문장이 게임에서 나오게 될 겁니다.
대사가 저장된 곳인 /GAME/event/script의 경우에는 각 숫자로 된 폴더안에 파일을 위랑 똑같이 작업한 다음(.utf 파일 열고 수정한 뒤에 utf 뒤에 .ko를 붙여서 저장)
위 이미지에 있는 to_cp932_txt_ko.py 파이썬 스크립트를 실행하시면 됩니다.
옆에 있는 곁다리 스크립트는 제가 사용한 것인데 뜯어보시려면 뜯어보세요. 좀 더럽긴 합니다만....
일단 이렇게 툴킷을 공개합니다. 재미삼아 이렇게 할 수 있구나 하실 수 있을 겁니다. 특히 to_cp932_txt_ko.py 이 스크립트를 자세히 보시면 한글을 한자로 바꾸는 것을 알 수 있는데 사실 폰트 파일의 일부를 원래 일본어 한자의 글자를 한글 폰트로 대체한 것이기 때문입니다.
제일 확실하지만 제일 선택권이 없는 방법이지요. 리눅스용 게임이 많이 나왔지만 아직도 상당수 PC게임은 Windows만을 지원하고 있습니다. 그리고 국내제작 게임은 100% Windows에서만 돌아갑니다.
2. Wine으로 게임하기
그동안 제가 많이 써먹었고 지금도 많이 써먹고 있지요. Wine을 통하면 최소한 리눅스에서 Native하게 돌아가는 듯한 느낌이 듭니다. 그리고 얼마전 소개했었는데 리눅스에서 DirectX9지원이 되기 시작해서 퍼포먼스가 상당히 개선되었습니다. DirectX9 이후 게임이거나 DirectX9으로 돌리면 잘 안 되는 게임은 CSMT방식으로 굴리면 거의 Windows수준의 성능이 뽑히니 이 또한 문제가 없습니다. 하지만 아직도 일부 게임에선 라이브러리를 설치하거나 추가 삽질을 해줘야하는 문제가 있고 이를 컴퓨터로 게임밖에 할 줄 모르는 사람들에게 알려주기에는 그렇게 추천해 줄만한 방법은 아닙니다.
3. VM을 설치하기
VMware나 VirtualBox에서 게임을 굴리면 확실하게 돌아간다는 보장이 있습니다. 다만 가상머신을 쓰기 때문에 이미 성능이 반토막이 난다는게 문제입니다. 그리고 VM의 그래픽가속 드라이버는 아직도 갈길이 먼 수준이라 OpenGL 렌더링은 몰라도 D3D는 포기하는 것이 좋습니다.
특이사항으로는 클라우드 시스템에 Windows 가상머신을 하나 만들고 여기에 접속해서 게임을 하는 겁니다. 그리고 시간당 요금을 받는 방식인데 우리나라 PC방요금과 거의 비슷한 수준입니다. 그리고 Windows 데스크탑하나를 빌려주는 형식이 꼭 PC방과 거의 닮았지요.
제일 왼쪽은 시간 종량방식(시간당 0.5~1달러수준)
가운데는 매달 14.99달러씩 가져가면서 80시간(고성능 구동시 40시간)기본 제공 필요시 추가 구매
오른쪽은 매달 39.99달러에 무제한이용(!)
대략 PC방 요금생각하면 쉽다. 만약 하드코어 게이머라면 제일 Unlimited를 질러도 크게 문제 없다!
아직은 Beta단계라 불안정한 면도 있지만 협력업체가 아주 후덜덜합니다.
서버시장 1위 IBM
소프트웨어 괴물 Microsoft
(안드로이드)모바일에 관해서 거의 도가 터버린 Samsung
덕분에 Beta라고 해도 Beta가 아닌 것 같습니다. 요금을 받는 수준인데 Beta라 보는 것도 웃기긴 하네요.
홈페이지에서는 클라이언트로 Android, Windows, Mac, Linux를 지원한다고 합니다. 그런데 Linux는 말이 좋아 Linux클라이언트지 사실은 Wine으로 굴리는 클라이언트입니다. 그런데 그게 또 잘 돌아갑니다. Wine에 무슨짓을 한건지는 잘 모르겠지만 뭐 굴러만 가면 좋은거죠 뭐.
일단 가입을 해야 시작을 할 수 있겠지요. 가입절차는 간단합니다. 제일 첫 페이지에서 Request Beta Access를 누르면 아래 화면이 나오는데요. 순서대로 쭉 적고 Add me to Beta를 누르면 이메일이 날아옵니다. 거기서 Confirm을 하시면 됩니다.
confirm이후 데이터센터를 고르라고 하는데 자그마치 서울에 서버가 있습니다!!!
그냥 서울을 고르도록 합시다. 가끔 속도테스트해보면 도쿄가 서울보다 빠를 때도 있는데 사실 이 서비스가 알게 모르게 소문이 나서 한국 이용자가 좀 됩니다. 그에비해 일본은 PC게임시장 자체가 워낙 좁아서 필요하면 도쿄로 잠깐 이사를 가도 됩니다. 사실 클라이언트에서 설정 가능합니다.
마지막으로 돈 문제가 있는데요. 3시간짜리 평가를 하시려면 좀 많이 기다리셔야 하고 그냥 돈을 내시면 바로 이용 가능합니다. 전 그냥 귀찮아서 종량제 질렀습니다. 제가 게임을 많이 하는 것도 아니고 기다리다가 한 세월 걸릴 것 같아서 그냥 7000(10시간)질렀습니다. 필요하면 더 구매하면 되니까요.
클라이언트는 https://liquidsky.tv/en/downloads 여기에서 받으시면 되고 자그마치 안드로이드도 지원합니다. PlayStore에 있으니 이를 사용하시면 편리합니다. 다만 안드로이드의 경우 터치방식으로 구동하는 조이패드가 뜨는데 그냥 패드 하나를 블루투스나 USB OTG로 연결하는 것을 추천합니다. 더럽게 안 맞더라구요. 아니면 키보드(?)를 하나 더 붙이시던가요.
Linux용 클라이언트는 제공되는 것이 생각보다 잘 구동이 안 되서 직접 Wine으로 굴리는 것을 추천합니다.Windows 클라이언트를 다운로드 받고 Wine으로 실행하면 그냥 실행 잘 됩니다. 어이없을 정도로 너무 잘 되서 더 황당할 지경이네요.
즉 특정 IP주소에 있는 USB장치를 내 장치에 있는 것처럼 사용하는 방법입니다. 이를 이용하면 지구 반대편에 있는 USB장치(예를 들면 시리얼통신을 쓴 산업장비 등등)을 내 컴퓨터에서 내 장치에 달린 것 마냥 쓸 수 있는 겁니다.
리눅스 커널 3.6 이후에는 이 프로젝트가 커널에 들어가게 되어 USBIP 라이브러리를 설치하는 것 만으로도 이런 것을 사용 할 수 있게 되었습니다. 다만, 바인딩하는 것이 귀찮고 명령이 좀 깁니다. 그리고 Windows에서 사용이 좀 힘듭니다.
그래서 VirtualHere란 업체에서 이를 쉽게 GUI로 만들고 사용할 수 있게끔 결과물을 내놓았습니다. 게다가 안드로이드에 한해서지만 모바일서버를 지원해서 안드로이드에 붙은 USB장치를 PC에서 사용하는 것도 가능해 졌습니다. 심지어 스팀링크에서도 사용이 가능해서 용도가 무궁무진합니다.
일단 저는 안드로이드에 유선형 Xbox컨트롤러를 달아 이를 PC에서 사용 하는 것으로 해보겠습니다. (이렇게 하면 무선 컨트롤러 비스무리하게 쓸 수 있습니다. 스마트폰이 거시기 하지만.
예전에 학생시절에는 PSP를 참 갖고 싶어했습니다. 지하철에서 플레이 하는 사람들을 보면 참 부러웠었지요.
그리고 세월이 지나 지금. PSP는 과거의 유물이 되었고 지금은 다들 스마트폰을 들고 다닙니다. 그리고 PPSSPP란 에뮬레이터가 나와서 PSP게임을 굴릴 수 있게 되었습니다.
하지만 터치인터페이스는 무진장 게임하기 불편했습니다. 그래서 스마트폰용 조이패드를 차던중 이런 녀석이 있더군요.
로지텍 파워쉘입니다. 문제는 이놈은 아이폰 전용이었고 범용성은 내다 버린 것이 문제였습니다. 사실 전 이런놈이 있는 줄도 몰랐는데 누가 컨셉 겹친다고 해서 찾아봤더니 있더군요. 결국 덤핑했다는 후문이 있지만...
어쨌거나 저는 대충 연구실에서 시간 나는대로 게임용 컨트롤러를 만들기로 했습니다.
그래서 만든 것이 바로 위의 물건입니다. 아직 하우징은 만들어지지 않았고 동작만 되는 형편입니다.
일단 제작을 위한 준비물은...
일단 준비물은 아두이노를 썼으니 아두이노가 필요하겠지요. 크기가 크면 문제가 많으므로 작은 모델이 필요합니다. 그리고 조이패드로 인식 시켜야 했으므로 Leonardo와 호환되어야 했지요. 그래서 찾은 모델이 이 모델입니다. 위의 것은 SparkFun 정품이고 아래의 물건은 그것의 호환 제품입니다. 어떤 것을 써도 상관없습니다. 개인적으로 호환품도 크게 문제는 없었습니다.
(프로 마이크로 입니다. 프로 미니, 나노 아니에요!)
버튼도 SparkFun제품을 사용했습니다. 이런 식을 나온 버튼이 상당히 누르는 것이 좋더군요. 하우징 설계할 때도 편리합니다. 뭣하면 다른 스위치를 써도 그만입니다.
조이패드도 SparkFun 호환품으로 구입. 사실 아두이노 키트사면 들어있어요.
그리고 대망의 스마트폰 고정 가이드는 없는 것 빼고 다 판다는 Coms의 제품입니다. 진짜 이 회사의 내부가 궁금합니다. 매번 있을까? 라고 생각하면 있습니다. 우리나라에서 이런 회사가 있다는 것이 자랑스럽습니다.
그외에 준비물로는 부품 고정용 만능 기판 PCB(대충 사서 톱으로 썰어야 합니다.)와 USB OTG케이블, 그리고 USB micro B 케이블(스마트폰 데이터 케이블도 상관없습니다.) 다 Coms에서 팔아요....
음...배선을 깜빡했네요. 배선은.... 그냥 아두이노 책을 보시고 해주시길 바랍니다.(...)
버튼들은 GND와 각 디지털 핀.(Tact스위치는 4개의 다리 중 대각선으로 해주시는 것이 정신건강에 좋습니다. 2개씩은 사실 하나의 다리라 헷갈리면 X되요.
// Simple example application that shows how to read four Arduino // digital pins and map them to the USB Joystick library. // // The digital pins 9, 10, 11, and 12 are grounded when they are pressed. // // NOTE: This sketch file is for use with Arduino Leonardo and // Arduino Micro only. // // by Matthew Heironimus // 2015-11-20 //--------------------------------------------------------------------
이렇게 지원합니다. 즉, 엑스박스 패드의 형식을 그대로 지원하고 엑스박스 패드를 지원하는 게임에서 정상적으로 작동되게 할 수 있습니다.
제가 만든 구조는
왼쪽 4개의 버튼은 방향키로
아래의 아날로그는 HAT으로
오른쪽은 버튼으로 인식되게 했습니다.
하지만 마음을 먹으면 아날로그 스틱을 2개 달고 엑스박스 패드처럼 만들 수도 있는 것이지요.
그래서 이번에 수정한 소스를 공개합니다.
#include <Joystick.h>
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD, 5, 1, // Button Count, Hat Switch Count true, true, false, // X and Y, but no Z Axis false, false, false, // No Rx, Ry, or Rz false, false, // No rudder or throttle false, false, false); // No accelerator, brake, or steering
int lastDpadState[]={0,0,0,0}; int lastButtonState[]={0,0,0,0,0,0,0}; int lastSWState=0;
작은 스마트폰에 컴퓨터의 화면을 띄우는 것을 목적으로 삽질을 했습니다. 사실 VR용으로도 써 먹어보려고 한 것도 있습니다. VNC도 있고 많이 있지만 저는 여기서 한 걸음 더 나가 PC의 HDMI포트, 혹은 외부 모니터 단자를 사용하여 하드웨어 적으로 네트워크로 뿌리는 것을 목표로 했습니다. 다행히 VNC 수준의 절망적인 속도는 안 나오더군요.
그러기 전에 하드웨어 신호를 직접 네트워크로 뿌려야 하니 필수 하드웨어인 캡쳐보드가 무엇인지 알아야겠습니다. 캡쳐보드는 말 그대로 영상입력장치입니다. 비싼것은 100만원이 넘어가는데다 그나마 쓸만한 놈도 10만원 안팎합니다. PCI슬롯이 없는 노트북에서 사용하려면 Firewire나 USB를 써야 하는데 요새는 Firewire도 없지요. 그 USB방식 캡쳐보드 중 그중 제일 싸구려에 제일 만만하고 제일 여기저기 사용되는 물건이 Easycap(DC-60)입니다. 특징으로는 3만원도 안 되는 가격에 짝퉁이 좀 있어서 대략 4개 업체에서 같은 이름으로 팔고 있습니다.
STK
somagic
UTV007
eMpia
대략 알려진 것은 이렇습니다. 이중 제일 만만한 것이 STK칩셋을 사용한 제품이지만 문제는 어떤게 STK칩인지 모른다는 겁니다. 제일 리눅스에서 사용하기 고통스러운 제품은 somagic칩셋입니다. 다른 칩셋은 커널에 드라이버가 내장되어 금방 잡히지만 somagic은 Broadcom제품처럼 따로 펌웨어를 넣어줘야하는 문제가 있습니다.
저는 일단 국내에서 구하기 쉬운 쪽을 택하기 위해서 조금 신기해보이는 것은 다 파는 컴스마트에서 찾아봤습니다. 역시 있더군요. (하여간 여기는 제가 갖고 싶다고 생각들면 어느새 들여놓습니다. 신기한 회사입니다.)
헐 같은 이름의 물건이 3개다.
이중에서 가운데있는 물건이 eMpia칩셋입니다. 다른 것은 어떻냐고요? 다 Somagic입니다. 오른쪽의 것을 구입했다가 눈물 흘렸던 것은 비밀입니다.
Somagic만 피하면 일단 리눅스로 캡쳐하는 것은 어렵지 않습니다. 드라이버가 내장되어 있어서 별 문제가 없거든요. STK는 Lanstar란 업체에서 수입하는 것을 보이는데 구입해서 뜯어보지 않으면 모른다고 합니다. 그냥 참고하세요.
그럼 리눅스에서 캡쳐는 어떻게 할까요?
일단 제일 쉬운 방법은 http://easycap.blogspot.kr/p/easyview-n-cap.html 이곳에 있는 TVcap 스크립트를 사용하는 겁니다. 일단 실행만 하면 GUI로 옵션을 선택할 수 있어서 편리합니다. 특히 기능이 워낙 충실해서 쓸 곳이 많은 데 EasyCap 사용시 얼어붙어버리는 VLC의 버그를 회피 할 수 있어서 굉장히 유용한 스크립트 입니다. 그러나 단순 화면 재생도 VLC나 Mplayer가 설치되어 있어야 합니다. 그런데 이 중 하나라도 설치 안되어있는 시스템이 있던가요?
또 다른 것은 xawtv를 쓰는 것인데 아마도 제일 가벼운 영상캡쳐 프로그램이 아닐까 생각합니다. 역시 TV를 위해서 나온 것이지만 인터페이스만 익숙해지면 편리합니다. 모르겠으면 화면에 마우스 오른쪽 버튼을 눌러보세요. 하지만 이 프로그램은 재생과 녹화만 잘 됩니다.
그리고 마지막 녀석은...motion 입니다. 뭐냐고 하시는 분이 계실 것 같은데 motion은 라즈베리파이에서 카메라 스트리밍관련 내용을 보면 여기저기에서 쓰이는 것을 알 수 있습니다. 쉽게 말해 영상에서 움직임을 보기위해 만들어진 프로그램인데 웹으로 스트리밍하는 기능이 내장되어 있어서 이걸 써서 다른 플레이어와 연동되게 할 수 있습니다. 제가 이번에 이용할 것은 라즈베리파이와 연동을 해서 스마트폰에 뿌리기까지 하는 것이므로 이걸 쓸 겁니다.
여기서 장치 이름을 /dev/video1로 되어 있는 것을 /dev/video0로 바꿔주셔야 합니다.
3. Easycap 연결
Easycap을 라즈베리파이의 USB포트에 꽂습니다. 즉 라즈베리파이에 영상신호를 넣는 것입니다. 해당 영상은 어떤 것이든 상관 없지만 RCA(AV코드)이므로 여기에 맞게 쓰는 것이 좋습니다. 만약 HDMI를 사용한다면 HDMItoAV같은 장비를 써서 RCA로 넣어야 합니다. 만약 RCA가 너무 구리다고 생각하시면 S-Video를 쓰시면 조금 낫습니다. 화질 문제는 싸구려에게 많은 것을 바라면 안 됩니다. (RCA는 케이블 품질 특성을 많이 탑니다. 그래봐야 HDMI에 비해 현저히 구리지만)
EasyCap같은 캡처보드는 HDMI따위는 지원을 안하기에 이런 장비가 필요하다. 대만에서 만들어진 것으로 추정되는 HDMI to AV 제품 약 2만원 정도
이렇게 vlc-nox를 설치해서 소리를 전송하려고 하니 (rtsp://라즈베리IP주소:8082/ 를 audio 태그 혹은 VLC에서 재생 및 녹화)Easycap 자체가 워낙 구려서 추천하지 않는다고 합니다. 2300원짜리 USB 사운드 카드도 하나 구비해야 할 듯합니다.
사운드 부분 작업 중.
요놈을 추가로 더 구입했습니다. 7000원 더 들었네요.(2300원짜리는 단종되었다고 합니다...허)
USB 사운드카드 하나를 샀습니다. 어차피 EasyCap은 병맛이라고 하니까요. 우선 라즈베리파이 내장 사운드카드를 죽이도록 하겠습니다.
광고는 정말 인터넷에서 빠질 수 없는 수익 요소 중 하나 입니다. 인터넷의 황제라 불리는 구글도 엄연히 말하면 광고회사라고 할 수 있을 정도로 광고를 통해 얻는 수익은 정말 무궁무진합니다. 무료앱들만 봐도 광고를 잠깐 봐주는 것으로 현금이 나가지 않게 조치를 취해주기도 합니다. 인터넷에서 무료로 정보를 얻을 수 있는 것도 광고 덕이라고 할 수 있습니다. 하지만 너무 과한 광고는 웹페이지의 레이아웃을 망치고 또 보는 사람의 눈을 찌뿌리게 할 수있습니다. 그래서 시작 된 것이 Easylist 프로젝트였지요. (https://easylist.github.io/)
Easylist 사이트의 모습 당연히 광고는 없다. 대신 각종 Ad blocker들을 알려주고 있다. 일종의 광고라고 할 수 있을까?
그리고 Firefox는 Ad-Block Plus 확장을 통해 Easylist의 목록에 들어간 것들을 차단하기 시작했고 Chrome 출시 이후 엄청난 속도로 점유율을 높이는 Chrome과 함께 빠르게 이 광고 차단 확장이 퍼져나가게 되었습니다. 멀리 갈 것도 없이 저의 블로그만 해도 광고가 없어지는 순간 뭔가 허전하면서도 깔끔한 화면으로 변하는 것을 볼 수 있습니다.
그런데 광고가 주 수익인 일부 사이트는 이게 굉장히 마음에 들지 않았나 봅니다. 그래서 브라우저에서 이 Ad Block Plus를 필두로 한 각종 광고 차단 플러그인이 설치되어있을 경우 이를 경고하거나 사이트 이용 자체를 차단하는 방법을 사용하기 시작했습니다. 일명 Anti-AdBlock 이라고 합니다. 즉 Ad-block이 감지되면 갑자기 사이트가 이상한 곳으로 넘어가게 웹페이지를 짜두거나 페이지에 광고차단기를 꺼달라는 호소문(?)을 띄운다던지 하는 방법으로 사용자들을 귀찮게 하는 것이었지요. 실제로 Chrome을 설치하고 ADB(Ad Block Plus)를 설치하는 사람들이 많은 관계로 생각없이 돌아다니다가 이러한 Anti-Adblock에 걸리면 그냥 광고 차단을 풀기도 했습니다.
그런데 어떤 사이트는 그냥 광고가 도배되어서 귀찮음을 뛰어넘어서 그냥 광고만 하는 사이트 처럼 보이게 만들기도 하는데 여기에 Anti-Adblock을 적용까지 하면 참 사람 성질나게 합니다.
대표적인 광고 도배 사이트
아는 사람은 안다. 내가 원하는 컨텐츠는 이 광고를 한참 지나고 나서야 보일 정도로 심각하다.
위의 사이트에서 광고를 막을 경우 Anti-AdBlock이 발동해서 사이트 이용을 막아버리기도 한다. 보는 사람 참 성질난다...
즉 광고라는 무기로 창이 등장하자 이를 막는 Ad Block이 등장했고 또 이 Ad Block을 뚫어버리는 창이 나오게 된 것입니다. 그럼 이제 방패를 강화할 때가 되었습니다. 그런데 사람들은 이 방패를 강화하는 것이 아닌 새로운 방패를 추가하는 것으로 대응했습니다. 일명 Anti-Adblock Killer. (https://reek.github.io/anti-adblock-killer/)즉 광고차단반대파 살해자(...) 대략 이렇게 해석 할 수 있습니다. 원리는 웹페이지를 UserScript를 이용해서 제어할 수 있는 GreaseMonkey(Firefox), TamperMonkey, Scriptish 등의 확장이 있는데 이를 이용해서 웹페이지를 손대는 방식입니다.
즉 이 Anti Adblock Killer를 사용하려면
Firefox용 수많은 광고 차단기들 특정 사이트의 광고를 차단해주는 것도 있고 광범위하게 광고를 차단하는 것도 있다.
이 쪽은 Anti-Adblock Killer를 설치하는 곳이다. 간단한 영어만 하면 솔직히 내 블로그도 필요 없다.
1. 광고차단 확장을 설치하고(Adblock Plus, Adblock, uBlock Origin, Adguard)를 설치합니다. Firefox for mobile에도 광고 차단을 할 수 있는데 모바일 특성상 uBlock Origin을 추천합니다. PC라면 다른 프로그램도 좋습니다.
2. GreaseMonkey, TamperMonkey 나 Scriptish 등의 Userscript 확장을 설치합니다. Firefox for mobile에 Ublock origin이나 Adblock 등을 설치하신 경우에는 usi 라는 확장을 설치하시면 됩니다.
링크를 보시면 일단 PC에 한해 해당 기능이 동작하지만 윈도우는 SAPI의 기능을 써서 사용하고 Mac은 Siri와 같은 엔진을 사용합니다. 리눅스는 기본으로 espeak을 사용하는데 특징으로는 한국 사람이 아니라 무슨 외국인이 한국어를 하는 듯한 느낌이 듭니다. 그냥 안 쓰는게 나을 듯 합니다.
Android 부분을 보시면 TTS 기능이 지원이 안 된다고 합니다. 하지만 안드로이드에는 자체적으로 TTS가 내장되어 있습니다. 솔직히 마음먹기에 따라 이걸 끌어다가 사용하면 될 것도 같은데요. 조금 더 찾아봤습니다.
기본적으로 안드로이드 TTS를 사용하기 위해서는 자바를 써야하는데요. 렌파이의 안드로이드는 NDK로 SDL과 파이썬을 굴리며 JNI를 통해 안드로이드 앱을 만드는 방식입니다. 그러니까 지원이 되기 위해서는 JNI 부분을 건드려야 한다는 말입니다.
찾다보니 이런 놈이 있더군요. python for android. https://github.com/kivy/python-for-android 파이썬으로 안드로이드 앱을 만들 수 있는 물건입니다. QT하고 조합도 가능한 듯 합니다. 하지만 이걸 쓰면 렌파이를 뜯어 고쳐야 합니다. 여기에 연관된 물건 중 하나가 있더군요.
네...그렇습니다. 렌파이는 이미 이 라이브러리를 쓰고 있던 것이었습니다. 이쯤되니 "어째서 TTS가 지원이 안 된거지?" 라는 생각이 들더군요.
일단 제가 알아낸 것으로는 렌파이에서 PythonActivity란 클래스는 사라지고 PythonSDLActivity로 바뀌었습니다. 그런데 이것도 엄밀히 말하면 Android Activity이니 문제는 없을 겁니다. 그렇다면....renpy엔진을 뜯어 고쳐서 Say 함수가 호출 될 때 TTS가 작동되게 하면 되겠다는 생각이 들었습니다.
아 참고로 Say함수는 renpy/exports.py에 들어있습니다. renpy.say(who,what)이게 API라더군요. 그럼 이 API를 수정하면 그만이겠지요. 후후
즉, 또 삽질입니다. 마침 Sunrider Academy의 번역도 찰지고 하니 이를 이용하면 재미있을 듯 합니다. 안드로이드TTS는 삼성TTS나 구글TTS같이 찰진(?) 목소리들이 많으니 이를 이용하면 재미있을 듯 합니다. 물론 어떻게 될지는 저도 모릅니다. 일단 해봐야지요. 후후
public class PythonSDLActivity extends SDLActivity {
...
}
이 부분에 TTS엔진의 인터페이스를 추가합니다.
public class PythonSDLActivity extends SDLActivity implements TextToSpeech.OnInitListener{
private TextToSpeech tts;
...
}
요렇게 수정합니다.
그리고 onCreate()에
tts = new TextToSpeech(this, this);
이 한 줄을 추가해서 tts객체를 하나 만듭니다. 물론 onDestroy()에도
tts.Shutdown();
을 추가해서 종료될 때 tts엔진을 같이 종료하게 만듭니다.
그리고 제일 중요한 oninit()함수
@Override public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.getDefault());
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "This Language is not supported"); } else { //아무짓도 하지 않는다... }
} else { Log.e("TTS", "Initilization Failed!"); }
}
그냥 어디서 Copy 해 온 것인데 TTS가 제대로 작동 하는지에 대해 로그를 남깁니다. 일단 컴파일은 됩니다. 문제는 이게 실행이 되느냐인데...으음...?
... 좀 많이 삽질해서 성공 했습니다...뭔가 이상하기는 하지만(...)
그런고로 수정된 파일을 올리겠습니다.
PythonSDLActivity.java는 renpy 설치된 곳/rapt/src/org/renpy/android/PythonSDLActivity.java
FTP는 상당히 오래전에 만들어진 규약입니다. 파일 배포를 위해 만들어진 규약인데 대표적으로 쓰이는 곳은 여러분이 사용하는 리눅스의 패키지 저장소가 있습니다.
국내 유명 리눅스 저장소 중 하나인 카이스트 FTP 서버 이러한 불특정 다수에게 파일 배포하기 좋은 프로토콜 중 하나가 FTP이다
대표적인 FTP클라이언트 FileZilla 굉장히 안정적이며 모든 OS를 지원하는 등 국내의 어떤 프로그램 보다 훨씬 낫다.
파일 저장과 파일공유를 중심으로 하는 NAS를 만드시겠다면 이 FTP를 빼 먹을 수는 없겠지요. 이전의 Webmin을 사용한 웹 서버겸 NAS 구축기 (http://moordev.tistory.com/108)를 보셨다면 중간에 ProFTPD를 설치를 알게모르게 했습니다. 최근에는 VSFTP가 더 많이 쓰인다고 하지만 ProFTPD는 Apache처럼 상당히 오랜기간 사용되었던 FTP서버 프로그램 중 하나입니다. 사실 Webmin에서 기본적으로 지원하는 서버가 이거였기도 했고 저도 믿음이 있는 서버프로그램이라 이걸 사용했습니다. 보안상 문제가 있었다고 하지만 업데이트는 충실히 되고 있고 만약 정말로 문제가 크게 일어났다면 데비안 저장소에서 내렸겠지요.
저번 글이 기본적인 서버의 뼈대 구축기였다면 이번에는 그 뼈대에 FTP를 발라 기본적인 구성을 하게끔 하는 것을 목적으로 하겠습니다. 저번 글을 못 보신 분은
이전 글에서 우리는 마지막에 Webmin을 설치하고 Webmin이 지원되는 서버인 (Apache+PHP+MySQL),ProFTPD를 설치하는 단계까지 갔습니다. 이후에 Webmin관리 페이지에서 각 모듈을 설정할 수 있는 단계까지 왔었습니다.
이중에서 제일 신경 써야 하는 부분은 ProFTPD의 디렉토리 부분과 로그인 부분으로 보안상 굉장히 중요하며 파일 공유를 대충 하면 여러분의 서버 프로그램이 엉망이 될 수도 있습니다.
그리고 그 다음에는 MonstaFTP를 웹서버에 설치하는 단계입니다. 이건 간단하게 SSH나 터미널로 처리하도록 합시다.
MonstaFTP를 /var/www에 설치하시면(쉽게말해 웹서버의 메인 디렉토리입니다. 보통 아파치는 여기가 기본이고 나중에 바꿀 수 있지만 귀찮으니 저희도 여기에 그냥 설치해버립시다.) 웹에서 FTP접속을 해서 쓸 수 있습니다. Webmin의 자체 파일 탐색기도 있지만 Webmin자체가 관리 페이지이니 이걸 다른 사람과 공유한다는 것은 어렵겠지요. 그래서 MonstaFTP를 사용하는 겁니다.
여기로 접속하시면 FTP에 접속 할 수 있는 페이지가 뜨는데 서버의 IP를 적으라고 합니다. 게다가 영문 인터페이스군요. 이걸 해결하도록 해봅시다. 다시 SSH를 접속해봅시다. (몰랐는데 Webmin에 SSH기능도 있다고 합니다. 그런데 느려서 별로 추천은 하기 싫습니다. 그냥 putty가 낫습니다.)
sudo nano /var/www/mftp/config.php
$ftpHost = "서버IP"
#ftpHost에 내 서버의 IP주소추가
Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출
sudo nano /var/www/mftp/languages/en_us.php
$file_lang_default = 0;
#1로 되어있는 것을 0으로 수정
Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출
sudo nano /var/www/mftp/languages/ko_ko.php
$file_lang_default = 1;
#0으로 되어있는 것을 1로 수정
Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출
sudo services apache2 restart
이제 들어가 보시면 한글로 되어있고 서버IP를 적는 곳이 사라진 깔끔한 화면을 볼 수 있습니다. root가 아닌 설치할 때 만든 유저계정으로 로그인하시면 파일의 업로드와 다운로드가 가능합니다. 심지어 드래그 앤 드롭도 먹힌다고 하네요. 다만 기술적인 이유로 크롬만이 폴더 업로드가 가능합니다.
다만 업로드 제한이 128MB로 상당히 작은 것을 알 수 있는데 이는 php.ini의 설정 문제로 Webmin의 PHP설정에 들어가서 MemoryLimit을 수정 함으로서 제한을 풀 수 있습니다. 대신 서버의 메모리보다 크게 잡으시면 서버가 크게 느려집니다.