AV奥迪oPlayer播放音乐,使用音乐的背景播放效果

以下代码应用AV奥迪oPlayer(须要import
AVFundation库并为相应的controller增多AV奥迪oPlayerDelegate,记得在viewDidLoad的时候还要把delegate设为self)

iOS开辟张开篇—音乐的广播

1、简单表明

 

  音乐播放用到二个叫做AV奥迪(Audi)oPlayer的类,这一个类能够用于广播手提式有线电话机本地的音乐文件。

 

注意:

 

  (1)该类(AV奥迪oPlayer)只好用来广播当地音频。

 

  (2)时间非常的短的(称之为音响效果)使用AudioServicesCreateSystemSoundID来成立,而本地时间较长(称之为音乐)使用AV奥迪oPlayer类。

 

 

 

二、代码示例

 

  AV奥迪(Audi)oPlayer类依赖于AVFoundation框架,因而选用该类必须先河入AVFoundation框架,并蕴藏其头文件(包罗主头文件就可以)。

 

  

 

  

 

导入须要的,须求播放的音频文件到品种中。

 

代码示例:

 

复制代码

 1 //

 2 //  YYViewController.m

 叁 //  一伍-播放音乐

 4 //

 5 

 6 #import “YYViewController.h”

 7 #import <AVFoundation/AVFoundation.h>

 8 

 9 @interface YYViewController ()

10 

11 @end

12 

13 @implementation YYViewController

14 

15 – (void)viewDidLoad

16 {

17     [super viewDidLoad];

18     

19 }

20 

澳门葡京备用网址,21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

22 {

23     

二4     //一.音频文件的url路线

25     NSURL *url=[[NSBundle mainBundle]URLForResource:@”235319.mp3″
withExtension:Nil];

26     

二柒     //贰.成立播放器(注意:2个AV奥迪oPlayer只可以播放1个url)

28     AVAudioPlayer *audioPlayer=[[AVAudioPlayer
alloc]initWithContentsOfURL:url error:Nil];

29     

AV奥迪oPlayer播放音乐,使用音乐的背景播放效果。30     //3.缓冲

31     [audioPlayer prepareToPlay];

32     

33     //4.播放

34     [audioPlayer play];

35 }

36 

37 @end

复制代码

代码表达:运维程序,点击模拟器分界面,却并未能够播放音频文件,原因是代码中创设的AV奥迪(Audi)oPlayer播放器是三个某个变量,应该调治为全局属性。

 

可将代码调度如下,就可以播放音频:

 

复制代码

 1 #import “YYViewController.h”

 2 #import <AVFoundation/AVFoundation.h>

 3 

 4 @interface YYViewController ()

 5 @property(nonatomic,strong)AVAudioPlayer *audioplayer;

 6 @end

 7 

 8 @implementation YYViewController

 9 

10 – (void)viewDidLoad

11 {

12     [super viewDidLoad];

13     

14 }

15 

16 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

17 {

18     

19     //1.音频文件的url路线

20     NSURL *url=[[NSBundle mainBundle]URLForResource:@”235319.mp3″
withExtension:Nil];

21     

2二     //贰.创制作和播出放器(注意:多个AV奥迪(Audi)oPlayer只可以播放二个url)

23     self.audioplayer=[[AVAudioPlayer
alloc]initWithContentsOfURL:url error:Nil];

24     

25     //3.缓冲

26     [self.audioplayer prepareToPlay];

27     

28     //4.播放

29     [self.audioplayer play];

30 }

31 

32 @end

复制代码

留神:二个AV奥迪(Audi)oPlayer只好播放一个url,若是想要播放八个文本,那么就得创造多个播放器。

 

 

 

三、相关认证

 

新建叁个品类,在storyboard中放四个开关,分别用来支配音乐的广播、暂停和终止。

 

  

 

程序代码如下:

 

复制代码

 1 #import “YYViewController.h”

 2 #import <AVFoundation/AVFoundation.h>

 3 

 4 @interface YYViewController ()

 5 @property(nonatomic,strong)AVAudioPlayer *player;

 6 – (IBAction)play;

 7 – (IBAction)pause;

 8 – (IBAction)stop;

 9 @end

