「Swift學(xué)習(xí)筆記」使用AV Foundation框架為APP加上背景音樂(lè)并進(jìn)行簡(jiǎn)單控制

用Swift語(yǔ)言進(jìn)行iOS開發(fā)字旭,如需加上背景音樂(lè)并進(jìn)行簡(jiǎn)單地控制可以使用AV Foundation框架蛾洛,而對(duì)于壓縮過(guò)的Audio文件或者超過(guò)30秒的音頻文件烤礁,則使用AVAudioPlayer類关翎。

為APP加上背景音樂(lè)

?

首先陆赋,在ViewController.swift的文件頂部添加?行代碼:

import AVFoundation

//引入一個(gè)新的AVFoundation框架

? ? 其次沐祷,在類中定義其它實(shí)例變量的代碼下?再添加?行代碼:

var audioPlayer:

AVAudioPlayer!

//添加一個(gè)AVAudioPlayer類型的播放器變量

? ??添加一個(gè)新的方法:

func playBgMusic(){

let musicPath =

NSBundle.mainBundle().pathForResource("bgmusic", ofType:

"mp3")

//指定音樂(lè)路徑

let url = NSURL(fileURLWithPath:

musicPath!)

audioPlayer =

AVAudioPlayer(contentsOfURL: url, error: nil)

audioPlayer.numberOfLoops =

-1

//設(shè)置音樂(lè)播放次數(shù)嚷闭,-1為循環(huán)播放

maudioPlayer.volume

= 1

//設(shè)置音樂(lè)音量,可用范圍為0~1

audioPlayer.prepareToPlay()

audioPlayer.play()

}

有關(guān)AVAudioPlayer類的更多信息戈轿,請(qǐng)參見AVAudioPlayer類參考凌受。

?

在適當(dāng)位置調(diào)用函數(shù):

override func viewDidLoad() {

super.viewDidLoad()

playBgMusic()

}

//每次視圖控制器載入時(shí)調(diào)用函數(shù)

override func

viewWillAppear(animated: Bool) {

playBgMusic()

}

//每次視圖控制器的視圖出現(xiàn)前調(diào)用函數(shù)

viewwillappear是每次視圖控制器的視圖出現(xiàn)前執(zhí)行的代碼。而viewdidload是每次視圖控制器載入是執(zhí)行的代碼思杯。 比如說(shuō):當(dāng)a視圖控制器的視圖第一次出現(xiàn)是兩個(gè)都要執(zhí)行胜蛉,但當(dāng)a被push后有pop回來(lái)時(shí),只有viewwillappear執(zhí)行色乾。

使用音樂(lè)開關(guān)按鈕對(duì)音樂(lè)播放進(jìn)行控制

對(duì)AVAudioPlayer對(duì)象執(zhí)行播放誊册、暫停、或者停止操作暖璧,可以通過(guò)playing屬性來(lái)檢測(cè)當(dāng)前是否正在播放案怯。以下方法實(shí)現(xiàn)了使用UIButton對(duì)音樂(lè)進(jìn)行播放/暫停控制澎办,并更新了按鈕的圖片顯示嘲碱。

? ? 在類中定義按鈕變量:

@IBOutlet weak var voiceButton: UIButton!

? ? 在viewDidLoad()為voiceButton添加動(dòng)作:

voiceButton.addTarget(self, action:"voice", forControlEvents: .TouchUpInside)

? ? 添加voice方法:

func voice() {

if !audioPlayer.playing {

audioPlayer.play()

voiceButton.setImage(UIImage(named:"voicebutton@3x.png"),forState:.Normal)

//如果背景音樂(lè)沒有播放,令其開始播放并將按鈕顯示為播放圖片

}else{

audioPlayer.stop()

voiceButton.setImage(UIImage(named:"silencebutton@3x.png"), forState:.Normal)

//如果背景音樂(lè)正在播放局蚀,令其停止播放并將按鈕顯示為靜音圖片

}

}

以上操作也可直接對(duì)按鈕關(guān)聯(lián)方法麦锯。

AB頁(yè)面反復(fù)跳轉(zhuǎn),背景音樂(lè)僅調(diào)用一次

