您的位置:首页 > 运维架构

AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

2015-06-23 16:22 513 查看

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

首先要导入AVFoundation框架及



下面是代码,代码中都有注释:
[cpp] view plaincopy

//

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

[cpp] view plaincopy

//

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


上一篇IOS学习:用UIWindow自定义AlertView(最基本代码)

下一篇IOS开发学习:MKMapView自定义CalloutView



2

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息