10 

11 @implementation YYViewController

12 

13 – (void)viewDidLoad

14 {

15     [super viewDidLoad];

16     

一7     //1.音频文件的url路径

18     NSURL *url=[[NSBundle mainBundle]URLForResource:@”235319.mp3″
withExtension:Nil];

19     

20     //二.创设播放器(注意:多少个AV奥迪(Audi)oPlayer只可以播放二个url)

21     self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url
error:Nil];

22     

23     //3.缓冲

24     [self.player prepareToPlay];

25 

26 }

27 

28 – (IBAction)play {

2玖     //起始广播/继续播放

30     [self.player play];

31 }

32 

33 – (IBAction)pause {

34     //暂停

35     [self.player pause];

36 }

37 

38 – (IBAction)stop {

39     //停止

40    
//注意:若是点击了stop,那么一定要让播放珍视新创建,不然会产出局地莫名其面包车型大巴主题素材

41     [self.player stop];

42 }

43 @end

复制代码

在意:若是点了“截止”,那么早晚要播放器重新创造,不然的话会产出岂有此理的主题素材。

 

  点击了stop之后,播放器实际上就不可能再持续利用了,若是还连续采纳,那么继续的有的东西会不能够调节。

 

推荐代码:

 

复制代码

 1 #import “YYViewController.h”

 2 #import <AVFoundation/AVFoundation.h>

 3 

 4 @interface YYViewController ()

 5 @property(nonatomic,strong)AVAudioPlayer *player;

 6 – (IBAction)play;

 7 – (IBAction)pause;

 8 – (IBAction)stop;

 9 @end

10 

11 @implementation YYViewController

12 

13 #pragma mark-懒加载

14 -(AVAudioPlayer *)player

15 {

16     if (_player==Nil) {

17         

1捌         //一.音频文件的url路线

19         NSURL *url=[[NSBundle
mainBundle]URLForResource:@”235319.mp3″ withExtension:Nil];

20         

二1         //二.创造播放器(注意:2个AV奥迪(Audi)oPlayer只可以播放2个url)

22         self.player=[[AVAudioPlayer
alloc]initWithContentsOfURL:url error:Nil];

23         

24         //3.缓冲

25         [self.player prepareToPlay];

26     }

27     return _player;

28 }

29 

30 – (void)viewDidLoad

31 {

32     [super viewDidLoad];

33 }

34 

35 – (IBAction)play {

3陆     //开播/继续播放

37     [self.player play];

38 }

39 

40 – (IBAction)pause {

41     //暂停

42     [self.player pause];

43 }

44 

45 – (IBAction)stop {

46     //停止

47    
//注意:若是点击了stop,那么早晚要让播放重视新成立,不然会出现部分莫名其面包车型大巴主题材料

48     [self.player stop];

49     self.player=Nil;

50 }

51 @end

复制代码

倘诺点击了截至按键,那么音乐会从头开播。

一、轻巧表明音乐广播用到1个叫做AV奥迪oPlayer的类,那一个类可以用来广播手机本地的音乐文件。
注意: (一)…

 在xcode中手动增加frameWork。

一. 运用音乐的背景播放效果

import UIKit
import AVFoundation

 

(1) 导入音频播放框架

class GameViewController: UIViewController, AVAudioPlayerDelegate {

#import “MusicViewController.h”

import AVFoundation

。。。。。。

#import <AVFoundation/AVFoundation.h>

(二) 创制音频播放对象

// declare a AVAudioPlayer object
var audioPlayer: AVAudioPlayer?

#import <AudioToolbox/AudioToolbox.h>

