UI音乐播放之初级篇 AVAudioPlayer

/*

不是技术性的文章,只是自己记录每天所学的方式。

-----------------------程序员的天空是去往星辰和大海

*/

-1-同样作为播放音乐文件的类,AvAudioPlayer音乐播放器常用于:

1.时间较长的音乐文件播放

2.可在音乐播放过程中进行操作

3.需要执行循环播放,播放暂停等要求

4.需要改变声音音道等属性

-2-准备工作:

1>导入AVFoundation.framework系统类库

2>关联头文件  #import <AVFoundation/AVFoundation.h>

-3-AVAudioPlayer的常用属性和基本方法

初始化方法:

_avPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];

   准备方法

[_avPlayer prepareToPlay];

开始播放歌曲

[_avPlayer play];

   暂停播放的方法 

[_avPlayer stop];

判断是否正在播放的方法

[_avPlayer isPlaying]

常用属性

duration :当前加载歌曲的总时长 为基本数据类型

currentTime  当前播放进度时间 也为基本数据类型

【特别注意】使用AVAudioPlayer需要注意一下几点

         1. 每次加载歌曲,都必须将当前加载数据内容销毁 ,这是因为AVAudioPlayer每次有且只能加载一个文件

if([_avPlayer isPlaying]){

[_avPlayer stop];

_avPlayer=nil;

}

2.当设置了AVAudioPlayer代理方法时,必须在每次重新加载文件时,重新设置代理,这是因为_avPlayer=nil造成的

-4-简单的代码实现一个小型的音乐播放器

支持循环播放,音量调节,下一首播放 播放暂停及重新启动等功能

//
//  RootViewController.m
//  GGAvAudioPlayer
//
//  Created by MS on 15-8-18.
//  Copyright (c) 2015年 GG. All rights reserved.
//

#import "RootViewController.h"

@interface RootViewController ()<UITableViewDataSource,UITableViewDelegate,AVAudioPlayerDelegate>{
    UITableView * _tableView;
    NSMutableArray * _dataArray;
    NSString * songName;
    AVAudioPlayer * _avPlayer;
}
@end
@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self creatDataSource];
    [self creatUI];
}
//从plist文件中获取播放列表
-(void)creatDataSource{
    _dataArray=[[NSMutableArray alloc]init];
    NSString * str=[[NSBundle mainBundle]pathForResource:@"songsName" ofType:@"plist"];
    NSArray * arr=[NSArray arrayWithContentsOfFile:str];
    [_dataArray addObjectsFromArray:arr];
    //songName 为当前播放歌曲名
    songName=_dataArray[0];
}
//创建音乐列表UI
-(void)creatUI{
    _tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 90, 320, 320) style:UITableViewStylePlain];
    _tableView.delegate=self;
    _tableView.dataSource=self;
    [self.view addSubview:_tableView];

    _nameLabel.text=songName;
    //通过url高效的加载播放歌曲
    NSURL * url=[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:songName ofType:@"mp3"]];
    _avPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    _avPlayer.delegate=self;
    [_avPlayer prepareToPlay];
}
#pragma mark - UITableViewDelegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return  _dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString * cellName=@"cellName";
    UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:cellName];
    if(!cell){
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
    }
    cell.textLabel.text=_dataArray[indexPath.row];
    return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 40.0f;

}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    songName=[_dataArray objectAtIndex:indexPath.row];
    _nameLabel.text=[_dataArray objectAtIndex:indexPath.row];
    NSURL * url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:_nameLabel.text ofType:@"mp3" ]];
    if([_avPlayer isPlaying]){

        [_avPlayer stop];
        _avPlayer=nil;
    }
    _avPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    [_avPlayer prepareToPlay];
    [_avPlayer play];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)volumeChanged:(id)sender {
    UISlider * slider=(UISlider *)sender;
    _avPlayer.volume=slider.value * 20;
}

- (IBAction)progressChanged:(id)sender {
    UISlider * slider=(UISlider *)sender;
    _avPlayer.currentTime=slider.value*_avPlayer.duration;
    [self playBtn:nil];

}

- (IBAction)playBtn:(id)sender {
    [_avPlayer play];
    //加入计时器,计时为1秒
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChanged) userInfo:nil repeats:YES];
}
-(void)timeChanged{
    NSInteger allTime = _avPlayer.duration;
    NSInteger MM=allTime/60;
    NSInteger SS=allTime%60;
    NSInteger currtentTime=_avPlayer.currentTime;
    NSInteger mm=currtentTime/60;
    NSInteger ss=currtentTime%60;
    NSString * str=[NSString stringWithFormat:@"%02d:%02d/%02d:%02d",mm,ss,MM,SS];
    self.timeLabel.text=str;
     self.progressSlider.value=_avPlayer.currentTime/_avPlayer.duration;
}