在正常情況下琅绅,如果只對(duì)A頁(yè)面進(jìn)行背景音樂(lè)設(shè)置扶欣,跳轉(zhuǎn)至B頁(yè)面時(shí)音樂(lè)不停止可正常播放,但返回A頁(yè)面時(shí)會(huì)再次播放一層音樂(lè)千扶,此時(shí)可以先對(duì)audioPlayer是否正在播放音樂(lè)進(jìn)行判斷:

if !audioPlayer.playing {

audioPlayer.play()

}

//如果audioplayer沒有播放料祠,則令其開始播放

A頁(yè)面跳轉(zhuǎn)至B頁(yè)面,背景音樂(lè)正常播放澎羞;B頁(yè)面跳轉(zhuǎn)至C頁(yè)面髓绽,背景音樂(lè)切換

可以利用頁(yè)面?zhèn)髦颠M(jìn)行解決,適用于背景音樂(lè)不同的多頁(yè)面向B頁(yè)面進(jìn)行跳轉(zhuǎn)妆绞,音樂(lè)不切換梧宫,但B頁(yè)面向C頁(yè)面跳轉(zhuǎn)需要進(jìn)行音樂(lè)切換的情況。

? 事先為A摆碉、B、C頁(yè)面分別引入AVFoundation框架脓豪,并在A頁(yè)面添加avcAudioPlayer巷帝、B頁(yè)面添加bvcAudioPlayer、C頁(yè)面添加bvcAudioPlayer和cvcAudioPlayer扫夜。

? 在A楞泼、B頁(yè)面viewDidLoad()為跳轉(zhuǎn)按鈕添加動(dòng)作:

turnButton.addTarget(self, action:"turn", forControlEvents: .TouchUpInside)

? 在A頁(yè)面添加turn方法 :

func turn(){

var sb = UIStoryboard(name: "Main", bundle:nil)

//使用Storyboard制作頁(yè)面使用此方法進(jìn)行跳轉(zhuǎn)

var bvc = sb.instantiateViewControllerWithIdentifier("B") as BViewController

bvc.bvcAudioPlayer = self.avcAudioPlayer

//頁(yè)面?zhèn)髦?/p>

self.presentViewController(bvc, animated: true, completion: nil)

//頁(yè)面跳轉(zhuǎn)

}

B頁(yè)面跳轉(zhuǎn)至C頁(yè)面(cvc)方法相同驰徊。

? 在C頁(yè)面對(duì)B頁(yè)面bvcaudioplayer是否播放進(jìn)行判斷并調(diào)用自己的背景音樂(lè)。

if (bvcAudioPlayer != nil)?{

bvcAudioPlayer.stop()

playBgMusic()

} else {

playBgMusic()

//需要提前為C頁(yè)面定義playBgMusic方法堕阔,播放器為cvcAudioPlayer

文/宅男小生(簡(jiǎn)書作者)

原文鏈接:http://www.reibang.com/p/b676e3c4358e著作權(quán)歸作者所有棍厂,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書作者”超陆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牺弹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子时呀,更是在濱河造成了極大的恐慌张漂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨娜,死亡現(xiàn)場(chǎng)離奇詭異航攒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)趴梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門漠畜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人坞靶,你說(shuō)我怎么就攤上這事憔狞。” “怎么了滩愁?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵躯喇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我硝枉,道長(zhǎng)廉丽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任妻味,我火速辦了婚禮正压,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘责球。我一直安慰自己焦履,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布雏逾。 她就那樣靜靜地躺著嘉裤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栖博。 梳的紋絲不亂的頭發(fā)上屑宠,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音仇让,去河邊找鬼典奉。 笑死躺翻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卫玖。 我是一名探鬼主播公你,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼假瞬!你這毒婦竟也來(lái)了陕靠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笨触,失蹤者是張志新(化名)和其女友劉穎懦傍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芦劣,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粗俱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虚吟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寸认。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖串慰,靈堂內(nèi)的尸體忽然破棺而出偏塞,到底是詐尸還是另有隱情,我是刑警寧澤邦鲫,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布灸叼,位于F島的核電站,受9級(jí)特大地震影響庆捺,放射性物質(zhì)發(fā)生泄漏古今。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一滔以、第九天 我趴在偏房一處隱蔽的房頂上張望捉腥。 院中可真熱鬧,春花似錦你画、人聲如沸抵碟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拟逮。三九已至,卻和暖如春适滓,著一層夾襖步出監(jiān)牢的瞬間唱歧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颅崩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓蕊苗,卻偏偏與公主長(zhǎng)得像沿后,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朽砰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容