2014-01-10 音频播放之AVAudioPlayer

来源:互联网 发布:淘宝店面美工 编辑:程序博客网 时间:2024/05/01 08:21

  AVAudioPlayer支持本地播放,不支持流媒播放


  //获取NSBundle下的本地歌曲

    NSString *string = [[NSBundlemainBundle]pathForResource:@"蓝莲花 - 张恒远,赵晗" ofType:@"mp3"];

    

   //注意方法fileURLWithPath 和URLWithString

    /*

     前者为打开本地file

     后者为把String类型转换为URL网络地址

     */

    NSURL *url = [NSURLfileURLWithPath:string];

    

   //注意此时的audio为全局对象否则播放不了

   audio = [[AVAudioPlayeralloc]initWithContentsOfURL:urlerror:nil];

    

   //准备播放加入一个队列 并没有开始播放

    [audioprepareToPlay];

    if ([audio play]) {

        NSLog(@"音乐开始播放");

    }

   //numberOfLoops为设定播放次数 默认为1次

   audio.numberOfLoops =3;

   /*

     此外常用的属性有:

     //调节音量  范围是0.0-1.0之间

    1. audio.volume = 0.5

     //设置歌曲的总时长

     2.audio.duration

     //设定当前播放的进度

     3.audio.currentTime = 15.0

     //设定声道数 它是个只读属性

     4.NSUInteger channels = audio.numberOfChannels;

     

     [audio play];//播放

     [audio stop];//停止

     [audio pause];//暂停

     */




code:

#import<UIKit/UIKit.h>

#import<AVFoundation/AVFoundation.h>//导入包


@interface MainViewController :UIViewController<AVAudioPlayerDelegate>

{

    AVAudioPlayer *audio ;//播放器

    NSTimer *timer;//定时器

    BOOL isPlaying;//判断是否播放

}

@property (weak,nonatomic)IBOutlet UISlider *volumeSlider;//音量调节

@property (weak,nonatomic)IBOutlet UISlider *progressSlider;//进度调节

@property (weak,nonatomic)IBOutlet UILabel *currTime;//显示播放时间

@property (weak,nonatomic)IBOutlet UILabel *durationTime;//显示总时间

@property (weak,nonatomic)IBOutlet UIButton *playBtn;//播放按钮



@end





#import"MainViewController.h"

@interfaceMainViewController ()


@end


@implementation MainViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNilbundle:nibBundleOrNil];

    if (self) {

       // Custom initialization

    }

   return self;

}


- (void)viewDidLoad

{

    [superviewDidLoad];

    

   //获得Bundle下的MP3文件

    NSString *path = [[NSBundlemainBundle]pathForResource:@"蓝莲花 - 张恒远,赵晗" ofType:@"mp3"];

   //String类型转化为url

    NSURL *url = [NSURLfileURLWithPath:path];

    

   audio = [[AVAudioPlayeralloc]initWithContentsOfURL:url error:nil];

    

    audio.delegate =self;

    

    [audioprepareToPlay];

    

    

    

   self.progressSlider.maximumValue =audio.duration;//给进度条赋最大值 音乐的总长度

    

   self.durationTime.text = [NSStringstringWithFormat:@"%d",(int)audio.duration];//赋值音乐的最大长度

    

  timer =  [NSTimerscheduledTimerWithTimeInterval:1.0ftarget:selfselector:@selector(timeAction)userInfo:nilrepeats:YES];

    

}

//显示时间以00:00格式

-(void)showTime

{

    

    if ((int)audio.currentTime %60 <10) {

       self.currTime.text = [NSStringstringWithFormat:@"%d:0%d",(int)audio.currentTime / 60, (int)audio.currentTime %60];

    } else {

       self.currTime.text = [NSStringstringWithFormat:@"%d:%d",(int)audio.currentTime / 60, (int)audio.currentTime %60];

    }

    

    

    if ((int)audio.duration %60 <10) {

        self.durationTime.text = [NSStringstringWithFormat:@"%d:0%d",(int)audio.duration /60, (int)audio.duration %60];

    } else {

        self.durationTime.text = [NSStringstringWithFormat:@"%d:%d",(int)audio.duration /60, (int)audio.duration %60];

    }

}



//监听当前时间和进度条的动态

- (void)timeAction

{

    [selfshowTime];

   self.progressSlider.value =audio.currentTime;

}


- (IBAction)progressAction:(UISlider *)sender

{

   //设置当前的播放进度时间

    audio.currentTime = sender.value;

}

- (IBAction)volumnAction:(UISlider *)sender

{

   //设置播放器的音量

    audio.volume = sender.value;

}

- (IBAction)playBtn:(UIButton *)sender

{

   //获得当前播放状态

   isPlaying = audio.playing;

    if (isPlaying) {

        [audiopause];

        [sendersetTitle:@"播放"forState:UIControlStateNormal];

    }else{

        [audioplay];

        [sendersetTitle:@"暂停"forState:UIControlStateNormal];

    }

}


- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

{


    [timerinvalidate];//关闭timer

   self.progressSlider.value =0.0;

    [self.playBtnsetTitle:@"播放"forState:UIControlStateNormal];


   isPlaying = NO;

}


@end





0 0