先导入框架AVFoundation.framework(记得在使用寻找音乐路径的时候要修改音乐的名字)
创建一个空的工程 再创建两个类 AudioPlayerViewController 和 ChoiceAudiViewController
在application文件中添加的代码如下 记得要导入ChoiceAudiViewController
ChoiceAudiViewController *choiceVC = [[ChoiceAudiViewController alloc]init];
UINavigationController *navigationC = [[UINavigationController alloc]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];
[super dealloc];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.title = @"音乐列表";
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.musicArr = [NSArray arrayWithObjects:@"test",@"123",@"hinder",@"The Sound Of Silence",nil];
UITableView *myTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 450) style:UITableViewStylePlain];
myTableView.delegate = self;
myTableView.dataSource = self;
[self.view addSubview:myTableView];
[myTableView release];
}
#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 = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.textLabel.text = [self.musicArr objectAtIndex:[indexPath row]];
return cell;
}
#pragma marks --- UITable view delegate ---
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
AudioPlayerViewController *audioVC = [[AudioPlayerViewController alloc]init];
audioVC.selectedMucicName = [self.musicArr objectAtIndex:[indexPath row]];
[self.navigationController pushViewController:audioVC animated:YES];
[audioVC release];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
#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
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];
[self pauseMusic];
}
}
- (void)playMusic
{
[self.audiPlayer play];
UISlider *voice = (UISlider *)[self.view viewWithTag:SLI_VOICE_TAG];
UISlider *song = (UISlider *)[self.view viewWithTag:SLI_SONG_TAG];
UILabel *timeLAable = (UILabel *)[self.view viewWithTag:LABEL1_TAG];
[voice setEnabled:YES];
[song setEnabled:YES];
[timeLAable setEnabled:YES];
voice.value = self.audiPlayer.volume;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(updateMeters) userInfo:nil repeats:YES];
}
- (void)pauseMusic{
[self.audiPlayer pause];
UISlider *voice = (UISlider *)[self.view viewWithTag:SLI_VOICE_TAG];
UISlider *song = (UISlider *)[self.view viewWithTag:SLI_SONG_TAG];
[self.timer invalidate];
[voice setEnabled:NO];
[song setEnabled:NO];
}
- (void)updateMeters
{
[self.audiPlayer updateMeters];
UISlider *song = (UISlider *)[self.view viewWithTag:SLI_SONG_TAG];
song.value = self.audiPlayer.currentTime/self.audiPlayer.duration;
UILabel *timeLabel = (UILabel *)[self.view viewWithTag:LABEL1_TAG];
timeLabel.text = [NSString stringWithFormat:@"%@ of %@",[self formateTime:self.audiPlayer.currentTime],[self formateTime:self.audiPlayer.duration]];
}
-(NSString *)formateTime:(NSTimeInterval)_time{
int num = (int)_time;
int min = num / 60;
int sec = num % 60;
if (num < 60) {
return [NSString stringWithFormat:@"0:%2d",sec];
}else{
return [NSString stringWithFormat:@"%2d:%2d",min,sec];
}
}
- (void)volumeChange:(id)sender
{
UISlider *slider = (UISlider *)[self.view viewWithTag:SLI_VOICE_TAG];
slider.value = self.audiPlayer.volume;
}
- (void)progressChange:(id)sender
{
[self.audiPlayer pause];
UISlider *song =(UISlider *)[self.view viewWithTag:SLI_SONG_TAG];
UILabel *timeLable = (UILabel *)[self.view viewWithTag:LABEL1_TAG];
song.value = self.audiPlayer.duration * song.value;
timeLable.text = [NSString stringWithFormat:@"%@ of %@",[self formateTime:self.audiPlayer.currentTime],[self formateTime:self.audiPlayer.duration]];
}
- (void)progressDidChanged:(id)sender
{
[self.audiPlayer play];
}
#pragma marks --- AVAudioPlayer delegate ---
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
UISlider *voice = (UISlider *)[self.view viewWithTag:SLI_VOICE_TAG];
UISlider *song = (UISlider *)[self.view viewWithTag:SLI_SONG_TAG];
voice.enabled = NO;
song.enabled = NO;
UIButton *btn = (UIButton *)[self.view viewWithTag:BUTTON_TAG];
[btn setTitle:@"Play" forState:UIControlStateNormal];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end