Lomohome.com :: 괴발자 모근원


COCOSDenshion (of cocos2d 0.99.5) 의 SimpleAudioEngine 믿고 배경음을 출력했었다.
시뮬레이터에서 잘 되고~ 아이팟 터치 2세대에서 잘 되고~

그런데!! iPhone 4에서만 배경음악이 출력이 안되는것~! (효과음 effect 출력은 잘 되고있는데?!)
로그를 찍어보니 파일의 위치를 읽어오지 못하고 있었다.
참고로 한 Sample 의 TomTheTurret 도 마찬가지의 버그를 내고있었고..
버그인지.. cocos2d 라이브러리를 직접 수정하다가. 곧 업데이트가 될것 같아서 원복하고..
그냥 임시로 업데이트될때까지 SimpleAudioEngine 에서 배경음 재생 실패할 경우 AVAudioPlayer 를 이용해서 재생하도록 했다.
그리고 Fadein/out 시켜주는 메소드 하나 추가하고..
결과는 기종에 관계없이 배경음이 자~알 출력된다.
사운드 엔진은 싱글턴으로 프로그램내에서 어디서든지 불러다 쓸수있게 했다.

SimpleAudioEngine *soundEngine_;



//-- 이 아래에는 AVAudioPlayer를 위한 멤바들.

BOOL isAVAudioPlayer; //한번이라도 AVAudioPlayer 이용하여 배경음을 재생하면 셋팅된다.

//차선책으로 쓰는 AVAudioPlayer

AVAudioPlayer *bgmPlayer;

CGFloat fadeAmt; //Fadeout 감소값.

CGFloat fadeDesc; //Fadein 목표값.

요러한 멤버객체가 인터페이스에 선언이 되어있다 치고..

-(SimpleAudioEngine *) soundEngine

요런식으로 심플 오디오 엔진을 리턴하는 메소드가 있다 하자..

객체 init 해줄때 초기화 꼼꼼히 해주고..

isAVAudioPlayer = NO;

fadeAmt = 0;


dealloc  해줄땐 AVAudioPlayer 로 배경음 재생중이면 꺼주고 죽여주자.

if (self.bgmPlayer != nil) {

[self stopBGMwithAudioPlayer];

}




발로짠 오디오 플레이어 부분.

//배경음 재생을 시작한다.

-(void)playBGMwithAudioPlayer:(NSString*)filename ext:(NSString*)ext volume:(CGFloat)vol{

if (self.isSoundOn) {

[self stopBGMwithAudioPlayer];

if(self.bgmPlayer == nil){

self.bgmPlayer = [self createAudioPlayer:filename ext:ext volume:vol];

//-1 무한반복

self.bgmPlayer.numberOfLoops = -1;

}

[self.bgmPlayer play];

}

}


-(void)stopBGMwithAudioPlayer{

if (self.isSoundOn && self.bgmPlayer != nil) {

NSLog(@"AVAudioPlayer 스탑!");

[self.bgmPlayer stop];

// self.bgmPlayer.currentTime = 0; //rewind

self.bgmPlayer = nil;

}

}



//오디오 플레이어를 만든다.

-(AVAudioPlayer*)createAudioPlayer:(NSString*)filename ext:(NSString*)ext volume:(CGFloat)vol{

NSString *audioPath = [[NSBundle mainBundle]pathForResource:filename ofType:ext];

NSLog(@"새로운 AVAudioPlayer 생성 %@.%@ (%f%%)",filename,ext,vol);

AVAudioPlayer *tmpAudioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:audioPath] error:nil];

tmpAudioPlayer.numberOfLoops = 0;

tmpAudioPlayer.volume = vol;

//소리를 위해 버퍼에 로딩

[tmpAudioPlayer prepareToPlay];

isAVAudioPlayer = YES;

[tmpAudioPlayer autorelease];

return tmpAudioPlayer;

}



//음악을 서서히 죽여준다.

-(void)fadeoutBGMwithAudioPlayer{

    if (self.bgmPlayer!=nil && self.bgmPlayer.volume > 0.01f) {

//2초정도 소리를 줄여주기 위하여

if (fadeAmt == 0) fadeAmt = self.bgmPlayer.volume/20;

        self.bgmPlayer.volume = self.bgmPlayer.volume - fadeAmt;

        [self performSelector:@selector(fadeoutBGMwithAudioPlayer) withObject:nil afterDelay:0.1f];

} else {

NSLog(@"fadeOut finish");

fadeAmt = 0;


[self stopBGMwithAudioPlayer];

}

}



//음악을 서서히 살려준다.

