- notice 스킨변경~
전에 WireShark를 이용해서 알송패킷을 캡쳐했을 때 보면 특정주소의 WebService를 요청해서 가져오게 되어있었습니다. http://mudchobo.tomeii.com/tt/434
실제 전송하는 데이터는 MD5값인데, 이게 어떻게 생성되는지 몰라서 구글에서 검색을 하니 어떤 블로그에서 시도한 흔적을 발견했습니다. 거기에 있는 댓글에서 발견했습니다^^
http://dialup.egloos.com/152001
"MP3 파일의 경우 strChecksum 값은 ID3태그등을 제외한 순수 MP3 음악 데이터를 앞에서부터 163840 바이트 읽어서 MD5로 돌린 값입니다. " 라고 친절하게 답변이....-_-
그래서 이렇게 하니까 잘 되더라구요. 아래는 샘플 코드입니다.
필요한 라이브러리는 MD5생성해주는 corelib가 필요합니다.
http://code.google.com/p/as3corelib/
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="applicationCompleteHandler()">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import flash.text.engine.ContentElement;
import mx.messaging.messages.HTTPRequestMessage;
import mx.rpc.http.HTTPService;
import com.adobe.crypto.MD5;
private function applicationCompleteHandler():void
{
var fs:FileStream = new FileStream();
fs.open(new File("C:/Users/mudchobo/Downloads/임재범 - 사랑이라서.mp3"), FileMode.READ);
var fileSize:int = fs.bytesAvailable;
for (var i:int = 0; i < 500000; i++)
{
if (fs.bytesAvailable >= 3 && fs.readUTFBytes(3) == "ID3")
{
var sizeByte:ByteArray = new ByteArray();
// ID3v2길이구하기
fs.position += 3;
fs.readBytes(sizeByte, 0, 4);
var id3Size:int = sizeByte[0] << 21 | sizeByte[1] << 14 | sizeByte[2] << 7 | sizeByte[3];
fs.position = id3Size + 10;
break;
}
}
// ID3태그 없는 경우
if (i == 500000)
{
fs.position = 0;
}
// 공백있는 ID3태그에 대한 처리
for (i = 0; i < 50000; i++)
{
if (fs.readUnsignedByte() == 255)
{
var a:int = fs.readUnsignedByte();
if ((a >> 5) == 7)
{
fs.position += -2;
break;
}
}
}
// 163840만큼 읽어서 md5생성
var data:ByteArray = new ByteArray();
fs.readBytes(data, 0, 163840);
var md5:String = MD5.hashBytes(data);
// 웹서비스 요청
var httpService:HTTPService = new HTTPService();
httpService.method = HTTPRequestMessage.POST_METHOD;
httpService.contentType = "application/soap+xml";
httpService.url = "http://lyrics.alsong.co.kr/alsongwebservice/service1.asmx";
httpService.request = new XML('<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="ALSongWebServer/Service1Soap" xmlns:ns1="ALSongWebServer" xmlns:ns3="ALSongWebServer/Service1Soap12"><SOAP-ENV:Body><ns1:GetLyric5><ns1:stQuery><ns1:strChecksum>' + md5 + '</ns1:strChecksum><ns1:strVersion>2.0 beta2</ns1:strVersion><ns1:strMACAddress>ffffffffffff</ns1:strMACAddress><ns1:strIPAddress>255.255.255.0</ns1:strIPAddress></ns1:stQuery></ns1:GetLyric5></SOAP-ENV:Body></SOAP-ENV:Envelope>');
httpService.addEventListener(ResultEvent.RESULT, resultHandler);
httpService.addEventListener(FaultEvent.FAULT, faultHandler);
httpService.send();
}
private function resultHandler(event:ResultEvent):void
{
trace("싱크가사 = " + event.result.Envelope.Body.GetLyric5Response.GetLyric5Result.strLyric);
}
private function faultHandler(event:FaultEvent):void
{
trace(event.toString());
}
]]>
</mx:Script>
</mx:WindowedApplication>
여기서 알송가사에서 제공하는 웹서비스는 WebService인데, HTTPService로 요청한 이유는 wsdl문서가 어디있는지 못찾겠음 ㄷㄷ 그래서 그냥 httpservice로 xml통채로 넘겨버리니-_- 되더라구요 ^^
xml넘길 때 strCheckSum값만 md5구한걸로 넘기면 돼요^^
싱크가사 = [00:00.00]하루 하루 그대만 보여서<br>[00:23.28]매일매일 눈을 가리고 살아<br>[00:31.34]그대 곁을 나조차도 모르게 머물며<br>[00:38.91]메마른 내 가슴이 그댈 잊어버리지 못한 이유는<br>[00:00.00]<br>[00:00.00]<br>[00:49.93]사랑이라서 사랑이라서<br>[00:56.06]두번다시 못볼 사랑이라서<br>[00:00.00]<br>[01:03.32]하늘이 하는 일 돌릴 수 없는 일<br>[01:11.39]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[01:19.51]죽어서 보라고 그래서 보라고<br>[01:26.42]그때라도 사랑한 마음이 남아있게된다면<br>[01:34.53]그때쯤에<br>[00:00.00]<br>[01:42.93]어딜가도 그대만 보여서<br>[01:49.88]매일매일 나를 지우고 살아<br>[01:57.28]한순간도 바람처럼 떠날줄 모르고<br>[02:04.71]죽어도 내가슴이 그댈 떠나보내지 못한 이유는<br>[00:00.00]<br>[02:15.49]사랑이라서 사랑이라서<br>[02:23.68]가슴가득 맺힌 사랑이라서<br>[00:00.00]<br>[02:29.68]하늘이 하는 일 돌릴 수 없는 일<br>[02:37.81]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[02:45.79]죽어서 보라고 그래서 보라고<br>[02:52.51]그때라도 사랑한 마음이 남아있게 된다면<br>[03:00.90]그때쯤에<br>[00:00.00]<br>[03:04.66]간절히 바랬어 너에게 가는일<br>[00:00.00]<br>[03:33.19]하늘이 하는 일 돌릴 수 없는 일<br>[03:41.80]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[03:49.23]죽어서 보라고 그래서 보라고<br>[03:56.56]그때라도 사랑한 마음이 남아있게된다면<br>[04:04.29]그때쯤에<br>PS. HTTPService에서 xml전송해서 하는 거 어떻게 하는지 몰랐는데, 그냥 httpservice에 있는 request객체에 xml을 생성해서 넣어주면 된다는....-_-
-
-
-
-
-
궁금이
for (i = 0; i < 50000; i++)
{
if (fs.readUnsignedByte() == 255)
{
var a:int = fs.readUnsignedByte();
if ((a >> 5) == 7) //굳이 5와 7로 값을 정한이유가 왜죠?
{
fs.position += -2; //포지션이 두칸뒤로가면 계속 돌지않나요?
break;
}
}
} -
더욱 놀라운 것은 무료라는 것!(물건 팔러온 것 같군요) 하지만 영어.....OTL.....요즘은 유명하지 않은 프로그램도 한글판이 있고 그러던데...와이어샤크도 한글패치를....-_-
우선 설치를 해봅시다!
http://www.wireshark.org/download.html
저는 64bit여서 64비트용으로 받았네요^^
설치를 하면 되는데요. 설치를 하다보면 Install WinPcap을 설치할 것인지 물어보는데요.
저는 뭐 부가적으로 설치하는건가...이런식으로 끼워팔면 안돼! 당당히 Install체크를 해제했는데, 꼭 필요한 것입니다-_- 체크하고 설치하세요-_-

