本話示範如何在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" )