第七話 音樂效播放

第七話 音樂效播放

本話示範如何在Corona當中播放音樂與音效,相信我,這件事在Corona裡頭一點都不困難。

整個音樂效播放的流程,大概可分為載入.播放以及清除記憶體位置三個階段。

首先是載入,在這個階段需要將音樂效的檔案讀入記憶體當中,相關的function有以下兩個...


audio.loadSound()  --一般用於音效
audio.loadSteam()  --一般用於音樂

 

這兩個都是在讀入檔案,差別只在於讀入的方式。loadSound會一次讀入所有檔案,因此耗用記憶體較大;相對的,loadSteam則是將檔案分成一小塊來逐次讀入,記憶體耗用就小得多,但是缺點在於單個instance無法同時支援多個音軌(channel)。因此,根據這個特性,我們建議如果讀入音效檔,像是較短的wav檔就用loadSound,而如果讀入較長的音樂mp3檔,就改用loadSteam。

當載入後,Corona就會回傳音源檔的instance參考給我們,用來做後續的播放等控制,參數為音樂檔案名稱,預設存放在專案根目錄下,如下:

local backgroundMusic = audio.loadSteam(“music1.mp3")

完成載入後,接著就可以用得到的參考來進行播放等控制,傳入參數分別為音源檔instance參考以及播放設定參數,如下:


local options={
    channel = 1,
    loops = -1,
    duration = 30000,
    fadein = 5000,
    onComplete = callbackListener
}
local bgMusic = audio.play( backgroundMusic , options)

 

播放設定參數:

channel:所要播放的音軌,最小為1,目前最大為32,傳入0表示由Corona隨機替你選擇

loops:所要重複播放的次數,-1表示將持續循環播放

duration:音樂所要播放的長度,單位為微秒,時間到就會自動結束

fadein:音樂淡入的長度,單位為微秒

onComplete:播放完成所要呼叫的function

傳回值:為所播放的音軌

其他相關常用函式:

audio.pause()  將該音軌的聲音暫停

audio.resume()  將該音軌的聲音重新播放

audio.rewind()  重新回到起點進行播放

audio.setVolume()  設定音量大小,一般為0~1

  audio.setVolume( 0.5 )  -- 設定主音量大小

  audio.setVolume( 0.75,{channel=1}) -- 設定音軌1的音量

audio.stop()  將該音軌的聲音關閉

audio.dispose()  將該音軌的聲音檔記憶體釋放掉

釋放某音軌記憶體:


audio.dispose( bgMusic)
bgMusic = nil

 

版權宣告:本範例所引用之音樂效均屬創作人自身所有,本站僅作測試之用


-----------------------------------------------------------------------------------------
-- 示範如何載入並播放音樂/效,並介紹Tap事件的偵聽。更多Audio Lib資訊請參考以下網址
-- https://docs.coronalabs.com/daily/api/library/audio/index.html
-- Author: Zack Lin
-- Time: 2015/3/13
-----------------------------------------------------------------------------------------

_SCREEN = {
	WIDTH = display.viewableContentWidth,
	HEIGHT = display.viewableContentHeight
}

_SCREEN.CENTER = {
	X = display.contentCenterX,
	Y = display.contentCenterY
}
--載入音效,長度不會太長
local sound = audio.loadSound( "soundEffect.wav" )
--載入音樂,一般為mp3
local music = audio.loadStream( "music.mp3" )

--佈置元件
local btn_sound = display.newImageRect( "drum.png" , 80 , 80 )
btn_sound.x = _SCREEN.CENTER.X
btn_sound.y = _SCREEN.CENTER.Y - 150

local btn_music = display.newImageRect( "music.png", 80, 80 )
btn_music.x = _SCREEN.CENTER.X
btn_music.y = _SCREEN.CENTER.Y 

local btn_stop = display.newImageRect( "stop.png", 80, 80 )
btn_stop.x = _SCREEN.CENTER.X
btn_stop.y = _SCREEN.CENTER.Y + 150

--函式宣告
--可透過設定system.setTapDelay來優化多點觸控時間,否則每只的觸碰都會被視為單一
--的Tap

--播放音源
function btn_sound:tap( e )
	audio.play( sound )
end

function  btn_music:tap( e )
	audio.play( music )
end

--停止音源
function  btn_stop:tap( e )
	audio.stop(  )
end

btn_sound:addEventListener( "tap" )
btn_music:addEventListener( "tap" )
btn_stop:addEventListener( "tap" )
分享這篇文章:

發佈自 林品爵

林品爵
成大學士畢業,在銷售與組織拓展上有豐富經驗,於30歲以前即達到百萬年薪。至30歲起轉換到IT領域,受過一年資策會Java課程培訓後,體悟出自學程式技術的技巧,先後掌握了J2EE.PHP.MySQL.CoronaSDK.Android.Objective-C.Swift.Python等技術知識,因此在教學上除了給學員魚吃,更要求學員自己掌握學習的技巧。職務歷任友訊科技總部Java工程師首席.黑快馬股份有限公司研發經理.諾亞數碼娛樂執行長等職位,現任哥布林程式教育學苑創辦人,所開發過專案涵括產品管理系統.POS系統.拍賣平台.擴增實境.問券.社區等等。因為自身的英文底子並非很好,所以充分體會英文程度不好的學員在學習程式上的挫折,我發展出的哥布林程式教育系統,就是希望透過邏輯以及關鍵字抓取等技巧,讓閱讀英文技術文件不再困難。我的教學理念是先找到學習動機與樂趣,協助降低學習曲線,一切自然水到渠成。

關聯文章:

留下留言