ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

首先要导入AVFoundation框架及

#import <AVFoundation/AVFoundation.h>头文件

注意:要在真机上调试


下面是ipad上的调试效果

ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

下面是代码,代码中都有注释:

 

//

//  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


 

 

你可能感兴趣的:(play)