你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS 開發 初級:AVAudioPlayer 的使用

iOS 開發 初級:AVAudioPlayer 的使用

編輯:關於IOS

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的設置,詳見之前的博文。

下面是示例:

[plain]
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
STEP 2:初始化AVAudioPlayer

示例代碼:

[plain]
NSURL *musicOneURL = [[NSBundle mainBundle] URLForResource:@"十年" withExtension:@"mp3"]; 
    self.audioPlayerOne = [[AVAudioPlayer alloc] initWithContentsOfURL:musicOneURL error:nil]; 

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則為完全右聲道發音。

另外,還有一個很強大的功能,就是可以測量音頻播放時實時聲道的功率大小,這個功能可以用於輔助顯示聲音的波浪,很多電腦上的播放器都有的。當然,如果用它來進行聲波的分析,我想也是可以的。

示例代碼:

[plain]
// 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]; 

// 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:控制

示例代碼:

[plain]
[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];           // 停止 

[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,這樣在播放結束時可以進行一些相關的操作

示例代碼:

[plain]
// 完成播放 
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 

    if (flag) { 
        NSLog(@"play succeed"); 
    } 

 
// 播放中斷結束後,比如突然來的電話造成的中斷 
 
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags 

     

// 完成播放
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    if (flag) {
        NSLog(@"play succeed");
    }
}

// 播放中斷結束後,比如突然來的電話造成的中斷

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags
{
   
}

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved