iOS入門-41AVAudioPlayer音頻播放

概述

接下來是音頻和視頻的播放,這裏只是簡單的展示播放的基本操作。關於複雜的操作還涉及很多的音視頻專門的知識,例如播放器的“生命週期”、播放和屏幕狀態的配合、播放器是否可以兼顧到絕大多數的音視頻文件格式等等。

本文的內容:

  • 使用iOS自帶的AVAudioPlayer播放音頻(本地的mp3文件)。
  • 音頻音量控制
  • 音頻播放進度展示

示例

將mp3文件放到工程根目錄中。
仔細看實例代碼註釋,很簡單

ViewController.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

//AVAudioPlayerDelegate:音頻播放協議代理
@interface ViewController : UIViewController <AVAudioPlayerDelegate>
{
    //控制按鈕
    UIButton* _btnPlay;
    UIButton* _btnPause;
    UIButton* _btnStop;
    
    //進度條
    UIProgressView* _progressView;
    //控制音量
    UISlider* _slider;
    //音頻播放器
    AVAudioPlayer* _player;
    //定時器,更新進度條
    NSTimer* _timer;
}

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //實例化三個按鈕,控制音頻播放、暫停、停止
    _btnPlay = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _btnPlay.frame = CGRectMake(100, 100, 100, 40);
    [_btnPlay setTitle:@"播放" forState:UIControlStateNormal];
    [_btnPlay addTarget:self action:@selector(playRadio:) forControlEvents:UIControlEventTouchUpInside];
    
    _btnPause = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _btnPause.frame = CGRectMake(100, 150, 100, 40);
    [_btnPause setTitle:@"暫停" forState:UIControlStateNormal];
    [_btnPause addTarget:self action:@selector(pauseRadio:) forControlEvents:UIControlEventTouchUpInside];
    
    _btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _btnStop.frame = CGRectMake(100, 200, 100, 40);
    [_btnStop setTitle:@"停止" forState:UIControlStateNormal];
    [_btnStop addTarget:self action:@selector(stopRadio:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:_btnPlay];
    [self.view addSubview:_btnPause];
    [self.view addSubview:_btnStop];
    
    //實例化音頻播放進度條
    _progressView = [UIProgressView new];
    _progressView.frame = CGRectMake(10, 300, 300, 20);
    _progressView.progress = 0;
    
    [self.view addSubview:_progressView];
    
    //實例化音量控制條
    _slider = [UISlider new];
    _slider.frame = CGRectMake(10, 350, 300, 20);
    _slider.maximumValue = 100;
    _slider.minimumValue = 0;
    [_slider addTarget:self action:@selector(volueChange:) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:_slider];
    
    [self createAVRplayer];
    
    [self createTimer];
    
    //設置本視圖控制器實例爲播放器代理
    _player.delegate = self;
}

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    //音頻播放完成之後,將定時器停掉
    [_timer invalidate];
}

//初始化定時器,並啓動
//p1 刷新間隔
//p2 函數執行對象
//p3 執行函數
//p4 額外參數
//p5 是否重複
-(void) createTimer{
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateT) userInfo:nil repeats:YES];
}

//更新音頻進度條
-(void)updateT{
    _progressView.progress = _player.currentTime/_player.duration;
}

//創建音頻播放器並進行相應配置
-(void) createAVRplayer{
    //獲取mp3文件路徑字符串
    NSString* path = [[NSBundle mainBundle] pathForResource:@"xue" ofType:@"mp3"];
    //路徑字符串轉化爲url
    NSURL* urlMusic = [NSURL fileURLWithPath:path];
    //初始化播放器
    _player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlMusic error: nil];
    
    //準備播放,解碼
    [_player prepareToPlay];
    //循環次數。-1:無限次;
    _player.numberOfLoops = 1;
    //音量
    _player.volume = 0.5;
}

-(void)playRadio:(UIButton*) btn{
    NSLog(@"播放");
    //播放音頻
    [_player play];
}

-(void)pauseRadio:(UIButton*) btn{
    NSLog(@"暫停");
    //暫停音頻
    [_player pause];
}

-(void)stopRadio:(UIButton*) btn{
    NSLog(@"停止");
    //停止播放音頻
    [_player stop];
    //將播放器進度置0
    _player.currentTime = 0;
}

-(void)volueChange:(UISlider*) slider{
    NSLog(@"value==%f",slider.value);
    //設置音量
    _player.volume = slider.value/100;
}

@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章