在Swift3里面实现点击不同按钮播放不同声音的一种实现方法,iOS开发拓展篇

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

iOS开垦进展篇—音乐的播报

一、简单表明

 

  音乐广播用到叁个叫做AV奥迪(Audi)oPlayer的类,这一个类能够用来广播手机本地的音乐文件。

 

注意:

 

  (1)该类(AVAudioPlayer)只好用于广播本地音频。

 

  (2)时间非常短的(称之为音响效果)使用奥迪o瑟维斯sCreateSystemSoundID来创设,而当地时间较长(称之为音乐)使用AV奥迪oPlayer类。

 

 

 

二、代码示例

 

  AV奥迪(Audi)oPlayer类信任于AVFoundation框架,由此利用该类必须初阶入AVFoundation框架,并包涵其头文件(包括主头文件就可以)。

 

  

 

  

 

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

 

代码示例:

 

复制代码

 1 //

 2 //  YYViewController.m

 3 //  15-播放音乐

 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     

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

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

26     

27     //2.创设播放器(注意:二个AV奥迪oPlayer只好播放贰个url)

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

29     

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     

22     //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奥迪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     

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

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

19     

20     //2.创设播放器(注意:三个AV奥迪oPlayer只好播放二个url)

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

22     

23     //3.缓冲

24     [self.player prepareToPlay];

25 

26 }

27 

28 – (IBAction)play {

29     //伊始播报/继续播放

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         

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

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

20         

21         //2.创制作和播出放器(注意:三个AV奥迪oPlayer只可以播放七个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 {

36     //开始播报/继续播放

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

复制代码

倘诺点击了停止开关,那么音乐会从头开播。

一、轻巧表达音乐广播用到一个叫做AV奥迪(Audi)oPlayer的类,那么些类能够用来广播手提式有线电话机本地的音乐文件。
注意: (1)…

import UIKit
import AVFoundation

class GameViewController: UIViewController, AVAudioPlayerDelegate {

。。。。。。

// declare a AVAudioPlayer object
var audioPlayer: AVAudioPlayer?

override func viewDidLoad() {
super.viewDidLoad()

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

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

。。。。。。

}

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

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

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)

。。。。。。

}

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

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)”)
}
}

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

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

func audioPlayerBeginInterruption(_ player: AVAudioPlayer) {
}

func audioPlayerEndInterruption(player: AVAudioPlayer) {
}

。。。。。。

}

除此以外这里供给提到一个相比严重的难题:

在做项指标时候,作者曾开掘一样的代码在多台机械上会频频在播音音响的时候出错,何况未有别的错误提醒。而在其余一些机械上却长久不不可信。

出错截屏如下:

图片 1新兴发觉原因是有的Mac的节奏输出没有设置成使用音频,而是用喇叭(speaker),那样就供给音频的比特率不得超越28kbps。

而在另一对机械上,只要设置了是用音频,就能够健康播放。

解决办法便是把自家的mp5能源的比特率降到28kbps或以下。不过自身以往选拔就不管它了,因为手提式有线话机上是足以播的,正是模拟器上也许会crash。不留意

相关文章

发表评论

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

*
*
Website