首先要导入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

ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件的更多相关文章

  1. iOS开发系列--扩展--播放音乐库中的音乐

    众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...

  2. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  3. Jar中的Java程序如何读取Jar包中的资源文件

    Jar中的Java程序如何读取Jar包中的资源文件 比如项目的组织结构如下(以idea中的项目为例): |-ProjectName |-.idea/  //这个目录是idea中项目的属性文件夹 |-s ...

  4. 读取web工程中.properties资源文件的模板代码

    读取web工程中.properties资源文件的模板代码 // 读取web工程中.properties资源文件的模板代码 private void test2() throws IOException ...

  5. SharePoint 2010遍历文档库中所有的文件,文件夹

    转:http://hi.baidu.com/sygwin/item/f99600849d51a12b110ef3eb 创建一个可视WebPart,并拖放一个label控件到ascx文件上,用于显示结果 ...

  6. 获取iPod library中的媒体文件

    [获取iPod library中的媒体文件] The Media Player framework provides facilities for playing movie, music, audi ...

  7. 无法打开虚拟机“master”(D:\文档\Virtual Machines\master\master.vmx):未找到文件。是否从库中移除“master”?

    今天打开虚拟机的时候,出现了这样的弹窗提示: 无法打开虚拟机"master"(D:\文档\Virtual Machines\master\master.vmx):未找到文件.是否从 ...

  8. IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断

    本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...

  9. [转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用

    转载地址:http://www.mamicode.com/info-detail-514151.html 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载 ...

随机推荐

  1. PHP - 验证类

    <?php /** * 验证类 * * @lastmodify 2014-5-16 * @author jy625 */ class VerifyAction{ /** * 是否为空值 */ p ...

  2. MDK的优化应用

    MDK的优化应用 http://blog.163.com/zhaojun_xf/blog/static/300505802011291384721/ 使用Keil/MDK这么多年了,一直都没有使用它的 ...

  3. c语言,变长数组

    下面这个结构体,可以在malloc的时候指定数据data的长度,这样的形式就是变长数组:typedef struct{ int data_len; char data[0];//或char data[ ...

  4. VC 无标题栏对话框移动

    操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:实现无框移动 所谓的无标题栏对话框,是基于对话框的工程,对话框属性Border设置为None,对话框如下所示: 为 ...

  5. 符号文件(.pdb)——Windows 应用程序调试必备

    最近在做项目需求过程中,时不时会遇到崩溃,总是异常中断,于是学习了windbg进行调试的一些基础,windbg在接下来文章进行更新,先介绍在windbg调试中一个重要文件(符号文件) 一.符号文件定义 ...

  6. Android网络:开发浏览器(二)——功能完善之长按网页图片菜单

    上述的历史和书签的功能已经实现.不过如果我们长时间按住图片,并不会出现如同UC中的一系列选项,我们可以来看看UC中的长按图片出现的菜单. 图10.2.9    UC中的长按图片菜单 我们可以看到UC中 ...

  7. EasyUI - 后台管理系统 - 增加,删除,修改

    效果: html代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ad ...

  8. 硬盘被误格式化或Ghost还原后的数据恢复

    硬盘格式化(Ghost还原)后的数据恢复 ---diskgenius使用之数据恢复 问题引出:计算机中病毒后用Ghost版本的winxp安装,由于安装途中选择了把映像安装到硬盘而不是分区,安装好后只剩 ...

  9. C++中 auto自己主动变量,命名空间,using作用以及作用域

     1.autokeyword的用途 A:自己主动变量.能够自己主动获取类型,输出,类似泛型 B:自己主动变量,能够实现自己主动循环一维数组 C:自己主动循环的时候,相应的必须是常量 2.auto自 ...

  10. MySql截取DateTime字段的日期值

    用 DATE_FORMAT 来格式化日期字段 SELECT DATE_FORMAT(crt_time,'%Y-%m-%d') FROM ad_n_advertise_t