/* syntax highlight */ /* end of syntax highlight */

2010年12月29日 星期三

iphone app 開發 (三十六) AVAudioPlayer 音樂播放

Bookmark and Share

螢幕快照 2010-12-30 下午1.43.45

此篇文章主要是在談如何在 App 裡面加入 music 的方式

首先需要用到的是 AVFountation framework 當中

支援的格式有 AAC, AMR, ALAC, iLBC, IMA4, linearPCM, MP3, MP4 等等

 

 

本篇文章的案例參考於上面的影片,強烈建議把影片看過一次

步驟其實蠻簡單的,你可以照著影片做一次,大約 30 分鐘就可以完成

我在這裡講一下我整理的心得

 

一開始先把要播放的兩首音樂加到專案當中,步驟很簡單,請直接把兩首音樂拉到 project 當中即可,一般是習慣拉到 resource 裡面,不過只要在專案中應該都可以抓到。

螢幕快照 2010-12-21 下午6.35.31

 

 

 

程式首先寫 header 檔部份,程式碼如下,重點就是有引入 AVFoundation 這個 framework ,並且宣告一個 AVAudioPlayer 的物件,然後為了模擬我們的音樂播放行為,我們共擬訂了三個 Action ,分別是 Play、Stop、Pause ,但是為了實現切換音樂播放之功能,我們將會設定兩個 PushButton 來切換不同首的音樂。

 

  1. #import <UIKit/UIKit.h>
  2. #import <AVFoundation/AVAudioPlayer.h>
  3.  
  4. @interface musicViewController : UIViewController <AVAudioPlayerDelegate>{
  5.     AVAudioPlayer *theAudio;
  6. }
  7.  
  8. -(IBAction)pushButton;
  9. -(IBAction)pushButton2;
  10. -(IBAction)play;
  11. -(IBAction)stop;
  12. -(IBAction)pause;
  13.  
  14. @end

 

再來是實做的部份,一樣記得把 AVFoundation framework 包進來,播放音樂的寫法很制式,首先用NSString *path = [[NSBundle mainBundle] pathForResource 的寫法把音樂檔案的名稱以及副檔名寫成 path 物件,再用 initWithContentsOfURL 把 path 物件加進去,而 if(theAudio) 應該是判斷音樂是否已經播完,如果播完的話,就把這個物件釋放掉,然後記得用 theAudio.delegate 設定代理人,然後最後是安排 [theAudio play]; 來播放。

 

下面的 play , stop , pause 的部份則都很直覺,應該一看就知道了。

 

  1. #import "musicViewController.h"
  2. #import <AVFoundation/AVAudioPlayer.h>
  3.  
  4.  
  5. @implementation musicViewController
  6.  
  7.  
  8. -(IBAction)pushButton{
  9.     NSString *path = [[NSBundle mainBundle] pathForResource:@"track1"
  10.         ofType:@"mp3"];
  11.     if(theAudio)[theAudio release];
  12.     theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL
  13.         fileURLWithPath:path] error:NULL];
  14.     theAudio.delegate = self;
  15.     [theAudio play];
  16. }
  17.  
  18.  
  19. -(IBAction)pushButton2{
  20.     NSString *path = [[NSBundle mainBundle] pathForResource:@"track2"
  21.          ofType:@"mp3"];
  22.     if(theAudio)[theAudio release];
  23.     theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL
  24.          fileURLWithPath:path] error:NULL];
  25.     theAudio.delegate = self;
  26.     [theAudio play];   
  27. }
  28.  
  29. -(IBAction)play{
  30.     [theAudio play];
  31. }
  32.  
  33. -(IBAction)stop{
  34.     [theAudio stop];
  35. }
  36.  
  37. -(IBAction)pause{
  38.     [theAudio pause];
  39. }

 

 

ps. 我在中間有遇到以下問題 :「"_objc_class_$_AVAudioPlayer", referenced from…xxx」

這是因為有引用到 AVAudioPlayer 這個 framework ,但是教學裡沒有引入,所以我們要手動將這個 framework 加到專案當中,請在 finder 找到 framework 資料夾,如果不知道放在哪裡也可以按 mac + f  搜尋 AVAudioPlayer ,並在 finder 中打開,請把整個 framework 拉到專案當中

image

 

再來它會詢問你是否需要在 local 端複製一份,請不要勾選

 image

 

最後就是安排畫面的部份

請打開 xib 檔,再來放上五個 button

分別輸入 Sound1, sound2, play, pause, stop

 螢幕快照 2010-12-30 下午1.43.45

 

再來設定指派的任務,選擇 File’s Owner,切換到第二個 Tab ,你會看到有五個 Received Actions

原本後面的圈圈都是空的,請按下 Ctrl 並拉到對應的按鈕上面,選擇「Touch Up Inside」

,表示按下去會觸發動作,完成後應該會看到下面這張的畫面

image

 

專案到此應該已經完成了,請試著編譯看看

或是到實機測試

如果順利的話你應該可以聽到美妙的音樂摟,恭喜!

 

參考資料

http://www.youtube.com/watch?v=uq3l9KRLixU&feature=related

http://www.youtube.com/watch?v=mC3rbzQZ0SU&feature=related

http://www.youtube.com/watch?v=FIbrJk4LIKU&feature=related

0 意見:

張貼留言

Related Posts Plugin for WordPress, Blogger...