ios简单的音频播放
// 我使用的AVAudioPlayer, 首先先导入库文件, 写上头文件,签上代理 #import "ViewController.h" #import <AVFoundation/AVFoundation.h> typedef NS_ENUM ( NSInteger , playStatus){ // 这个枚举用来控制暂停和播放的切换 playStatusNo, playStatusYes, }; @interface ViewController ()<AVAudioPlayerDelegate> @property ( nonatomic , assign) playStatus staus; @property ( nonatomic , retain) UISlider *slider; // 进度条 @property ( nonatomic , retain) UILabel *timeLabel; @end |
1
2
3
4
5
|
// 至于控件创建我就不一一写出来了 到这步是初始化播放器 self .player = [[AVAudioPlayer alloc] initWithContentsOfURL:[ NSURL fileURLWithPath:[[ NSBundle mainBundle] pathForResource:@ "1" ofType:@ "mp3" ]] error: nil ]; _player.delegate = self ; [_player prepareToPlay]; //分配播放所需的资源,并将其加入内部播放队列 (预播放) |
1
2
3
4
5
6
7
8
9
10
11
|
// 用NSTimer来监控音频播放进度 // 预订一个Timer,设置一个时间间隔。表示输入一个时间间隔对象,以秒为单位,一个>0的浮点类型的值,如果该值<0,系统会默认为0.1 self表发送的对象 useInfo此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器 repeat 为YES时,定时器会不断循环直至失效或被释放,当NO时,定时器会循环发送一次就失效。 _time = [ NSTimer scheduledTimerWithTimeInterval:0.1 target: self selector: @selector (updateslider) userInfo: nil repeats: YES ]; // 播放次数 UISwitch *loop = [[UISwitch alloc] initWithFrame:CGRectMake(100, 230, 60, 40)]; [loop addTarget: self action: @selector (loopYesOrNo) forControlEvents:UIControlEventValueChanged]; loop.on = NO ; // 默认状态不打开 [ self .view addSubview:loop]; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 实现点击按钮播放暂停 - ( void )buttonClickStart { if ( self .staus == playStatusYes) { self .staus = playStatusNo; [_player pause]; // 暂停播放; [ NSTimer scheduledTimerWithTimeInterval:0.1 target: self selector: @selector (updateMusicTimeLabel) userInfo: self repeats: YES ]; [_button setTitle:@ "暂停播放" forState:UIControlStateNormal]; } else { [_player play]; // 开始播放 self .staus = playStatusYes; [ NSTimer scheduledTimerWithTimeInterval:0.1 target: self selector: @selector (updateMusicTimeLabel) userInfo: self repeats: YES ]; [_button setTitle:@ "正在播放" forState:UIControlStateNormal]; } } // 播放时间更新 -( void )updateMusicTimeLabel{ if (( int ) self .player.currentTime % 60 < 10) { self .timeLabel.text = [ NSString stringWithFormat:@ "%d:0%d" ,( int ) self .player.currentTime / 60, ( int ) self .player.currentTime % 60]; } else { self .timeLabel.text = [ NSString stringWithFormat:@ "%d:%d" ,( int ) self .player.currentTime / 60, ( int ) self .player.currentTime % 60]; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// 循环播放 - ( void )loopYesOrNo { _player.numberOfLoops = -1; // 这里 正数就是播放几次 -1 就是无限循环 } // 进度条 - ( void )updateslider { self .slider.value = self .player.currentTime; } // 拖动进度条改变播放时间和播放位置 - ( void )sliderValueChanged { [ self .player stop]; [ self .player setCurrentTime: self .slider.value]; [ self .player prepareToPlay]; [ self .player play]; } |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。