iOS 開發 初級:AVAudioPlayer 的使用

來源:互聯網
上載者:User

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


[本文為原創文章,著作權,如需轉載,請註明出處,謝謝合作!]




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.