2009-08-19 68 views
3

我是創造這種基於鋼琴的UI應用程序的新手。 我正在開發一個應用程序,我必須使用鋼琴。 如何在iPhone中創建鋼琴用戶界面? 如何使用Interface Builder創建它?或者還有其他方式來創作鋼琴嗎?如何在Iphone中創建鋼琴用戶界面?

我迫切需要創建這樣的用戶界面,如果任何機構有任何解決方案或任何有用的代碼或任何鏈接,這將不勝感激。

感謝, 尼拉吉

回答

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之一)。將該文件複製到項目目錄中,然後右鍵單擊(在xcode中)Resources文件夾,然後選擇「添加」>「現有文件」,然後選擇聲音文件,將該文件添加到項目中。

接下來,您需要添加AudioToolbox庫作爲依賴項。通過右鍵單擊Frameworks文件夾並選擇Add> Existing Frameworks ..然後瀏覽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,其中一個數組用於白鍵,另一個用於黑色(因爲它們將具有略微不同的座標)。我建議使用定製UIButton類型和每個鍵類型的壓制和nonpressed版本(黑色,C/F,B/E,和A/d/G,其是中間白鍵 - 我帳戶鍵縮進這裏)圖像。

這將允許您將指向這些按鈕的指針存儲在數組中,並且可以通過將聲音ID存儲在相應陣列中的方法來爲任何按鍵播放聲音。

你可能會認爲你想以編程方式創建聲音,因爲它們本質上有點數學性。但AudioQueue服務,你會用這樣做,是顯著更多的工作來處理比上面的代碼,所以其實我建議只用聲音字節,即使是在一個「優雅」的版本。無論如何,它甚至可能聽起來更好。

順便說一句,你的問題聽起來像你正在考慮這是一個快速和簡單的初學者應用程序,但我不太確定。學習開發iPhone應用程序很有趣,但需要花費一些時間和精力才能做好。如果您對初學者應用的想法感興趣,我建議您一次尋找能夠鍛鍊一種新編程技能的東西,例如學習如何使用無處不在的UITableView,或者是一個可讓您拍照並附加它的快速應用以電子郵件爲例(這很容易,因爲iPhone SDK對照片拍攝和電子郵件撰寫有很大的支持)。

玩得開心!

+1

鑑於他說他有迫切的需求,我不認爲他是做這個初學者的應用程序來學習或玩樂。我猜想有人已經爲他分配了任務去創建一個鋼琴應用程序。可能有人在營銷中說:「嘿,它有多難?我聽說人們在短短几天內就開發了應用程序,Niraj很聰明,我相信他可以在更短的時間內做到這一點!」 :-) – mahboudz 2009-08-19 07:53:51

+0

如果我不得不考慮一個優秀的鋼琴應用程序所涉及的工作,包括讓圖形看起來不錯,以便在關鍵點擊時使用漂亮的聲音,我估計不會少於3個月,可能還有6個月,從開始到測試版(如果單獨的程序員將其作爲他們的第一個iPhone應用程序這樣做的話,這是雙倍的)。例如,回放一個小的聲音片段是一回事,但爲了無限期地回放以獲得對音符的良好保持,這是完全不同的(ADSR信封:http://en.wikipedia.org/wiki/ ADSR_envelope)。 – mahboudz 2009-08-19 08:01:02

+0

好點,mahboudz。我同意做好這件事需要更長的時間。此外,感謝您添加ADSR的想法和鏈接。 – Tyler 2009-08-19 19:49:38

1

一種方法是拍攝鋼琴鍵盤的照片並將圖像作爲起點。

另一種方法是在Photoshop或其他應用程序中,在默認和按鍵位置繪製按鍵,並將其用作基準。

在App Store上進行搜索,並查看鋼琴鍵盤已實施的不同方式。有一些,有些看起來比其他人更現實。

做一個鋼琴鍵盤的好表現並不容易,尤其是如果你試圖通過動畫獲得光滑的外觀和創造逼真的動作,但它是可行的。至少,你應該研究Quartz 2D和可能的一些CAAnimation。

2

感謝您的回覆...

我幾乎完成了開發用戶界面的鋼琴。

我已經使用編程方法來創建黑白鍵。

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。(對選擇觸落)

到目前爲止好,但是當用戶滑過琴鍵,鋼琴應該發揮尊重的聲音。

爲了實現這一目標是試圖與

1)用於UIControl事件的UIButton。拖動Enter,拖出,拖入裏面。 但它不會給我正好按下該按鈕, 拖累出口位置是用來繪製按鈕

2)的touchesBegan,touchesEnded,主視圖的touchesMoved(其中黑鍵和白鍵都放在外面的方式)。

-(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

終於我設法讓我的鋼琴UI工作。謝謝您的幫助。 – Niraj 2009-09-01 04:25:38

+0

我現在正在這樣做,與你同樣的問題。解決方案是什麼? – iPadDeveloper2011 2011-04-28 06:36:48

0

我做了一件非常相似的事情。我用正常的按鈕與圓角,並使他們每個人發揮WAV聲音。它很好用!