iOS 中 AVAudioPlayer(专门用来播放本地音乐)

先来介绍一下AVAudioPlayer:

AVAudioPlayer简介

在任何时间播放声音
播放声音文件或者内存的
循环播放声音
在同一时刻,播放多个声音,一个声音对应一个audio player,精确的 同步
控制相关播放的级别,立体声的位置, 你正在播放的每一个声音的速率
追种一个特别的点在一个声音文件中,前进或者后退到那个点上;
获得你可以使用的播放级别的测量数据

——— 注意:用代理去处理中断(像来电话了)和 去更新用户的界面,当音频播放完之后。
——— 注意:支持的音频格式有:AAC,ALAC,HE-AAC,iLBC,IMA4,MP3.
——— 注意 : 大家要特别注意了, AVAudioPlayer是专门播放本地音乐的,网络音乐是不可以播放的

再看一下他官方给的常用的API

主要API:
初始化:

- (instancetype nullable)initWithContentsOfURL:(NSURL * nonnull)url error:(NSError * nullable * nullable)outError

播放:

- (BOOL)play

暂停:

- (void)pause

停止:

- (void)stop

准备播放音频,返回值标志是否解析成功,是否可以播放。

- (BOOL)prepareToPlay

获取是否正在播放

@property(readonly, getter=isPlaying) BOOL playing

1
设置音频音量,取值为0-1之间

@property float volume

1
获取当前音频的总时长

@property(readonly) NSTimeInterval duration

AVAudioPlayerDelegate(简介)

用它来相应音频中断和音频解码错误,来实现音频的从放
完成播放(这个Delegate是最常用的, 一首音乐播放完成调用此方法来播放下一首, 实现连续播放)

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer * nonnull)playersuccessfully:(BOOL)flag

解码错误:

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer * nonnull)playererror:(NSError * nullable)error

处理中断: (一共四个,IOS9全部弃用)

- (void)audioPlayerBeginInterruption:(AVAudioPlayer * nonnull)player

1
下面来看一下代码的实现:

//  ViewController.m
//  MusicPlayer
//
//  Created by dlios on 15/10/6.
//  Copyright © 2015年 dlios. All rights reserved.
//

#import "ViewController.h"
//导入系统库
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()<AVAudioPlayerDelegate>
@property (nonatomic, retain)AVAudioPlayer *player;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self.view setBackgroundColor:[UIColor whiteColor]];

    [self getButtonControl];
    [self getPlayer];

}

#pragma mark - 创建按钮和进度滑条方法
- (void)getButtonControl
{
    //创建播放按钮
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    [button setFrame:CGRectMake(0, 0, 40, 20)];

    button.center = CGPointMake(375 / 2, 400);

    [button setTitle:@"播放" forState:UIControlStateNormal];

    [button setTitle:@"暂停" forState:UIControlStateSelected];

    [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    /* 声音slider */
    //创建slider
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];

    slider.center = CGPointMake(375 / 2, 450);

    /* 最大值 */
    [slider setMaximumValue:100.];

    /* 最小值 */
    [slider setMinimumValue:0.];

    /* 显示颜色 */
    [slider setMaximumTrackTintColor:[UIColor purpleColor]];

    /* 滑动后颜色 */
    [slider setMinimumTrackTintColor:[UIColor cyanColor]];

    /* 滑动就调用 */
    [slider setContinuous:YES];

    /* 滑动事件 */
    [slider addTarget:self action:@selector(slider:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:slider];

    /* 进度slider */
    UISlider *schSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];

    schSlider.center = CGPointMake(375 / 2, 500);

    [schSlider setMaximumValue:280.];

    [schSlider setMinimumValue:0.];

    [schSlider setContinuous:YES];

    [schSlider addTarget:self action:@selector(sliderClick:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:schSlider];
}
#pragma mark - 播放方法
- (void)getPlayer
{
    /* 获取本地文件 */
    NSBundle *bundle = [NSBundle mainBundle];

    NSString *urlString = [bundle pathForResource:@"李荣浩-模特" ofType:@"mp3"];

    /* 初始化url */
    NSURL *url = [[NSURL alloc] initFileURLWithPath:urlString];

    /* 初始化音频文件 */
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];

    /* 加载缓冲 */
    [self.player prepareToPlay];
}
#pragma mark - button 点击方法
- (void)click:(UIButton *)button
{
    if (button.selected == NO) {
        [self.player play];
        button.selected = YES;
    }else{
        button.selected = NO;
        [self.player pause];
    }
}
#pragma mark - 声音滑动事件方法
- (void)slider:(UISlider *)slider
{
    self.player.volume = slider.value;
}
#pragma mark - 进度滑动事件
- (void)sliderClick:(UISlider *)slider
{
    self.player.currentTime = slider.value;
}
#pragma mark - player Dlegate
//结束时调用
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"结束了");
}
//解析错误调用
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{

}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容