--[[

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(音频测试)相关推荐

  1. Paper之ICASSPIEEEAUDIOSPE:2018~2019年ICASSP国际声学、语音和信号处理会议IEEE-ACM T AUDIO SPE音频、语音和语言处理期刊最佳论文简介及其解读

    Paper之ICASSP&IEEEAUDIOSPE:2018~2019年ICASSP国际声学.语音和信号处理会议&IEEE-ACM T AUDIO SPE音频.语音和语言处理期刊最佳论 ...

  2. 华为语音解锁设置_华为手机语音转文字怎么设置,如何完成音频在线转换

    华为手机语音转文字怎么设置,如何完成音频在线转换 使用华为手机的朋友一定有感觉到手机上有太多的功能能够帮助我们快速的完成工作,那么华为手机上有一个能够将语音转换成文字的功能你知道如何使用吗?如果还不知 ...

  3. Skype语音测试,会议电话Skype音频测试

    当Skype for businesss软件使用了通信信号处理算法之后,微软公司已经于2016年12月发布了最新的Skype for business最新音频测试标准.这个标准定义了相关的通信音频测试 ...

  4. 华为手机语音转文字怎么设置,如何完成音频在线转换

    华为手机语音转文字怎么设置,如何完成音频在线转换 使用华为手机的朋友一定有感觉到手机上有太多的功能能够帮助我们快速的完成工作,那么华为手机上有一个能够将语音转换成文字的功能你知道如何使用吗?如果还不知 ...

  5. 微信公众号 语音转文字api_微信重新上线的灰度测试功能:语音上滑转文字发送...

    微信总是喜欢偷偷更新一些灰度测试的小功能,今天就说说微信的新功能「语音转文字」.当我们使用微信发语音时,可以把语音转换成文字发送给好友. 新「语音转文字」功能在之前的安卓内测版当中,我们就看见过这个功 ...

  6. Lua 之table的测试

    一.lua 的 table构造 1.字符串作为table索引 法1. MyTable = {x = "xixi"} 法2. MyTable = {["x"] = ...

  7. 语音验证java代码_Java代码示例_Java语音验证接口 | 微米-中国领先的短信彩信接口平台服务商...

    Java语音验证接口代码示例 请求 import java.util.HashMap; import java.util.Map; public class IvrDemo { /** * 语音验证接 ...

  8. 关于微信、QQ语音消息,语音电话的时候控制应用音频播放以及暂停

    最近项目中有这样的需求,要求在用户使用QQ或微信在录制或播放语音消息的时候可以自动暂停后台的音频播放,完毕后可以恢复播放. Android是多任务系统,Audio系统是竞争资源,Android2.2之 ...

  9. Java实现文字转语音(TTS)和指定路径播放音频文件

    背景 使用Java实现:输入文本或指定播放文件路径,实现循环播放.停止.放入多个播放队列依次播放:这里我使用的是Springboot. 实现步骤: 1.Java要实现语音播报,需要引入文件jacob- ...

最新文章

  1. 9.8.6恢复系统数据库
  2. 5G + 边缘计算系列文章
  3. python爬虫教程网-python爬虫入门10分钟爬取一个网站
  4. Linux sem_init函数用法
  5. encodeURI、encodeURIComponent、btoa及其应用场景
  6. java架构分层_java分层架构概念
  7. java微信支付代码_Java微信支付之服务号支付代码示例
  8. java 循环笔记_Java笔记之嵌套循环1
  9. unas基于_flunas
  10. springboot运行在eclipse报异常的问题
  11. linux下载TCGA数据,好用的新版TCGA数据下载方法
  12. Ubuntu更改分辨率
  13. HFSS学习笔记—18.SMA模拟端口
  14. 几款基于ODE的机器人仿真软件
  15. 输出100以内的质数
  16. opencv之subtract
  17. 2020扁皮筋排名_2020年高性价比弹弓推荐,(12月)弹弓选购攻略
  18. C++ Signal(信号)
  19. 为OpenStack量身打造 OVS推出全新OVN项目
  20. 简易记账开发笔记之Fragment(前传)

热门文章

  1. python如何打印时间,在python2.7中,如何提取和打印日期、时间和m
  2. html <link>标签
  3. pytorch torch.from_numpy()(从numpy数组创建一个张量,数组和张量共享相同内存)
  4. python opencv imread(filename, flags=None) 读取图像 flags cv::ImreadModes 参数上哪看去?
  5. python 运算符 (算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级)(与或非)(异或)
  6. windows下的正向shell
  7. 什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的
  8. Java设计模式——为什么要用枚举实现单例模式(避免反射、序列化问题)
  9. fatal: No configured push destination
  10. Minio 小技巧 | 通过编码设置桶策略,实现永久访问和下载