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


首先要导入AVFoundation框架及

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

注意:要在真机上调试


下面是ipad上的调试效果


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

[cpp]  view plain copy
  1. //  
  2. //  RootViewController.h  
  3. //  SoundDemo  
  4. //  
  5. //  Created by on 13-6-21.  
  6. //  Copyright (c) 2013年 DoubleMan. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10. #import <AVFoundation/AVFoundation.h>  
  11. #import <MediaPlayer/MediaPlayer.h>  
  12.   
  13. @interface RootViewController : UIViewController <AVAudioPlayerDelegate>  
  14. {  
  15.     AVAudioPlayer *player;  
  16. }  
  17.   
  18. @property (nonatomic, retain) AVAudioPlayer *player;  
  19. @property (nonatomic, retain) UISlider *slider;  
  20. @property (nonatomic, retain) NSTimer *timer;  
  21.   
  22. @end  

[cpp]  view plain copy
  1. //  
  2. //  RootViewController.m  
  3. //  SoundDemo  
  4. //  
  5. //  Created by on 13-6-21.  
  6. //  Copyright (c) 2013年 DoubleMan. All rights reserved.  
  7. //  
  8.   
  9. #import "RootViewController.h"  
  10.   
  11. @interface RootViewController ()  
  12.   
  13. @end  
  14.   
  15. @implementation RootViewController  
  16.   
  17. @synthesize player;  
  18. @synthesize slider;  
  19. @synthesize timer;  
  20.   
  21. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  22. {  
  23.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  24.     if (self) {  
  25.         // Custom initialization  
  26.           
  27.           
  28.     }  
  29.     return self;  
  30. }  
  31.   
  32. - (void)viewDidLoad  
  33. {  
  34.     [super viewDidLoad];  
  35.       
  36.     UIButton *musicPlay = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
  37.     musicPlay.frame = CGRectMake(10, 10, 90, 35);  
  38.     [musicPlay setTitle:@"Play" forState:UIControlStateNormal];  
  39.     [musicPlay addTarget:self action:@selector(playMusic) forControlEvents:UIControlEventTouchUpInside];  
  40.     [self.view addSubview:musicPlay];  
  41.       
  42.     UIButton *pause = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
  43.     pause.frame = CGRectMake(115, 10, 90, 35);  
  44.     [pause setTitle:@"Pause" forState:UIControlStateNormal];  
  45.     [pause addTarget:self action:@selector(pause) forControlEvents:UIControlEventTouchUpInside];  
  46.     [self.view addSubview:pause];  
  47.       
  48.     UIButton *stop = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
  49.     stop.frame = CGRectMake(220, 10, 90, 35);  
  50.     [stop setTitle:@"stop" forState:UIControlStateNormal];  
  51.     [stop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];  
  52.     [self.view addSubview:stop];  
  53.       
  54.     slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 65, 300, 20)];  
  55.     [slider addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged];  
  56.     [self.view addSubview:slider];  
  57.       
  58.     //   
  59.     NSString *path = [[NSBundle mainBundle] pathForResource:@"找一个相爱的理由-晨熙-艾歌" ofType:@"wav"];  
  60.     NSURL *url = [NSURL fileURLWithPath:path];  
  61. //创建播放器
  62.     player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];  
  63.     // 设置循环次数,-1为一直循环  
  64.     player.numberOfLoops = -1;  
  65.     // 准备播放  
  66.     [player prepareToPlay];  
  67.     // 设置播放音量  
  68.     player.volume = 50;  
  69.     // 当前播放位置,即从currentTime处开始播放,相关于android里面的seekTo方法  
  70.     player.currentTime = 15;  
  71.     // 设置代理  
  72.     player.delegate = self; //代理要在播放器创建后设置. 
  73.     int dur = player.duration;  
  74.     slider.maximumValue = dur;  
  75.       
  76.     // 一秒一次更新播放进度  
  77.     timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateSlider) userInfo:nil repeats:YES];  
  78.       
  79.     // 从ipod库中读出音乐文件  
  80. //    MPMediaQuery *everything = [[MPMediaQuery alloc] init];  
  81. //    // 读取条件  
  82. //    MPMediaPropertyPredicate *albumNamePredicate =  
  83. //    [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType];  
  84. //    [everything addFilterPredicate:albumNamePredicate];  
  85. //      
  86. //    NSLog(@"Logging items from a generic query...");  
  87. //    NSArray *itemsFromGenericQuery = [everything items];  
  88. //    for (MPMediaItem *song in itemsFromGenericQuery) {  
  89. //        NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];  
  90. //        NSLog (@"%@", songTitle);  
  91. //    }  
  92. //      
  93. //    [everything release];  
  94. }  
  95.   
  96. // 更新播放进度  
  97. - (void)updateSlider {  
  98.     slider.value = player.currentTime;  
  99. }  
  100.   
  101. // 进度滑块变化时,跳转到进度播放  
  102. - (void)sliderValueChange:(UISlider *)mSlider {  
  103.     player.currentTime = mSlider.value;  
  104.     NSLog(@"value: %.0f", mSlider.value);  
  105. }  
  106.   
  107. // 停止  
  108. - (void)stop {  
  109.     player.currentTime = 0;  
  110.     [player stop];  
  111. }  
  112.   
  113. // 暂停  
  114. - (void)pause {  
  115.     [player pause];  
  116.     NSLog(@"pause");  
  117. }  
  118.   
  119. // 开始播放  
  120. - (void)playMusic {  
  121.     NSLog(@"start play");  
  122.     [player play];  
  123. }  
  124.   
  125. #pragma mark - AVAudioPlayerDelegate  
  126. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {  
  127.     // 播放完成时调用   只有当播放结束时才会调用,循环播放时不会调  
  128.     [timer invalidate];  
  129.     NSLog(@"audioPlayerDidFinishPlaying");  
  130. }  
  131.   
  132. /* if an error occurs while decoding it will be reported to the delegate. */  
  133. - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error {  
  134.     // 解码出错时调用  
  135. }  
  136.   
  137. - (void)didReceiveMemoryWarning  
  138. {  
  139.     [super didReceiveMemoryWarning];  
  140.     // Dispose of any resources that can be recreated.  
  141. }  
  142.   
  143. - (void)dealloc  
  144. {  
  145.     [player stop];  
  146.     [player release];  
  147.     [slider release];  
  148.     [timer release];  
  149.     [super dealloc];  
  150. }  
  151.   
  152. @end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值