首页 > 编程知识 正文

音乐软件,ios13

时间:2023-05-04 21:39:13 阅读:53820 作者:372

一个叫iOS音乐的博客介绍了漫长的音频播放——音乐.

可以通过单击以下链接访问声音介绍.

iOS声音

首先导入框架:AVFoundation.framework

导入帧后,在使用音乐的文件中引入头文件:

# importavfoundation/av foundation.h准备好后,我们将开始介绍此博客的主要内容:

我在这里实现了一个非常小的功能(

可播放、暂停和停止(分别通过三个按钮实现)显示播放进度的滑块可以显示当前播放进度,拖动改变播放进度的滑块可以改变音乐播放速度的滑块可以改变音乐播放音量。 以下按内容进行介绍。 实现整个代码:

AVAudioPlayer

视听音频播放器可以说是整个音乐的操作者。 通过他我们实现各自的操作。

@property(nonatomic,strong ) av音频播放器* player; 我们在视听音频播放器的懒惰加载上做一些操作

- (视听播放器* )播放器{ if (! _ player } { ns URL * URL=[ [ nsbundlemainbundle ] urlforresource : @ ' CX ' with extension : @ ' MP3 ' }; ns错误错误*错误; //实例化播放_ player=[ avaudioplayeralloc ] initwithcontentsofurl 3360 URL error 3360 error ]; //代理设置_player.delegate=self; if(error ) nslog ) @ '初始化失败); }else{ //缓冲区数据的播放开始准备[_player prepareToPlay]; //是否允许快进_player.enableRate=YES; //设定播放次数-1为无限//0:播放1次1:播放2次_player.numberOfLoops=0; //slider最大值self.time slider.maximum value=_ player.duration; } } return _player; }这里值得注意的是准备开始播放。 可以毫不夸张地说,其他东西在代码中有详细介绍)

即:

[_player prepareToPlay]; 没有这个就不能正常播放。

播放

代码操作:

//播放--(IBaction ) play: ) id ) sender ) if (! 将计时器添加到“[self.playerisplaying](//runloop )”[ self.linkaddtorunloop 3360 [ nsrunloopmainrunloop ] for mode 3360 nsdefaultrultrult

计时器是为了实现再生的进度,稍后介绍。

暂停

代码操作:

//暂停--(IB action pause : ) id ) sender ) if([self.playerisplaying] ) { [self.player pause]; link [self.link invalidate]; self.link=nil; }在暂停操作中判断是否正在播放,如果不是正在播放,则无法执行暂停。

暂停时定制计时器以避免资源浪费,清空计时器。

停止播放

代码操作:

//停止--(IBaction ) stop: ) id ) sender([self.playerstop]; //清空内存self.player=nil; link [self.link invalidate];

self.link = nil;}

在停止操作中有一点很值得注意,当我们停止后,再次点击播放会发现是继续播放,显然不符合情理.
因此我们在这里对player进行了清空操作.
定时器的操作如暂停.

播放进度slider

播放进度slider的实现是需要配合定时器的使用的("实时"监控),因此前面出现的定时器也就可以理解
了.

//定时器的属性声明

//定时器@property (nonatomic, strong) CADisplayLink * link;

//定时器的懒加载

- (CADisplayLink *)link{ if (!_link) { _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(change)]; } return _link;}//改变slider进度的方法- (void)change{ //获取当前时间 重置播放进度 self.timeSlider.value = self.player.currentTime;}

该功能分析:

实现的功能是拖动控件实现进度跳转
那么

当我们点击的时候停止播放根据value值设置进度当我们结束拖动时继续播放

代码操作:

//按下slieder 开始拖拽- (IBAction)timeTouchDown:(id)sender { //停止播放 [self.player pause]; }//结束拖拽- (IBAction)timeTouchUp:(id)sender { //继续播放 [self.player play];}//改变播放进度- (IBAction)timeChangeSlider:(UISlider *)sender { //修改现在的播放时间 self.player.currentTime = sender.value;}

播放速度

代码操作:

//播放速度- (IBAction)rateChange:(UISlider *)sender { self.player.rate = sender.value;}

播放音量

代码操作:

//播放音量- (IBAction)voiceChange:(UISlider *)sender { self.player.volume = sender.value;}

代理

//播放完成- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ }//error- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{ }//iOS8 开始中断- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{ }//iOS8 结束中断- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player{ }

在上面可以到iOS8的字样
那么iOS9呢???

- (void)viewDidLoad { [super viewDidLoad]; //iOS9处理中断 AVAudioSession * session = [AVAudioSession sharedInstance]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(Interruption:) name:AVAudioSessionInterruptionNotification object:session]; }//iOS9中断处理方法- (void)Interruption:(NSNotification *)noti{ if (noti.userInfo.allKeys.count == 2) { NSLog(@"结束中断"); }else{ NSLog(@"开始中断"); }}

一页的代码就把代码贴上了

//// ViewController.m// 音乐//// Created by ma c on 16/5/11.// Copyright © 2016年 xubaoaichiyu. All rights reserved.//#import "ViewController.h"#import <AVFoundation/AVFoundation.h>@interface ViewController ()<AVAudioPlayerDelegate>//播放本地音乐@property (nonatomic, strong) AVAudioPlayer * player;//播放时间的滑块@property (weak, nonatomic) IBOutlet UISlider *timeSlider;//定时器@property (nonatomic, strong) CADisplayLink * link;@end@implementation ViewController#pragma mark - <getters and setters>- (CADisplayLink *)link{ if (!_link) { _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(change)]; } return _link;}- (AVAudioPlayer *)player{ if (!_player) { NSURL * url = [[NSBundle mainBundle]URLForResource:@"CX" withExtension:@"mp3"]; NSError * error; //实例化播放 _player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error]; //设置代理 _player.delegate = self; if (error) { NSLog(@"初始化失败"); }else{ //准备开始播放 缓冲数据 [_player prepareToPlay]; //是否允许快播 _player.enableRate = YES; //设置播放次数 -1为无限 //0:播放一次 1:播放两次 ...... _player.numberOfLoops = 0; //slider最大值 self.timeSlider.maximumValue = _player.duration; } } return _player;}#pragma mark - <life cycle>- (void)viewDidLoad { [super viewDidLoad]; //iOS9处理中断 AVAudioSession * session = [AVAudioSession sharedInstance]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(Interruption:) name:AVAudioSessionInterruptionNotification object:session]; }#pragma mark - <AVAudioPlayerDelegate>//播放完成- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ }//error- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{ }//iOS8 开始中断- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{ }//iOS8 结束中断- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player{ }#pragma mark - <event handle>//改变slider进度的方法- (void)change{ //获取当前时间 重置播放进度 self.timeSlider.value = self.player.currentTime;}//iOS9中断处理方法- (void)Interruption:(NSNotification *)noti{ if (noti.userInfo.allKeys.count == 2) { NSLog(@"结束中断"); }else{ NSLog(@"开始中断"); }}//播放- (IBAction)play:(id)sender { if (![self.player isPlaying]) { //添加定时器到runloop中 [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [self.player play]; } }//暂停- (IBAction)pause:(id)sender { if ([self.player isPlaying]) { [self.player pause]; //暂停link [self.link invalidate]; self.link = nil; } }//停止- (IBAction)stop:(id)sender { [self.player stop]; //清空内存 self.player = nil; //停止link [self.link invalidate]; self.link = nil;}//按下slieder 开始拖拽- (IBAction)timeTouchDown:(id)sender { //停止播放 [self.player pause]; }//结束拖拽- (IBAction)timeTouchUp:(id)sender { //继续播放 [self.player play];}//改变播放进度- (IBAction)timeChangeSlider:(UISlider *)sender { //修改现在的播放时间 self.player.currentTime = sender.value;}//播放速度- (IBAction)rateChange:(UISlider *)sender { self.player.rate = sender.value;}//播放音量- (IBAction)voiceChange:(UISlider *)sender { self.player.volume = sender.value;}@end

转载于:https://www.cnblogs.com/xubaoaichiyu/p/5481735.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。