실행하면 DashBoard같은 것이 나오는데, Capture부분에 어떤 걸 캡쳐시작할 것인지 선택할 수 있는데, 자신의 랜카드는 백방 첫번째로 나오는 것 같습니다-_- 제 회사컴도 그렇고, 제 놋북도 그렇고-_-
암튼, 첫번째꺼 클릭하면 캡쳐가 시작됩니다. 웹서핑을 시작하면 미친듯이 로그가 올라가요-_-
이런 게 있으면 가장 궁금했던 알송가사는 어떻게 전송되는지 확인해봅시다-_-
알송으로 노래를 아무거나 하나 듣습니다. 그럼 뭔가 패킷을 주고 받았습니다.
가사가 있으니 응답패킷을 살펴보니 이렇네요.
[00:00.59]Is this the real life~~~~ 이런식으로 넘어오네요.
이런 soap을 이용한 webservice로 통신을 하는줄 몰랐네요.
암튼, 매우 유용한 패킷분석기네요^^
-
-
머드초보
와....파이어버그에는 없는기능이 없군요 ^^
전 간간히 javascript디버거 용으로 쓰긴 하지만, 패킷도 다 보이는군요^^
-
-
-
머드초보
일단 와이어샤크는 패킷감시만 할 수 있구요.
패킷값을 바꿔서 보내는 건 뭐 가능하겠지만, 제가 어떻게 하는지 모르겠구요-_-
저렇게 그냥 똑같이 만들어서 보내는 건 뭐 가능합니다^^
그냥 뭐 요청하는거다보니-_- 똑같이 http요청만들어서 보내면 됩니다^^
-
국내 MP3플레이어 중에서는 최고라고 생각하고 있는 알송! 왜냐하면 사용자가 많아서 인지 가사가 다 잘나오거든요^^ 가사는 사용자가 직접 등록하는 것인데, 신기하게도 희귀한 음악 빼곤 왠만해선 가사가 다 입력이 되어있습니다^^ 사용자가 많으니 이런 점이 참 좋죠^^ 게다가 플레이어 기능도 전혀 불편하지가 않죠. 전 그래서 알송을 애용해요~ ^^
2.0에서 새로 생긴 기능을 한번 살펴봅시다.
모양은 아래와 같이 바뀌었군요.
1. 아이튠즈와 비슷한 기능중 하나인 재생목록기능
이건 자신만의 재생목록을 만들 수 있습니다. 새 재생목록 추가버튼 클릭하고, 새로운 재생목록을 만들어서 음원을 추가하면 재생목록을 만들 수 있습니다. 재생목록을 분리해서 정리해놓으면 듣고 싶을 때 노래도 쉽게 찾을 수 있겠죠.
게다가 추가로 많이 들은 음악, 최근 들은 음악을 제공합니다. 많이 들은 음악은 알송으로 재생한 곡수를 통계를 내어서 가장 많이 들었던 노래를 순위별로 보여주죠. 아이튠즈에 있던 기능들이죠^^
재생목록 관리 화면
2. MP3플레이어와 직접적인 연동
여기서 말하는 MP3플레이어는 알송이 아닌 기기를 말합니다-_- 제가 가지고 있는 s9와 연결해보겠습니다.
연결하면 신기하게 인식을 하는군요^^
사실 이 기능은 뭐 그냥 자신의 하드드라이브에 있는 곡들을 MP3Player로 이동식디스크로 복사하는 건데, 좀 더 편하게 현재 재생되고 있는 노래나 재생목록에 있는 곡들을 쉽게 복사할 수 있죠^^
MP3남은 용량도 볼 수 있네요.
사운드효과는 뭐 제가 막귀여서 이런 기능은 저한테 사치죠-_-
디자인도 깔끔하고 맘에 드네요 하지만 이런 기능들은 다 필요없고-_- 알송을 쓰는 이유는 단하나입니다-_-
싱크가사죠-_- 방대한 양의 싱크가사가 존재합니다. 몇백만 되는 사용자들의 노가다 정성이 들어간 멋진 기능이죠. 이 기능때문에 알송을 포기할 수 없어요-_-
-
알송2.0 아오 !!
가장 중요한게 불편함 ㅡㅡ,,
구버전에서는 화살표 누르면 다음곡 , 이전곡 , 소리 음량 이런거 다되는데
신버전에는 마우스로 하나하나 클릭해서 해야돼 아오 알송 몹쓸 프로그램 -