-(void)fadeinBGMwithAudioPlayer{

//NSLog(@"fadeIn %f amount %f desc %f",self.bgmPlayer.volume,fadeAmt,fadeDesc);

    if (self.bgmPlayer!=nil && self.bgmPlayer.volume <= fadeDesc) {

//2초정도 소리를 줄여주기 위하여

if (fadeAmt == 0) fadeAmt = fadeDesc/20;

        self.bgmPlayer.volume = self.bgmPlayer.volume + fadeAmt;

        [self performSelector:@selector(fadeinBGMwithAudioPlayer) withObject:nil afterDelay:0.1f];

} else {

NSLog(@"fadeIn finish");

fadeAmt = 0;

}

}


그리고 SimpleAudioPlayer 를 같이 쓰면서 배경음 재생 실패하면 바로 AVAudioPlayer 를 이용.

//BGM재생.

-(void) playBGM:(NSString*)filename ext:(NSString*)ext volume:(CGFloat)vol{

if (self.isSoundOn){

//soundEngine

if (!isAVAudioPlayer && [self soundEngine] != nil) {

NSLog(@"soundEngine 으로 배경음 재생 시도.");

[self soundEngine].backgroundMusicVolume = vol;

[[self soundEngine] playBackgroundMusic:[[NSBundle mainBundle] pathForResource:filename ofType:ext] loop:YES];

}

NSLog(@"soundEngine : isBackgroundMusicPlaying (%d), isAVAudioPlayer(%d)",[[self soundEngine] isBackgroundMusicPlaying],isAVAudioPlayer);

if (isAVAudioPlayer || [self soundEngine] == nil || ([self soundEngine] != nil && ![[self soundEngine] isBackgroundMusicPlaying])) {

//AudioPlayer

NSLog(@"soundEngine 으로 배경음 재생 실패하여 AVAudioPlayer 시도.");

[self playBGMwithAudioPlayer:filename ext:ext volume:vol];

}

}

}


-(void) fadeinBGM:(NSString*)filename ext:(NSString*)ext volume:(CGFloat)vol{

if (self.isSoundOn){

//soundEngine

if (!isAVAudioPlayer && [self soundEngine] != nil) {

NSLog(@"soundEngine 으로 배경음 페이드 재생 시도.");

[self soundEngine].backgroundMusicVolume = 0;

[[self soundEngine] playBackgroundMusic:[[NSBundle mainBundle] pathForResource:filename ofType:ext] loop:YES];

[CDXPropertyModifierAction fadeBackgroundMusic:2.0f finalVolume:vol curveType:kIT_SCurve shouldStop:NO];

}

if (isAVAudioPlayer || [self soundEngine] == nil || ([self soundEngine] != nil && ![[self soundEngine] isBackgroundMusicPlaying])) {

//AudioPlayer

NSLog(@"soundEngine 으로 배경음 재생 실패하여 AVAudioPlayer 페이드 재생 시도.");

fadeDesc = vol;

[self playBGMwithAudioPlayer:filename ext:ext volume:0];

[self fadeinBGMwithAudioPlayer];

}

}

}


-(void) stopBGM{

if (self.isSoundOn){

if (isAVAudioPlayer) {

[self stopBGMwithAudioPlayer];

} else {

if ([self soundEngine] != nil){

[[self soundEngine] stopBackgroundMusic];

}

}

}

}


-(void) fadeoutBGM {

if (self.isSoundOn) {

if (isAVAudioPlayer) {

[self fadeoutBGMwithAudioPlayer];

} else {

if ([self soundEngine] != nil){

//2 페이드 아웃.

[CDXPropertyModifierAction fadeBackgroundMusic:2.0f finalVolume:0.0f curveType:kIT_SCurve shouldStop:YES];

}

}

}

}


끗. (이랬는데 뭔가 잘못써서 SimpleAudioEngine 에서 출력이 안된거라면 대략 난감.. 삽질의 향기가..)


- (덧) COCOS 2D 1.0rc 버전에서는 수정되었음 -_-......... 
Posted by 모근원

아이팟이나 아이폰에서 티스토리 블로그를 보시는분들 많으시죠?
http://[일반주소].tistory.com
를 사용하시던 티스토리 블로거 님들은 신경쓰지 않으셔도
아이팟이나 아이폰에서 블로그 접근하면 모바일용 페이지로 보입니다.
스마트폰에서 블로그로 접근하면 모바일용 페이지로 보입니다.

- 수정 : 현재나와있는 거의 모든 모바일기기의 userAgent 를 검사하는 방식으로 변경했습니다.
http://en.wikipedia.org/wiki/List_of_user_agents_for_mobile_phones

그런데 저처럼 티스토리에 자신의 도메인을 연결해서 쓰시는분들은
다음 그림에서처럼 자동으로 모바일 페이지로 이동이 안되고 일반 웹페이지가 나왔었지요.


이때 자바스크립트 몇줄만 스킨에 넣어주면 모바일용 페이지로 이동하게 만들 수 있습니다.
이 방법은 저처럼 lomohome.com 이나 www.lomohome.com 등의 도메인을 티스토리에 연결하신 분께 해당됩니다.

