AVAudioPlayerDemo

来源:互联网 发布:遵义广电网络客服电话 编辑:程序博客网 时间:2024/06/05 09:15

先导入框架AVFoundation.framework(记得在使用寻找音乐路径的时候要修改音乐的名字)

创建一个空的工程 再创建两个类 AudioPlayerViewController 和 ChoiceAudiViewController

在application文件中添加的代码如下 记得要导入ChoiceAudiViewController

ChoiceAudiViewController *choiceVC = [[ChoiceAudiViewControlleralloc]init];

    

    UINavigationController *navigationC = [[UINavigationControlleralloc]initWithRootViewController:choiceVC];

    

   self.window.rootViewController = navigationC;


ChoiceAudiViewController.h文件中的代码如下

#import <UIKit/UIKit.h>


@interface ChoiceAudiViewController :UIViewController<UITableViewDataSource,UITableViewDelegate>


@property (retain,nonatomic)NSArray *musicArr;


@end

ChoiceAudiViewController.m添加的代码


#import "ChoiceAudiViewController.h"

#import "AudioPlayerViewController.h"


@interface ChoiceAudiViewController ()


@end


@implementation ChoiceAudiViewController

- (void)dealloc

{

    [_musicArr release];

    [superdealloc];

}

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

{

   self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil];

   if (self) {

        // Custom initialization

       self.title =@"音乐列表";

    }

    return self;

}


- (void)viewDidLoad

{

    [superviewDidLoad];

    self.musicArr = [NSArrayarrayWithObjects:@"test",@"123",@"hinder",@"The Sound Of Silence",nil];

    

    UITableView *myTableView = [[UITableViewalloc]initWithFrame:CGRectMake(0,0, 320,450) style:UITableViewStylePlain];

    myTableView.delegate =self;

    myTableView.dataSource =self;

    [self.viewaddSubview:myTableView];

    

    [myTableViewrelease];

    

}

#pragma marks --- datasource ---

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return self.musicArr.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

   NSString *identifier = @"identifier";

    

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    

   if (cell == nil)

    {

        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identifier];

    }

    

    cell.textLabel.text = [self.musicArrobjectAtIndex:[indexPath row]];

    

   return cell;

}

#pragma marks --- UITable view delegate ---

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    AudioPlayerViewController *audioVC = [[AudioPlayerViewControlleralloc]init];

    audioVC.selectedMucicName = [self.musicArrobjectAtIndex:[indexPath row]];

    [self.navigationControllerpushViewController:audioVC animated:YES];

    

    [audioVCrelease];

}

- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


AudioPlayerViewController.h文件中添加的代码

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>


@interface AudioPlayerViewController :UIViewController<AVAudioPlayerDelegate>


@property (copy,nonatomic)NSString *selectedMucicName;


@property (retain,nonatomic)AVAudioPlayer *audiPlayer;


@property (retain,nonatomic)NSTimer *timer;


@property (assign,nonatomic)BOOL playState;


@end

AudioPlayerViewController.m文件中的代码


enum{

    BUTTON_TAG =1,

    LABEL1_TAG,

    LABEL2_TAG,

    SLI_VOICE_TAG,

    SLI_SONG_TAG

};

#import "AudioPlayerViewController.h"


@interface AudioPlayerViewController ()


@end


@implementation AudioPlayerViewController


- (void)dealloc

{

    [_audiPlayer release];

    [_timer release];

    [_selectedMucicName release];

    [super dealloc];

}

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

{

   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

   if (self) {

        

    }

    return self;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

   self.title = self.selectedMucicName;

    

    UIButton *audioButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    audioButton.frame = CGRectMake(120,80, 80, 40);

    audioButton.tag = BUTTON_TAG;

    [audioButton setTitle:@"play" forState:UIControlStateNormal];

    [audioButton addTarget:self action:@selector(playAndPauseBtnPress:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:audioButton];

    

    //显示播放进度的标签

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100,160, 120, 30)];

    label.text =@"00:00 of 00:00";

    label.tag = LABEL1_TAG;

    [self.view addSubview:label];

    [label release];

    

    //调节声音的进度条

    UISlider *voiceSlider = [[UISlider alloc]initWithFrame:CGRectMake(100,220, 210, 20)];

    voiceSlider.tag = SLI_VOICE_TAG;

    [self.view addSubview:voiceSlider];

    [voiceSlider release];

    

    //当声音进度改变时调用的方法

    [voiceSlider addTarget:self action:@selector(volumeChange:) forControlEvents:UIControlEventValueChanged];

    

    UILabel *voicelabel = [[UILabel alloc]initWithFrame:CGRectMake(10,220, 85, 20)];

    voicelabel.text =@"音量:";

    [self.view addSubview:voicelabel];

    [voicelabel release];

    

    UISlider *songSlider = [[UISlider alloc]initWithFrame:CGRectMake(100,280, 210, 20)];

    songSlider.thumbTintColor = [UIColor greenColor];

    songSlider.tintColor = [UIColor redColor];

    [songSlider setThumbImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];;

    songSlider.tag = SLI_SONG_TAG;

    [self.view addSubview:songSlider];

    [songSlider release];

    

    UILabel *songLabel = [[UILabel alloc]initWithFrame:CGRectMake(10,280, 85, 20)];

    songLabel.text =@"播放进度:";

    [self.view addSubview:songLabel];

    [songLabel release];

    

    //当进度条进度改变时调用的方法

    [songSlider addTarget:self action:@selector(progressChange:) forControlEvents:UIControlEventValueChanged];

    //当进度条进度改变完成时调用的方法

    [songSlider addTarget:self action:@selector(progressDidChanged:) forControlEvents:UIControlEventTouchUpInside];

}


