天天看點

iOS 開發 初級:AVAudioPlayer 的使用

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的使用。

[本文為原創文章,版權所有,如需轉載,請注明出處,謝謝合作!]