2009-08-19 2 views
3

나는 피아노 기반의 UI 응용 프로그램을 만드는 데 newbei입니다. 피아노를 사용해야하는 애플리케이션을 개발 중입니다. 아이폰에서 피아노 UI를 만드는 방법은 무엇입니까? Interface Builder를 사용하여 인터페이스를 만드는 방법은 무엇입니까? 아니면 피아노를 만들 수있는 다른 방법이 있습니까?아이폰에서 피아노 UI를 만드는 방법은?

신체가 해결책이나 유용한 코드 또는 링크가 있으면 이러한 UI를 만들어야합니다. 감사하겠습니다.

감사합니다, Niraj

답변

9

코드 버전 1 쉽게, 너무 우아하지.

xcode에서보기 기반 프로젝트를 시작하고 MyProjectViewController.xib 편집 인터페이스 작성기를 사용하여 온 스크린 키보드와 유사한 모양과 색상의 일련의 단추를 조합하십시오.

편집 MyProjectViewController.h.m은 다음과 같이 서명과 방법의 무리를 추가 : 이제

- (IBAction) playMiddleC: (id) sender; 
- (IBAction) playMiddleD: (id) sender; 
- (IBAction) playMiddleE: (id) sender; 

당신이 빌더를 인터페이스로 돌아가, 그리고 할 수있는 파일의 소유자 객체에 각 버튼을 (의 - 드래그를 마우스 오른쪽 유형 MyProjectViewController). 이 작업을 수행 할 때 어떤 방법으로 버튼을 첨부 할 것인지 묻는 팝업 메뉴가 나타납니다. 해당 키에 대해 적절한 방법을 선택하십시오.

이제 재생할 각 키에 사운드 파일을 추가하십시오. 예를 들어, midC.caf (선형 PCM 형식으로 인코딩 된 the valid sound file formats 중 하나로 인코딩 된 파일)이라고 가정 해 보겠습니다. 해당 파일을 프로젝트 디렉토리에 복사하고 Resources 폴더에서 마우스 오른쪽 버튼을 클릭하고 (xcode로) 추가> 기존 파일을 선택한 다음 사운드 파일을 선택하여 프로젝트에 추가하십시오.

다음으로 AudioToolbox 라이브러리를 종속성으로 추가해야합니다. 프레임 워크 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가> 기존 프레임 워크를 선택한 다음 AudioToolbox 라이브러리를 찾아 선택합니다.

한편, 다시 MyProjectViewController.m에서, 다음과 같은 코드를 추가 :

#import <AudioToolbox/AudioServices.h> 

// (Later...) 

- (IBAction) playMiddleC: (id) sender { 
    NSString* path = [[NSBundle mainBundle] 
        pathForResource:@"midC" ofType:@"caf"]; 
    NSURL* url = [NSURL URLWithString:path]; 
    SystemSoundID midC; 
    AudioServicesCreateSystemSoundID((CFURLRef)url, &midC); 
    AudioServicesPlaySystemSound(midC); 
} 

히트 컴파일하고 실행하고 어떤 음악을 만들기 위해 명령-입력!

버전 2 약간 더 우아합니다.

하나의 배열을 흰색 키로 사용하고 다른 하나는 검정색을 사용하여 프로그래밍 방식으로 키보드 UI를 구성합니다 (좌표가 약간 다르기 때문에). 각 키 유형 (검정색, C/F, B/E 및 A/D/G 중 중간 흰색 키 - 여기에 주요 들여 쓰기를위한 계정)의 프레스 및 비 프레스 버전에 대한 이미지가있는 맞춤 UIButton 유형을 사용하는 것이 좋습니다. .

이렇게하면 배열에 이러한 버튼에 대한 포인터를 저장할 수 있으며 사운드 ID를 해당 배열에 저장하여 모든 키의 사운드를 재생할 수있는 단일 메서드를 사용할 수 있습니다.

사운드는 다소 자연 스럽기 때문에 프로그래밍 방식으로 사운드를 만들고 싶을 것입니다. 그러나 이렇게하기 위해 사용하는 AudioQueue 서비스는 위의 코드보다 처리해야 할 작업이 많기 때문에 실제로 "우아한"버전에서도 사운드 바이트 만 사용하는 것이 좋습니다. 어쨌든 그런 식으로 소리가 잘 들릴 수도 있습니다.

그런데으로 궁금한 사항은 빠르고 쉬운 초보자 용 앱으로 생각하는 것처럼 들리지만 확실하지 않습니다. 아이폰 앱을 개발하는 것은 재미 있지만, 시간과 노력이 필요하다. 초보자 용 앱 아이디어에 관심이 있으시면 유비쿼터스 앱인 UITableView을 사용하는 방법을 배우거나 사진을 찍어 첨부 할 수있는 빠른 앱과 같이 한 번에 하나의 새로운 프로그래밍 기술을 사용하는 것을 찾아 보시기 바랍니다. 예를 들어 전자 메일로 전송할 수 있습니다 (iPhone SDK가 사진 촬영 및 전자 메일 작성을 크게 지원하므로 쉽습니다).

재미있게 보내세요!

+1

그가 절박한 필요성을 감안할 때, 나는 이것을 배우거나 재미있게 보려는 초보자 용 앱으로 생각하지 않습니다. . 나는 누군가가 그에게 피아노 앱을 만들고 갈 작업을 할당했다고 생각한다. 아마 마케팅 담당자가 "어이, 얼마나 힘들 수 있니? 사람들이 며칠 만에 앱을 만드는 걸 들었고 Niraj는 똑똑하다. 짧은 시간에 할 수 있다고 확신한다"고 말했다. :-) – mahboudz

