首先要导入AVFoundation框架及
#import <AVFoundation/AVFoundation.h>头文件
注意:要在真机上调试
下面是ipad上的调试效果
下面是代码,代码中都有注释:
- //
- // RootViewController.h
- // SoundDemo
- //
- // Created by on 13-6-21.
- // Copyright (c) 2013年 DoubleMan. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- #import <AVFoundation/AVFoundation.h>
- #import <MediaPlayer/MediaPlayer.h>
- @interface RootViewController : UIViewController <AVAudioPlayerDelegate>
- {
- AVAudioPlayer *player;
- }
- @property (nonatomic, retain) AVAudioPlayer *player;
- @property (nonatomic, retain) UISlider *slider;
- @property (nonatomic, retain) NSTimer *timer;
- @end
- //
- // RootViewController.m
- // SoundDemo
- //
- // Created by on 13-6-21.
- // Copyright (c) 2013年 DoubleMan. All rights reserved.
- //
- #import "RootViewController.h"
- @interface RootViewController ()
- @end
- @implementation RootViewController
- @synthesize player;
- @synthesize slider;
- @synthesize timer;
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- UIButton *musicPlay = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- musicPlay.frame = CGRectMake(10, 10, 90, 35);
- [musicPlay setTitle:@"Play" forState:UIControlStateNormal];
- [musicPlay addTarget:self action:@selector(playMusic) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:musicPlay];
- UIButton *pause = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- pause.frame = CGRectMake(115, 10, 90, 35);
- [pause setTitle:@"Pause" forState:UIControlStateNormal];
- [pause addTarget:self action:@selector(pause) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:pause];
- UIButton *stop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- stop.frame = CGRectMake(220, 10, 90, 35);
- [stop setTitle:@"stop" forState:UIControlStateNormal];
- [stop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:stop];
- slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 65, 300, 20)];
- [slider addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged];
- [self.view addSubview:slider];
- //
- NSString *path = [[NSBundle mainBundle] pathForResource:@"找一个相爱的理由-晨熙-艾歌" ofType:@"wav"];
- NSURL *url = [NSURL fileURLWithPath:path];
- //创建播放器
- player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
- // 设置循环次数,-1为一直循环
- player.numberOfLoops = -1;
- // 准备播放
- [player prepareToPlay];
- // 设置播放音量
- player.volume = 50;
- // 当前播放位置,即从currentTime处开始播放,相关于android里面的seekTo方法
- player.currentTime = 15;
- // 设置代理
- player.delegate = self; //代理要在播放器创建后设置.
- int dur = player.duration;
- slider.maximumValue = dur;
- // 一秒一次更新播放进度
- timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateSlider) userInfo:nil repeats:YES];
- // 从ipod库中读出音乐文件
- // MPMediaQuery *everything = [[MPMediaQuery alloc] init];
- // // 读取条件
- // MPMediaPropertyPredicate *albumNamePredicate =
- // [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType];
- // [everything addFilterPredicate:albumNamePredicate];
- //
- // NSLog(@"Logging items from a generic query...");
- // NSArray *itemsFromGenericQuery = [everything items];
- // for (MPMediaItem *song in itemsFromGenericQuery) {
- // NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
- // NSLog (@"%@", songTitle);
- // }
- //
- // [everything release];
- }
- // 更新播放进度
- - (void)updateSlider {
- slider.value = player.currentTime;
- }
- // 进度滑块变化时,跳转到进度播放
- - (void)sliderValueChange:(UISlider *)mSlider {
- player.currentTime = mSlider.value;
- NSLog(@"value: %.0f", mSlider.value);
- }
- // 停止
- - (void)stop {
- player.currentTime = 0;
- [player stop];
- }
- // 暂停
- - (void)pause {
- [player pause];
- NSLog(@"pause");
- }
- // 开始播放
- - (void)playMusic {
- NSLog(@"start play");
- [player play];
- }
- #pragma mark - AVAudioPlayerDelegate
- - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
- // 播放完成时调用 只有当播放结束时才会调用,循环播放时不会调
- [timer invalidate];
- NSLog(@"audioPlayerDidFinishPlaying");
- }
- /* if an error occurs while decoding it will be reported to the delegate. */
- - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error {
- // 解码出错时调用
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- - (void)dealloc
- {
- [player stop];
- [player release];
- [slider release];
- [timer release];
- [super dealloc];
- }
- @end