  //开首化音频播放器对象,并将音频播放对象,作为视图调整器类的属相。

override func viewDidLoad() {
super.viewDidLoad()

  

    var audioPlayer:AVAudioPlayer = AVAudioPlayer()

// Set the delegate of AVAudioPlayer to self
audioPlayer?.delegate = self

@implementation MusicViewController

    

// Play the first audio
audioPlay(audioName: “end1”)
audioPlayer?.play()

@synthesize start;

    override func viewDidLoad() {

。。。。。。

@synthesize pause;

        super.viewDidLoad()

}

@synthesize restart;

        // Do any additional setup after loading the view, typically
from a nib.

@IBAction func btnMiddleClicked(_ sender: UIButton) {
switch gameStep {
case 0:

@synthesize BT1;

        

// Set the audio
audioPlay(audioName: “tianhei”)
// Play the audio
audioPlayer?.play()
gameStep += 1
case 1:

@synthesize player;

    

audioPlay(audioName: “jingzhang”)
// Play the audio
audioPlayer?.play()
// Set the timer
self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self,
selector: #selector(GameViewController.update), userInfo: nil, repeats:
true)
RunLoop.current.add(timer, forMode: RunLoopMode.commonModes)

 

       
//获得音频会话对象,该目标属于单例方式,也正是说不用开垦者而活动实例化.那一个类在各类音频意况中,起着至关心保护要意义

。。。。。。

-(IBAction)tostart:(id)sender{

        let session = AVAudioSession.sharedInstance()

}

    [player play];   //播放

        

// ———————————————————-
// Audio Playing part

    AudioSessionSetActive (true); 

        //在音频播放前,首先成立贰个可怜捕捉语句

func audioPlay(audioName: String) {
let url = URL.init(fileURLWithPath: Bundle.main.path(forResource:
audioName, ofType: “mp3”)!)
do {
try audioPlayer = AVAudioPlayer(contentsOf: url)
audioPlayer?.prepareToPlay()
} catch {
NSLog(“Failed to set audio session category. Error: \(error)”)
}
}

}

        do {

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,
successfully
flag: Bool) {
}

 

            

func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer,
error: Error?) {
}

-(IBAction )topause:(id)sender{

            //运维音频会话管理,此时会阻断后台音乐的播放.

func audioPlayerBeginInterruption(_ player: AVAudioPlayer) {
}

    [self.player pause];

            try session.setActive(true)

func audioPlayerEndInterruption(player: AVAudioPlayer) {
}

    奥迪(Audi)oSessionSetActive (false);//要引进tool包才行,不然报错

            //设置音频操作种类,表示该使用仅匡助音频的播放.

。。。。。。

}

            try session.setCategory(AVAudioSessionCategoryPlayback)

}

 

            //设置应用程序帮忙接受远程序调节制事件

其余那里要求提到三个相比严重的难题:

 

           
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()

在做项目标时候,作者曾开掘同样的代码在多台机器上会反复在播放音响的时候出错,而且从不别的错误提醒。而在其它一些机械上却永恒不失误。

– (void)dealloc

            

出错截屏如下:

{

            

澳门葡京备用网址 1后来发觉原因是部分Mac的节拍输出未有设置成使用音频,而是用喇叭(speaker),那样就须要音频的比特率不得超越2捌kbps。

    [BT1 release];

            //定义字符串变量,描述声音文件路线

而在另壹部分机械上,只要设置了是用音频,就足以健康播放。

    [super dealloc];

            let path = NSBundle.mainBundle().pathForResource(“music”,
ofType: “mp3”)

消除办法便是把自个儿的mp三财富的比特率降到2八kbps或以下。可是我今后采用就随便它了,因为手提式有线话机上是能够播的,便是模拟器上只怕会crash。无所谓

}

            //将字符串路线,调换为网站路线

 

            let soundUrl = NSURL(fileURLWithPath: path!)

– (void)didReceiveMemoryWarning

            

{

            //对旋律播放对象,实行开始化,并加载制定的音频文件

    //
Releases the view if it doesn’t have a superview.

            try audioPlayer = AVAudioPlayer(contentsOfURL: soundUrl)

    [super didReceiveMemoryWarning];

            //为音频播放做好希图

    

            audioPlayer.prepareToPlay()

    //
Release any cached data, images, etc that aren’t in use.

            //设置音频播放对象播放音量的大大小小

}

            audioPlayer.volume = 1.0

 

            //播放次数

#pragma mark – View lifecycle

            audioPlayer.numberOfLoops = -一 //-1:无限循环播放

 

            audioPlayer.play()

 

            

 // Implement
