AVAudioPlayer是AVFoundation.framework裡面最基本的一個音頻播放器的類。它與MPMediaPlayerController在一些基本操作功能上是類同的,比如play,pause,volume等等。
不一樣的地方在於AVAudioPlayer沒有隊列這個東西,也就是說它只能播放一個指定路徑的音頻。要播放多個音頻,可以通過建立多個AVAudioPlayer來實現。在AVFoundation裡面,有另外一個功能強大的類AVQueuePlayer,基本上要做音樂播放器要靠它,什麼QQ音樂,酷狗應該都是使用AVQueuePlayer。關於AVQueuePlayer的使用,將在之後的博文中講述。
那麼AVAudioPlayer有什麼用呢?
AVAudioPlayer能實現的功能類似於System Audio Services,播放單一音頻,但它不同的地方在於它可以控制播放的次數,播放的時間。比如用它可以很方便的實現重複播放。另外,它還有一個很強大的功能,就是可以很方便的調節左右聲道的音量,從而實現很酷的立體聲效果。從這個角度看,AVAudioPlayer很適用於遊戲中的音頻播放。比如紙牌遊戲中洗牌時就可以重複播放洗牌時的音頻直到洗牌結束。
下面開始介紹AVAudioPlayer的具體使用。
STEP 1:設定Audio Session
要記住,使用AVFoundation的東西播放音頻,肯定要先對Audio Session進行設定,除非你使用預設的設定。關於Audio Session的設定,詳見之前的博文。
下面是樣本:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
STEP 2:初始化AVAudioPlayer
範例程式碼:
NSURL *musicOneURL = [[NSBundle mainBundle] URLForResource:@"十年" withExtension:@"mp3"]; self.audioPlayerOne = [[AVAudioPlayer alloc] initWithContentsOfURL:musicOneURL error:nil];
STEP 3:設定AVAudioPlayer
AVAudioPlayer有一個重要的property就是pan,用它可以來調節音頻播放時左右聲道的大小,如果值是-1.0為完全左聲道發生,如果是1.0則為完全右聲道發音。
另外,還有一個很強大的功能,就是可以測量音頻播放時即時聲道的功率大小,這個功能可以用於輔助顯示器聲音的波浪,很多電腦上的播放器都有的。當然,如果用它來進行聲波的分析,我想也是可以的。
範例程式碼:
// audioPlayerOne 為一個AVAudioPlayer的對象 self.audioPlayerOne.meteringEnabled = YES; // 允許測量 [self.audioPlayerOne updateMeters]; // 更新資料 [self.averagePowerChannelOne setValue:[self.audioPlayerOne averagePowerForChannel:0] animated:YES]; // 將擷取的資料賦予相關的控制項 [self.averagePowerChannelTwo setValue:[self.audioPlayerOne averagePowerForChannel:1] animated:YES];
STEP 4:控制
範例程式碼:
[self.audioPlayerOne prepareToPlay]; // 準備資料,播放前必須設定 [self.audioPlayerOne setNumberOfLoops:-1]; // 設定為-1可以實現無限迴圈播放 [self.audioPlayerOne setRate:1.5f]; // 設定播放速度 [self.audioPlayerOne setPan:1.0f]; // 設定左右聲道 [self.audioPlayerOne setCurrentTime:20.0f]; // 設定播放時間 [self.audioPlayerOne play]; // 播放 [self.audioPlayerOne pause]; // 暫停 [self.audioPlayerOne stop]; // 停止
STEP 5: Delegate
有時根據需要可以設定AVAudioPlayer的delegate,這樣在播放結束時可以進行一些相關的操作
範例程式碼:
// 完成播放- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ if (flag) { NSLog(@"play succeed"); }}// 播放中斷結束後,比如突然來的電話造成的中斷- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{ }
以上就是關於AVAudioPlayer的使用。
[本文為原創文章,著作權,如需轉載,請註明出處,謝謝合作!]