zoukankan      html  css  js  c++  java
  • oc中用Avaudio做的简单播放器界面

    1 建立工程,并将所用到的音频,图片等文件加入到工程中去。

    2写入代码

      1 //
      2 //  ViewController.m
      3 //  avaudio
      4 //
      5 //  Created by apple on 14-7-18.
      6 //  Copyright (c) 2014年 无名. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 #import <AVFoundation/AVFoundation.h>
     11 
     12 @interface ViewController ()<AVAudioPlayerDelegate>
     13 {
     14     int  index,di,i,ki,dd;
     15     UIImageView *pic;
     16     AVAudioPlayer *player;
     17     NSArray *list,*soundpicture;
     18    //定义一个定时器的变量
     19     NSTimer *t1;
     20     UIButton *but,*but4;
     21     double a;
     22     int random[100];
     23 }
     24 @property (weak, nonatomic) IBOutlet UISlider *proceed;
     25 @property (weak, nonatomic) IBOutlet UILabel *label2;
     26 @property (weak, nonatomic) IBOutlet UISlider *sound;
     27 @property (weak, nonatomic) IBOutlet UILabel *starttime;
     28 @property (weak, nonatomic) IBOutlet UILabel *remaintime;
     29 @property (weak, nonatomic) IBOutlet UIButton *model;
     30 
     31 @end
     32 
     33 
     34 @implementation ViewController
     35 
     36 -(void)createbutton
     37 {
     38     //对歌曲图面这个空间初始化
     39     pic=[[UIImageView alloc] initWithFrame:CGRectMake(20, 125, 280, 240)];
     40     [self.view addSubview:pic];
     41     //播放暂停按钮
     42    but=[UIButton buttonWithType:UIButtonTypeCustom];
     43     but.frame=CGRectMake(125, 430,45,45);
     44     [but setImage:[UIImage imageNamed:@"3"] forState:UIControlStateNormal];
     45     [but addTarget:self action:@selector(didplayer:) forControlEvents:UIControlEventTouchUpInside];
     46     [self.view addSubview:but];
     47     //下一曲按钮
     48     UIButton *but1=[UIButton buttonWithType:UIButtonTypeCustom];
     49     but1.frame=CGRectMake(220, 430,45,45);
     50      [but1 setImage:[UIImage imageNamed:@"6"] forState:UIControlStateNormal];
     51     [but1 addTarget:self action:@selector(didnext:) forControlEvents:UIControlEventTouchUpInside];
     52     [self.view addSubview:but1];
     53     //上一曲按钮
     54     UIButton *but2=[UIButton buttonWithType:UIButtonTypeCustom];
     55     but2.frame=CGRectMake(30, 430,45,45);
     56    [but2 setImage:[UIImage imageNamed:@"4"] forState:UIControlStateNormal];
     57     [but2 addTarget:self action:@selector(didprevious:) forControlEvents:UIControlEventTouchUpInside];
     58     [self.view addSubview:but2];
     59     //停止按钮
     60     UIButton *but3=[UIButton buttonWithType:UIButtonTypeCustom];
     61     but3.frame=CGRectMake(125, 480,45,45);
     62     [but3 setImage:[UIImage imageNamed:@"5"] forState:UIControlStateNormal];
     63     [but3 addTarget:self action:@selector(didstop:) forControlEvents:UIControlEventTouchUpInside];
     64     [self.view addSubview:but3];
     65     //声音控制按钮
     66     but4=[UIButton buttonWithType:UIButtonTypeCustom];
     67     but4.frame=CGRectMake(45, 42,25,25);
     68     [but4 setImage:[UIImage imageNamed:@"9"] forState:UIControlStateNormal];
     69     [but4 addTarget:self action:@selector(controlvoice:) forControlEvents:UIControlEventTouchUpInside];
     70     [self.view addSubview:but4];
     71 }
     72 
     73 //停止播放,进度条为零,播放按钮为暂停图标
     74 -(void)didstop:(UIButton *)sender
     75 {
     76     [player stop];
     77     player.currentTime=0;
     78     [but setImage:[UIImage imageNamed:@"3"] forState:UIControlStateNormal];
     79 }
     80 //播放或暂停
     81 -(void)didplayer:(UIButton *)sender
     82 {
     83   if(~di)
     84   {
     85       [self createplay];
     86       [but setImage:[UIImage imageNamed:@"2"] forState:UIControlStateNormal];
     87       
     88   }
     89       else
     90   {
     91       [player pause];
     92       [but setImage:[UIImage imageNamed:@"3"] forState:UIControlStateNormal];
     93      
     94   }
     95       di=~di;
     96     
     97 }
     98 //下一曲
     99 -(void)didnext:(UIButton *)sender
    100 {
    101     if(ki==0||ki==1)
    102     {
    103       if(index==list.count-1)
    104           index=0;
    105       else
    106           index++;
    107     }
    108     else if (ki==2)
    109     {
    110         random[dd]=index;
    111       index=arc4random()%15;
    112         dd++;
    113     }
    114     //下一曲后进度条清零,这一步骤必须放在播放之前,即在[self createplay]之前
    115     self.proceed.value=0;
    116     [self createplay];
    117 }
    118 //上一曲
    119 -(void)didprevious:(UIButton *)sender
    120 {
    121      if(ki==0||ki==1)
    122      {
    123      if(index==0)
    124         index=list.count-1;//一定要注意 减一,否则就溢出。
    125       else index--;
    126      }
    127     if(ki==2)
    128     {
    129         if(dd!=0)
    130         {
    131             index=random[dd-1];
    132             dd--;
    133         }
    134         else index=arc4random()%15;
    135     }
    136        //上一曲后 进度条清零,,这一步骤必须放在播放之前,即在[self createplay]之前
    137     self.proceed.value=0;
    138     [self createplay];
    139 }
    140 //播放文件的产生
    141 -(void)createplay
    142 {
    143     NSString *name=list[index];
    144     NSString *picture=soundpicture[index];
    145     pic.image=[UIImage imageNamed:picture];
    146    
    147     //1获取资源文件的文件路径
    148     NSString *path=[[NSBundle mainBundle] pathForResource:name ofType:@"mp3"];
    149  
    150     //2. 将文件读取到内存中
    151     //NSData *data = [NSData dataWithContentsOfFile:path];
    152     //3. 创建一个播放器对象
    153     //player = [[AVAudioPlayer alloc] initWithData:data error:nil];
    154     //网络地址用下面的方法
    155     //[NSURL URLWithString:@"http://www.baidu.com"];
    156  
    157     //4从文件路径生产一个URL对象
    158     NSURL *url=[NSURL fileURLWithPath:path];
    159    
    160     //AVAudioPlayer只能播放本地文件
    161     player=[[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    162     //?????
    163     player.delegate=self;
    164     player.volume=0.5;
    165     
    166     //这条语句使暂停后在播放,会接着你暂停的点播放,而不是从头开始播放。
    167     player.currentTime=self.proceed.value*player.duration;
    168     
    169     //播放准备
    170     [player prepareToPlay];
    171     [player play];
    172     
    173     //显示歌名
    174     self.label2.text=name;
    175     
    176     //时钟,每隔0.1s执行一次times
    177     t1=[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(times) userInfo:nil repeats:YES];
    178 }
    179 //每隔0.1秒执行的函数
    180 -(void)times
    181 {
    182     //滑动条的值等于歌曲正在播放时间的值/该歌曲的总时间。
    183     //从而形成了进度条
    184     self.proceed.value=player.currentTime/player.duration;
    185  
    186     //显示开始的时间
    187     int startminute=(int)player.currentTime/60;
    188     int statesecond=(int)player.currentTime%60;
    189     self.starttime.text=[NSString stringWithFormat:@"%02d:%02d",startminute,statesecond];
    190   
    191     //显示剩余时间
    192     int remainminute=(int)(player.duration-player.currentTime)/60;
    193     int remainsecond=(int)(player.duration-player.currentTime)%60;
    194     self.remaintime.text=[NSString stringWithFormat:@"%02d:%02d",remainminute,remainsecond];
    195     
    196 }
    197 
    198 - (void)viewDidLoad {
    199     [super viewDidLoad];
    200     
    201     //将歌名存入list的数组中
    202     list=@[@"陈奕迅一丝不挂",@"陈奕迅 - 淘汰",@"陈奕迅 - 单车",@"陈奕迅 - 不要说话",@"陈柏宇 - 你瞒我瞒",@"周杰伦 安静",@"王杰 - 不浪漫罪名",@"王力宏 Can you feel my world",@"林俊杰 不死之身 ",@"卡农  钢琴曲 ",@"海鸣威  老人与海 ",@"付辛博  这一刻,爱吧 ",@"林俊杰 第二天堂",@"庞龙 兄弟抱一下",@"孙燕姿 遇见"];
    203    
    204     //将片存入数组中去
    205     soundpicture=@[@"一丝不挂",@"淘汰",@"单车",@"不要说话",@"你瞒我瞒",@"安静",@"不浪漫的罪名",@"can yon feel my world",@"不死之身",@"卡农",@"老人与海",@"这一刻爱吧",@"第二天堂",@"兄弟抱一下",@"遇见"];
    206     [self createbutton];
    207    
    208     //初始化进度条
    209     self.proceed.value=0;
    210    //arc4random
    211 }
    212 
    213 //歌曲播放完了执行
    214 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    215 {
    216     if(ki==0)
    217     {
    218       index++;
    219       if (index==list.count)
    220       {
    221         index=0;
    222       }
    223     }
    224     //随机播放模式
    225     else  if(ki==2)
    226     {
    227         index=arc4random()%15;
    228     }
    229     //停止计时器
    230     [t1 invalidate];
    231     //播放完后是进度条清零,这一步骤必须放在播放之前,即在[self createplay]之前
    232     self.proceed.value=0;
    233     [self createplay];
    234 }
    235 
    236 - (void)didReceiveMemoryWarning {
    237     [super didReceiveMemoryWarning];
    238     // Dispose of any resources that can be recreated.
    239 }
    240 
    241 //歌曲进度条控制
    242 - (IBAction)proceeding:(UISlider *)sender {
    243     player.currentTime=sender.value*player.duration;
    244 }
    245 
    246 //声音进度条的控制
    247 - (IBAction)voice:(UISlider *)sender {
    248     player.volume=sender.value;
    249     
    250 }
    251 //声音的静音与还原
    252 - (IBAction)controlvoice:(UIButton *)sender {
    253     
    254     if (~i)
    255     {
    256         player.volume=0;
    257         [but4 setImage:[UIImage imageNamed:@"8"] forState:UIControlStateNormal];
    258     }
    259     else
    260     {
    261         player.volume=self.sound.value;
    262         [but4 setImage:[UIImage imageNamed:@"9"] forState:UIControlStateNormal];
    263     }
    264     i=~i;
    265 }
    266 - (IBAction)nodel:(UIButton *)sender {
    267     if (ki==0) {
    268         [_model setTitle:@"单曲循环" forState:UIControlStateNormal];
    269         ki++;
    270     }
    271     else  if(ki==1)
    272     {
    273         [_model setTitle:@"随机播放" forState:UIControlStateNormal];
    274         ki++;
    275     }
    276     else   if(ki==2)
    277     {
    278         [_model setTitle:@"顺序播放" forState:UIControlStateNormal];
    279         ki=0;
    280     }
    281 }
    282 
    283 @end

    直接注意的时记得加入头文件

    #import <AVFoundation/AVFoundation.h>

    得到的结果为:



  • 相关阅读:
    基础问题汇总
    c primer plus 习题答案(5)
    c primer plus 习题答案(4)
    c primer plus 习题答案(3)
    c primer plus 习题答案(2)
    c primer plus 习题答案(1)
    渲染引擎之材质系统
    渲染引擎之坐标变换
    渲染引擎之底层视角
    渲染引擎之渲染管线
  • 原文地址:https://www.cnblogs.com/lucan727/p/3859040.html
Copyright © 2011-2022 走看看