viewDidLoad to do additional setup after loading the view, typically
from a nib.

        }catch {

 – (void)viewDidLoad

            

 {

            print(error)

     NSString * musicFilePath =
[[NSBundle mainBundle] pathForResource:@”audio” ofType:@”mp3″];      //创造音乐文件路径    

        }

     NSURL *
musicURL= [[NSURL alloc] initFileURLWithPath:musicFilePath];
 

        

     

    }

     AVAudioPlayer * thePlayer  =
[[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil];

2. 施用MediaPlayer框架播放电影

     //创设播放器

(一) 导入媒体播放器框架,该框架允许访问音频和录制,音频和录制文件的播放器

     self.player =
thePlayer;    //赋值给协和定义的类变量

import MediaPlayer

     

 (二)创制叁个摄像播放器

     [musicURL release];

    //新建3个摄像播放器属性,用于广播摄像

     [thePlayer release];

    var mediaPlayer:MPMoviePlayerController = MPMoviePlayerController()

     

    override func viewDidLoad() {

     

        super.viewDidLoad()

     [player setVolume:1];   //**安装音量大小0-一期间**

        // Do any additional setup after loading the view, typically
from a nib.

     player.numberOfLoops = -一;//设置音乐播放次数  -一为直接循环

        do {

     

            //获取沙箱目录中,录像文件的所在路线.

     [super viewDidLoad];

            let path = NSBundle.mainBundle().pathForResource(“movie”,
ofType: “mp4”)

 }

            //将字符串路径,转化为NSUrl路线

 

            let movieUrl = NSURL(fileURLWithPath: path!)

 

            //初始化

  • (void)viewDidUnload //内部存款和储蓄器警告时才会放出,当前的viewController固然出现内存警告,也不会unload

            mediaPlayer = MPMoviePlayerController(contentURL: movieUrl)

{

            //设置录像播放情势为全屏播放.

    [self setBT1:nil];

            mediaPlayer.controlStyle = MPMovieControlStyle.Fullscreen

    [super viewDidUnload];

            mediaPlayer.view.frame = self.view.bounds   

    //
Release any retained subviews of the main view.

            //设置录像播放的始发时间

    // e.g.
self.myOutlet = nil;

            mediaPlayer.initialPlaybackTime = -1

}

            

 

            

– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

            //将视频播放调控器,增多到当前视图调整器的根视图

{

            self.view.addSubview(mediaPlayer.view)

    // Return
YES for supported orientations

            

    return (interfaceOrientation
== UIInterfaceOrientationPortrait);

            //增多一个通报,监听录像播放是还是不是结束.

}

            NSNotificationCenter.defaultCenter().addObserver(self,
selector:#selector(ViewController.movieFinished(_:)),
name:MPMoviePlayerPlaybackDidFinishNotification, object: mediaPlayer)

 

            mediaPlayer.play()

@end

        } catch {

 

            


            print(error)

运作出来效果(那一个正是你在IB里面以绑定事件就行)

        }

澳门葡京备用网址 2

    }    

 

    //create a method to react 录制播放的收尾时间

PS:这里有多少个难点亟需证实以下

    func movieFinished(notifi:NSNotification) {

  1. 这个[player play] 和【player pause】
    时AV奥迪oPlayer自带的措施,暗中认可情形下您暂停后,再play他会跟着你刚才不胜继续放,原因时那一个play再这么些view没有被dealloc在此之前,对象平昔未有被销毁。

        print(“Movie ends”)

二.行使slider 当音控调教装置

        //获取录像播放调控器

代码很简单

        let player = notifi.object

 

        

-(IBAction)
volumeChange:(id) sender{

        //撤除布告的监听,释放财富

    self.player.volume = volumebar.value;

        NSNotificationCenter.defaultCenter().removeObserver(self, name:
NSNotification.Name.MpMoviePlayerPlaybackDidFinish, object: player)

}

        

 

    }

/////////////////////////////////////////////

 iPhone动用轻易利用AVAudioPlayer音频播放是本文要介绍的剧情,iPhone
SDK中的AVFoundation框架包括的AVAudioPlayer是三个便于选拔而且功能强有力,基于Object-c的播音音频文件播放器  。本教程来得了哪些利用AVAudioPlayer  。本课程将建立一个轻松易行的程序,它能够循环播音壹段mp3音频文件  。

  源代码/Guithub

  教程的源代码在GitHub上  。你能够从旅社中克隆或直接下载zip文件  。

  创建项目

  1. Launch Xcode and create a new View-Based iPhone application called AudioPlayer: 

  启动Xcode并创办1个“View-Based