관리자모드 - 스킨 - HTML/CSS 편집에서
HTML 의 <head></head> 태그 사이안에 다음의 자바스크립트를 넣으면

블로그 접근시 유저에이전트를 검사하여 스마트폰이면
모바일 사이트로 이동을 하게 합니다 :-)

<script language="JavaScript">
//모바일 페이지로 이동.
//http://en.wikipedia.org/wiki/List_of_user_agents_for_mobile_phones
var uAgent = navigator.userAgent.toLowerCase();
var mobilePhones = new Array('iphone','ipod','android','blackberry','windows ce',
        'nokia','webos','opera mini','sonyericsson','opera mobi','iemobile');
for(var i=0;i<mobilePhones.length;i++)
    if(uAgent.indexOf(mobilePhones[i]) != -1)
        document.location = "http://"+ location.host +"/m" + location.pathname;
</script>

주의하실점은 위의 빨간색에 이탤릭체로 표시된 부분은
http://[원래티스토리주소].tistory.com/m
으로 해주셔야 한다는것 입니다 :-)
url 을 가져와서 가는방법으로 수정되었습니다.

* 현재 제 블로그에서 [페이지 소스보기] 로 보셔도 해당 소스를 보실 수 있습니다.

작업 후 아이팟 터치나 아이폰에서 자신의 블로그로 접근하면

작업 후 스마트폰에서 자신의 블로그로 접근하면
이렇게 모바일용 페이지로 이동합니다 :-)

모바일용 웹페이지는 작은 해상도에 맞게 이미지등도 리사이즈 해줘서
느린 모바일기기에서 최적의 상태로 블로그를 볼수 있게 합니다.

Posted by 모근원
국내 은행 최초로 하나은행에서 아이폰/아이팟 용 모바일뱅킹 어플이 나왔습니다.
이름은 하나 N Bank 라는군요.
아시는 바와같이 해킹 (즉 탈옥)된 아이폰/팟 (이하는 편의상 아이폰이라 하겠습니다) 에서는 사용이 되지 않는다네요. 보안을 위해서라 생각됩니다.
처음엔 한국 스토어에만 올라왔으나 현재는 미국스토어에서도 내려받기가 가능하다고 합니다.
가격은 당연히 Free 이구요.
어플스토어에서 "hanabank" 를 검색하시면 됩니다.
http://itunes.apple.com/us/app/id340826757?mt=8 [바로가기 링크]

실행하면 기동화면이 나오고 해킹여부를 확인후 공인인증센터에서 인증서를 내려받을수 있습니다.
이니텍의 모듈을 사용하기때문에 안타깝게도 Windows 기반의 PC 에서 작업을 해야하네요.
공인인증서를 아이폰에 넣는 방법은 하나은행 홈페이지에 상세히 설명 되어있습니다.
http://www.hanabank.com/smart

이제 공인인증서를 내려받았으니 기본적인 거래내역 조회와 이체화면을 알아보겠습니다.

공인인증서 작업이 완료된 후엔 이렇게 인증서 로그인을 통해 뱅킹서비스를 시작하게됩니다.


인증서 선택후 인증서 비밀번호를 입력하는 화면입니다.


12시부터 5분간은 서비스가 안된다네요 -_-;


최초 사용시엔 이렇게 약관페이지가 나오며
약관에 동의하여야 스마트폰 뱅킹 서비스를 받을 수 있습니다.


스마트폰 뱅킹 서비스를 가입하기 위해 다시 한번 공인인증서와 보안카드를 넣는
보안매채인증 작업을 합니다. OTP 이용자는 OTP 번호 입력창이 뜨겠네요.
탈옥을 하면 사용할수 없는 모바일 뱅킹이라 Backgrounder 를 사용할수 없습니다.
저처럼 아이폰에 보안카드 번호를 보안어플을 이용하여
보관하시는 분들은 조금 불행한겁니다.. 실물 카드를 가지고 다니는편이 편하겠네요.

*간단하지만 복잡한-_-팁을 하나 알려드리겠습니다.
보안카드란것은 한번 요구번호가 나오면 (위에서는 19,18) 정확한 보안카드번호를 넣어서 거래를 하기전엔 바뀌지 않습니다. 따라서 번거롭지만 아무데나 이체를 하는척해서 보안카드 요구번호를 알아내고 어플 종료후, 보안카드 어플에서 보안카드 번호를 확인한후 다시 은행어플로 와서 진행하면 아까 요구한것과 같은 보안카드 요구번호가 나올겁니다. 조금 귀찮지요..


어찌되었건 사용완료 하고 이젠 사용을 하면 됩니다 :-)


