安卓接入wwise

第一步:
#include "com_hs_androidjnidemo_MainActivity.h"
#include "jni.h"
#include <stdio.h>
#include <YLWwiseEngine.h>
#include <AK/SoundEngine/Common/AkTypes.h>//全局变量 gaden
JavaVM *g_vm;//0.JNI_OnLoad
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {g_vm = vm;return JNI_VERSION_1_6;
}//1.initWwise
JNIEXPORT void JNICALL Java_com_hs_androidjnidemo_MainActivity_initWwise (JNIEnv *env, jobject thiz, jobject activity,jstring path) {const char* cStr = env->GetStringUTFChars(path, nullptr);YLWwiseEngine::getInstance()->init(cStr,env,thiz,activity,g_vm);// return env->NewStringUTF("string1 from c");
}//2.SetBasePath
JNIEXPORT void JNICALL Java_com_hs_androidjnidemo_MainActivity_SetBasePath (JNIEnv *env, jobject thiz,jstring path) {const char* cStr = env->GetStringUTFChars(path, nullptr);YLWwiseEngine::getInstance()->SetBasePath(cStr);
}

第二步:

bool YLWwiseEngine::init(const char* basePath,JNIEnv *env,jobject obj,jobject activity,JavaVM *g_vm)
{this->env1 =env;this->g_VM2=g_vm;AkPlatformInitSettings platformInitSettings;env->GetJavaVM(&g_VM1);jobject mainActivityObj = env->NewGlobalRef(activity);platformInitSettings.pJavaVM = g_VM1;platformInitSettings.jActivity =mainActivityObj;this->activity1 =mainActivityObj; //注意activity1 AKRESULT res0 = m_pLowLevelIO->Init(platformInitSettings.pJavaVM,platformInitSettings.jActivity);if (res0 != AK_Success){__android_log_print(ANDROID_LOG_INFO, "lclclc", "---Error----\n");return false;}

第三步:SetBasePath

void YLWwiseEngine::SetBasePath(const char* basePath)
{char* basePaeht1 = new char[1024];strcpy(basePaeht1,basePath);AKRESULT ret = m_pLowLevelIO->SetBasePath(basePaeht1);if (ret != AK_Success){__android_log_print(ANDROID_LOG_INFO, "lclclc", "-------SetBasePath22--------         ret %d\n", ret); //log i类型}
}

第四步:postEventFun回调

int YLWwiseEngine::postEventFun(const char* eventName, unsigned int gameObjectId, unsigned int funId,JNIEnv *env,JavaVM *g_vm)
{this->env1 =env;char* pcname = new char[1024];//锟姐够锟斤拷strcpy(pcname, eventName);PostObj* postobj = new PostObj();postobj->funId = funId;postobj->eventName = pcname;postobj->env = env;postobj->g_vm = g_vm;AkPlayingID  id = AK::SoundEngine::PostEvent(eventName, gameObjectId,AK_EndOfEvent | AK_Marker | AK_EnableGetSourcePlayPosition,PostEventGan::getInstance()->postCallback, postobj);//  this->update();AK::SoundEngine::RenderAudio();if (id == AK_INVALID_PLAYING_ID){printf("postEventʧ�ܣ���������%d\n", id);return 0;}return id;
}

回调

void PostEventGan::postCallback(AkCallbackType in_eType, AkCallbackInfo* in_pCallbackInfo)
{PostObj* curPost1 = (PostObj*)in_pCallbackInfo->pCookie;if (in_eType == AK_EndOfEvent){//    char* geline = "|";int funId = curPost1->funId;char funId_str[10];sprintf(funId_str,"%d",funId);__android_log_print(ANDROID_LOG_INFO, "lclclc", "------PostEventGan::postCallback2---111----funId_str %s\n", funId_str); //log i类型//ccjsbridge::excuteJS("CCToJsUtils", "CccToJSAK_EndOfEvent", funId_str);JavaVM *g_vm=curPost1->g_vm;JNIEnv *env1 = nullptr;jint result = g_vm->AttachCurrentThread(&env1, 0);jclass mainActivityClass = env1->GetObjectClass(YLWwiseEngine::getInstance()->activity1);const char *sig = "(Ljava/lang/String;)V";//"(F)V"jmethodID mainMethodId = env1->GetMethodID(mainActivityClass, "postEventFunOver", sig);env1->CallVoidMethod(YLWwiseEngine::getInstance()->activity1, mainMethodId,env1->NewStringUTF(funId_str));g_vm->DetachCurrentThread();}

第五步:子线程回到 java 里面UI线程

public void postEventFunOver(String para) {if (Looper.getMainLooper() == Looper.myLooper()) {System.out.print("-------NativeHelper--c++返回值------Looper.getMainLooper():"+Looper.getMainLooper()+"\n");} else {System.out.print("-------NativeHelper--c++返回值------a:"+para+"\n");activity.runOnUiThread(()-> {// activity.getJsInterface().youLoftLoginFail();activity.getWebView().loadUrl("javascript:wwise_CccToJSAK_EndOfEvent("+para+")");});}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

暂时性解决JDK21 无法使用 TimeUnit的问题

我调用 java.util中的TimeUtil时。 JDK17及以下版本时这样正常可以使用的 但是在JDK21中却是个TimeUtil.class文件 我没法调用内部的属性 解决方式&#xff1a;是我卸载了21&#xff0c;使用的了JDK17. 使用场景&#xff1a;原本项目是基于JDK8 的&#xff0c;但是因为其他…

关于kline-chart图表程序的一些构想

之前在这儿&#xff1a;一个python实现的kline-chart图表程序&#xff08;二&#xff09;_klinechart教程-CSDN博客 实现了一个看起来不错的K线图表的功能&#xff0c;可以按要求生成对应的图形。不过还是有些问题。比如我想做一个缠论关于笔&#xff0c;线段&#xff0c;中枢等…

什么是限流?常见的限流算法

目录 1. 什么是限流 2. 常见限流算法 3. 固定窗口算法 4. 滑动窗口算法 5. 漏桶算法 6. 令牌桶算法 7. 限流算法选择 1. 什么是限流 限流&#xff08;Rate Limiting&#xff09;是一种应用程序或系统资源管理的策略&#xff0c;用于控制对某个服务、接口或功能的访问速…

Sortable 拖拽行实现el-table表格顺序号完整例子,vue 实现表格拖拽行顺序号完整例子

npm install sortable<template><vxe-modalref"modalRef"v-model"showModal"title"详情"width"70vw"height"60vh"class"his"transfer><el-table ref"tableRef" :data"tableData&q…

原生 php 实现redis缓存配置和使用方法

在 PHP 中实现 Redis 缓存的配置和方法&#xff0c;首先需要确保你的服务器上安装了 Redis&#xff0c;并且 PHP 安装了 Redis 扩展。以下是一个基本的步骤和示例&#xff1a; 1. 安装 Redis 和 PHP Redis 扩展 Redis 安装&#xff1a;根据你的服务器操作系统和配置&#xff…

机器学习-06-聚类算法总结

聚类总结 1.聚类 机器学习 任务 聚类 无label的 分类 label是离散的 回归 label是连续的 2.聚类算法-kmeans 划分聚类 思想&#xff1a; D中选取k个作为初始质心 repeat 计算所有点与质心的距离&#xff0c;分到近的质心簇 更新簇之间的质心 until 质心不改 不足&#xff…

中文输入法导致的高频事件

场景&#xff1a; input.addEventListener(input, (e) > {console.log(e.target.value) }); 当给一个输入框绑定了 input 事件&#xff0c;输入法切换到中文正在拼写的过程中也会触发 input 事件。 解决办法&#xff1a; 在中文拼写开始和结束的时候分别会触发 composit…

Docker Compose部署项目flask+mysql + redis

什么是DockerCompose Docker Compose通过一个单独的docker-compose.yml 模板文件&#xff08;YAML 格式&#xff09;来定义一组相关联的应用容器&#xff0c;帮助我们实现多个相互关联的Docker容器的快速部署。 我们以flask&#xff0b;mysql redis项目为例 项目目录结构如下…

抖音视频怎么无水印下载(方法)

在这个数字化时代&#xff0c;抖音已经成为了人们生活中不可或缺的一部分。每天&#xff0c;数以亿计的用户在这个平台上分享着各种各样的视频&#xff0c;让人们笑&#xff0c;让人们感动&#xff0c;让人们沉迷。你是否曾经遇到过想要保存一段精彩的抖音视频却苦于无法去掉水…

Web自动化—Cypress 测试框架概述

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Cypress 测试框架概述 1.1 Cypress 默认文件结构 在Cypress安装…

Docker知识点汇总表格总结

Docker容器给我的一个很直观的感受就是将项目以及中间件安装变得比较简单直接&#xff0c;运行维护起来也更方便。之前做的一些微服务项目也是用docker来部署&#xff0c;现在很多开源的项目也流行使用docker来部署&#xff0c;简化了很多手动安装和配置的步骤&#xff0c;将项…

6.python网络编程

文章目录 1.生产者消费者-生成器版2.生产者消费者--异步版本3.客户端/服务端-多线程版4.IO多路复用TCPServer模型4.1Select4.2Epoll 5.异步IO多路复用TCPServer模型 1.生产者消费者-生成器版 import time# 消费者 def consumer():cnt yieldwhile True:if cnt < 0:# 暂停、…

【leetcode】链表反转题目总结

206. 反转链表 全部反转 递归法和迭代法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode …

智能家居|基于SprinBoot+vue的智能家居系统(源码+数据库+文档)

智能家居目录 基于SprinBootvue的智能家居系统 一、前言 二、系统设计 三、系统功能设计 1管理员&#xff1a;个人中心管理功能的详细实现 2管理员&#xff1a;用户信息管理功能的详细实现 3管理员&#xff1a;家具管理功能的详细实现 4管理员&#xff1a;任务管理功能…

Python绘制的好看统计图

代码 sx [Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, P…

C# var 关键字

在C#中&#xff0c;var 是一个关键字&#xff0c;用于声明一个隐式类型的局部变量。当使用 var 声明变量时&#xff0c;编译器会根据变量的初始化表达式推断出变量的具体类型&#xff0c;并将其隐式地设置为推断出的类型。 下面是对C#中 var 类型的详细解释和示例说明&#xf…

CSAPP | Floating Point

CSAPP | Floating Point b i b_i bi​ b i − 1 b_{i-1} bi−1​ … b 2 b_2 b2​ b 1 b_1 b1​ b 0 b_0 b0​ b − 1 b_{-1} b−1​ b − 2 b_{-2} b−2​ b − 3 b_{-3} b−3​ … b − j b_{-j} b−j​ S ∑ k − j i b k 2 k S\sum_{k-j}^{i}b_k\times2^k S∑k…

了解一下创新奇智的 Orion 分布式机器学习平台

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 创新奇智的 Orion 分布式机器学习平台是一个企业级的端到端机器学习解决方案&#xff0c;它通过整合智能资源调度中心&#xff08;IRC&#xff09;、智能数据自动化中心&#xff08;DAC&#xff09;和自…

HarmonyOS 4.0(鸿蒙开发)01 - 怎么学习鸿蒙引导篇

作为公司的全栈开发工程师 以及 未来的发展是有鸿蒙这个阶段的&#xff0c;以及本身具有这个技术栈由此后续会分享自己在实战中学习到的东西&#xff0c;碰到的bug都会分享出来&#xff0c;这是引导篇期待后续的更新 学习目标&#xff1a; 理解HarmonyOS操作系统的架构和开发…

三维坐标点按剖面分类

一、写在前面 ①配套文件&#xff1a;根据剖面对三维坐标点&#xff08;X,Y,Z&#xff09;分类资源-CSDN文库 ②脱敏处理&#xff1a;蚀变数据已采用随机数生成覆盖 ③剖面坐标按顺序排列在“剖面坐标点.xlsx”文件中 二、3点确定空间中平面方程 原理&#xff1a; 设3点A&…