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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值