알송에다가 대고 마우스 오른쪽버튼 누르면 나온다.
알송에서는 매우 쉽게 제작할 수 있도록 자체적으로 벨소리를 만들어 주는 기능을 제공한다.
제작하고 싶은 노래 재생 중에 '휴대폰 벨소리 제작하기'를 클릭하면
아래와 같은 화면이 나온다.

노래의 범위를 정하는것이다.
<1초를 클릭하면 현재 지정된 범위에서 전체적으로 1초 앞당기는 것이고 1초>를 클릭하면
전체적으로 1초 늦추는 것이다.
여기서 아쉬운 점이라면 1초간격으로 이동하기 때문에 미세한 조절은 불가능 하다.
재생버튼, 정지버튼, 노래선택버튼이 있다.
화음은 40, 64화음 밖에 선택을 하지 못한다. 최근 128화음 핸드폰이 점점 나오고 있는데
128화음으로 제작하려면 사운드 편집프로그램을 통해서 제작하면 된다.(시간나면 올려야지--;)
체크를 하지 않으면 지나치게 고음인 부분에서 살짝 찢어지는 느낌을 받을 수 있기 때문이다.
점점 크게는 처음 도입부분에 소리를 점점 키워서 재생시키는 것이다. (Fade In 같은거)
점점 작게는 마지막 끝날 때 소리를 점점 작게 하여 재생시키는 것이다.(Fade Out 같은거)
스테레오와 모노 설정 하는 것이 있는데 모노로 해야한다-_-; 스테레오로하면 소리가 이상하다.
내 핸드폰은 투스피커로 스테레오인데도 이상했다. 모노로 해야한다-_-;

위와 같이 설정하면 핸드폰에서도 무리없이 재생 될 것이다.
여러가지 테스트를 거쳐서 자신의 핸드폰에 가장 잘 맞는 음질로 해서 저장하면 된다.
간혹가다가 핸드폰에 파일크기 제약이 있는 핸드폰에 있는데 그것을 위해 친절하게
파일 크기가 얼마가 나오는지도 보여준다. 자신의 핸드폰의 한계용량으로 해서 넣으면 된다.