One plus application”项目,取名称为奥迪oPlayer:

  一.从Xcode菜单选取“File > New Project
…”

  2.从“iPhone OS > Application”部分选取“View-based
Application”,然后按“Choose…”

  3.将项目命名为“AudioPlayer”并按“Save”
   
添加AVFoundation框架

  为利用SDK的AVAudioPlayer类,大家须要将AVFoundation框架参加项目:

  一.在等级次序的“Groups & Files”面板上,张开“Targets”

  2.Control+点击或右击奥迪oPlayer

  3.选择“Add > Existing
Frameworks…”

  四.点击Linked Libraries下左下方的+按钮

  5.选择“AVFoundation Framework“并按Add

  陆.“AVFoundation framewoks”将应运而生在“Linked Libraries”下,关闭窗口
 
上面,大家将引进AVFoundation的头文件

  1.进展项目“Group & Files”面板下奥迪(Audi)oPlayer项目

  2.打开Classes文件夹

  叁.选拔奥迪oPlayerViewController.h举办编写制定

  四.退换文件  。退换以下粗体字部分:

  1.  #import <UIKit/UIKit.h> 
  2. #import <AVFoundation/AVFoundation.h> 
  3.  
  4. @interface AudioPlayerViewController :  UIViewController 
     
  5. {  
  6.     AVAudioPlayer  *audioPlayer;  
  7. }  
  8. @end  

  增添音频文件

  大家供给1段音频文件来开始展览播放  。文件为audiofie.mp三  。我们将其加盟项目中:

  按Control再左击或右击项目标“Group & Files”面板中的“Resources”文件夹

  从上下文菜单中挑选“Add > Existing Files…”

  找到并选拔要导入的音频文件,按“Add”

  (有须要的话)选定“Copy
items
into
destination group’s
folder”方框并按“Add”

  开端播报音频

  我们在ViewDidLoad中启动节奏播放:

  1.解除ViewDidLoad方法的注解

  二.更动如下,见粗体部分:

  1. – (void)viewDidLoad  
  2.  
  3.    [super  viewDidLoad];  
  4.  
  5.    NSURL  *url = [NSURL fileURLWithPath:[NSString  
     
  6.        stringWithFormat:@”%@/audiofile.mp3″,  [[NSBundle mainBundle]  resourcePath]]];
     
  7.    NSError  *error;  
  8.    audioPlayer  = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
     
  9.    audioPlayer.numberOfLoops  = -1;  
  10.    if  (audioPlayer == nil)  
  11.        NSLog([error  description]);
     
  12.    else  
  13.         [audioPlayer  play];  

  AVAudioPlayer是通过URL初始化的,所以大家先是要创立一个针对资源文本夹中音频文件的U卡宴L  。将音频播放器的numberOfLoops属性设为负数使得播放Infiniti循环  。配置好点子播放器后,大家向播放器对象发送播放新闻来运维广播  。

  记住在dealloc方法中释放audioPlayer  。更换见粗体部分:

  1. – (void)dealloc   
  2.  
  3.    [audioPlayer  release];  
  4.    [super  dealloc];  
  5.  }  

  越来越多效益

  你能够调整播放器音量,查看/设定播放的时间,暂停或终止播放:

  1. audioPlayer.volume = 0.5; // 0.0 – no  volume; 1.0 full volume 
     
  2. NSLog(@”%f seconds played so  far”, audioPlayer.currentTime);  
  3. audioPlayer.currentTime = 10; // jump to  the 10 second mark
     
  4. [audioPlayer pause];  
  5. [audioPlayer stop]; // Does not reset currentTime; sending play resumes  

  最终,你还足以实现AVAudioPlayer
Delegate协议,比如说,在旋律播放终结时收获关照,那样你有相当的大恐怕移动到播放列表的下一首歌  。

下一场自个儿把事件1绑定就行

 

/////////////////////////////////////

另一篇更详尽的篇章,见:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website