예금계좌 목록조회 화면입니다.
하나은행에 가지고있는 통장목록이 나오는군요.
탭으로 예금,펀드,대출,외환,자산의 보기가 가능합니다.
통장에서 오른쪽의 > 버튼을 누르면 해당 통장에서 할수있는 바로가기 버튼들이 나옵니다.
월급통장의 > 를 탭하니 계좌정보,거래내역,즉시이체 버튼이 나오는군요.


계좌정보를 조회한 화면입니다.
해당 통장의 상세정보가 나옵니다.


거래내역 조회를 해보겠습니다.
인터넷뱅킹과 화면이 그리 다르지 않습니다.
계좌가 여러개이신 분들은 계좌번호선택에 번호만 표기되어 불편한 점도 있을 수 있겠네요.


조회 결과입니다.
출금된 내역은 - 로, 입금된내역은 + 로 표시가 되네요.
아이폰을 이용하면 어디서든 입출금 내역을 확인할수가 있습니다.


자금이체의 첫화면입니다.
인터넷뱅킹과 화면이 다르지 않습니다 :-)
'자주쓰는 계좌' 나 최근입금계좌를 사용이 가능하네요.
자주쓰는 계좌를 눌러보겠습니다.


인터넷뱅킹에서 관리되는 자주쓰는 계좌와 완전히 동일합니다.
자주쓰는 계좌는 이렇게 등록하여 쓰면 클릭만으로 은행과 계좌번호가 자동입력 됩니다.


은행 선택화면입니다.


금액이나 계좌번호를 입력할땐 Qwerty 키보드가아닌 숫자키패드가 나타납니다.
상당히 편리한 인터페이스네요 :-) 개발자분들의 노고와 세심함이 느껴지는 부분입니다.


어찌돼었든, 이체를 진행해보겠습니다.
수취조회를 한 화면입니다. 인터넷뱅킹 이체의 step 2 에 해당하겠네요.
여기서 받는 분을 확인하고 '진행'하게되면 실제 이체 프로세스가 진행됩니다.


보안카드 입력화면이네요.
실물카드를 가지고 있지 않고 폰에 보안카드 번호가 있다면 조금 불편함이 예상됩니다.
보안카드를 입력하고 다시한번 공인인증서를 제출하게 됩니다.


이체가 완료된 화면입니다.
속도도 3G 망을 이용하여 테스트 했는데 크게 불편이 없는 속도였습니다.
10여분넘게 인터넷뱅킹을 테스트 했었는데 사용된 패킷은
일반 > 사용내역 확인시 2메가 남짓 된듯 보입니다. 2MB 정도 사용하니 웬지 찝찝하네요 -_-..


이 포스팅으로 간단히 하나은행 아이폰 뱅킹에서 거래내역 조회와 이체화면을 살펴봤습니다.
인터넷뱅킹을 사용할때 주로 하는 거래가 이 두가지 거래라고 생각합니다.
이 외에 지로/공과금 납부나 카드서비스, 외환, 펀드등의 서비스가 곧 추가될것으로 보이니 국내 은행중 첫 아이폰 뱅킹서비스를 선보이는것 치고는 굉장한 완성도를 보입니다 :-)
이로서 아이폰을 사용하는데 불편함이 하나 해소되었네요.


'내가끄적인글 > 끄적인 글' 카테고리의 다른 글

R.I.P.  (0) 2011.10.06
맥북 프로 15인치 구입.  (0) 2010.09.06
iPad 구입 :-)  (11) 2010.04.17
HD-DVD addon for XBOX360  (6) 2008.12.08
[OSX] dell mini9 99% 동작하는 사운드 드라이버  (4) 2008.11.19
[OSX] dell mini9 CPU speed step 설정.  (0) 2008.11.19
Posted by 모근원
The biggest Christmas Tree in Toronto at Eaton Centre.

사용자 삽입 이미지

The day after snow

사용자 삽입 이미지

닭둘기들. 춥다고 저러고 있다.

사용자 삽입 이미지

Santa Village in Eaton Centre

사용자 삽입 이미지

Eaton Centre

사용자 삽입 이미지

i found it

사용자 삽입 이미지



사용자 삽입 이미지



사용자 삽입 이미지



사용자 삽입 이미지

Merry Christmas~!

사용자 삽입 이미지

아이팟 듣는 호두까기 인형

Nikon D70s / 18-55mm 1:3.5-5.6 / JPG HIGH / `07.11.23

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

Christmas season at Downtown  (4) 2007.12.10
눈왔다  (4) 2007.12.02
Fireworks at City hall  (0) 2007.11.26
The First Snow  (2) 2007.11.23
Santa Claus Parade #4 (산타클로스 퍼레이드)  (8) 2007.11.20
Santa Claus Parade #3 (산타클로스 퍼레이드)  (9) 2007.11.20
Posted by 모근원