+0

좋은 피아노 앱에 관련된 작업 범위를 좁히고 그래픽을 키 조회수에 좋은 사운드로 사용하는 등 그래픽을 시작해야한다면 처음부터 3 개월에서 6 개월 정도를 예상 할 수 있습니다. 베타 (독점 프로그래머가 첫 번째 iPhone 앱으로 이것을하는 경우 두 배). 예를 들어, 작은 사운드 클립을 재생하는 것은 한 가지이지만 메모의 멋진 서스테인을 얻으려면 무기한 키 다운으로 루프를 돌리는 것은 완전히 다릅니다 (ADSR 봉투 : http://en.wikipedia.org/wiki/). ADSR_envelope). – mahboudz

+0

좋은 지적, 마흐무드. 나는이 일을 훌륭하게하는 것이 훨씬 더 긴 시간이 걸린다는 것에 동의한다. 또한 ADSR 아이디어 및 링크를 추가해 주셔서 감사합니다. – Tyler

1

한 가지 방법은 피아노 키보드의 사진을 찍은 다음 이미지를 시작점으로 사용하는 것입니다.

또 다른 방법은 기본 키와 누름 위치에서 Photoshop 또는 다른 앱에서 키를 그리고 그 키를 기준으로 사용하는 것입니다.

앱 스토어에서 검색을하고 피아노 키보드가 구현 된 다른 방법을 살펴보십시오. 몇 가지가 있으며 일부는 다른 것보다 사실적으로 보입니다.

피아노 키보드를 잘 나타내는 것은 쉬운 일이 아닙니다. 특히 광택이있는 모양을 얻고 애니메이션을 통해 사실적인 동작을 만들려고 할 때 그렇습니다. 최소한 Quartz 2D과 CAAnimation을 공부해야합니다.

2

답장을 보내 주셔서 감사합니다.

저는 거의 피아노 UI를 개발했습니다.

저는 프로그래밍 방식을 사용하여 흑백 키를 만들었습니다.

CGFloat buttonWhitePosX = 2.0; //white button start position 
for(int i=0;i<8;i++){ //8 keys in one octave 
    CGFloat buttonWhitePosY = 105; 
    CGFloat buttonWhiteWidth = 57; 
    CGFloat buttonWhiteHeight = 190; 

    UIButton *buttonWhite = [[UIButton alloc] initWithFrame:CGRectMake(buttonWhitePosX, buttonWhitePosY, buttonWhiteWidth, buttonWhiteHeight)]; 
    buttonWhitePosX = buttonWhitePosX + WHITE_BUTTON_SPACE + buttonWhiteWidth; 
    [buttonWhite setBackgroundImage:whiteImage forState:UIControlStateNormal]; 
    [buttonWhite addTarget:self action:@selector(pressButtonWhiteTouchDown:) forControlEvents:UIControlEventTouchDown]; 

    buttonWhite.tag = i; 
    [buttonWhite setBackgroundImage:whiteImageHighlighed forState:UIControlEventTouchDragInside]; 
    [self.view addSubview:buttonWhite]; 
    [buttonWhite release]; 

} 

다른 좌표를 사용하는 검은 건반과 같은 방법입니다.

또한 나는 AVPlayer를 사용하여 키 사운드를 재생할 수 눌림입니다. (선택에 터치 다운)

지금까지 너무 좋아하지만, 사용자 슬라이드가 키를 가로 질러, 피아노는 존경받는 사운드를 재생해야합니다.

이 실현하려

가있는 UIButton에 대한

1) 사용 UIControl 이벤트와 시도됩니다. DragEnter, exit를 드래그하여 안쪽으로 드래그합니다. 드래그 종료 위치는 방법은 touchesBegan는 touchesEnded, 기본보기의는 touchesMoved가 (있는 흑백 키가 배치되어 사용 그려진 버튼

2) 외부로 하지만), 정확히 누르면 어떤 버튼이 나에게 제공하지 않습니다. 이 방법에서

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:touch.view]; 
    currentView = [self.view hitTest:touchLocation withEvent:nil]; //get top view 
    if(currentView != self.view){ //check current view is main view, do nothing 
     if(currentView == prevView){ //check current view is prev view, keep highlight image 
      currentView.backgroundColor = [UIColor colorWithPatternImage:whiteImageHighlighed]; 
     }else{ //view changed, change image and play sound 
      prevView.backgroundColor = [UIColor colorWithPatternImage:whiteImage]; 
      currentView.backgroundColor = [UIColor colorWithPatternImage:whiteImageHighlighed]; 
      [self pressButtonWhiteDown1:currentView.tag]; 
      prevView = currentView; 
     } 
    } 
} 

은 잘못보기를 제공 할 때 흰색 키에 대한 사용자의 슬라이드와 (블랙 키는 기본보기 흰색 키의 상단에로) 블랙 키의 X 위치를 통해 제공 :

alt text http://img215.yfrog.com/img215/1720/pianohelp.png

다른 접근법이나 뭔가 잘못하고있는 것이 있습니까? 제발 나를 안내 해줘.

터치 포인트에서 정확한보기를 얻을 수 있습니까?

감사합니다.

+0

마침내 나는 피아노 사용자 인터페이스를 작동시킬 수있었습니다. 도와 주셔서 감사합니다. – Niraj

+0

나는 지금 당신과 같은 문제로 이것을하고 있습니다. 해결책은 무엇입니까? – iPadDeveloper2011

0

나는 아주 비슷한 것을했다. 둥근 모서리가있는 일반 버튼을 사용하고 각각이 WAV 사운드를 재생하도록했습니다. 그것은 멋지게 작동합니다!

관련 문제