cocos2d实现语音_Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)
--[[
CocosDenshionTest.lua
Cocos2d-x 音頻支持
]]--
require "AudioEngine"
local EFFECT_FILE = "effect1.wav"
local MUSIC_FILE = nil
-- 獲取目標平臺
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
-- iphone或者ipad
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) then
MUSIC_FILE = "background.caf" -- caf格式
else
MUSIC_FILE = "background.mp3" -- mp3格式
end
local LINE_SPACE = 40
local function CocosDenshionTest()
local ret = cc.Layer:create()
local m_pItmeMenu = nil
local m_tBeginPos = cc.p(0, 0)
local m_nSoundId = 0
-- 測試菜單項
local testItems = {
"play background music",
"stop background music",
"pause background music",
"resume background music",
"rewind background music",
"is background music playing",
"play effect",
"play effect repeatly",
"stop effect",
"unload effect",
"add background music volume",
"sub background music volume",
"add effects volume",
"sub effects volume",
"pause effect",
"resume effect",
"pause all effects",
"resume all effects",
"stop all effects"
}
-- 菜單回調方法
local function menuCallback(tag, pMenuItem)
local nIdx = pMenuItem:getLocalZOrder() - 10000
-- play background music
if nIdx == 0 then
AudioEngine.playMusic(MUSIC_FILE, true) -- 播放音樂
elseif nIdx == 1 then
-- stop background music
AudioEngine.stopMusic() -- 停止背景音樂
elseif nIdx == 2 then
-- pause background music
AudioEngine.pauseMusic() -- 暫停音樂
elseif nIdx == 3 then
-- resume background music
AudioEngine.resumeMusic() -- 繼續播放音樂
-- rewind background music
elseif nIdx == 4 then
AudioEngine.rewindMusic() -- 循環播放
elseif nIdx == 5 then
-- is background music playing
if AudioEngine.isMusicPlaying () then -- 音樂正在播放
cclog("background music is playing")
else
cclog("background music is not playing")
end
elseif nIdx == 6 then
-- play effect
m_nSoundId = AudioEngine.playEffect(EFFECT_FILE) -- 播放音效
elseif nIdx == 7 then
-- play effect
m_nSoundId = AudioEngine.playEffect(EFFECT_FILE, true) -- 播放音效,第二個參數表示是否循環,true表示循環
elseif nIdx == 8 then
-- stop effect
AudioEngine.stopEffect(m_nSoundId) -- 停止音效
elseif nIdx == 9 then
-- unload effect
AudioEngine.unloadEffect(EFFECT_FILE) -- 不加載音效
elseif nIdx == 10 then
-- add bakcground music volume
AudioEngine.setMusicVolume(AudioEngine.getMusicVolume() + 0.1) -- 增加音量
elseif nIdx == 11 then
-- sub backgroud music volume
AudioEngine.setMusicVolume(AudioEngine.getMusicVolume() - 0.1) -- 減小音量
elseif nIdx == 12 then
-- add effects volume
AudioEngine.setEffectsVolume(AudioEngine.getEffectsVolume() + 0.1) -- 增加音效音量
elseif nIdx == 13 then
-- sub effects volume
AudioEngine.setEffectsVolume(AudioEngine.getEffectsVolume() - 0.1) -- 減少音效音量
elseif nIdx == 14 then
AudioEngine.pauseEffect(m_nSoundId) -- 暫停音效
elseif nIdx == 15 then
AudioEngine.resumeEffect(m_nSoundId) -- 恢復音效
elseif nIdx == 16 then
AudioEngine.pauseAllEffects() -- 暫停所有音效
elseif nIdx == 17 then
AudioEngine.resumeAllEffects() -- 恢復所有音效
elseif nIdx == 18 then
AudioEngine.stopAllEffects() -- 停止所有音效
end
end
-- add menu items for tests
m_pItmeMenu = cc.Menu:create() -- 創建菜單
m_nTestCount = table.getn(testItems)
local i = 1
for i = 1, m_nTestCount do
local label = cc.Label:createWithTTF(testItems[i], s_arialPath, 24)
label:setAnchorPoint(cc.p(0.5, 0.5))
local pMenuItem = cc.MenuItemLabel:create(label) -- 菜單標簽
pMenuItem:registerScriptTapHandler(menuCallback) -- 注冊菜單回調方法
m_pItmeMenu:addChild(pMenuItem, i + 10000 -1)
pMenuItem:setPosition( cc.p( VisibleRect:center().x, (VisibleRect:top().y - i * LINE_SPACE) ))
end
-- 設置菜單內容大小
m_pItmeMenu:setContentSize(cc.size(VisibleRect:getVisibleRect().width, (m_nTestCount + 1) * LINE_SPACE))
m_pItmeMenu:setPosition(cc.p(0, 0))
ret:addChild(m_pItmeMenu)
-- preload background music and effect
AudioEngine.preloadMusic( MUSIC_FILE ) -- 預加載音樂
AudioEngine.preloadEffect( EFFECT_FILE ) -- 預加載音效
-- set default volume
AudioEngine.setEffectsVolume(0.5) -- 設置音效音量
AudioEngine.setMusicVolume(0.5) -- 設置音樂音量
local function onNodeEvent(event)
if event == "enter" then -- 進來時
elseif event == "exit" then -- 退出時
AudioEngine.destroyInstance() -- 銷毀對象
end
end
-- 注冊層的結點事件
ret:registerScriptHandler(onNodeEvent)
local prev = {x = 0, y = 0}
local function onTouchEvent(eventType, x, y)
if eventType == "began" then -- 開始點擊
prev.x = x
prev.y = y
m_tBeginPos = cc.p(x, y) -- 開始點擊位置
return true
elseif eventType == "moved" then -- 移動事件
local touchLocation = cc.p(x, y) -- 獲取觸摸的位置
local nMoveY = touchLocation.y - m_tBeginPos.y -- 觸摸位置減去開始位置等于移動的距離
local curPosX, curPosY = m_pItmeMenu:getPosition() -- 獲取當前菜單的位置
local curPos = cc.p(curPosX, curPosY) -- 當前位置
local nextPos = cc.p(curPos.x, curPos.y + nMoveY) -- 下一個位置
if nextPos.y < 0.0 then
m_pItmeMenu:setPosition(cc.p(0, 0))
end
if nextPos.y > ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height) then
m_pItmeMenu:setPosition(cc.p(0, ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height)))
end
m_pItmeMenu:setPosition(nextPos)
m_tBeginPos.x = touchLocation.x -- 重新記錄開始位置
m_tBeginPos.y = touchLocation.y
prev.x = x
prev.y = y
end
end
-- 觸摸開始回調方法
local function onTouchBegan(touch, event)
local location = touch:getLocation()
prev.x = location.x
prev.y = location.y
m_tBeginPos = location
return true
end
-- 觸摸移動的回調方法
local function onTouchMoved(touch, event)
local location = touch:getLocation()
local touchLocation = location
local nMoveY = touchLocation.y - m_tBeginPos.y
local curPosX, curPosY = m_pItmeMenu:getPosition()
local curPos = cc.p(curPosX, curPosY)
local nextPos = cc.p(curPos.x, curPos.y + nMoveY)
if nextPos.y < 0.0 then
m_pItmeMenu:setPosition(cc.p(0, 0))
end
if nextPos.y > ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height) then
m_pItmeMenu:setPosition(cc.p(0, ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height)))
end
m_pItmeMenu:setPosition(nextPos)
m_tBeginPos.x = touchLocation.x
m_tBeginPos.y = touchLocation.y
prev.x = location.x
prev.y = location.y
end
-- 單點觸摸
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(true)
-- 注冊腳本監聽事件
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
local eventDispatcher = ret:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, ret)
return ret
end
function CocosDenshionTestMain()
cclog("CocosDenshionTestMain")
local scene = cc.Scene:create()
scene:addChild(CocosDenshionTest())
scene:addChild(CreateBackMenuItem())
return scene
end
總結
以上是生活随笔為你收集整理的cocos2d实现语音_Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 千万数据去重_mysql去重,3亿多数据
- 下一篇: java web ftp上传_java