- (IBAction)nextBtn:(id)sender {
    NSInteger index = [_dataArray indexOfObject:songName];
    if(index==_dataArray.count){
        index=0;
    }else{
        index ++;
    }
    songName=_dataArray[index];
    _nameLabel.text=songName;
     NSURL * url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource: songName ofType:@"mp3" ]];
    if([_avPlayer isPlaying]){
        [_avPlayer stop];
        _avPlayer=nil;
    }
    _avPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    _avPlayer.delegate=self;
    [_avPlayer prepareToPlay];
    [_avPlayer play];
}
- (IBAction)stopBtn:(id)sender {
    if([_avPlayer isPlaying]){
        [_avPlayer stop];
    }
}
#pragma mark - AVAudioPlayer
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    if([_avPlayer isPlaying]){
        [_avPlayer stop];
        _avPlayer=nil;
    }
    NSInteger index = [_dataArray indexOfObject:songName];
    if(index==_dataArray.count){
        index=0;
    }else{
        index ++;
    }
    songName=_dataArray[index];
    _nameLabel.text=songName;
    NSURL * url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource: songName ofType:@"mp3" ]];
    _avPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    _avPlayer.delegate=self;
    [_avPlayer prepareToPlay];
    [self playBtn:nil];

}
@end
时间: 2024-08-07 19:20:30

UI音乐播放之初级篇 AVAudioPlayer的相关文章

UI音乐播放之入门篇AudioSerVicesPlay

-1-  AuidoSerVices 常用于提示音的播放,该种音频具有以下四种特点: 1>长度一般不超过30秒,不需要对播放过程进行控制 2>不能循环播放,不能暂停 3>不能播放立体声 4>不能播放混音 -2-创建提示音频AuidoSerVices..的准备工作 1.添加一个系统类库.audioToolbox.framework 2.导入头文件在viewController中 #import <AudioToolbox/AudioToolbox.h> -3-提示音的几个

iOS开发拓展篇—音频处理(音乐播放器5)

iOS开发拓展篇—音频处理(音乐播放器5) 实现效果: 一.半透明滑块的设置 1 /** 2 *拖动滑块 3 */ 4 - (IBAction)panSlider:(UIPanGestureRecognizer *)sender { 5 6 //1.获得挪动的距离 7 CGPoint t=[sender translationInView:sender.view]; 8 //把挪动清零 9 [sender setTranslation:CGPointZero inView:sender.view

iOS开发拓展篇—音频处理(音乐播放器3)

iOS开发拓展篇—音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewController.music=self.music[indexPath.row];不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议

iOS开发拓展篇—音频处理(音乐播放器6)

iOS开发拓展篇—音频处理(音乐播放器6) 一.图片处理 说明: Aspect表示按照原来的宽高比进行缩放. Aspectfit表示按照原来的宽高比缩放,要求看到全部图片,后果是不能完全覆盖窗口,会留有空白. Aspectfill表示按照原来的宽高比缩放,但只能看到部分图片.引发的问题:可能会有一部分超出屏幕. 所以,如果选择了Aspectfill模式,那么需要剪切超出的图片,在storyboard中也可以进行设置. 下面的两种设置是等效的. (1)在storyboard中进行设置 (2)使用代

iOS开发拓展篇—音频处理(音乐播放器4)

iOS开发拓展篇—音频处理(音乐播放器4) 说明:该文主要介绍音乐播放器实现过程中的一些细节控制. 实现的效果: 一.完整的代码 YYPlayingViewController.m文件 1 // 2 // YYPlayingViewController.m 3 // 20-音频处理(音乐播放器1) 4 // 5 // Created by apple on 14-8-13. 6 // Copyright (c) 2014年 yangyong. All rights reserved. 7 //

iOS开发拓展篇—音频处理(音乐播放器2)

iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 2.两种方法的分析 可以使用模态的方法,添加一个控制器,让这个控制器和音乐播放控制器类进行关联,脱线,设置标识符且在cell的点击事件中执行segue即可. 步骤说明: (1)在storyboard中新拖入一个控制器,然后设置和playing控制器类相关联. (2)设置手动跳转 (3)设置segue

iOS开发拓展篇—音频处理(音乐播放器1

iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如下: 二.新建两个控制器 (1)新建一个控制器,用于展示音乐文件列表界面,其继承自UITableViewController (2)新建一个控制器,用于展示播放界面,其继承自UIViewController (3)在storyboard中,把之前的控制器删除,换上一个导航控制器,设置tableVie

我的音乐播放器(1)ui界面

我的音乐播放器的UI 布局文件:很简单就是一个ListView展示歌曲的列表, 中间进度条显示歌曲的播放进度,和通过拖动来改变 播放的进度. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_p

iOS开发-音乐播放(AVAudioPlayer)

现在的手机的基本上没有人不停音乐的,我们无法想象在一个没有声音的世界里我们会过的怎么样,国内现在的主流的主流网易云音乐,QQ音乐,酷狗,虾米,天天基本上霸占了所有的用户群体,不过并没有妨碍大家对音乐的追求,乐流算是突围成功了,据说卖给QQ啦,有兴趣的可以看下.我们做不了那么高大上的就先做个简单的,最核心的就是播放,暂停,切歌,其他的基本上围绕这个修修补补锦上添花的,比如说歌曲名称,专辑,谁听了这首歌...铺垫的多了,直接看效果吧,三个按钮一个进度条: 初始化按钮: self.playButton