- (void)viewWillAppear:(BOOL)animated

{

    NSString *path = [[NSBundle mainBundle]pathForResource:self.selectedMucicName ofType:@"mp3"];

    NSURL *url = [[NSURL alloc]initFileURLWithPath:path];

   self.audiPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];

    [url release];

   self.audiPlayer.delegate = self;

   self.audiPlayer.meteringEnabled = YES;

    [self.audiPlayer prepareToPlay];

    

   self.playState = NO;

}

- (void)viewWillDisappear:(BOOL)animated

{

    [self.audiPlayer stop];

    [self.audiPlayer release];

   self.audiPlayer = nil;

}

- (void)playAndPauseBtnPress:(id)sender

{

    UIButton *button = (UIButton *)[self.view viewWithTag:BUTTON_TAG];

    

   self.playState = !self.playState;

    

   if (self.playState)

    {

        [button setTitle:@"pause" forState:UIControlStateNormal];

        [self playMusic];

    }else

    {

        [button setTitle:@"play"forState:UIControlStateNormal];

        [selfpauseMusic];

    }

}

- (void)playMusic

{

    [self.audiPlayerplay];

    

   UISlider *voice = (UISlider *)[self.viewviewWithTag:SLI_VOICE_TAG];

   UISlider *song = (UISlider *)[self.viewviewWithTag:SLI_SONG_TAG];

   UILabel *timeLAable = (UILabel *)[self.viewviewWithTag:LABEL1_TAG];

    

    [voicesetEnabled:YES];

    [songsetEnabled:YES];

    [timeLAablesetEnabled:YES];

    

    voice.value =self.audiPlayer.volume;

    

    self.timer = [NSTimerscheduledTimerWithTimeInterval:0.1ftarget:selfselector:@selector(updateMeters)userInfo:nilrepeats:YES];

}

                  

- (void)pauseMusic{

    [self.audiPlayerpause];

    

   UISlider *voice = (UISlider *)[self.viewviewWithTag:SLI_VOICE_TAG];

   UISlider *song = (UISlider *)[self.viewviewWithTag:SLI_SONG_TAG];

    

    [self.timerinvalidate];

    

    [voicesetEnabled:NO];

    [songsetEnabled:NO];

    

}

                  

- (void)updateMeters

{

    [self.audiPlayerupdateMeters];

    

   UISlider *song = (UISlider *)[self.viewviewWithTag:SLI_SONG_TAG];

    song.value = self.audiPlayer.currentTime/self.audiPlayer.duration;

    

   UILabel *timeLabel = (UILabel *)[self.viewviewWithTag:LABEL1_TAG];

    timeLabel.text = [NSStringstringWithFormat:@"%@ of %@",[selfformateTime:self.audiPlayer.currentTime],[selfformateTime:self.audiPlayer.duration]];

    

}

-(NSString *)formateTime:(NSTimeInterval)_time{

     int num = (int)_time;

     int min = num / 60;

     int sec = num % 60;

     if (num < 60) {

         return [NSStringstringWithFormat:@"0:%2d",sec];

      }else{

         return [NSStringstringWithFormat:@"%2d:%2d",min,sec];

      }

}

- (void)volumeChange:(id)sender

{

   UISlider *slider = (UISlider *)[self.viewviewWithTag:SLI_VOICE_TAG];

    slider.value =self.audiPlayer.volume;

}

- (void)progressChange:(id)sender

{

    [self.audiPlayerpause];

    

   UISlider *song =(UISlider *)[self.viewviewWithTag:SLI_SONG_TAG];

   UILabel *timeLable = (UILabel *)[self.viewviewWithTag:LABEL1_TAG];

    

    song.value =self.audiPlayer.duration * song.value;

    

    timeLable.text = [NSStringstringWithFormat:@"%@ of %@",[selfformateTime:self.audiPlayer.currentTime],[selfformateTime:self.audiPlayer.duration]];

}

- (void)progressDidChanged:(id)sender

{

    [self.audiPlayerplay];

}

#pragma marks --- AVAudioPlayer delegate ---

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

{

   UISlider *voice = (UISlider *)[self.viewviewWithTag:SLI_VOICE_TAG];

   UISlider *song = (UISlider *)[self.viewviewWithTag:SLI_SONG_TAG];

    

    voice.enabled =NO;

    song.enabled =NO;

    

   UIButton *btn = (UIButton *)[self.viewviewWithTag:BUTTON_TAG];

    [btn setTitle:@"Play"forState:UIControlStateNormal];

}

- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




0 0
原创粉丝点击